L'alignement de l'esprit importe plus que celui du code
🔗 publié par Olivier Poncet le 01/08/2020 à 12:00
Dans mon billet précédent, j’ai dressé un constat très personnel concernant l’évolution du marché de l’ingénierie informatique durant ces 25 dernières années, sur ce qu’il me semble être aujourd’hui et j’ai abordé le difficile sujet de mon burn-out. Dans ce nouveau billet, je vous propose de développer un sujet qui me tient à cœur et que j’ai effleuré dans le précédent article. Ce sujet est celui de notre « obsolescence ».
Homo-obsoletus
Alors que je vivais ma vie à cent à l’heure, un grain de sable fit irruption et s’installa dans les engrenages pourtant bien huilés de mon existence. C’est alors que je subis un gros bug dans le code source de ma vie, et ce bug fut un burn-out.
Contre toute attente, il eut certains effets bénéfiques, dont ceux de me forcer à lever le pied, de me recentrer sur ce qui me semble important et surtout il me fit me poser cette excellente question :
« Suis-je obsolète » ?
Tandis que je me posai cette question anodine – pour autant qu’elle puisse l’être – je me rendis compte qu’elle n’apportait pas de réponse évidente.
Après de longues minutes de réflexion, je finis par la généraliser à l’ensemble de notre métier :
« Sommes-nous obsolètes » ?
Puis me vint cette réflexion que la notion d’obsolescence nous la prêtons plutôt aux objets de notre quotidien, aux appareils ou aux outils, c’est à dire aux choses inanimées, mais plus rarement – voire jamais – aux êtres humains. N’est-ce pas étrange dans une société où l’être humain est souvent réduit à une simple ressource, une unité d’œuvre, dans les grilles de plus en plus complexes des tableurs des tops managers ?
À défaut de parler « d’obsolescence humaine », nous utilisons plus couramment les adjectifs « dépassé » ou « has been ». Ces termes nous les employons volontiers pour exprimer le fait que nous ne sommes plus au niveau attendu, ou pire encore … que nous ne sommes plus nécessaires pour accomplir certaines tâches ou certaines missions.
Plus je réfléchissais à cette notion « d’obsolescence humaine », plus cette dissonance entre ce que nous désirons et ce que nous vivons devenait évidente. Nous souhaitons ardemment que la technologie nous aide et nous soulage dans de nombreux domaines et dans le même temps nous désirons garder notre place dans le grand échiquier de la société. N’est-ce pas contradictoire ? N’est-ce pas vouloir tout et son contraire ?
L’Histoire, celle avec un grand « H », nous a maintes fois montré qu’il est vain de lutter contre le progrès. De nombreux métiers disparus en sont la preuve, citons par exemple les « allumeurs de réverbères », les « réveilleurs », les « poinçonneurs », etc. Bientôt les « informaticiens » ?
Considérant ainsi l’accélération technologique de ces dernières années, je me pris à imaginer que, peut-être, nous allions entrer dans une nouvelle ère : celle de l’« Homo Obsoletus » …
Obsolescence (non) programmée
Dans le monde de l’ingénierie logicielle moderne, cette notion « d’obsolescence humaine » nous guette. Nos outils sont devenus plus performants et plus puissants qu’ils ne l’ont jamais été et d’un simple clic sur un bouton d’un « magiciel », il est désormais possible de créer un composant, un logiciel, voire un serveur ou une infrastructure complète, reléguant ainsi au placard les précieuses compétences de personnes dont c’était la spécialité.
Bien que non programmée dans le temps, cette « obsolescence humaine » est pourtant bien programmée dans le code de nos logiciels. Chaque jour qui passe amène son lot de nouvelles innovations et sur une période de temps suffisamment longue cela ne nous acheminerait-il pas inexorablement vers notre propre obsolescence ?
L’être humain étant par nature faillible, il est probable, en y réfléchissant bien, que d’ici quelques années la quasi-totalité de certaines tâches automatisables puissent être réalisées par des logiciels dits intelligents et donc remplacer les humains. Est-ce malheureux ? C’est le progrès dit-on ! Mais une question intéressante que nous devrions nous poser est : cela n’entraîne-t-il pas une perte généralisée de maîtrise et/ou de connaissances concernant des sujets élémentaires ? C’est un risque …
Dans certains domaines, la technologie supplante et remplace déjà l’être humain. Prenons comme exemple l’industrie, où il est inutile de vouloir rivaliser avec un robot d’une chaîne d’assemblage : il est plus rapide, plus efficace et inépuisable. Peut-être est-ce une évolution logique et inéluctable. D’ailleurs la technologie n’est-elle pas faite pour délivrer l’être humain des tâches répétitives et pénibles ? Il est envisageable que dans un futur peut-être pas si éloigné, certains métiers de l’ingénierie logicielle puissent être automatisés. Si cela se produit, ces métiers devront donc soit se réinventer, soit disparaître.
Si l’on pousse la réflexion encore plus loin, peut-on considérer que l’activité même de développement logiciel est hautement automatisable ? Certains acteurs semblent le suggérer au travers de ce que l’on appelle désormais le « no-code », c’est à dire un assemblage par tout un chacun et le plus souvent de façon graphique de briques élémentaires, génériques et prêtes à l’emploi. Le métier même de développeur pourrait donc changer de signification en quelques années : il y aurait et ceux qui conçoivent les briques et ceux qui les assemblent. Deux typologies de développeurs, deux salles, deux ambiances. En poussant encore un peu plus loin le bouchon nous pourrions aussi imaginer qu’une « Intelligence Artificielle » se chargerait de réaliser tout ou partie de ces tâches, tout simplement en le lui demandant. Nous serions alors définitivement devenus obsolètes.
Je dois bien l’avouer, cette vision du futur ne me fait pas particulièrement rêver. Elle me semble même plutôt cauchemardesque.
Code Factory
De nombreuses entreprises profitent ou tentent de profiter des récentes évolutions technologiques pour en faire un levier dans le but d’optimiser leur voilure et d’augmenter bien entendu leur productivité. Il est d’ailleurs une idée déjà bien ancrée dans la tête de certains fondateurs / managers / clients (choisissez qui vous voudrez) qu’avec l’aide des outils modernes, développer du logiciel est une activité simple, rapide et constituée uniquement de gestes répétitifs comme le ferait un ouvrier d’usine sur une chaîne d’assemblage. C’est malheureusement un peu le côté pervers et dévalorisant de la puissance des outils que nous avons à notre disposition, car désormais tout semble si facile pour un profane … Mais que dit l’adage déjà ? Ah oui ! « un grand pouvoir implique de grandes responsabilités ». Ces outils, si puissants soient-ils, doivent avant tout être compris et maîtrisés. Mis entre les mains de personnes inexpérimentées, c’est le drame assuré.
Souvent, j’entends le cri du « grand Yaka », ce fameux animal légendaire : « yaka coder rapidement telle ou telle chose », « yaka appuyer sur un bouton », « yaka yaka » … Vous imagineriez-vous expliquer à la NASA que pour envoyer des gens sur la Lune ou sur la planète Mars « yaka envoyer une fusée dans l’espace » ? Ce n’est pas parce qu’envoyer une fusée dans l’espace est devenu chose courante que ce n’en n’est pas pour autant une activité extrêmement complexe.
Concernant le développement logiciel, c’est sensiblement la même problématique. Certaines personnes ont cette illusion que concevoir des logiciels et produire du code sont des choses aisées. Elles se trompent ! Et lourdement ! C’est en réalité un travail requérant beaucoup de créativité, de technicité et d’expérience. Même si les outils sont là pour nous aider et nous permettre d’être plus « productifs » au quotidien, ce n’est définitivement pas une activité qui peut être réalisée à la chaîne comme dans une usine.
J’en conviens, nous avons repris le vocabulaire et les codes de l’industrie traditionnelle en parlant d’automatisation, d’industrialisation et d’usine logicielle, mais l’activité en elle même reste bien intellectuelle et créative. C’est définitivement de l’ingénierie. Chaque logiciel que nous concevons est différent d’un autre. Chaque ligne de code de chaque logiciel a sa raison d’être et est unique dans son contexte. Tout cela permet de répondre à des problématiques spécifiques. Les outils, quant à eux, nous permettent simplement de devenir des développeurs augmentés mais ils ne nous remplacent pas. Du moins pas encore.
Donc parlez-moi d’usine logicielle, mais ne me parlez surtout pas d’usine à produire du logiciel. Ce sont deux choses complètement différentes. Nous ne sommes pas une main d’œuvre appuyant simplement sur des boutons. Nous concevons et nous créons. Comme en musique ou en peinture, nous sommes nombreux à chercher une certaine forme de beauté et d’harmonie. Un code bien conçu, bien organisé et bien aligné représente la quintessence de notre activité.
Singularity
En à peine 250 ans, nous sommes passés de la révolution industrielle à ce que nous appelons de façon grandiloquente la révolution du numérique. Lorsque je prends un peu de recul et que je regarde l’évolution technologique de ces 25 dernières années, je ne peux que constater que nous vivons déjà dans le futur et que nous sommes à l’aube d’une nouvelle révolution : celle de l’Intelligence Artificielle et de la robotique (au sens large du terme) pour tous. Ce tournant de notre évolution nous le vivons et nous nous y adaptons sans nécessairement en avoir pleinement conscience.
Connaissez-vous la « fable de la grenouille » ? Eh bien nous sommes la grenouille. Peut-être – et je dis bien peut-être – arrivera-t-il dans quelques années une singularité technologique de telle manière que nous serons dépassés par notre propre création. Alors tout ce que je viens d’évoquer n’aura été que les prémices de notre obsolescence. Cette fiction est-elle du domaine de la science ? Seul l’avenir nous le dira. A ce sujet, je ne peux que vous encourager à aller lire les théories et les ouvrages de Vernor Vinge ou de Raymond Kurzweil.
Quant à moi, je ne suis pas encore prêt à rendre les armes. Je suis peut-être vieux, mais pas obsolète. Notre plus-value en tant qu’ingénieurs et êtres humains n’est pas de « pisser du code » dans tel ou tel langage avec tel ou tel framework, mais bien de comprendre les enjeux pour lesquels nous concevons du logiciel et de les réaliser de façon simple et élégante. Nous nous devons d’être créatifs afin de ne pas simplement copier ce qui existe déjà et de concevoir de nouvelles solutions sur-mesure répondant à des problématiques uniques.
Le mot de la fin
Une fois encore, je n’apporte pas réellement de réponses, mais plutôt des questionnements que chacun d’entre-nous devrait avoir. Depuis quelques temps, ces questions me taraudent et malheureusement je n’ai pas de boule de cristal pour anticiper ce qui se passera dans les prochaines années. A nous de choisir correctement notre voie, celle que nous considérerons comme étant la bonne.
Pour conclure, aligner correctement notre code est important. Mais cela une machine saura toujours le faire. Ce qui importe le plus est d’aligner nos esprits. Nous devons comprendre ce pour quoi nous codons, ce nouveau monde qui s’ouvre à nous et valoriser notre métier grâce à ce qui fait notre force : la créativité.
What else ?
Bien entendu, tout ce que j’aborde dans ce billet est le fruit de réflexions personnelles et ne sont en rien des vérités absolues. J’espère simplement que ces quelques mots vous encourageront à réfléchir à ces sujets de fond.