Clean Code, cumple lo que promete?

August 01, 2020

...

Clean code: https://amzn.to/3ggmR6t

He visto que existe mucho interés en este libro que tengo acá, clean code del autor Robert C. Martin, este libro tiene un valor de entre 30-40 dólares en la tienda de amazon y promete según dice su contratapa entregarte las mejores prácticas ágiles para limpiar el código sobre la marcha, te entregará valores de la construcción de software y te transformará en un mejor desarrollador, pero solo si trabajas en ello.

Este libro de clean code ha estado en boca de muchos desarrolladores y también existen empresas que encuentran totalmente necesario saber al revés y al derecho todas las prácticas que este libro incluye, pudiendo incluso no obtener el trabajo en esta empresa si no aplicas los conocimientos que este libro te entrega, ahora, solo conozco una empresa que de hecho rechazó a un postulante, a uno bastante bueno creo yo, por el simple hecho de no aplicar estos conocimientos

Cumple este libro lo que promete? de que trata su contenido? como debes leerlo? y la pregunta más importante de todas, es este libro para ti?, todas las respuestas a estas preguntas en este post.

Lo primero comentarles que a mi nadie me pagó por hacer un review de este libro por lo que verán a continuación es mi honesta opinión respecto al contenido de este libro y, si deciden que este libro es para ustedes, pueden utilizar el link que les dejaré acá, este es un link de afiliados por lo que recibiré una pequeña comisión si compras algo con ese link y así apoyarás al sitio para poder seguir generando este contenido para ustedes. Yo estaré muy agradecido si decides apoyarme de esta forma.

Ahora comenzamos con el review, clean code es un libro que pretende entregarte a ti las mejores prácticas de desarrollo según la opinión de su autor y lo primero que verán será que los ejercicios o código de ejemplo que este incluye se encuentran escritos en java, este es un lenguaje de programación con una muy fuerte orientación a objetos y carece de buenas prácticas que tiene la programación funcional ya que, el paradigma principal en este libro es el de orientado a objetos.

El primer capítulo habla sobre distintos y grandes desarrolladores de la industria, donde todos estos mencionan la importancia de un código limpio, puedes ver la colaboración de distintas figuras del mundo del desarrollo, habla sobre los costos que tiene un software que puede ser considerado un desorden e intenta explicar porque es bueno enfocarse desde un comienzo en tratar de escribir código limpio, que esto aumentará la productividad y mantenibilidad y bueno.. todas esas cosas que ya sabemos.

Continua con un apartado de darle nombres a tus variables, funciones y clases que tenga significado, esto es una buena práctica cuando quieres tener un código que sea fácil de entender sobre todo por desarrolladores más nuevos, da distintos consejos sobre como escribir estos nombres como por ejemplo, que estos sean nombres pronunciables y no siglas o acronimos, que no intentes acortar sus nombres entre otras cosas. Menciona también el mental mapping que es no renombrar variables para que otros desarrolladores no tengan que andar traduciendo las variables a otras variables, como por ejemplo utilizar user, visitor, guest o admin cuando todas debiesen ser user. En esta sección no habla sobre generalización, como por ejemplo utilizar constantes con nombres generales como X o XS, no indica si es algo bueno o malo y esta práctica se utiliza mucho cuando quieres que tu código esté enfocado en ser reutilizable primero. Esta generalización que les menciono la he utilizado yo en otros videos, Mattias Petter Johansson, el fundador del canal fun fun function y también Brian Lonsdorf, creador de la Mostly Adequate guide para escribir programación funcional en JS.

En el capitulo de funciones habla sobre buenas prácticas en general para las funciones, que estas tienen que tener pocos argumentos, hacer solo una cosa, que se lean de arriba hacia abajo.

No menciona la composición de funciones y muestra una práctica que a mi en lo general no me gusta mucho que es anidar varias funciones, esto es cuando en tu función tienes llamado a otras funciones y estas llaman a otras funciones y estas llaman a otras funciones... en fin, eso es muy difícil de seguir sobre todo en código nuevo, además que no necesariamente hace el código reutilizable, solo separa la complejidad en distintas capas. Tampoco menciona los efectos ni como estos debiesen ser manejados.

Luego vienen los comentarios, acá estoy de acuerdo con el cuando menciona que el codigo debiese ser autoexplicativo, agregar comentarios solo hará que tengas que mantener el código y luego el comentario, si existen algunas excepciones de cuando deberías agregar los comentarios y estoy de acuerdo en la mayoría de sus observaciones.

Habla sobre como formatear el código, en mi opinión, este capítulo hoy en día es reemplazado por tu linter, no le encuentro sentido.

Sobre estructura de datos es más que nada como darle nombres pero no te muestra estructuras de datos propiamente tal, no tienes algoritmos de búsqueda, linked lists, arboles ni nada de eso.

Menciona como manejar los errores y que try catch debiese extraerse, en el espíritu de su intención estoy de acuerdo, pero los ejemplos que muestra... hay mucho mejores formas de hacerlos hoy en día.

Habla sobre como generar límites para que partes específicas de tu código hagan solo lo que tienen que hacer y prácticas de tests unitarios que, yo en lo personal, estoy muy en desacuerdo con el, comenta que los tests deben ser fáciles de leer, y para eso oculta la implementación del test. Entiendo que es lo que está intentando lograr con esto, pero hace que la implementación del test tenga una nueva capa de complejidad, por lo para yo poder ver si estos tests están realmente probando lo que me interesa, tengo que necesariamente empezar a revisar el código en distintas partes del test y luego armar el flujo en mi mente. Esto finalmente es mover la complejidad de un lado a otro.

Menciona que las clases deben ser pequeñas, aunque no menciona nada sobre la composición de objetos ni tampoco Factory Functions que soporten composición y no explica de manera clara los problemas que puede tener la herencia, como el problema del gorila y la banana. Aunque las recomendaciones que tiene para las clases está... digamos que bien.

Menciona el refinamiento constante o mejora constante del código que estás escribiendo, esto es algo positivo, aunque el ejemplo que el utiliza, al no descomponerlo en funciones, hace que su refactoring sea innecesariamente dificil, y esto quiero aclarar, no es porque el autor no necesariamente lo conozca, si no por el enfoque que tiene este libro que es java.

Algo muy positivo que encontré de este libro es que te muestra implementaciones que comenzaron muy mal y debido a refactoring que fue realizando sobre el código, estas fueron mejorando para ser cada vez más legibles. Aunque al estar hablando solo de patrones orientados a objetos es algo limitado lo que puede hacerse.

Antes de seguir quiero mencionarles que es un code smell,

En ciencias de la computación, un code smell es una característica que tiene un código fuente que, posiblemente, podría llevar a un problema mucho más serio. Determinar que es un code smell es algo subjetivo, es más que nada ver algo y encontrarlo sospechoso, no necesariamente es un error o bug de sistema. Pero potencialmente podría mostrar una debilidad en el sistema, y digo potencial porque puede que lo haga, o puede que no genere ningún problema en el futuro.

Cuando existe un code smell es buena idea refactorizar para hacer el código más claro y legible paso a paso. Ahora volviendo al libro, existe un apartado de code smell donde el menciona el código muerto, en mi opinión eso es un anti patrón y no un code smell, fuera de eso agrega varias opiniones que a mi me hacen sentido.

Clean code es un libro que ya tiene su tiempo, posee sabiduría de un gran desarrollador e ingeniero quien es Robert C. Martin, tiene un sólido contenido sobre orientación a objetos y, si vas a desarrollar un sistema escrito en Java, lo más probable es que entre el 50-80% del libro sea de mucha utilidad sobre todo si te encuentras recién empezando en el mundo del desarrollo, hay cosas que no son tan relevantes hoy en día pero sin duda que lo fueron hace tiempo. Y java también a evolucionado bastante y tiene cosas de programación funcional hoy en día.

Sin embargo si te encuentras desarrollando en otro lenguaje de programación, sobre todo uno que sea multiparadigma como rust, javascript, python o ruby, será mucho menos lo que podrías considerar útil ya que, al ser multiparadigmas, podrás optar por otras soluciones mucho más elegantes siguiendo otro paradigma, y seguir el libro a rajatabla sin pensar en las otras posibilidades que tienes te limitará mucho tu desarrollo. Este libro tiene una muy fuerte orientación a objetos, y los lenguajes que te mencioné antes son multi paradigmas, donde tienes orientación a objetos, programación funcional, imperativa, orientada a eventos y por supuesto que otras más.

Y ahora respondiendo las preguntas de al comienzo:

Cumple este libro lo que promete?

Yo creo que si, creo que es bueno leerlo al menos una vez para que veas lo que tiene que compartir el señor Robert Martin, tiene vieja sabiduría y te servirá para entender también como pensaban desarrolladores de antes. Sin embargo creo que no deberías basarte únicamente en este libro, ya que no es el santo grial, algunas de sus prácticas creo que están obsoletas existiendo más y mejores soluciones hoy en día por lo que deberías agregar un par de libros más además de clean code.

Si deseas adquirir el libro puedes hacerlo a través de este link:

Clean code: https://amzn.to/3ggmR6t


Suscríbete

Suscríbete a la lista para más cursos, posts y videos tutoriales. Prometo no enviarte más de un correo semanal 🙏

Creado por Nicolás Schürmann ingeniero e instructor de software. Cuando no está programando, esta frente a una cámara dictando cursos, creyéndose youtuber o apoyando a sus alumnos. Puedes seguirlo en twitter o también suscribirte a su canal de youtube. Considera comprar sus cursos por este medio y así apoyas al instructor.