Vos actions : Créer un document, voir la page générale.

Cultures numériques

Cours de Bachelor 1
Home /

Programming sucks

Composed on the 27th of April in the year 2014, at 12:52 PM. It was Sunday.

Cet article est la traduction d’un article de Peter Welch, en anglais.

Tous mes amis qui doivent soulever quoi que ce soit de plus lourd qu’un PC portable, plus de deux fois par semaine, pour leur boulot, trouvent toujours le moyen de glisser dans une conversation : "Mec (Ça commence toujours par "Mec") , t’as un boulot facile. Je fais des semaines de 4700 heures à creuser un tunnel sous le Mordor avec un tournevis."

Ils ont raison sur un point. Le Mordor ça craint et c’est certainement plus pénible physiquement de creuser un tunnel que de tapoter sur un clavier, à moins que tu ne sois une fourmi. Mais, quel que soit l’argument, sommes nous au moins d’accord sur un point : le stress et la folie sont de mauvaises choses ? Génial ! Bienvenue dans le monde du développement.

Les équipes de développeurs sont faites avec des fous, par des fous

Imagine-toi rejoindre une équipe d’ingénieurs. Tu es tout excité et débordant d’idées, sortant probablement tout juste de l’école, dans un monde où ’tout le monde il est beau, tout le monde il est gentil’. Tu commences par rencontrer Marie, chef de projet pour la construction d’un pont dans une grande métropole.

Marie te présente Fred, après que tu aies passé les quinze contrôles de sécurité installés par David parce que David s’est fait voler son pull dans son bureau une fois et "Plus jamais ça !". Fred ne travaille qu’avec du bois, et tu demandes donc pourquoi il est impliqué. En effet, le pont est censé supporter le trafic d’une heure de pointe ; pleine de voitures ; pleines de gens mortels ; qui veulent traverser un gouffre de 70 mètres au-dessus de rapides. "Ne t’inquiètes pas", dit Marie, Fred va s’occuper des trottoirs. Quels trottoirs !? Et bien, Fred a avancé de bons arguments en faveur des trottoirs et on va en ajouter pour rendre le pont plus joli.

Bien sûr, il faudra construire le pont sans rambarde, parce qu’il y a une règle très stricte instaurée par Philippe, stipulant "pas de rambarde". Philippe n’est pas ingénieur. Personne ne sait vraiment ce qu’il fait, mais en tout cas il a beaucoup de synergie et gère les relations avec la direction, ce qu’aucun des ingénieurs ne veut faire, alors tout le monde le laisse faire ce qu’il veut. Sarah, de son côté, a trouvé de nouvelles techniques de pavage avant-gardistes, et les a toutes intégrées aux plans du pont. Chaque technique implique une construction sous-jacente et des règles de sécurité différentes et il faut donc en tenir compte tout au long de la construction.

Thomas et Harry travaillent ensemble depuis des années, mais se disputent toujours pour savoir s’il faut utiliser le système métrique ou impérial. Du coup, c’est le premier qui dessine qui choisit et il n’y a pas deux plans avec les mêmes unités. Ça se révèle être un tel casse-tête pour les ouvriers chargés d’assembler le tout qu’ils finissent par forcer, marteler et finalement souder tout ce qu’ils peuvent comme ils peuvent.

Pour finir, le pont est conçu comme un pont suspendu mais personne ne sait vraiment comment ça se construit... Alors on a construit la moitié du pont et on a ajouté une pile de support pour être sûr que ça tienne, mais on a laissé les câbles parce qu’ils ont toujours l’air de tenir des choses. On ne sait pas comment, mais tout le monde est à peu près sûr qu’ils sont importants. Une fois les présentations faites, on te demande de donner de nouvelles idées, mais tu n’en a aucune parce que tu es un ingénieur en propulsion aérospatiale et que tu n’y connais rien aux ponts.

Tu voudrais rouler sur ce pont ? Non ! Si d’une manière ou d’une autre, le projet aboutissait, tous les acteurs seraient exécutés. Pourtant, c’est comme ça qu’a été développé chacun des logiciels que tu as pu utiliser : logiciel bancaire, site web et un logiciel utilisé partout pour protéger tes données sur Internet mais qui n’a pas fait son boulot...

Tous les codes sont mauvais

Chaque programmeur, de temps en temps, quand il est seul chez lui, éteint la lumière, prend un verre de whisky, met un fond d’electronica allemande et ouvre un fichier sur son ordinateur. C’est un fichier différent pour chaque développeur. L’un l’a écrit lui-même, un autre l’a trouvé et a su qu’il devait le garder. Ils parcourent les lignes et sont émus par leur beauté. Et puis les larmes deviennent amères lorsqu’ils se souviennent des autres fichiers, dans le reste du monde, et de leur médiocrité.

Ce fichier contient du Beau Code. Ce code a des noms de variables et de fonctions explicites et cohérents. Il est concis. Il ne fait rien de manifestement stupide. Il n’a jamais eu à être publié ou à répondre aux attentes d’une équipe de commerciaux. Il ne fait qu’une seule et unique chose, et il la fait bien. Il a été écrit par une seule personne et jamais modifié par personne d’autre. Il se lit comme de la poésie.

Tous les développeurs commencent par écrire des perles comme celle-ci. Et puis, ils apprennent le vendredi qu’ils ont 600 perles à écrire pour mardi. Alors ils trichent par-ci par-là, copient d’autres perles et essayent de les agglomérer. Des fois, ils doivent demander de l’aide à un collègue qui pourrit tout. Et puis on agrège toutes ces perles pour donner une chose indescriptible que l’on présente comme un Picasso parce que personne ne veut voir la pisse de chat qui suintent de tous les cotés. La semaine suivante, tout le monde va tenter de boucher ces failles pour éviter que le Picasso ne s’effondre.

" les standards sont aussi rares que les licornes " Il y a une théorie qui dit que l’on peut corriger ça en suivant des standards, sauf qu’il y a plus de standards qu’il n’y a de choses que les ordinateurs peuvent faire. En plus, tous ces standards sont indifféremment améliorés ou contournés selon les préférences des personnes qui les utilisent. Il existe dans le monde au moins une douzaine de façons différentes de faire la même chose et il n’y a pas deux codes qui le font de la même manière. Les premières semaines de n’importe quel boulot consistent uniquement à comprendre comment un programme fonctionne même si tu connais chaque langage, framework et standard utilisé, parce que les standards sont aussi rares que les licornes.

Il y aura toujours une part d’ombre

Quand j’étais petit, j’avais une penderie dans ma chambre qui était bizarrement agencée. Au premier abord elle semblait normale, et puis lorsque tu y allais pour faire des trucs qu’on fait dans une penderie, tu découvrais que le mur sur la droite s’ouvrait sur une alcôve avec une petite étagère. En levant les yeux tu voyais que le mur au fond de l’alcôve s’ouvrait encore sur un petit espace exigu complètement vide où il n’y avait jamais aucune lumière. Tu savais tout de suite que cet endroit était la cachette d’un monstre affamé que tu maintenais à distance toutes les nuits avec une veilleuse et des peluches.

Voilà ce que c’est que d’apprendre à développer. Tu connais des outils utiles, et puis tu regardes autour et il y en a plein d’autres qui te révèlent toute l’horreur qui a toujours été cachée sous ton lit.

Disons que tu sois un développeur web moyen. Tu connais une douzaine de langages de programmation, une tonne de bibliothèques, de standards, de protocoles, etc. Tu dois tout de même en apprendre un nouveau chaque semaine et vérifier si toutes les choses que tu connais n’ont pas été mises à jour, être sûr qu’elles fonctionnent encore ensemble et que personne n’a corrigé l’un des bugs que tu exploites pour faire un truc que tu trouvais super malin un week-end où tu étais bourré. Mais tout marche bien, c’est cool, et là, c’est le drame.

"C’est quoi ce bordel !?", tu cherches d’où ça peut venir. Tu découvres qu’un jour, un idiot a utilisé 1/0 comme raccourci pour Infinity dans son code parce qu’un autre idiot avait décidé que 1/0 était égal à l’infini. Puis un mec, un peu moins idiot, a déclaré que c’était idiot, ce qui aurait dû être fait dès le départ. Du coup, il a décidé d’être un connard et de rendre cette erreur fatale dans son nouveau compilateur et de ne prévenir personne ; parce que c’est un connard. Maintenant toutes tes perles sentent la pisse et tu ne sais même pas pourquoi.

Tu es un expert dans toutes ces technologies, et heureusement, car cette expertise va te permettre de trouver ce qui ne va pas en seulement six heures, au lieu de perdre ton boulot. "Il [le développeur] sait que les ordinateurs sont des enfants schizophrènes avec des maladies auto-immunes et [...] il ne les frappent pas lorsqu’ils se sentent mal." Mais ça te fait un petit truc en plus dans les millions de petits trucs que tu dois connaître parce qu’il y un paquet de programmes qui ont été écrits par des cons et des idiots.

Et ça, c’est juste dans ta spécialité, qui ne représente qu’une toute petite fraction de l’informatique dont tu ne connaitras jamais tout. Pas une seule personne vivante ne sait comment marche chacun des éléments de ton MacBook. Pourquoi est-ce qu’on te dit de l’éteindre et de le redémarrer ? Parce qu’on n’a pas la moindre idée de ce qui ne va pas, et que c’est beaucoup plus facile de mettre un ordinateur dans le coma et de laisser tous ses petits docteurs internes faire le diagnostic. Si l’ordinateur d’un développeur marche mieux que celui d’un quidam, c’est juste parce qu’il sait que les ordinateurs sont des enfants schizophrènes avec des maladies auto-immunes et qu’il ne les frappent pas lorsqu’ils se sentent mal.

Le plus gros du travail est fait sur Internet et c’est un sacré bordel

Tu te souviens de ce que je disais à propos des fous et du mauvais code ? Internet c’est la même chose mais en un milliard de fois pire. Des sites qui ne sont que des caddies virtuels avec trois pauvres pages dynamiques sont maintenus par toute une équipe 24 heures sur 24, parce qu’il y a toujours quelque chose qui ne marche pas pour quelqu’un quelque part. À l’heure où tu lis ces lignes, quelqu’un qui bosse chez Facebook reçoit des dizaines de milliers de messages d’erreurs qu’il essaye frénétiquement de corriger avant que toute cette mascarade ne s’effondre... Il y a une équipe dans les bureaux de Google qui n’a pas dormi depuis trois jours. Il y a quelque part une ingénieure base de données entourée de cannettes de Red Bull dont le mari pense qu’elle est morte. Et si ces gens s’arrêtaient, le monde s’effondrerait. La plupart des gens ne savent même pas ce que font les administrateurs systèmes, mais crois moi, s’ils prenaient tous leur pause repas en même temps, ils n’auraient même pas le temps d’arriver au resto que tu serais déjà à court de munitions pour protéger tes réserves de bandes de zombies errants.

On ne peut pas redémarrer Internet. Des milliards de dollars dépendent d’une toile tremblante pleine d’arrangements tacites et de codes "ça ira pour l’instant" avec des commentaires, dans le code source, du genre "À FAIRE : CORRIGER ÇA, C’EST SUPER URGENT" écrits il y a dix ans. Sans parler des légions de gens qui s’attaquent à différentes parties d’Internet pour espionner, pour de l’argent ou simplement parce qu’ils s’ennuient. Tu as déjà entendu parler de 4chan ? 4chan pourrait détruire ta vie privée et professionnelle s’ils décidaient de te prendre en grippe pour un après-midi. Mais on n’y fait même pas attention parce qu’une bombe de plus ne change rien dans un hiver nucléaire.

Sur Internet, on peut dire, "Tu sais, ça marche de temps en temps si tu utilises la bonne technologie", et PAF ! Ça fait partie d’Internet. N’importe qui avec quelques centaines de dollars et un ordinateur peut créer un petit morceau d’Internet. Il peut y mettre un petit bout de code et attacher ce morceau à un tas d’autres morceaux et faire empirer encore un peu le tout. Même les bons codeurs ne prennent pas la peine d’apprendre la totalité des spécifications écrites par des organisations créées pour implémenter des licornes. Au final, tout le monde passe la moitié de son temps à gérer le fait que rien ne correspond à rien, que rien n’a aucun sens ou que ça pourrait planter à tout moment et on essaye juste de cacher la misère en espérant que personne n’y fasse attention.

Voici les règles secrètes d’Internet : cinq minutes après avoir ouvert un navigateur pour la première fois, un enfant en Russie a ton numéro de sécurité sociale. T’es tu inscrit à quoi que ce soit ? Un ordinateur de la NSA peut te localiser à tout moment pour le reste de ta vie. Tu as envoyé un email ? Ton adresse vient de s’afficher sur un écran au Nigeria.

Tout ceci n’est pas vrai parce qu’on s’en fiche et qu’on ne fait rien pour l’empêcher, c’est vrai parce que tout est bugué, parce qu’il n’y a pas de bons codes et que tout le monde essaye juste de garder le tout en état de fonctionnement. Si tu es un ingénieur web, ton boulot consiste juste à espérer que la dernière chose que tu aies écrite soit assez robuste pour survivre quelques heures, le temps de manger et de faire une sieste.

Nous ne naissons pas fous, nous le devenons

ERREUR : Tentative d'analyse HTML avec des expressions régulières;
         le système à retourné Cthulhu.

C’est marrant, hein ? Non ? Qu’est-ce que tu penses de cette conversation :

- Ça s’appelle arrayReverse ?
- s/camel/_/
- Merci !

La réponse a-t-elle été utile ? Avec le camel ? Ça te semble être une réponse appropriée ? Non ? Bien. Tu n’as pas passé assez de temps dans ta vie à lire du code pour commencer à parler en code. L’esprit humain n’est pas particulièrement doué pour faire de la logique basique et maintenant, il existe toute une filière professionnelle qui consiste à ne faire que de la logique très, très compliquée. De longues suites de conditions et d’exigences abstraites doivent être étudiées pour découvrir des choses comme une virgule manquante. À faire ce genre de choses toute la journée, tu finis dans un état d’aphasie totale où tu regardes le visage de tes interlocuteurs pendant qu’ils parlent sans savoir s’ils ont fini parce qu’il n’y a pas de point-virgule. Tu t’immerges toi-même dans un monde totalement absurde où tout ce qui importe c’est une petite série de nombres qui se transforme en un labyrinthe géant de symboles dans lequel une autre série de nombre se transforme en une image de chaton.

L’impact néfaste sur le cerveau est démontré par les langages de programmation que les gens utilisent. Voici un programme :

#include <iostream>

int main( int argc, char** argv ) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}

Ce programme fait exactement la même chose que celui-ci :

`r```````````.H.e.l.l.o. .w.o.r.l.di

Et que celui-ci :

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

Ou que celui-là :

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.

Une fois, quelqu’un a même créé un langage permettant d’écrire ça :

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-|

D’après l’auteur, ce programme c’est : "deux lignes de code qui analysent deux lignes de commentaires inclues dans le code pour lire les nombres Maya représentant les différents caractères ASCII qui écrivent en ASCII-art le titre du magazine incliné à 90 degrés."

Ce programme a gagné un concours. Évidemment. Tu veux vivre dans un monde comme ça ? Non. C’est un monde où tu peux fumer deux paquets par jour et où personne ne le remarque. "Bien sûr qu’il fume deux paquets par jour, mets-toi à sa place." Où tous les matins, chaque développeur, avant qu’il ne soit complètement réveillé, voit le monde et chacune de ses relations comme un morceau de code et trouve ça tout à fait normal, comme si les voyages sous acide au réveil étaient quelque chose qui arrive à tout le monde. C’est un monde où des gens refusent une partie de jambes en l’air pour écrire un langage de programmation pour orangs-outangs. Un monde où tous les développeurs forcent leur cerveau à faire des choses que le cerveau n’a jamais été censé faire, du mieux qu’ils peuvent, dix à quinze heures par jours, cinq à sept jours par semaine, devenant tous les jours un peu plus fous que la veille.

</coup de gueule>

Alors oui, on ne me demande pas d’être capable de soulever des objets de plus de 25 kilos. J’ai échangé ça contre l’opportunité de couper les poils pubiens de Satan, pendant qu’il mange l’intérieur de mon crâne, pour qu’Internet continue de fonctionner quelques jours de plus.

Par Stéphane Noël, 12 septembre 2017