Leo un artículo en el blog de Ricardo Galli titulado Tratar al código fuente como un ensayo que me ha vuelto a crear una conexión entre dos temas que en principio parecen poco relacionados pero de los que se puede extraer alguna enseñanza común; en este caso, la programación y la redacción de textos para la web.
Ricardo habla de un libro (Beautiful Code) y, más concretamente, de un capítulo titulado como su artículo: Treating Code As an Essay. En él se señala la similitud entre el código fuente de un programa y un ensayo, en el sentido de que, si bien en ambos casos su propósito es lo fundamental (“¿de qué se trata?”; “¿qué hace?”), no debe descuidarse el estilo en que están escritos, ya que no sirven de nada si no pueden ser interpretados por seres humanos.
A continuación rescata algunas reglas generales para escribir código de calidad:
- Brevedad: La brevedad es una virtud, definitivamente hay un coste de lectura para el ojo humano, el código debe eliminar la información redundante
- Familiaridad: Las personas son más conservadoras de lo que pensamos. Las curvas de apredizaje elevadas creean estrés y reducen productividad. Un lenguaje no debe obligar a los progamadores a trabajar con conceptos nuevos y complejos. No ser demasiado innovador es también una ayuda para el “código bello”.
- Simplicidad: Si un programa es complicado de entender no puede tener belleza.
- Separar bloques: Separar los bloques lógicos en cada función, así se facilita la lectura más rápida y en “diagonal”.
- etc.
Inmediatamente me han venido a la memoria las reglas que da Jakob Nielsen para escribir para la web; de hecho, algunos de los puntos son prácticamente idénticos: simplicidad, brevedad, lenguaje familiar, etc. Y es que, pensándolo un poco, las situaciones no son tan diferentes:
- Leer sobre un monitor (más cansado que sobre un papel).
- No se lee completamente el contenido, sino que se “escanea”, ya sea buscando alguna información concreta, ya sea haciéndose una impresión general.
- El contenido puede estar disperso en diferentes ficheros/páginas.
Por supuesto, hay diferencias: un programa debe ser, al mismo tiempo, interpretado correctamente por una máquina, y ser inteligible para los programadores. Por otro lado, una página web, en principio, sólo tiene como público objetivo a los usuarios del portal; aunque, indirectamente, también puede ser interpretada por máquinas, i.e., los bots de indexación de buscadores. Es más: algunas páginas son bastante menos inteligibles que muchos códigos fuente. 🙂
En cualquier caso, la idea está clara: no debemos perder de vista que es fundamental, en ambos casos, que los programas/textos que creamos deben poder ser interpretados con claridad y sencillez por humanos.
¿Podemos llevar más allá la analogía? Algunas ideas que se me ocurren:
- Igual que hay estudios sobre rendimiento de lectura en páginas web, ¿existirán estudios sobre rendimiento de lectura de código? ¿Por qué no aplicar un eye-tracker a un programador estudiando el fuente de un programa? Podríamos comparar rendimientos entre diferentes estilos de programación, lenguajes, coloreado de sintaxis, etc.
- ¿Cómo podemos usar el estilo de pirámide invertida en un programa? ¿Tiene sentido hacerlo?
- ¿Podríamos aplicar alguna de las técnicas incluidas en los editores de código fuente y en los IDE a los editores de texto a la escritura para la web? Por ejemplo, ¿nos serviría una función que resaltara todas las repeticiones de una misma palabra en el texto para detectar qué hemos dicho anteriormente, o si la estamos utilizando demasiado? ¿Y si pudiéramos incluir fácilmente comentarios en el texto, visibles para nosotros como autores, pero no para los lectores en general?