Categorías
Desarrollo Diseño

Calidad en el Software. 2de3 – Análisis y diseño.

Como ya comente en el POST anterior, la calidad del software y el diseño van de la mano. Evidentemente, todo es relativo al contexto, si estás haciendo un ‘Hello world’ no lo vas notar nada, pero si te embarcas en un desarrollo en equipo de meses y con la intención de que siga evolucionando y aportando valor durante años… ¡es imprescindible!

¿Cómo podemos mejorar nuestra capacidades de diseñadores? Pues fácil, o te juntas con alguien que te guíe en este reto o te formas, la mezclas de las dos es una fórmula ganadora, obvio. Pero mientras encuentras a alguien que pueda ayudarte te cuento los libros que me he leído y lo que puedes esperar de ellos.

Son los clásicos, los que la comunidad y el tiempo han posicionado como los imprescindibles. Hay muchos, pero me centro en los que he podido leer de momento.

Encontré:

  • Buenos principios y prácticas generales, muchas obvias, pero que hay que interiorizar.
  • Habilidades para detectar los code smells. El código con mala pinta, ese que cada vez que tocas, ¡ummmmmmm!, huele mal
  • Aprendí un vocabulario común con otros desarrolladores y a expresarme en UML.
  • Patrones: Esos problemas que se repiten muchas veces y para los cuales se han encontrado soluciones estándar que te ayudan a resolver de forma óptima algo que seguro que terminaría liandose

Además de leerlos, hay que ponerlos en práctica y leer mucho código… ¡Y por supuesto ser crítico!

Decir, que casi todos estos libros dan por hecho que usas la programación orientada a objetos. Si lo tuyo es la declarativa, funcional… ¡Igual te va a aportar muy poco! Sobre todo en el tema de patrones.

Clean Code

¡Que levante la mano el que nunca lo haya visto antes!

El código limpio es un código que es fácil de leer, entender y mantener, por lo tanto, hace desarrollo de software predecible y aumenta la calidad.

Es uno de los más clásicos, habla especialmente diseño de básico, buenas prácticas y principios que aunque puedan parecer obvios hay que trabajarlos. También nos habla de concurrencia y un poquito de patrones. El libro muestra mucho código y lo va modificando para mejorarlo, nos enseña el camino de la refactorización.

Aprenderás:

  • Reglas, principios y buenas prácticas en el nombrado, modelado y estilo de funciones, comentarios, clases, objetos, estructuras, gestion de errores,…
  • Interesante el capitulo de los test unitarios.
  • Una instrucción básica a los patrones de diseño. Pero no es su fuerte.
  • Curiosamente, tiene un pequeño resumen, del siguiente libro que abordaré Refactoring de Fowler. Lista los algunos code smells.
  • También aprenderás los principios de concurrencia, con ejemplos… pero todo muy java.

Para sacarle todo el jugo, deberías desarrollar orientado a objetos y adorar la sintaxis de java (hay mucho código impreso), .Net… typescript también aguantaría. Además si estás preocupado por la concurrencia, te ayudará más.

Como este mundo va muy rápido hay cosas que se han quedado un poco viejunas. Pero sigue siendo un imprescindible.

Refactoring. improving the design of existing code.

El código sucio (code smell) es cualquier síntoma en el código fuente donde se ven indicios que pueden acabar en problemas más graves.

El término code smell lo habrás visto por mucho sitios, Sonarqube lo tiene como métrica, por ejemplo, y no dejan de ser los síntomas o el aspecto que tiene el código cuando no se aplican muchas de las buenas prácticas de las que se hablan en el libro anterior.

Así que creo que si te lees el libro anterior, es muy interesante complementarlo con este otro.

Que aprenderás:

  • Aprenderás a reconocer y a poner nombre a porciones de código que… ¡huelen mal! Tienes ejemplos con UML y su código.
  • Buenas prácticas para refactorizar el código y ejemplos interesantes.

Sinceramente, esperaba encontrar un peso importante a los test unitarios, incluso que profundizará en Test Driven Development, pero no encontrarás gran cosa.

Se lee bien, pero si te vas a tomar en serio la detección de los code smells, este libro es para leerlo, volver a leerlo tomando apuntes, estudiarlo y hacer prácticas. ?

Applying UML and Patterns.

An introduction to Object-Oriented Analysis and Design and Iterative Development, así reza el subtítulo.

Este se me hizo bastante ameno, el libro es gordo, pero con muchos dibujos y ejemplos.

Buscaba leer de primera mano GRASP, tener unas bases más sólidas en UML y enlazarlo con patrones, cumplio en gran parte. Pero sigo sin estar totalmente satisfecho en el aspecto del UML, eso si, esto está a años luz de lo que aprenderás en casi cualquier formación universitaria.

Quizás este libro se hizo famoso por el GRASP – General responsibility Assignment Software Patterns. Son unos principios o patrones para el buen diseño de clases y sus relaciones entre ellas, muy útil, en mi opinión, si siempre tienes en la cabeza este 3 de los 9 conceptos Experto en Informacion, Alta cohesión y bajo acoplamiento… el código parecerá otro. Quizás, esto sea más análisis que diseño… pero ayuda sin duda al diseño.

Aprenderás:

  • Conceptos de agilidad con ejemplos sobre supuestos proyectos. Crea un punto de venta y un monopoly
  • Conceptos de la metodología UP.
  • UML, ¡empezarás a pintar más cosas que diagramas de secuencias! ? Y quizás, si quizás, te ilumine con las posibles relaciones entre clases. Asociaciones, agregaciones, composiciones…
  • GRASP ¡Imprescindible!
  • Entenderá los patrones de diseño más comunes, con ejemplos sobre el código.

Agile Principles, Patterns and Practices in C#

¿Te suena SOLID?, los principios del diseño orientado a objetos… puesto es el libro donde lo aprenderá de primera mano, es clave.

Aprenderás:

  • Los principios de la agilidad
  • Principios SOLID.
  • Notación UML
  • ¡Y los patrones de diseño más comunes! Se explican muy bien y con ejemplos en C#, que lo agradezco más que java (peroooo si son lo misssmooooo – bueno, bueno…)

Imprescindible… aunque solo sea para hacerte el listillo cuando alguien te pregunte si conoces a Barbara Liskov. ?

Design Patterns

Para mí, este es el libro que tienes que leer para aprender de patrones en serio. Igual fue porque cuando llegue a él, venía con muchos conceptos aprendidos y muchas dudas y este me las aclaro.

Obligatorio, es duro y te va a tocar hacer prácticas y codificar los ejemplos o no le sacaras el jugo

Refactoring.guru

Si te has leido todos esto, y llegas a

https://refactoring.guru/

Vas a estar eternamente agradecido, es brutalmente buena y esta mejorando cada vez más.

Aprenderás:

  • Los principios de la refactorización.
  • Los code smells
  • Y patrones, con código y ejemplo en varios lenguajes

Echo de menos un referencia la los principios clean code, pero igual esta es su roadmap

Conclusiones

Si te pilla de muy muy nuevas, aprende primero la programación orientada a objetos.

Si solo te pilla de nuevas, pero ya dominas alguna tecnología de programación POO. Estudiar todo esto y ponerlo en práctica, te garantiza una patada hacia adelante importante. Es un antes y un después como desarrollador, pero especialmente, como analista y diseñador, así lo sentí yo.

Si ya crees que lo sabes todo, pero no los has leido, pues… ¡anda que no te queda!

En su día estime en 840 horas las necesarias para interiorizar (leer, estudiar, practicar…) todo esto, incluidas arquitecturas y metodologías. Cuando llevaba 300 horas, ya veía las cosas de una manera totalmente diferente.

Aunque todavía me queda mucho por aprender, ¡es genial crecer, Level Up!?

En el proximo POST… ¿hablamos de Arquitectura?

¡A darle cañaaaaaaaa! ?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *