Por Raimundo Felipe Plaza Undurraga, Desarrollador de Landscape
Quisiera abrir con una cita del muy conocido libro “El principito”. Una frase que se refiere al uso del corazón para ver bien.
“Lo esencial es invisible a los ojos”.
-Antoine de Saint-Exupéry, El principito.
En esta oportunidad me gustaría darle otro significado, quizá algo más literal. Quiero mostrar cómo, viendo más allá de lo que podemos entender con una primera mirada, nos percatamos de elementos muy importantes. Aplicado, por supuesto, a la programación y desarrollo de software.
Muchas veces dentro del rubro nos toparemos con código que -de buenas a primeras- no parecen representar un gran problema. De hecho, en la mayoría de casos solo parece un código cualquiera. Sin embargo, tras sentarse y evaluar encontraremos evidencias, situaciones, y/o casos que nos demuestran que en un futuro se convertirán en una dificultad.
Si nos quedamos simplemente con lo superficial, o lo que miran nuestros “ojos”, no seremos capaces de dilucidar estos obstáculos latentes. Debemos llegar hacia lo “esencial” y para ello, ejercer un esfuerzo consciente.
Lo anterior no es algo nuevo, en lo que al diseño y elaboración de código respecta.* Ya existe un concepto que engloba todo lo antes mencionado para este contexto.
Su nombre es: “Code Smell” o “Mal olor de código”.
En estricto rigor, un “Code Smell” es, y cito: “una indicación superficial que suele hacer referencia a un problema más profundo en el sistema”.
Tal como mencionamos con anterioridad, no es fácil ubicarlos a través de un simple recorrido, ya que en la superficie del mismo, todo estará relativamente normal. Sin embargo, mientras más le prestas atención, peor “olerá”. De ahí el término.
Ahora, sabemos la teoría de un Code Smell. El problema ahora es cómo identificarlos. Sabemos que puede tener una profunda raíz que no veremos al principio, sí. ¿Pero esto implica que debemos someter a una revisión exhaustiva, de línea por línea a nuestro código para asegurarnos de que esté exento -o- sin demasiados incidentes de este tipo?
No necesariamente.
Gracias a otros colegas que llegaron a la misma interrogante que nosotros (pero un poco antes), sabemos que existen distintos tipos de Code Smells, que a su vez -ya que podemos clasificarlos-son más fáciles de identificar.
Los más comunes son:
∙ Código duplicado: Como su nombre indica, se trata de replicar código que ya existía con anterioridad.
∙ Métodos gigantes: Métodos que reciben demasiados parámetros, y/o que poseen demasiadas funcionalidades.
∙ Clases gigantes: Al igual que su contraparte “Método”, implica una clase con demasiadas responsabilidades, o que hace demasiado.
Como puedes notar, en sí mismos no son problemas. Ni siquiera el hecho de “realizarlos” es uno como tal. Lo difícil viene después.
Tomemos el ejemplo de Código duplicado: Estás tomando un código que ya existía y lo usas en otro lado. Funciona, buen trabajo. Pero… ¿Y si debes cambiar dicha funcionalidad?
Bueno, pues… Deberás cambiarla la misma cantidad de veces que lo duplicaste.
Ahora, Métodos gigantes: Al momento de escribir el código, lo entendemos. Pero, eventual y posiblemente, un colega deberá trabajar sobre dicho método, o incluso, puede que tras pasado un tiempo, tú mismo lo olvides.
En ambos casos es complejo. Dicho método se volverá tan grande que será muy complicado de entender y eso implica más tiempo del necesario para lograr algún objetivo. Los antes mencionados son solo algunos de la gran variedad que existe documentada; inclusive este concepto contempla la forma en la que llamamos a nuestras variables.
Las razones de la existencia de los Code Smells son varias, pero personalmente pienso que existen dos razones principales: Experiencia, y Tiempo.
∙ Por un lado la experiencia es algo que aumenta de forma paulatina, por lo que incluso, trabajando normalmente en un ambiente adecuado, mejorarás.
∙ Por otro, el tiempo. En ocasiones podemos no encontrarnos con la holgura que nos gustaría. El problema aquí es que esto es una constante. Siempre habrá ocasiones en las que podría faltar tiempo.
Tener poco espacio para desarrollar funcionalidades puede llevarnos a escribir muy rápido líneas y líneas de código, que por lo general no resultan de la mejor calidad.
Pero, ¡hey! funcionan. No hay problema, ¿Verdad? Lo corregiremos próximamente. Pues no. Lo más aconsejable es evitar esto.
Me explico:
Códigos con Code Smells o Sucios, claramente son más rápidos de escribir de buenas a primeras. No obstante, tal como hablamos anteriormente, la naturaleza de este tipo de código representa un problema a futuro. Lo verás reflejado en el costo y el tiempo para realizar cualquier tipo de cambio.
Por otra parte, si se busca un Código Limpio o, incluso, si se tiene presente la intención de escribirlo, quizás en un principio te tardes más, sin embargo dicho código será mucho más fácil de manipular, sostener y entender. Es exactamente el polo opuesto de un código hecho “a la rápida”.
Entonces, ¿Cómo puedo “oler” mejor estos elementos?
Buenas noticias, querido lector: Ya diste el primer paso.
El solo hecho de tener conciencia de que existen patrones dentro de la elaboración de código que, de no tener el suficiente cuidado, pueden empeorar la calidad general de producto, te hace mejorar:
¿Recuerdas lo que dije? “Debemos llegar hacia lo “esencial” y para ello, ejercer un esfuerzo consciente”. Manejando incluso superficialmente el concepto de “Code Smell”, sumado a la intención de evitarlos, te llevará a subir tu calidad de trabajo como consecuencia.
¿Cuál es el siguiente paso? Bueno, ya tienes la base: La intención. Ahora solo necesitas más información.
Te invito que tras terminar esta lectura, profundices este concepto. Notarás que existen categorías, sub-categorías, y muchos ejemplos. Cuando comiences a reconocer que muy posiblemente dichos casos ya los has presenciado, tú siguiente movimiento será investigar cómo solucionarlos y/o evitarlos. Y para la suerte de todos, de la mano con estas categorías y ejemplos, suelen venir muy buenas recomendaciones y tips para lograr dicho fin.
Por último, si necesitas asesoría experta en esta materia, Landscape tiene profesionales calificados para ayudarte a identificar y crear el mejor código para tus desarrollos. ¡Felicitaciones! Acabas de incorporar un muy buen concepto que, de usarlo correctamente, te facilitará enormemente tu trabajo. Incluso, si ya lo conocías, el hecho de que me hayas acompañado hasta este punto demuestra tu interés en la mejora. Excelente trabajo.