Hay gente a la que le gusta la pizza con piña e incomprensiblemente gente a la que no. También está la gente que prefiere la tortilla de patata con cebolla y otra gente muy loca a la que le gusta sin. Y luego está el debate definitivo de los programadores: o eres de tabuladores, o eres de espacios.
Es una de las particulares guerras de los desarrolladores que se une a otras muy conocidas de usuarios de distros Linux como la que enfrenta a vi contra emacs, o a GNOME contra KDE. Sin embargo y como decimos, esta afecta de forma muy especial a los desarrolladores, que llevan años debates si la sangría (indentación) del código debe realizarse con tabuladores o como espacios.
El problema es que algunos analizadores sintácticos de código (parsers) no ofrecen un soporte adecuado para los tabuladores, lo que puede hacer que el código dé errores cuando en realidad no los tiene.
Linus Torvalds, cansado de esa situación, decidió publicar un parche para uno de los ficheros de configuración Kconfig en el que hizo una pequeña travesura: cambió algunos espacios y los sustituyó por espacios precisamente para que los parsers incapaces de detectar esa situación —que deberían detectar— produzcan un error.
La intención de Linus aquí era obvia: lograr que los desarrolladores de esos parsers se pongan manos a la obra y hagan los cambios necesarios para soportar correctamente los tabuladores. En otro tiempo Linus probablemente hubiera reaccionado de forma mucho más contundente, pero esta forma de actuar es mucho más sutil. Como él mismo explicaba al publicar el parche:
No estaba claro qué herramienta era, pero vamos a asegurarnos de que se arregla. Porque si no puede parsear tabuladores como espacios en blanco, no debería estar parseando los ficheros Kconfig del núcleo.
De hecho, Torvalds indicó que seguiría añadiendo tabuladores de forma aleatoria en algunos ficheros Kconfig para seguir insistiendo en la cuestión hasta que esas herramientas de terceros —que no identifica— corrijan el problema. Porque el hecho de que en Kconfig haya ciertas excepciones respecto al uso de tabuladores no excusa nada.
Y no lo excusa porque para Linus Torvalds no hay discusión que valga. Los tabuladores son el único método válido para realizar la indentación del código.
Y punto.
La eterna guerra santa de tabuladores vs espacios
Los odios y filias en esta cuestión vienen de lejos. De muy lejos. Algunos llamaban a este enfrentamiento 'Tabs versus Spaces' la eterna guerra santa en el año 2000, y la propia documentación de programación del kernel Linux deja clara la postura de quienes desarrollan este importante pilar tecnológico de nuestros días:
A excepción de los comentarios, la documentación y excepto en Kconfig, los espacios nunca se utilizan para la sangría, y el ejemplo anterior está roto deliberadamente.
Así que si eres un programador y colaboras en el desarrollo del kernel Linux, los espacios están básicamente prohibidos para la sangría —o indentación, extranjerismo que no tiene acepción aprobada en el DRAE de momento— del código.
En 2007 Linus Torvalds respondía a otro colaborador del desarrollo de Linux que trataba de suavizar el debate. Él decía que al final hay que lidiar con gente que usa espacios en lugar de tabuladores (a menudo programadores en Windows), pero Linus dejaba ya clara su postura.
"Una de lasa razones por las que realmente quiero usar tabuladores puros [equivalentes a 8 caracteres] es que hace que los parches se vean mejor", explicaba, y alertaba del peligro de mezclar estilos y combinar indentación con tabuladores y espacios. "Si usas espacios (o peor, mezclas ambos métodos), las cosas las cosas se ven realmente horribles, hasta el punto de ser realmente inviables". En su defensa de esa práctica dejaba claro que para él los tabuladores puros eran "el criterio de referencia".
Por supuesto, los siguientes años el debate y la "guerra santa" continuaron. Como el desarrollador Robert Truesdale explicaba hace unos meses, algunos lenguajes introducen sus propias reglas del juego aquí. El Python Enhancement Proposal (PEP 8) que es la referencia para el desarrollo de código en este lenguaje de programación recomienda usar cuatro espacios por nivel de indentación, mientras que el Java Style Guide de Google especifica el uso de dos espacios por indentación.
Las curiosidades van más allá, y por ejemplo son varios los estudios y encuestas que le han tomado el pulso a la cuestión. Como apuntaba Truesdale, históricamente los espacios han sido la preferencia en entornos empresariales, y de hecho hay (polémicos) estudios que revelan que los desarrolladores que usan espacios ganan más dinero que los que usan tabuladores para la indentación.
Esa guerra entre tabuladores y espacios llegó a quedar reflejada en un capítulo de la serie 'Silicon Valley', y siempre ha creado fuertes apoyos por uno y otro lado. Jeff Atwood, cocreador de Stack Overflow, era un fiel seguidor de los tabuladores, y escribió un fantástico (e irónico) post en 2009 condenando a los "infieles de los espacios" a muerte. En una de las respuestas que lógicamente provocó, hubo quien le apoyó dando una razón de lo más ecológica: los espacios están destruyendo el planeta.
Ya lo sabéis. Nada de indentar con espacios. Y que vivan la pizza con piña y la tortilla de patatas con cebolla.