Porque debo reescribir codigo? - miguel jimenez en español // MVP C#
16/12/2006 4:08 Miguel Jimenez

Porque debo reescribir codigo?

Estaba leyendo un post de Perci Reyes, inspirado en un post sobre como comprender el código en Coding Horror. Después de leerlo, junto a todos los articulos relacionados (lo que piensa Joel y el post de Peter Hallam), creo que tengo algo que añadir y que parece no importar a nadie...

En primer lugar, estoy deacuerdo con los autores sobre las estadisticas presentadas de las actividades de un desarrollador... y quizás sea cierto que empleamos mucho tiempo en comprender código existente. Por defecto, los programadores somos tan narcisistas que necesitamos sentir que hemos creado algo, y somos propensos a cambiar cualquier cosas que no comprendamos a una solución más apropiada y personal, siempre bajo nuestro punto de vista. Todo el mundo parece discutir acerca de este narcisismo y los programadores deseando reescribir código en lugar de comprenderlo, pero yo tengo algunas dudas sobre si es un problema de los desarrolladores o del código en sí...

Es decir, es el código demasiado complejo para comprenderlo? Puede que lo sea. Personalmente he visto miles de lineas de código imposibles de seguir y comprender porque la arquitectura elegida, las capas de negocio o datos, el modelo de presentación o incluso la capa de UI no estaban diseñadas de manera correcta o ni siquiera existian. Esto añade mucha complejidad, pero debeis admitir que no esta relacionado con el desarrollador que modifica ese código. Es el propio código. Ese código fue escrito por un desarrollador que lo pensó como la mejor solución a un problema de negocio (o quizás era la mejor solución posible que podia implementarse con determinadas restricciones del proyecto, solución o el propio desarrollador; o quizás debido a una falta de experiencia o conocimiento del desarrollador que escribió el código)

Supongo que un equipo de desarrollo que trabaja en una solución lo hace de la mejor manera posible, usando patrones conocidos, desacoplando el código e interfaz de usuario, y refactorizando clases y métodos. Siguiendo algunas sencillas reglas deberiamos ser capaces de no encontrar cosas como un metodo con 400 líneas o una clase con un único método de 2000 líneas de código. Y prometo que este tipo de código existe, lo he visto muchas veces.

En ese caso, yo probablemente cambiaría y reescribiría el código que "huele". No porque lo prefiera hecho por mí, sino porque esta falta de diseño nos conduce a la locura y descontrol durante el desarrollo; pero lo más importante, sino se corrige frustrará el trabajo de futuros desarrolladores que tengan que mantenerlo o extenderlo.

Mi opinión acerca del hilo de posts es que simplemente hay que tener en cuenta que los desarrolladores somos narcisistas pero también somos capaces de leer código que sea comprensible. El problema para mi es la introducción de software mal diseñado, que desgraciadamente se puede encontrar por todos lados. Necesitamos tener en mente que cualquier pieza de código que desarrollemos se pondrá en producción en algún momento, y será mantenida o soportada por un equipo de desarrolladores (probablemente distinto al que lo desarrollo) que necesitará comprenderla.

Mi consejo personal es (y esto es lo que yo hago cuando escribo código en cualquier proyecto) que cada desarrollador ahí fuera debería escribir codigo de la mejor forma posible pero siempre haciendolo perfectamente legible y comprensible. El código debe hablar por sí mismo, no a través de comentarios añadidos para comprenderlo, y debe ser refactorizado y simplificado hasta que sea legible por simples humanos. No es tan dificil. Hay muchas prácticas que permiten conseguir este objetivo y además, bajo mi punto de vista, hacernos mejores desarrolladores; pero mi frase favorita es:

"si sientes la necesidad de añadir un comentario, simplemente refactorizalo para que el comentario sea supérfluo. de esta forma tu código será más simple y facil de comprender"

Archivado en: ,
Comparte este post:

# re: Porque debo reescribir codigo?

Saturday, December 16, 2006 10:23 AM by El Bruno

hey Miguel ... q buen post; especialmente la frase final :D

Es muy cierto lo que dices, y personalmente creo que nunca un desarrollador crea codigo ilegible a propósito, siempre estamos convencidos de estar logrando la mejor solucion posible; pero lamentablemente hay factores que obligan a escribir mal codigo, falta de tiempo, desconocimiento de herramientas, etc ... (por ejemplo es increible la cantidad de gente q escribe el try {} catch {} completo cuando con un simple try Tab Tab (code snnipet) lo tenemos todo listo).

Respecto a la necesidad de invertir tiempo en leer codigo existente, esa creo q es una de grandes tareas a las que nos enfrentamos en nuestro trabajo; he escuchado la frase "lo tiro y lo hago de nuevo" muchisimas veces; cuando el problema de fondo no es el codigo en si mismo, sino el contexto donde fue creado.

Creo que es necesario analizar todas las variables (no solo las del codigo) y con esa base comenzar a modificar el codigo (si es necesario) para que cuando dentro de un tiempo, alguien lo tenga q interpretar, le hagamos su dia a dia mucho mas llevadero, algo que a mi me gustaría en muchas ocasiones.

Saludos

# re: Porque debo reescribir codigo?

Saturday, December 16, 2006 3:51 PM by Percy Reyes

Hola Miguel,

<<

El problema para mi es la introducción de software mal diseñado, que desgraciadamente se puede encontrar por todos lados.

>>

todo ese mla diseño creo que viene de más abajo, es decir, se arrasta desde un mal análisis,...

salu2.

# re: Porque debo reescribir codigo?

Saturday, December 16, 2006 7:14 PM by Emilio Velardiez Moreno

Hola Miguel,

Hacez un poquito de esfuerzo y intentar recordar cuantas veces habéis escuchado estas frases:

No inventes!!!

Te estas liando!!!

Esto no esta funcionando no lo toques!!!

....

Es prácticamente imposible o obtienes pocos beneficios de intentar cambiar las practicas y metodologías de trabajo que han estado usando la gran mayoría de dinosaurios que existen en puestos de dirección en este mundo de la informática.

Para colmo el intento de mejora normalmente no esta muy bien visto por toda esta gente. Lo ven como una amenaza sobre su mundo que han conseguido dominar después de años basados en la ley del mínimo esfuerzo. Así que solo nos queda esperar que algún día toda esta gente deje paso a personas que tengan la misma ilusión que nosotros por intentar crear una nueva manera de canalizar la pasión que sentimos por nuestro trabajo. Mientras tanto solo nos queda resistir.

Saludos