Los malos programadores se preocupan por el código

Una idea muy extendida es que para ser programador basta con leerse un tutorial estilo “Aprenda HTML en 24 horas”* y ponerle ganas. Todo marcha bien mientras se genere código repetitivo (boilerplate code). Por alguna razón existen carreras universitarias para lidiar con el código y la complejidad del desarrollo de aplicaciones.

Uno de los primeros dolores de cabeza que enfrentan los iniciados son las estructuras de datos. En programación una estructura de datos es una forma particular de organizar datos en la computadora para que puedan ser utilizados de manera eficiente. Una definición un poco más formal: Una estructura de datos es una colección de valores de datos, las relaciones entre ellos y las funciones u operaciones que se le pueden aplicar. (ver)

Desde el humilde arreglo al más siniestro de los árboles rojo-negro, han permitido a los programadores realizar hazañas asombrosas, como devolver millones de resultados de búsquedas de páginas web en menos de un segundo o permitiendo que nuestras computadoras funcionen. Cada estructura tiene ventajas y desventajas, siendo crucial la experiencia del programador para identificar la más adecuada en cada situación, especialmente en los nuevos proyectos donde, con suerte, se contará con un estimado del crecimiento de los datos.

… afirmaré que la diferencia entre un mal programador y uno bueno es si considera que su código o sus estructuras de datos son más importantes. Los malos programadores se preocupan por el código. Los buenos programadores se preocupan por las estructuras de datos y sus relaciones.

Torvalds, Linus (2006-06-27). Mensaje a lista de distribución de GIT. Retrieved on 2006-08-28.

Es importante tener en cuenta que en la escuela se imparten las estructuras de datos en su forma más pura y simple, donde sus ventajas y desventajas son más evidentes. En la vida real se busca reducir las desventajas, dando lugar a implementaciones más complejas que aprovechan el funcionamiento interno de los lenguajes de programación, compiladores, sistemas operativos y hardware especializado. Normalmente se reutilizarán las implementaciones disponibles en las bibliotecas de desarrollo, pero una comprensión de la teoría es vital para seleccionar la adecuada.

En algunos casos la diferencia entre estructuras aparentemente similares, es una corta línea en la documentación manifestando que tal estructura es sincronizada y su hermana casi idéntica no es sincronizada y por lo demás son idénticas. Ese detalle tiene una importancia vital en el desarrollo, ya que la no sincronizada generalmente es más rápida mientras que la sincronizada permite accesos concurrentes, manteniendo la consistencia de la memoria.

Muchos desarrolladores tienden a ignorar estas sutilezas y entregan un producto que funciona y hasta puede que funcione muy bien en las pruebas . En el momento en que son puestos en producción, con los entornos locos que existen en las entidades del mundo real, con usuarios reales que hacen de todo excepto lo que se pensó, cosas extrañas empiezan a ocurrir.

Entender la ciencia detrás de la programación y que hace funcionar las redes de datos y computadoras es vital para ser buenos desarrolladores.

Aprendiendo nuevos leguajes de programación

* HTML no es un lenguaje de programación.

Comentarios