Logo Spiria

Amours, espaces et tabulations

3 juin 2016.

Photo HBO

Amours ruinés

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. 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 GitHub

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 ?

Photo HBO

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.

Tabs, spaces, both

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.

Troll Alert

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.

Dr. Ruth

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.

Not sure