Amours, espaces et tabulations (2016)
Rompre une relation avec une fille parce qu’elle indente son code avec des espaces alors que vous êtes farouchement pro-tabulations, est-ce possible ? Un détail aussi trivial peut-il mettre en déroute les œuvres de Cupidon ? C’est en tout cas ce qu’ont imaginé les scénaristes de la série Silicon Valley pour l’épisode diffusé dimanche dernier sur HBO, juste après Games of Thrones.
Amours ruinés
Richard, personnage central de la série, a attendu le milieu de la troisième saison pour enfin être impliqué dans une relation romantique — on suppose que les gars de Pied Piper étaient jusqu’alors trop occupés à coder des algorithmes de compression pour s’intéresser à d’autres sujets, les filles par exemple.
C’est ainsi que dans un bar, Richard fait la rencontre de la charmante Winnie, une jeune femme qui a vraiment tout pour plaire : elle sait coder, a étudié au M.I.T., travaille chez Facebook, et a un compte GitHub. Mais l’idylle naissante va affronter un obstacle irrémédiable : alors que Richard est zélateur des tabulations, Winnie est une fidèle des espaces. Alors que les deux sont dans un canapé, l’ordinateur portable sur les genoux, en train de roucouler coder, l’orage qui menaçait éclate dans toute sa fureur destructrice : Winnie tape ostensiblement la barre d’espace pour indenter ses lignes de code. Elle sent l’agacement de Richard :
— Tes colocataires avaient raison, tu hais vraiment les espaces.
— Non, non, non. Je ne hais pas, ce n’est pas de la haine, haine est un mot trop fort. Hmm, à dire vrai, j’ai une certaine préférence pour les tabulations. Mais c’est seulement parce que je suis un peu psychorigide et parce que je préfère… la précision. Bon, on ne va pas se disputer là, mais si tu as la précision à cœur, pourquoi irais-tu utiliser des espaces ? Enfin, peu importe…
Winnie est une personne pragmatique :
— Une fois que c’est compilé, ça revient au même, non ?
— Ouais… Ouais… techniquement, oui, je suppose. C’est juste que… juste que je n’arrive pas à comprendre pourquoi toi, ou n’importe qui d’autre, voudrait utiliser des espaces plutôt que des tabulations. Si c’est tout pareil, pourquoi ne pas utiliser juste des tabulations ?
— Parce que ça peut donner un rendu différent sur les ordinateurs d’autres personnes ?
— Les tabulations créent des fichiers plus petits, correct ? Je dirige une entreprise de compression de données, crois-moi, je me suis dévoué toute ma vie à minimiser les tailles de fichiers. C’est ce que je fais. Ce que je veux dire, c’est que je ne peux pas comprendre les gens qui veulent utiliser des espaces plutôt que des tabulations. Pendant qu’on y est, pourquoi pas utiliser Vim plutôt qu’Emacs ? [Petit rire sarcastique.]
— J’utilise Vim.
— Oh mon Dieu, aidez-nous ! OK, hein… tu sais quoi ? Je… je crois pas que ça va marcher. Je suis vraiment désolé. Hé, enfin… quoi… nous étions sur le point d’élever des enfants dans ce monde… avec ça au-dessus de leurs têtes ? Ce ne serait pas très juste pour eux, tu ne penses pas ?
— Des enfants ? On n’a même pas couché ensemble !
— Et devine quoi, ça ne va jamais arriver maintenant, par qu’il est hors de question que je couche avec quelqu’un qui préfère les espaces aux tabulations !
Ô irrémissibles paroles ! Qu’avez-vous trop dit, novices tourtereaux, pour voir en un instant flétrir tant de roses galantes… Œuvre de tant de jours en un moment effacée ! Les dieux auraient fait votre bonheur, les muses y pourvoyaient déjà, et vous avez tout ruiné… quelle pomme de discorde avez-vous saisie des mains d’Éris ? Tabs contre espaces… vraiment ?
La guerre sans fin
L’indentation des lignes de code est avant tout une affaire de présentation — à l’exception de quelques rares langages, comme Python qui utilise des indentations faites d’espaces pour remplacer les accolades.
La plupart du temps, l’indentation est facultative et ne changera rien au fonctionnement du programme. C’est avant tout une aide visuelle, une commodité pour faciliter la lecture du code et le débogage. Espaces ou tabulations, cela n’a pas grande importance. Mais suffisamment toutefois pour que les humains, si amateurs de débats binaires, de polarisations extrêmes et de guerres picrocholines, entreprennent une bataille digne de Mac contre PC, Pepsi contre Coke, Xbox contre PlayStation, et bien sûr Vim contre Emacs.
Parce que si l’usage des espaces est plus consistant entre les machines, et que celui des tabulations plus économique, est-il bien nécessaire de s’entretuer pour une simple préférence individuelle ? Le peuple des programmeurs a tranché depuis longtemps : OUI !
Et si le camp des tabs peut s’unir provisoirement à celui des espaces, ce n’est que pour vilipender et vouer aux gémonies la minorité engagée dans la troisième voie : les “mélangeux”, qui, ô sacrilège, panachent allègrement leur code d’espaces ET de tabulations. Et tout ce beau monde fait volontiers front commun pour mépriser pire encore, irrécupérables brebis égarées : les quelques âmes perdues qui n’indentent rien du tout.
Cette divergence passionnelle peut aussi regrettablement être mise au service de certaines personnalités néfastes, les “passifs-agressifs”, qui rien que pour vous irriter gratuitement, alors qu’ils ont a intervenir dans votre code, vont sciemment utiliser des tabulations alors que toute votre œuvre est indentée d’espaces, ou vice-versa. Leur discret message est limpide : “Je t’em…”. Bien sûr, tous les outils modernes permettent de reformater, nettoyer du code en suivant vos propres préférences, mais il n’empêche, le malotru a comme violé, souillé la pureté du fruit de votre consciencieux labeur. Et fait passer son message. Sûr, il vous en veut. Personnellement.
L’autre personnalité nuisible est le “nazi du formatage”. Il est sûr de détenir la vérité suprême. De son propre chef, il va décider du beau comme du laid, du désirable comme de l’impur. Il décrète non seulement du style d’indentation, mais aussi de quantité d’autres détails comme la façon de nommer les variables. Il est à la programmation ce que le “nazi de la grammaire” est à la langue. Certes, il est méritoire de se battre pour un code plus lisible, plus homogène, plus consistant, mais tout est une question de mesure comme de manière.
Pour ce qui est la précision avancée par Richard, l’usage des tabs peut se discuter, car dans les faits, chaque tabulation peut être rendue par un nombre d’espaces variables suivant la plateforme, le logiciel ou encore les réglages de préférences. Les tabulations ne sont pas consistantes. Elles peuvent aussi causer des problèmes lorsque vous collez du code dans un logiciel de mise en page, comme MS Word, lorsque vous réalisez de la documentation par exemple, et que les tabulations ne sont plus représentées par un nombre défini d’espaces, mais alignées à une distance du bord gauche qui est variable pour chacune.
On notera qu’il est inutile de taper quatre fois sur la barre d’espacement pour obtenir quatre espaces, puisque les modernes environnements de développement (IDE) permettent de transcrire à la volée la touche tabulation en un nombre déterminé d’espaces (3 ou 4, par exemple). Fonction que Winnie ne semblait pas utiliser, peut-être juste pour le plaisir de torturer son soupirant ou pour connaître ses limites (vite atteintes en l’occurrence).
« Choisissez des tabulations, choisissez des espaces, choisissez n’importe quelle convention de mise en forme qui ait du sens pour vous et votre équipe. Les styles de codage que vous adoptez n’ont en fait pas vraiment d’importance. Ce qui compte est que vous, et tous les membres de votre équipe, adhèrent à ces conventions et les utilisent avec cohérence et constance.
Cela dit, seul un crétin peut utiliser des tabulations pour formater son code. »
— Jeff Atwood.
Et comment ne pas souscrire… n’est-il pas évident qu’utiliser des tabulations est une aberration ? Que les tabs sont le plaisir mesquin de comptables de l’octet comme Richard ou d’illuminés prétendant que ASCII code 9 aurait une valeur sémantique ? Notons enfin que les partisans de la tabulation, à l’image de Richard, cachent souvent des personnalités excessivement normatives :
« Les tabs font 8 caractères. Elles ne sont PAS ajustables. Elles ne l’ont jamais été, ne le seront jamais. Quiconque pense que les tabs peuvent faire autre chose que 8 caractères est juste dans l’erreur. Pourtant simple. »
— Linus Torvalds, 19 Jan 2001.
En tout cas, si votre nouvelle conquête code, enquérez-vous de ses pratiques de formatage dès le début de la relation, cela vous évitera de possibles déconvenues plus tard.
Spaces, Tabs and Forbidden Love
Ever heard of a breakup caused by indentation? She’s a space cadet, he’s a tabsolutist. Could such a piddling detail spell the end of a relationship? That was the storyline of last Sunday’s episode of Silicon Valley, broadcast on HBO right after Game of Thrones.
Tabulation Separation
Richard, the series’ main protagonist, waited until the third season to finally consider romance – we assume that until then, the Pied Piper crew were too busy coding algorithms to take any interest in anything else, girls included.
Richard walks into a bar and meets Winnie, a lovely young lady who is too good to be true: she codes, studied at M.I.T., works for Facebook, and has a GitHub account. But the lovebirds are not a match made in heaven: while Richard is a space evader, Winnie is a tabominator. As the pair nestle on the couch with their laptops, courting coding, all hell breaks loose: Winnie conspicuously uses the space key to indent her code. She feels Richard oozing disapproval:
— Your roommates were right, you really hate spaces.
— No, no, no. I don’t, it’s not hate, hate’s a strong word. Um, truth be told, I do have a slight preference for tabs. But that’s only because I’m anal and because I prefer … precision. Well, not to pick a fight here, but if you really care about precision, why would you use spaces?
Winnie is a pragmatist:
— Once it goes through the compiler, it’s the same thing. Right?
— Yeah. Yeah, technically yes. I guess, I just… I just don’t understand why you—anyone would use spaces over tabs. Like, if it’s all the same, why not just use tabs?
— Because it could look different on other people’s computers.
— Tabs create smaller file sizes, all right? I run a compression company, trust me, I’ve devoted my life to minimalizing file sizes. It’s what I do. I mean, I do not get why anyone would use spaces over tabs. I mean, why not just use Vim over Emacs? (CHUCKLES)
— I do use Vim over Emac.
— Oh, God, help us! Okay, uh … you know what? I just… I don’t think this is going to work. I’m so sorry. Uh, I mean like, what, we’re going to bring kids into this world with that over their heads? That’s not really fair to them, don’t you think?
— Kids? We haven’t even slept together.
— And guess what, it’s never going to happen now, because there is no way I’m going to be with someone who uses spaces over tabs.
An edifice months in the building, laid asunder in just a few ruinous seconds! The Gods were smiling benignly upon him, the muses were tuning their lyres, but lo! what ill-fated words escaped his mouth? Tabs over spaces… you just can’t take that kind of stuff back.
A battle to the death… and beyond
Code indentation is first and foremost a question of presentation, save for a few rare languages, such as Python, that use indentations made up of spaces to replace curly brackets.
Most of the time, indenting is optional and has no bearing on the proper functioning of the program. It is above all a visual aid to make it easier to read and debug code. Spaces or tabs: six of one and half a dozen of the other. But as polarizing as Mac vs. PC, Pepsi vs. Coke, Xbox vs. PlayStation, and of course Vim vs. Emacs.
If spaces guarantee consistency from one machine to the other, while tabs are more economical, is it really necessary to get all worked up over an individual preference? YES! The codiverse agrees on this at least!
If tabbers make a temporary alliance of convenience with spacers, it’s to defeat their common enemy: the “mixers”, who freely pepper their code with BOTH. And even they will show a united front against the lowest of the low: the double-crossing NON-INDENTERS.
This emotionally charged disagreement goes ballistic when passive-agressive types, while reviewing code, treasonously insert tabs in space-indented code, or vice-versa. The message is loud and clear: “F.U.” True, modern coding tools allow you to reformat, clean and tidy code according to your preferences, but that doesn’t change the fact that the unspeakable churl violated and sullied the unalloyed perfection of your work. He’s out to get you.
Another toxic personality is the “formatting nazi”. He owns the truth. He decides what is good or bad, right or wrong, good or evil, pure or impure. He decrees not just indentation style, but every last detail of coding such as naming variables. He is to programming what “grammar nazis” are to language. Sure, we’re all for more readable, consistent code, but there is a time and a way to do things.
Getting back to Richard’s case for precision, even that is arguable, since tabs can be rendered by a variable number of spaces, depending on the platform, the software or even preferences. In other words, tabs are not consistent. Further, they can cause problems when code is pasted into word-processing software such as MS Word, for example when producing documentation. In this case, tabs are no longer made up of a set number of spaces, but are set at an arbitary, variable distance from the left margin.
In fact it is no longer necessary to hit the space bar four times to get four spaces, since modern development environments (“Integrated Development Environment”, IDE) allow you to set your tabs at a predetermined number of spaces (3 or 4, for example). Winnie seemed to be unaware of this, unless she was just trying to get Richard’s goat, or to test his (narrow) limits.
“Choose tabs, choose spaces, choose whatever layout conventions make sense to you and your team. It doesn’t actually matter which coding styles you pick. What does matter is that you, and everyone else on your team, sticks with those conventions and uses them consistently. That said, only a moron would use tabs to format their code.”
— Jeff Atwood.
Who can argue with that… but isn’t it obvious that tabs are an aberration? That they are a source of solitary titillation of octet counters like Richard or of screwballs who insist that ASCII code 9 has semantic value? It is interesting to note that tabocrats such as Richard are often control freaks:
“Tabs are 8 characters. They are NOT adjustable. Never have been, never will be. Anybody who thinks tabs are anything but 8 chars apart is just wrong. It’s that simple.”
— Linus Torvalds, 19 Jan 2001.
Whatever your proclivity, if your latest conquest codes, do make discreet enquiries about their formatting orientation sometime between your first and second dates; you don’t want to find out when a baby is on the way.