La experiencia es una profesora muy muy dura,porque primero examina, y luego enseña la lección.
Vernon Law
¿Conoces el término antipattern en el ámbito de la programación?
El término antipattern se refiere a "malas prácticas" de programación muy comunes que conllevan el peligro de provocar errores o mal funcionamiento de los programas y que para colmo suelen ser de muy difícil detección.
Dichas "malas prácticas" no sólo se deben a la inexperiencia, "poca cualificación" o "desidia/comodidad" del programador, sino a otras muchas razones como desconocimiento del funcionamiento interno de una API, de un compilador, de una máquina vitual... vamos, berenjenales en los que un muy buen programador no tendría por qué meterse.
Aunque hay reglas generales, cada lenguaje y API tiene sus propios antipatterns y hay multitud de libros (bueno, de C/C++ deben ser enclopedias, jejeje) y webs hablando de ellos.
Me voy a centrar en Java. Personalmente la experiencia me ha hecho toparme con varios casos y llegar a soluciones muy parecidas a las que he encontrado por ahí. Por ejemplo, cómo concatenar Strings y cómo asegurar que se liberan recursos cuando hay excepciones.
Aquí dejo algunas webs que he leído recientemente y en las que he visto y aprendido cosas muy interesantes (y muy sorprendentes en algunos casos):
- http://www.odi.ch/prog/design/newbies.php: una lista muy interesante de Java Antipatterns muy bien explicados. Recomiendo:
- Lost StringBuffer performance
- Not freeing resources in a finally block
- Not taking advantage of immutable objects
- http://javaantipatterns.
wordpress.com/: otra lista muy interesante de Java Antipatterns. Recomiendo: - Measure time intervals using System.currentTimeMillis()
- Collection of bad coding practices Using URLs in Collections/
- https://today.java.net/article/2006/04/04/exception-handling-antipatterns: una lista especializada en Java Antipatterns relacionados con el manejo de excepciones. Recomiendo:
Siempre se aprenden cosas muy intesantes de la experiencia de los demás. A mí jamás se me hubiese ocurrido que java.net.URL usara resolución de nombres dentro del método URL#equals(Object) o que medir tiempos con System#currentTimeMillis() no sea seguro.
Hoy en día, los compiladores e incluso los editores de los IDE suelen avisar cuando detectan algunas "anomalías", pero también hay algunas herramientas independientes. Yo usé durante años esta, con su plugin integrado en versiones antiguas del NetBeans: