¿Por qué refactorizar?
La refactorización es el proceso de modificación del código fuente de una aplicación sin afectar a su comportamiento actual. En otras palabras, modificamos internamente su estructura sin perder ni agregar funcionalidad.
Generalmente, el objetivo es mejorar la calidad del código, optimizarlo y corregir problemas. ¿Quién no ha abierto un archivo que había programado hace dos meses y ha soltado una lagrimita?
Cada aplicación es un mundo
Programar algo es fácil, pero programar bien es bastante más complicado. Tenemos a nuestra disposición una gran cantidad de manuales, tutoriales, librerías, proyectos OpenSource... Una navaja Suiza que convierten una aplicación en un joven Frankestein.
Como toda navaja, es un arma de doble filo. Copiar y pegar, adoptar una solución sin sopesar los pros y los contras, o sobrecargar a nuestro Frankestein con 18 piernas cuando con dos es suficiente, hace que a la larga, nuestra aplicación comience a no poder ofrecer el servicio para que el que se programó.
Los plazos ajustados, la inexperiencia en el lenguaje y muchas más situaciones que cada uno hemos tenido, provocan que sea usual encontrarnos con problemas de este tipo en nuestras aplicaciones.
¿Cuándo?
Cualquier momento es bueno para aplicar nuevos conocimiento en tu código, ¿pero cuándo es bueno pararnos a mejorar lo anterior?
Si algo funciona, no lo toques. Esta es una frase que comparto en algunas ocasiones, pero si basamos nuestra aplicación en esta idea, pronto tendremos problemas. Aunque parezca que pararte a retocar algo que funciona es una pérdida de tiempo, a la larga lo agradecerás.
Un código mal estructurado provoca lo que yo llamo "avalancha mojónica" o "tsunami de ñapas". Un problema en un punto de la aplicación debido a algún aspecto que no se consideró empieza a afectar a otros componentes, teniendo que modificar gran cantidad de código por un detalle.
Para mi, el mejor momento para refactorizar es al acabar un ciclo de desarrollo en el que te has dado cuenta que todo ha supuesto un esfuerzo mayor del que debería. Por supuesto, no es necesario refactorizar todo una aplicación entera (y tampoco recomendable). Lo mejor es crear una nueva rama en Git, trabajar en ello poco a poco y aplicar lo aprendido al nuevo código.
Refactoring
Las ventajas de refactorizar son múltiples, tanto a nivel de aplicación como a nivel personal. Pararte a refactorizar implica el replanteamiento de un problema, enfrentarte de nuevo ante algo que "funciona" pero que se puede mejorar gracias a tu experiencia.
Papel y boli son tus amigos. Analiza el problema de nuevo, observa como lo resolviste y plantea una nueva solución teniendo en mente el futuro. Es importante no olvidarte de que no estás solo, amigos, escritores en blogs (ejem) o alguien en Twitter seguro que se han enfrentado a una situación similar y están dispuestos a ayudarte.
De manera personal puedo decirte que tras un tiempo refactorizando partes de nuestra aplicación de @redBorder_net es cuando realmente he sentido que entiendo de Ruby.
He de decir, que he soltado algún grito como "whaaaaat!" cuando he repasado archivos que creé hace tiempo. Pero gracias a amigos como @carlosrdrz, @cmeniz y @pikislabis, al tiempo que llevo programando y a leer, ahora puedo decir que soy mejor programador :D.