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.
Imagen | TED Conference | Linux Foundation
En Xataka | Y el editor de código favorito de los programadores es… 8 profesionales nos dan su respuesta
Ver 39 comentarios
39 comentarios
nakasone
Hay un cuarto en el infierno dedicado a los desarrolladores que usan espacios para la sangría. Y por el desagüe de su retrete, se llega al cuarto de quienes ponen piña a la pizza..
cuspide
No se trata de que te guste la pizza con o sin piña, sino de que es una guerra de dinosaurios...
Hoy en día muchos IDEs proveen por defecto la sustitución de tabs por espacios, y es lo que usamos en nuestra empresa para unificar el código de la gente que usa tabs con la que usa espacios.
De hecho, usamos correctores de estilo (que entre otras cosas revisan las identaciones) que deben ser ejecutados antes de poder integrar código o crear una nueva rama. Si no pasa la corrección de estilos, el código simplemente se rechaza. Y si no, existen correctores que automáticamente cambian los estilos para unificarlos con el patrón definido. Existen organizaciones que establecen coding standards en las que nos basamos y hacemos debates dentro de la empresa para irlos mejorando, con aplicación retroactiva.
Además, lo mismo que alguien se queja por las identaciones puede también quejarse por la apertura/cierre de llaves y paréntesis, espaciados entre variables y asignaciones, declaración de funciones y clases, longitudes de línea, y un larguísimo etcétera que, al igual que las identaciones, si no se unifican causan dificultad en la lectura, y por eso existen los coding standards.
Sin más, yo veo en Linus problemas obsoletos de los años 80, en 2024 completamente superados, una pataleta que fácilmente podría solucionarse con cualquier herramienta de coding standard.
calicofr
Creo que aquí hay una errata o un bucle :-P
"hizo una pequeña travesura: cambió algunos espacios y los sustituyó por espacios"
alpy
¿No es la indentación/sangría únicamente una forma de hacer más legible visualmente para los humanos el código que ejecutará la máquina?
Si es así, que cada uno use lo que le salga de la punta del dedo (o lo que te mande tu jefe), no?
Pues eso, pizza con piña y tortilla con cebolla...
jlmartin
Cada tabulacions ocupa 8 espacios, a la que metas un par de if anidados dentro de un for o cosas similares re quedas "sin espacio", es antiestético, a mi uso el uso de tabuladores me parece de "novatos", además de que el tabulador, por definición es un "carácter no imprimible", impreso es indistinguible de 8 espacios.
Que si, que los IDES puedes ajustar los espacios del tabulador, pero eso es otro tema.
Y lo de las llaves también es otro tema "a debate".
relectron
El verdadero problema de los tabuladores son los desarrolladores que deciden cambiarlos por la cantidad de espacios, o distancia, que les viene en gana cada vez.
Y si el editor usa una fuente no monoespaciada ya es para nota.
Usuario desactivado
Ese tema está más muerto que Matusalén. Cualquier proyecto decente, con gente que sepan lo que están haciendo, saben cómo hacer para que se use uno o el otro.
El problema está cuando alguien que usa espacios quiere entrar en un proyecto que usa tabulaciones o vice-versa. Bueno, las herramientas para auto-formatear el código es lo primero que se debe encontrar, y si pueden saltárselas, entonces ocurrirá un error en las plataformas para la integración continua. Es tan sencillo como eso.
Lo demás, es el jueguito que tal parece no se acabará nunca.
También están los lenguajes modernos como Go, que de entrada te obligan a ir de una manera u otra, y es tan fácil como chequear que te adhieres a las reglas preestablecias.
nicopauer
entre por el titular y leí el contenido tan curioso ¿Como que "indentación" no la reconoce la RAE? Que diccionario mas choto, aprueba palabras como "inventacion", "muebda", "almondiga" y "murceguillo" pero no palabras reales que usa gente que trabaja y como sustituto ofrecen "sangría" que ya se usa para referirse a una bebida alcohólica que es los que toman los de la RAE cuando agregan palabras, después se quejan que ganó el inglés
danielmarin2
Es tan absurdo pelearse por esa tontería, como la de la pizza y la tortilla. Si no te gusta la pizza con piña pues no la comas, pero no demonices a los que sí, y lo mismo con la tortilla. Y respecto a los espacios y los tabuladores, que cada uno use lo que quiera. Si trabajáis varios en un repo, ponéis un coding standard y os adaptais.
Con estas cosas es que me pica la mano, porque hay tanta tontería suelta...
nozenritten
"extranjerismo que no tiene acepción aprobada en el DRAE de momento"
recuerda que la RAE ni aprueba, ni desaprueba... solo constata el uso de la expresión...