Blog de Julio César Pérez Arques
10 formas de mejorar tu código
Mayo 2nd, 2009 - [Enlace local]
[ACTUALIZACIÓN 030509: Añadido ejemplo de Antiobjeto.]
El otro día vi la presentación 10 Ways to Improve your Code que Neal Ford hizo en la QCon SF 2008 sobre cómo escribir mejor código y que ha publicado el portal InfoQ.
Es una presentación genial y muy práctica. Enseguida te das cuenta de que estás ante un gran programador que además sabe explicarse muy bien. Así que decidí tomar apuntes de estas 10 formas de escribir mejor código, que aprovecho para plasmar aquí y no olvidarlas.
1 - Métodos compuestos
Divide tus métodos en métodos más pequeños que realicen una única tarea claramente identificada. Así se obtiene un código más intuitivo y fácil de probar formado por métodos pequeños, cohesivos y reutilizables. Además es un código autodocumentado porque los nombres de los métodos se convierten en documentación.2 - Diseño y Desarrollo orientado a pruebas (TDD)
Piensa en cómo se usará una clase y diseñarás mejor su interfaz y su relación con otras clases.Una clase bien diseñada es fácil de probar.
3 - Análisis estático
Usa herramientas de análisis de código, como Findbugs, para evitar bugs, no violar buenas prácticas y escribir código más fácil de mantener.4 - Buenos ciudadanos
En POO los ciudadanos son las clases. Una buena clase es aquella que se relaciona bien con las demás. Un ejemplo de mal ciudadano es el Singleton. Los singletons mezclan responsabilidades (su funcionalidad más asegurar 1 única instancia), son difíciles (sino imposibles) de probar y aumentan brutalmente el acoplamiento entre clases al usarse como las antiguas variables globales. En lugar de un singleton, usa un pojo con constructor privado para la funcionalidad y haz que sea una factoría la responsable de crearlo (usando reflection para saltarse el constructor privado) y asegurarse que sólo haya 1 instancia. Más sobre el peligro de los singletons aquí.5 - YAGNI: you arent gonna need it
No programes lo que no vas a necesitar. Construye la funcionalidad más simple que necesites en cada momento.No desarrolles de forma especulativa, pensando en posibles necesidades futuras.
Me encanta esta imagen:

6 - Cuestiona el porqué
No hagas las cosas porque sí. Piensa antes y comprueba.A menudo, dentro de una empresa o equipo, se toman como leyes invariables algunas recomendaciones o soluciones concretas y circunstanciales. Incluso cuando su creador ha desaparecido. Seguro que todos tenemos algúna historia con esto...
Además a veces lo intuitivo no es cierto. Neal cita un estudio donde se observó que la programación por parejas produce código 15% menos rápido pero con 15% menos de defectos.
7 - SLAP
Usa el mismo nivel de abstracción para las líneas de un método.Así conseguirás métodos compuestos de forma natural.
8 - Programación poliglota
Domina distintos lenguajes para resolver cada problema con el lenguaje más apropiado.9 - Cada matiz
Aprende y aprovecha los matices especiales del lenguaje. Pej. en Java con reflection puedes hacer maravillas, como cambiar el modificador de acceso de métodos en tiempo de ejecución o construir objetos de clases definidas dinamicamente.10 - Antiobjetos
Solemos modelar los objetos a imagen y semejanza del mundo real. Sin embargo, en ocasiones, es útil obviar la realidad para crear soluciones menos complejas. Es lo que se conoce como antiobjetos. Por ejemplo, si pensamos en el famoso juego Pac-Man, es lógico imaginar que son los fantasmas los que calculan su camino hacia pacman en base al tablero, su posición, la de pacman y si se comió la fruta. Pero en realidad es el tablero quien mueve los fantasmas!Y tú, ¿conoces alguna otra forma?