{"id":46,"date":"2024-04-19T18:02:39","date_gmt":"2024-04-19T18:02:39","guid":{"rendered":"https:\/\/aldomonges.com\/aldomonges\/?p=46"},"modified":"2024-04-19T18:02:39","modified_gmt":"2024-04-19T18:02:39","slug":"estan-los-programadores-que-usan-tabuladores-y-los-programadores-que-usan-espacios-y-luego-esta-linus-torvalds","status":"publish","type":"post","link":"https:\/\/aldomonges.com\/aldomonges\/?p=46","title":{"rendered":"Est\u00e1n los programadores que usan tabuladores y los programadores que usan espacios. Y luego est\u00e1 Linus Torvalds"},"content":{"rendered":"<section class=\"post-entradilla\">\n<div class=\"post-entradilla-inner\">\n<ul>\n<li>\n<h2>Algunos han calificado la guerra entre tabuladores y espacios la eterna guerra santa de los desarrolladores<\/h2>\n<\/li>\n<li>\n<h6>Para Linus Torvalds la cuesti\u00f3n no tiene discusi\u00f3n posible, y ha hecho una peque\u00f1a travesura para defender su posturaHay gente a la que le gusta la pizza con pi\u00f1a e incomprensiblemente gente a la que no. Tambi\u00e9n est\u00e1 la gente que prefiere la tortilla de patata con cebolla y otra gente muy loca a la que le gusta sin. Y luego est\u00e1 el debate definitivo de los programadores: <strong>o eres de tabuladores, o eres de espacios<\/strong>.<\/h6>\n<\/li>\n<li>Es una de las particulares guerras de los desarrolladores que se une a otras muy conocidas de usuarios de distros Linux como la que <a href=\"https:\/\/www.xataka.com\/aplicaciones\/por-que-un-editor-de-texto-de-hace-40-anos-le-da-sopas-con-ondas-al-todopoderoso-atom\" data-mrf-link=\"https:\/\/www.xataka.com\/aplicaciones\/por-que-un-editor-de-texto-de-hace-40-anos-le-da-sopas-con-ondas-al-todopoderoso-atom\">enfrenta a vi contra emacs<\/a>, o a <a href=\"https:\/\/www.genbeta.com\/linux\/11-anos-usar-kde-plasma-me-he-encontrado-que-quizas-sea-mejor-escritorio-linux-actualidad\" data-mrf-link=\"https:\/\/www.genbeta.com\/linux\/11-anos-usar-kde-plasma-me-he-encontrado-que-quizas-sea-mejor-escritorio-linux-actualidad\">GNOME contra KDE<\/a>. Sin embargo y como decimos, esta afecta de forma muy especial a los desarrolladores, que llevan a\u00f1os debates si la sangr\u00eda (indentaci\u00f3n) del c\u00f3digo debe realizarse con tabuladores o como espacios.<\/li>\n<li>El problema es que algunos analizadores sint\u00e1cticos de c\u00f3digo (<em>parsers<\/em>) no ofrecen un soporte adecuado para los tabuladores, lo que puede hacer que el c\u00f3digo d\u00e9 errores cuando en realidad no los tiene.<\/li>\n<li>\n<p data-mrf-recirculation=\"Article links\">Linus Torvalds, cansado de esa situaci\u00f3n, decidi\u00f3 <a href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/commit\/?utm_source=anzwix&amp;id=d5cf50dafc9dd5faa1e61e7021e3496ddf7fd61e\" rel=\"noopener, noreferrer\" data-id=\"noopener noreferrer\" data-mrf-link=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/commit\/?utm_source=anzwix&amp;id=d5cf50dafc9dd5faa1e61e7021e3496ddf7fd61e\">publicar un parche<\/a> para uno de los ficheros de configuraci\u00f3n Kconfig en el que <strong>hizo una peque\u00f1a travesura<\/strong>: cambi\u00f3 algunos espacios y los sustituy\u00f3 por espacios precisamente para que los parsers <a href=\"https:\/\/git.kernel.dk\/?p=linux-block.git;a=commit;h=d96c36004e31\" rel=\"noopener, noreferrer\" data-id=\"noopener noreferrer\" data-mrf-link=\"https:\/\/git.kernel.dk\/?p=linux-block.git;a=commit;h=d96c36004e31\">incapaces<\/a> de detectar esa situaci\u00f3n \u2014que deber\u00edan detectar\u2014 produzcan un error.<\/p>\n<p data-mrf-recirculation=\"Article links\">La intenci\u00f3n de Linus aqu\u00ed 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 <a href=\"https:\/\/www.xataka.com\/aplicaciones\/arrepentido-linus-torvalds-se-toma-descanso-hora-mirarse-al-espejo\" data-id=\"noopener noreferrer\" data-mrf-link=\"https:\/\/www.xataka.com\/aplicaciones\/arrepentido-linus-torvalds-se-toma-descanso-hora-mirarse-al-espejo\">reaccionado de forma mucho m\u00e1s contundente<\/a>, pero esta forma de actuar es mucho m\u00e1s sutil. Como \u00e9l mismo explicaba al publicar el parche:<\/p>\n<\/li>\n<li>No estaba claro qu\u00e9 herramienta era, pero vamos a asegurarnos de que se arregla. Porque si no puede parsear tabuladores como espacios en blanco, no deber\u00eda estar parseando los ficheros Kconfig del n\u00facleo.<\/li>\n<li>De hecho, Torvalds indic\u00f3 que seguir\u00eda a\u00f1adiendo tabuladores de forma aleatoria en algunos ficheros Kconfig para seguir insistiendo en la cuesti\u00f3n hasta que esas herramientas de terceros \u2014que no identifica\u2014 corrijan el problema. Porque el hecho de que en Kconfig haya ciertas excepciones respecto al uso de tabuladores no excusa nada.<\/li>\n<li>\n<p data-mrf-recirculation=\"Article links\">Y no lo excusa porque <strong>para Linus Torvalds no hay discusi\u00f3n que valga<\/strong>. Los tabuladores son el \u00fanico m\u00e9todo v\u00e1lido para realizar la indentaci\u00f3n del c\u00f3digo.<\/p>\n<p data-mrf-recirculation=\"Article links\">Y punto.<\/p>\n<h2>La eterna guerra santa de tabuladores vs espacios<\/h2>\n<p data-mrf-recirculation=\"Article links\">Los odios y filias en esta cuesti\u00f3n vienen de lejos. De muy lejos. Algunos llamaban a este enfrentamiento &#8216;Tabs versus Spaces&#8217; <a href=\"https:\/\/www.jwz.org\/doc\/tabs-vs-spaces.html\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/www.jwz.org\/doc\/tabs-vs-spaces.html\">la eterna guerra santa<\/a> en el a\u00f1o 2000, y la propia <a href=\"https:\/\/www.kernel.org\/doc\/html\/v4.10\/process\/coding-style.html\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/www.kernel.org\/doc\/html\/v4.10\/process\/coding-style.html\">documentaci\u00f3n<\/a> de programaci\u00f3n del kernel Linux deja clara la postura de quienes desarrollan este importante pilar tecnol\u00f3gico de nuestros d\u00edas:<\/p>\n<blockquote><p>A excepci\u00f3n de los comentarios, la documentaci\u00f3n y excepto en Kconfig, los espacios nunca se utilizan para la sangr\u00eda, y el ejemplo anterior est\u00e1 roto deliberadamente.<\/p><\/blockquote>\n<p data-mrf-recirculation=\"Article links\">As\u00ed que si eres un programador y colaboras en el desarrollo del kernel Linux, <strong>los espacios est\u00e1n b\u00e1sicamente prohibidos para la sangr\u00eda<\/strong> \u2014o indentaci\u00f3n, extranjerismo que no tiene acepci\u00f3n aprobada en el DRAE de momento\u2014 del c\u00f3digo.<\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/i.blogs.es\/61e616\/linus-copia-2\/450_1000.jpeg\" sizes=\"auto, 100vw\" srcset=\"https:\/\/i.blogs.es\/61e616\/linus-copia-2\/450_1000.jpeg 450w, https:\/\/i.blogs.es\/61e616\/linus-copia-2\/650_1200.jpeg 681w,https:\/\/i.blogs.es\/61e616\/linus-copia-2\/1024_2000.jpeg 1024w, https:\/\/i.blogs.es\/61e616\/linus-copia-2\/1366_2000.jpeg 1366w\" alt=\"Linus Copia 2\" width=\"1500\" height=\"1000\" \/><\/div>\n<\/div>\n<p data-mrf-recirculation=\"Article links\">En 2007 Linus Torvalds <a href=\"https:\/\/public-inbox.org\/git\/alpine.LFD.0.999.0710161722320.26902@woody.linux-foundation.org\/\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/public-inbox.org\/git\/alpine.LFD.0.999.0710161722320.26902@woody.linux-foundation.org\/\">respond\u00eda a otro colaborador<\/a> del desarrollo de Linux que trataba de <strong>suavizar el debate<\/strong>. \u00c9l dec\u00eda 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.<\/p>\n<\/li>\n<li>\n<p data-mrf-recirculation=\"Article links\">\u00abUna de lasa razones por las que <em>realmente<\/em> quiero usar tabuladores puros [equivalentes a 8 caracteres] es que hace que los parches se vean mejor\u00bb, explicaba, y alertaba del peligro de mezclar estilos y combinar indentaci\u00f3n con tabuladores y espacios. \u00abSi usas espacios (o peor, mezclas ambos m\u00e9todos), las cosas las cosas se ven realmente horribles, hasta el punto de ser realmente inviables\u00bb. En su defensa de esa pr\u00e1ctica dejaba claro que para \u00e9l los tabuladores puros eran \u00abel criterio de referencia\u00bb.<\/p>\n<p data-mrf-recirculation=\"Article links\">Por supuesto, <strong>los siguientes a\u00f1os el debate y la \u00abguerra santa\u00bb continuaron<\/strong>. Como el desarrollador Robert Truesdale <a href=\"https:\/\/webcache.googleusercontent.com\/search?q=cache:https:\/\/roberttruesdale.medium.com\/tabs-vs-spaces-the-never-ending-battle-beyond-code-037d493e6dd8\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/webcache.googleusercontent.com\/search?q=cache:https:\/\/roberttruesdale.medium.com\/tabs-vs-spaces-the-never-ending-battle-beyond-code-037d493e6dd8\">explicaba<\/a> hace unos meses, algunos lenguajes introducen sus propias reglas del juego aqu\u00ed. El Python Enhancement Proposal (PEP 8) que es la referencia para el desarrollo de c\u00f3digo en este lenguaje de programaci\u00f3n recomienda usar cuatro espacios por nivel de indentaci\u00f3n, mientras que el Java Style Guide de Google especifica el uso de dos espacios por indentaci\u00f3n.<\/p>\n<p data-mrf-recirculation=\"Article links\">Las curiosidades van m\u00e1s all\u00e1, y por ejemplo son varios los estudios y encuestas que le han tomado el pulso a la cuesti\u00f3n. Como apuntaba Truesdale, hist\u00f3ricamente los espacios han sido la preferencia en entornos empresariales, y de hecho hay (<a href=\"https:\/\/evelinag.com\/blog\/2017\/06-20-stackoverflow-tabs-spaces-and-salary\/\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/evelinag.com\/blog\/2017\/06-20-stackoverflow-tabs-spaces-and-salary\/\">pol\u00e9micos<\/a>) estudios que revelan que <a href=\"https:\/\/stackoverflow.blog\/2017\/06\/15\/developers-use-spaces-make-money-use-tabs\/\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/stackoverflow.blog\/2017\/06\/15\/developers-use-spaces-make-money-use-tabs\/\">los desarrolladores que usan espacios ganan m\u00e1s dinero<\/a> que los que usan tabuladores para la indentaci\u00f3n.<\/p>\n<div class=\"article-asset-video article-asset-normal\">\n<div class=\"asset-content\">\n<div class=\"\">\n<div class=\"js-dailymotion\">\n<div id=\"x8gm6-0\" class=\"dailymotion-player-root dailymotion-player-x8gm6\">\n<div id=\"dailymotion-pip-large-viewport\" class=\"dailymotion-player-wrapper\"><iframe loading=\"lazy\" class=\"dailymotion-player\" title=\"Dailymotion video player - LINUX y GNU: LINUX: QUE\u0301 ES y CO\u0301MO FUNCIONA\" src=\"https:\/\/geo.dailymotion.com\/player\/x8gm6.html?mute=true\" width=\"100%\" height=\"100%\" frameborder=\"0\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-mrf-recirculation=\"Article links\">Esa guerra entre tabuladores y espacios lleg\u00f3 a quedar reflejada <a href=\"https:\/\/www.popsci.com\/inside-silicon-valleys-spaces-and-tabs-debate\/\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/www.popsci.com\/inside-silicon-valleys-spaces-and-tabs-debate\/\">en un cap\u00edtulo de la serie &#8216;Silicon Valley&#8217;<\/a>, 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\u00f3 un fant\u00e1stico (e ir\u00f3nico) post en 2009 <a href=\"https:\/\/blog.codinghorror.com\/death-to-the-space-infidels\/\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/blog.codinghorror.com\/death-to-the-space-infidels\/\">condenando a los \u00abinfieles de los espacios\u00bb a muerte<\/a>. En una de las respuestas que l\u00f3gicamente provoc\u00f3, hubo quien le apoy\u00f3 dando una raz\u00f3n de lo m\u00e1s ecol\u00f3gica: <a href=\"https:\/\/peterbraden.co.uk\/article\/space-infidel\/\" rel=\"noopener, noreferrer\" data-mrf-link=\"https:\/\/peterbraden.co.uk\/article\/space-infidel\/\">los espacios est\u00e1n destruyendo el planeta<\/a>.<\/p>\n<p data-mrf-recirculation=\"Article links\">Ya lo sab\u00e9is. Nada de indentar con espacios. <strong>Y que vivan la pizza con pi\u00f1a<\/strong> y la tortilla de patatas con cebolla.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Algunos han calificado la guerra entre tabuladores y espacios la eterna guerra santa de los desarrolladores Para Linus Torvalds la cuesti\u00f3n no tiene discusi\u00f3n posible, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":47,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,5],"tags":[],"class_list":["post-46","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-actualidad-sobre-linux","category-linux"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/i.blogs.es\/731c5d\/linus2\/1200_800.jpeg?w=1200&resize=1200,800&ssl=1","_links":{"self":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46"}],"version-history":[{"count":1,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions"}],"predecessor-version":[{"id":48,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions\/48"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/media\/47"}],"wp:attachment":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}