6 Reglas para programar correctamente en java

Bueno, últimamente me tocó trabajar con código tan, pero tan mal, que decidí hacer un post sobre como codificar bien (es válido para otros lenguajes OO) con la esperanza que me pase menos. Hace poco me encontré en una esquina con mi amigo de la facultad Ariel Palma, sólo para sacar el cuero a la gente que en lugar de hacer una clase bien utiliza parche sobre parche. A toda esta gente les digo “Lo barato, cuesta caro”. El tiempo que te tomará escribir bien el código es ínfimo comparado al que te tomará hacer un debug un par de meses después. No me da el tiempo de hablar de conceptos como acoplamiento y cohesión, para quien sabe lo que es no hace falta que lea esto. Es simplemente para que programadores con poco nivel entiendan como programar decentemente.

Por eso es importante seguir estás 7 reglas.

1) KISI, del inglés Keep It Simple Idiot. Cuanto más simple sea el código, cuanto más fácil de leer este. Mejor!. Me tocó trabajar con gente que son ofuscadores de código humano. La idea es que se pueda leer todo con claridad. Esto incluye comentarios cuando sean necesarios, no tener líneas demasiado largas, no hacer if sin paréntesis, etc etc. Parece obvio, pero no lo es. Ej:
a=b +1
a=a+c
return a+c;

Esto debería quedar algo como

//devuelvo el valor de blabla
return a+1+2*c;

2) Usar bien las funciones y los bucles. A todo aquel que me pregunta que lenguaje de programación le recomiendo, le digo que aprenda primero que nada pascal. Porque es un lenguaje que no te deja romper la estructura funciona, cuesta mucho trabajo programar mal en pascal, tanto así, que terminas programando bien.Ejemplo de esto es cualquier cosa que rompa el ciclo de una función. Por ejemplo, tener más de un return, o un break en lugar de un condicional bien planteado. Usar dos if en lugar de usar un if anidado, usar muchos if en lugar de un switch. Y cosas por el estilo, parece tonto, pero hacen que el código resultante sea mucho más fácil de leer.

3) Usar bien la jerarquia de clases, y evitar a toda costa el copy & paste. Esto también es lógico, pero pocos lo hacen. Siempre en informática se intenta evitar la redundancia a toda cosa, y programar no es la excepción. Si trabajan para mi y entregan dos pedazos de código que hacen lo mismo, en lugar de un método dentro de una clase, preparen su renuncia. Una forma de chequear esto es controlar con PMD (más adelante) si hay código misteriosamente parecido y agruparlos en una clase. Luego extendemos (herencia) cosa de que todas las clases sean hijas de la clase madre y compartan ese pedazo de código. Las interfaces son terriblemente útiles también, pero no entro en eso.

4) Base de datos…. esto es obvio!, pero super obvio!! pero nadie se da cuenta. La base de datos es muchas veces el cuello de botella, así que hay que cuidarla mucho. Evitar consultas en bucles, select *, más de una conexión, consultas períodicas evitables y otras tantos son clara evidencia de mal diseño de clases y código.

5) Utiliza analizadores de código, yo programo en eclipse y está el PMD que es muy bueno. Te sirve para controlar que el código que estás entregando sea de calidad, y a tu jefe para comprobarlo. Si bien muchas de las reglas de PMD son exageradas, pero otras tantas están muy pero muy bien. Es un buen comienzo para empezar a programar bien. Además te corrige que uses bien el nombre de métodos y clases para que estén en java’s way.

6) Aún con todo esto te puedes equivocar, claro, tu profesor te dijo que nunca llames al garbage collector, porque eso se hace automáticamente y todo lo demás… bueno pues no es tan así. Después de terminar de corregir todo el código te tienes que fijar que si no quedaron leaks de memoria. Para esto usas visualJava y Eclipse MAT que te ayuda a ver donde estás consumiendo memoria de más.

Siempre me contratan de empresas que el código fue tocado por mucha gente haciendo parches sobre parches, y llega un momento que los mismos programadores que hicieron el código ya no lo entiende. Por favor muchachos cuiden su trabajo, programen bien.

Mi próximo post será sobre algoritmos genéticos usando clusters HazelCast en java.

Saludos a todos mis amigos programadores 🙂