Le désenchantement d'un développeur qui voudrait être fier de son travail
mer, 26/09/2018 - 11:45
A lire absolument, ce long billet de blog écrit par un développeur qui porte un regard critique et assez désabusé sur son métier. Les constats que porte l'auteur du billet sur les pratiques ou l'état actuel du développement sont plein de vérités (de l'humble avis de votre serviteur). Et même si l'on ne partage pas ses opinions, ce texte a le mérite d'inciter à la réflexion et aussi à bon nombre de remises en question. Voici quelques extraits choisis, mais vraiment le billet, très riche, mérite d'être lu en entier :
Il n’y a qu’en logiciel qu’on accepte qu’un programme tourne à 1 % voire même 0,01 % de ses performances optimales. Tout le monde semble être d’accord avec ça. Les gens sont même souvent fiers de leur niveau d’inefficacité, « Pourquoi s’inquiéter ? Les ordinateurs sont bien assez rapides. » :
[...]
Vous avez probablement déjà entendu ce mantra : « le temps d’un programmeur coûte plus cher que celui d’un ordinateur ». Cela signifie simplement que nous gaspillons les ressources de nos ordinateurs à une échelle sans précédent. Est-ce que vous achèteriez une voiture si elle consommait 100 litres au 100 kilomètres ? Et si c’était 1000 litres au 100 kilomètres ? Avec les ordinateurs, nous faisons ça constamment.
[...]
Regardez autour de vous : nos ordinateurs portables sont mille fois plus puissants que ceux qui ont emmené l’Homme sur la Lune. Et pourtant, les pages web ont du mal à maintenir une vitesse de défilement constante de 60 fps sur la dernière version du MacBook Pro.
[...]
Les éditeurs de texte modernes ont plus de latence qu’un Emacs vieux de 42 ans. Des éditeurs de texte ! Qu’est-ce qui peut être plus simple ? À chaque appui d’une touche de clavier, tout ce qu’il faut faire c’est mettre à jour une petite zone rectangulaire, et les éditeurs de textes modernes ne peuvent pas le faire en 16 ms. C’est beaucoup. VRAIMENT.
[...]
De façon générale, nous ne faisons pas des logiciels plus rapides avec plus de fonctionnalités. Ce sont les composants informatiques qui eux sont de plus en plus rapides et qui exécutent des logiciels de plus en plus lents, toujours avec les mêmes fonctionnalités. Tout ça fonctionne bien moins vite que ce qu’il serait possible de faire. Vous ne vous êtes jamais demandé pourquoi votre téléphone a besoin de 30 à 60 secondes pour démarrer ? Pourquoi ne pourrait-il pas démarrer en disons, une seconde ?
[...]
Le système Android sans aucune application installée pèse quasiment 6 Go. Prenez juste une seconde pour vous rendre compte à quel point ce chiffre est énorme.
[...]
Windows 95 pesait 30 Mo. Aujourd’hui, on a des pages web plus lourdes que ça ! Windows 10 pèse 4 Go, ce qui est 133 fois plus lourd. Est-ce qu’il en est 133 fois supérieur pour autant ? Je veux dire, fonctionnellement parlant, c’est la même chose. Oui, il y a Cortana, mais je ne pense pas qu’elle pèse 3970 Mo. Et même si on laisse Windows de côté, est-ce qu’Android est 150 % meilleur ?
[...]
L’application clavier de Google consomme constamment 150 Mo de mémoire. Est-ce qu’une application qui dessine 30 caractères sur un écran est réellement cinq fois plus complexe que Windows 95 tout entier ? L’application Google, qui est juste la recherche web empaquetée pèse 350 Mo !
[...]
Un téléphone Android de 16 Go était parfait il y a 3 ans. Aujourd’hui, avec Android 8.1, c’est à peine utilisable étant donné que chaque application est devenue au moins deux fois plus lourde pour aucune raison apparente. Il n’y a pas de fonctionnalités supplémentaires. Elles ne sont pas plus rapides, ni plus optimisées. Elles n’ont pas l’air différentes. Elles sont juste… plus lourdes ?
[...]
L’iPhone 4S est sorti avec iOS 5, mais peut à peine exécuter iOS 9. Pas parce qu’iOS 9 est à ce point supérieur, c’est quasiment la même chose. Mais vu que les nouveaux composants matériels sont plus rapides, ils rendent les logiciels plus lents. Ne vous inquiétez pas, vous avez droit aux toutes nouvelles fonctionnalités comme… lancer les mêmes applications avec la même vitesse ! Ça me dépasse.
[...]
Les programmeurs ne comprennent plus rien à ce qu’ils font au stade où on en est. Ils ne le veulent pas non plus. Nous lançons simplement des merdes qui tiennent à peine la route, en espérant que ça fonctionne et on appelle ça « la sagesse des startups ».
[...]
Je veux être fier de mon travail. Je veux fournir des choses qui fonctionnent, qui sont stables. Pour faire ça, il faut que l’on comprenne ce que nous faisons, à l’entrée et à la sortie, et ça ne peut pas se faire dans un système fourre-tout avec autant de surcouches.
[...]
En résumé, tout est juste un tas de code qui fonctionne à peine, ajouté par dessus du code qui fonctionnait déjà à peine. Et ça continue de grossir, de prendre de l’ampleur en gagnant en complexité, ce qui diminue les chances que cela change.
Beaucoup de désillusions sur le métier donc, mais au moins une bonne chose, très positive, en ressort : après 42 ans, Emacs rules ! ;-) :-)
Commentaires
Bonjour,
Très intéressant billet et si proche de la réalité de la majorité sur nombre de points.
Avec plus de 20 ans d'expérience dans le développement informatique je me suis aussi posé ce type de question, et j'ai même récemment remis en question le matériel que j'utilise. A quoi cela sert d'être passé en 1971 d'un processeur contenant 2300 transistors à 1 750 000 000en 2015 ur un Core i3 ?
Suis-je le seul à être choqué par cette évolution qui au final apporte quoi de plus ? Et si on met en réseau plusieur PC avec autant de transistor, n'est-on pas capable de faire quelque chose de mieux que ce que l'on fait actuellement et qui prend autant de temps. En local j'ai récemment lancé une requête Mysql analysant 300 x 70000 exceptions, soit 21 000 000 cas différents et cela a pris environ 4h. On aurait pu allouer toutes ces données à chaque transistor et cela aurait pris 1s. Certes les transistors n'ont que 3 états, il en faut plusieurs pour permettre des opérations logiques ou enregistrer des octets, mais tout de même je trouve que c'est un comble.
Est-ce la couche logicielle et système d'exploitation qui ralenti le tout ? Pour sûr, j'en serais presque à avoir envie de réinventer la roue et de repartir de 0 en créant un ordinateur de A à Z qui même avec beaucoup moins de transistors serait 1000x plus performant, cela viendra peut-être un jour, en attendant je fait comme tous les développeurs, je perds un temps fou à analyser différentes couches logicielles empilées, il parait que cela s'apelle des Framework, pour pouvoir faire des développements sans être sûr que tout fonctionne correctement car je ne vais pas réécrire les différents Frameworks et que je suis incapable de détecter si un bug vient du Framework, alors je croise les doigts ou essaye de contourner les problèmes, mais il y a de quoi s'arracher les cheveux. Il faudra vraiment qu'un jour je programme mon propre langage de programmation et/ou système d'exploitation. Bon courage à tous ce type de développeur que nous somme devenu et qui ne maîtrise absolument pas ce qu'il fait dans son intégralité.
Pas besoin de créer un nouveau langage, Forth et l'Assembleur sont faits pour cela. Sur le principe ça devrait suffire. Donc, pourquoi ne sont-ils plus utilisés ? Mais il est vrai que je ne vois aucun besoin aujourd'hui d'un ordinateur plus gros qu'un Raspberry Pi pour l'écrasante majorité des utilisateurs, joueurs exclus.
Bonjour,
La pire des inepties de ces 20 dernières années sont les langages interprêtés : PHP et Javascript pour ne citer que ceux-là. Je me souviens il y a plus de 30 ans, alors que je programmais (tant bien que mal) en Basic sur mon C64, je suis tombé sur un cross-compilo Basic (fonctionnant sur PC.. 8086), je pouvais enfin compiler mon code. Quelle surprise ! Je n'avais presque plus besoin de coder en assembleur les parties critiques. Ensuite je me suis mis au C, langage compilé lui aussi avec lequel j'ai fait nombres de jeux vidéo, en 3D temps réél, à 50fps avec 64Mo de RAM, 20Mhz et aucune carte graphique 3D.
Et puis est arrivé le Web... et le retour en arrière des langages interprêtés... :(
Faut pas s'étonner ! :)
Autant je peux être d'accord sur le grossissement incontrôlé des applications, sur la taille de plus en plus aberrantes des systèmes, autant je suis beaucoup plus réservé sur l’utilisation des langages interprétés.
C’est une réelle évolution qui permet de ne s’intéresser qu’au fonctionnel sans se préoccuper de la « tuyauterie » qui devrait être gérée par le compilateur s’il était vraiment intelligent.
D’autant que les langages interprétés modernes sont maintenant compilés à la volée, et que l’efficacité du code produit ne cesse de se rapprocher du code produit par les langages non interprétés.
Par ailleurs prenons par exemple le C#. La puissance d’expression et l’élégance de la syntaxe est incomparable par rapport à celle du C++.
Les tentatives du C++ pour singer par exemple les expressions lambda du C# sont risibles tellement la syntaxe est complexe et aberrantes!
Ce qu’il faut c’est
- Améliorer les compilateurs des langages interprétés,
- Améliorer le passage entre code produit par des langages comme le C++ et les langages interprétés
Car c’est comme dans tout il ne faut pas être intégriste et il y a des choses pour lesquelles le C++ est bien plus efficace que le C# et il ne sert à rien de convertir ce code à tout pris en C# (ou Java ou JavaScript).
Mais il y a aussi des choses pour lesquelles il est bien plus facile de programmer en C# qu’en C++ et pour lesquels la différence de performance sera négligeable.