¡Hola!
Soy José Luis
C# .NET Azure
Arquitecto de Software
Inteligencia Artificial
¿Buenas Prácticas? ¿Para Qué las Necesito?
Tu código funciona, pero cada vez es más difícil de modificar y ampliar. Cada nueva funcionalidad requiere de muchos cambios, de más tiempo, de más desarrolladores. ¿Te suena?
Las buenas prácticas en programación son un conjunto de pautas sencillas que permiten hacer programas fáciles de modificar y de ampliar. Tus jefes y clientes estarán más contentos, reduciendo costes y aumentando beneficios. ¿Te gustaría?
TDD: Programación Dirigida por Tests
Primero, convierte los principales casos de uso en tests automatizados, que se lanzarán cada vez que tengas que cambiar código o que tengas que lanzar una nueva versión a producción.
Las pruebas te irán indicando el código que debes escribir, el justo para pasar el test. Además, te permitirá refactorizar el código sabiendo que no estás rompiendo nada que ya funcionase.
Tendrás el código más importante cubierto con pruebas, reduciendo muchísimo la cantidad de errores en tu programa. Dedicar tiempo a hacer tests te ahorra una cantidad enorme de tiempo en corregir bugs.
Hoy día es imprescindible que todo software sea probado automáticamente cada vez que se compile y despliegue:
- Tests Unitarios ✅
- Tests de Integración ✅
- Tests de Aceptación ✅
- Tests Funcionales ✅
- Tests de Rendimiento ✅
- Tests End-to-End (GUI) ✅
- Tests de Regresión ✅
- Tests de Carga ✅
- Tests de Seguridad ✅
Clean Architecture
Para organizar tu código, utiliza una arquitectura limpia. Esta pone la lógica de tu negocio en el centro, para poderlo reutilizar desde cualquier lado, ya sea una web o una app móvil.
Los componentes de cada círculo podrán hacer uso de los componentes de sus círculos interiores, pero nunca al revés. Define interfaces para inyectar desde afuera lo que necesites en los círculos internos.
Esto no solo permite que los tests sean mucho más fáciles de hacer, sino que te permitirá cambiar de base de datos, sistema de logging o interfaz de usuario sobre la marcha, incluso en tiempo de ejecución.
Otra forma de independizar componentes para poderlos gestionar de forma separada es que el dominio lance eventos que sean gestionados por los círculos más externos.
El acoplamiento será mínimo y cada equipo de desarrolladores podrá desarrollar sus componentes de forma independiente.
DDD: Diseño Dirigido
por Dominio
Tener el código bien organizado te va a permitir modificar las reglas de negocio de una forma rápida y limpia, además de facilitar la creación y mantenimiento de los tests.
Dividir tu dominio en diferentes contextos aislados es fundamental para poder independizar los desarrollos. No es lo mismo una entidad Cliente para el departamento de Marketing que para el de Facturación.
¿Tienes que hacer DDD en todos tus desarrollos? Por supuesto que no, sólo donde el dominio sea complejo, sobre todo si es la parte principal de tu negocio. Para el resto, puedes usar otras arquitecturas más simples.
Refactoring
y Clean Code
El código lo vas a escribir una vez, pero lo vas a leer cientos de veces. Aunque tu programa funcione, no significa que hayas terminado el trabajo. Hay que revisarlo y reescribirlo para que sea fácil de leer, sencillo de modificar y, sobre todo, evitar duplicidades.
No tengas miedo a hacer cambios. Recuerda que todo el código estará cubierto por los tests: si rompes algo, te avisarán enseguida.
Establecer una guía de estilo, usar nombres descriptivos según la terminología del dominio o mantener tus clases y métodos relativamente pequeños son algunas de las claves para un desarrollo sostenible.
Inteligencia Artificial y Machine Learning
Hay problemas para los que no hay una solución directa. En esos casos, usamos algoritmos basados en aproximaciones sucesivas que van reduciendo poco a poco el error cometido.
A este proceso lo llamamos aprendizaje automático (machine learning) y al conjunto de este tipo de algoritmos le llamamos inteligencia artificial.
Desde 2015 tengo el canal en YouTube «Descubriendo la Inteligencia Artificial», donde he publicado más de 200 vídeos con algoritmos de machine learning y teoría sobre inteligencia artificial en general.