domingo, 16 de marzo de 2014

Antipatterns en programación

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.

Por ejemplo, en Java muchos programadores inexpertos suelen comparar String con el operador == en vez de hacerlo con String#equals(Object). No es que esté mal usar el operador ==, pero probablemente no saben que la semántica de ambos casos es distinta y claro, cuando no les cuadran los resultados consultan a un compañero más experimentado que se tira de los pelos cuando ve el código fuente.

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):


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:


2 comentarios:

  1. Lo de la resolución de nombres en el método "equals" de URL es épico... xD

    ResponderEliminar
  2. Sí Avelino, la abstracción está muy bien, pero no hay que pasarse, jajaja.
    Gracias por leerlo y comentar.

    ResponderEliminar