Federico Mena-Quintero
federico@gnome.org 2013
Miguel de Icaza
miguel@gnome.org
Morten Welinder
mortenw@gnome.org
El código bueno y legible conserva el proyecto mantenible
Daniel Mustieles
daniel.mustieles@gmail.com 2016-2020
Javier Mazorra
mazi.debian@gmail.com 2016, 2020

# La importancia de escribir buen código

GNOME es un proyecto de software libre muy ambicioso, y se compone de muchos paquetes de software que son más o menos independientes unos de otros. Una gran parte del trabajo en GNOME se hace mediante voluntarios: aunque hay muchas personas trabajando en GNOME a tiempo completo o a tiempo parcial, los voluntarios siguen constituyendo un gran porcentaje de nuestros colaboradores. Los programadores pueden ir y venir en cualquier momento y serán capaces de dedicar diferentes cantidades de tiempo al proyecto GNOME. Las responsabilidades de la gente del «mundo real» pueden cambiar, y esto se reflejará en la cantidad de tiempo que puedan dedicar a GNOME.

El desarrollo de software lleva grandes cantidades de tiempo y de esfuerzo minucioso. Por este motivo la mayoría de los voluntarios a tiempo parcial no pueden comenzar grandes proyectos por sí mismos; es mucho más fácil y gratificante contribuir a proyectos existentes, ya que estos producen resultados que son visibles y utilizables inmediatamente.

Por lo tanto, llegamos a la conclusión de que es muy importante para los proyectos existentes hacer lo más fácil posible a la gente contribuir en ellos. Una forma de hacer esto es asegurándose de que los programas son fáciles de leer, comprender, modificar y mantener.

El código desordenado es difícil de leer, y la gente puede perder el interés si no puede descifrar qué trata de hacer. También es importante que los programadores puedan entender el código rápidamente para que puedan empezar a contribuir con correcciones de errores y mejoras en un período de tiempo corto. El código fuente es una forma de comunicación, y es más para la gente que para los ordenadores. Igual que a alguien no le gustaría leer una novela con errores ortográficos, mala gramática, y una puntuación descuidada, los programadores deberían esforzarse en escribir buen código que sea fácil de entender y modificar por otros.

Las siguientes son algunas cualidades importantes de buen código:

# Limpieza

El código limpio es fácil de leer con el mínimo esfuerzo. Esto permite a la gente empezar a entenderlo fácilmente. Esto incluye el estilo de codificación en sí (el lugar de las llaves, la sangría, los nombres de variables), y el control del flujo real del código.

# Consistencia

El código consistente hace fácil a la gente entender cómo funciona un programa. Cuando se lee código consistente, uno forma inconscientemente una serie de suposiciones y expectativas acerca de cómo funciona el código, por lo que es más fácil y más seguro realizar modificaciones en él. El código que parece el mismo en dos sitios debería funcionar igual, también.

# Extensible

El código de propósito general es más fácil de reutilizar y modificar que el código muy específico con muchas suposiciones en codificación fija. Cuando alguien quiere añadir una nueva característica al programa, obviamente será más fácil hacerlo si el código se diseñó para ser extensible desde el principio. El código que no se escribió de esta manera puede llevar a la gente a tener que implementar hacks feos para añadir características.

# Corrección

Finalmente, el código que está diseñado para ser correcto permite a la gente emplear menos tiempo preocupándose por errores, y más tiempo mejorando las características de un programa. Los usuarios también aprecian el código correcto, ya que a nadie le gusta el software que se rompe. El código que se escribe para la corrección y la seguridad (es decir, código que intenta explícitamente asegurar que el programa permanece en un estado consistente) previene muchas clases de errores tontos.

# Referencias del libro

Code Complete, por Steve McConnell.

Refactoring: Improving the Design of Existing Code , por Martin Fowler.

Design Patterns: Elements of Reusable Object-Oriented Software , por Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides.

Object-Oriented Design Heuristics , por Arthur Riel.