- Retour sur un parcours de programmation de 25 ans commencé à l’université, avec un regard rétrospectif davantage centré sur les personnes, les relations et l’expérience que sur la technologie elle-même
- Dix minutes passées à découvrir l’affichage du code source HTML dans une salle informatique universitaire ont marqué le point de départ d’un long cheminement vers la création et la maintenance d’un site web personnel
- Une petite expérimentation consistant à sauter vers le vecteur de réinitialisation du processeur 8086 pour redémarrer le système a profondément marqué chez un camarade une manière d’apprendre fondée sur la curiosité
- Entre débogage de spaghetti code, échec très concret d’animations sur décodeur, et excellent classement en compétition CTF, les essais, erreurs et progrès se sont enchaînés
- Avec le temps, la capacité à résoudre des problèmes n’apparaît plus comme un talent, mais comme le résultat de l’expérience ; et ce qui reste au final, ce sont l’expertise, l’éthique et la manière de traiter les autres
Les débuts du web : voir le code source (Viewing the Source)
- Juste après son entrée à l’université en 2001, en naviguant sur le web en début de soirée dans une salle informatique, il tape
susam.com dans la barre d’adresse et découvre véritablement le web
- Un étudiant plus âgé, qu’il observait par-dessus l’épaule, ouvre le menu View > Source d’Internet Explorer et lui explique qu’un site web n’est en réalité qu’un texte écrit en HTML
- Il ouvre Notepad et saisit directement un HTML simple comme
<BODY><FONT COLOR="RED">HELLO</FONT></BODY>, puis montre comment cela s’affiche dans le navigateur
- À l’époque, la balise
FONT était largement utilisée, et il était courant d’écrire les balises HTML en majuscules
- Il montre rapidement comment changer la taille et la couleur de la police, centrer du contenu ou modifier la couleur de fond, pour expliquer le fonctionnement du web
- L’explication n’a duré qu’une dizaine de minutes, mais le World Wide Web a soudain semblé moins mystérieux et bien plus fascinant
- Une fois sa démonstration terminée, l’étudiant plus âgé ne lui rend pas sa place et continue simplement à utiliser le poste ; faute de sièges disponibles, il doit rentrer au dortoir
- Le domaine
susam.com était déjà utilisé par une entreprise liée à la cuisine turque, ce qui empêchait de l’enregistrer ; il choisit donc plus tard un domaine en .net
- Cette courte rencontre devient le point de départ d’un long parcours de création et de maintenance d’un site web personnel
Le vecteur de réinitialisation (The Reset Vector)
- Souvenir de l’époque universitaire, alors qu’il écrivait dans une salle informatique un programme de contrôle d’ascenseur en assembleur sur une machine MS-DOS basée sur Intel 8086
- Il se rappelle qu’en cours, on lui a appris qu’après une réinitialisation du 8086, CS:IP est positionné à FFFF:0000
- Curieux de voir ce qui se passerait en sautant à cette adresse dans
DEBUG.EXE, il essaie lui-même
- Juste après l’exécution de la commande
C:\>DEBUG -G =FFFF:0000, le système redémarre immédiatement
- Un camarade, major de promotion à chaque semestre, observe la scène avec stupéfaction et lui demande comment il a eu l’idée de tenter cela
- Une semaine plus tard, il vient au dortoir et lui confie que, même s’il est toujours premier, il n’a jamais eu cette curiosité qui pousse à se souvenir d’un petit fait et à le tester soi-même
- Il annonce alors qu’il ne cherchera plus à être major, et qu’il étudiera désormais en explorant, en expérimentant et en prenant plaisir à apprendre
- Il continuera ensuite à obtenir d’excellents résultats, sans toutefois redevenir premier
- Une seule expérience consistant à sauter vers le point d’entrée de réinitialisation du processeur devient ainsi, pour quelqu’un, le déclencheur d’un passage d’une logique de compétition à une logique d’exploration
L’attaque de l’homme du milieu et le premier poste d’ingénierie (Man in the Middle)
- Après l’université, dans son premier emploi, il est affecté à l’équipe de support technique d’un produit d’e-banking, avec pour mission d’exécuter un installateur afin de déployer un composant spécifique
- L’installateur, écrit en Python, reposait sur des hypothèses fragiles concernant l’environnement cible et échouait fréquemment ; dès la première semaine, il le stabilise et rédige un guide utilisateur étape par étape
- Le guide utilisateur est encore mieux accueilli que les améliorations de code
- Il se sent limité par ce travail de support répétitif et demande à plusieurs reprises à changer d’équipe pour faire du développement plus poussé
- Il finit par se voir proposer un entretien avec l’équipe Archie (architecture), située dans une autre ville
- L’équipe Archie est responsable du framework web et des composants d’architecture centraux qui soutiennent l’ensemble du produit d’e-banking
- Le routage d’API, l’authentification et l’autorisation, la gestion des cookies, etc., y sont implémentés en interne avec Java Servlet et JSP
- La structure date d’avant l’arrivée de frameworks open source comme Spring ou Django
- Comme il s’agit d’un environnement bancaire, des tests de sécurité stricts et des audits réguliers sont indispensables
- Lors de l’entretien téléphonique de 2006, il répond aux questions de sécurité sur l’injection SQL ou la prévention du XSS, mais admet ne pas connaître le terme MITM (attaque de l’homme du milieu)
- L’intervieweur lui explique : « Étudiez à fond la PKI et le MITM. Nous allons implémenter une fonction de signature numérique dans un produit bancaire d’entreprise. »
- Durant les semaines suivantes, il étudie intensivement des RFC, l’infrastructure à clé publique (PKI) et des documents sur les standards de cryptographie à clé publique
- Au début, cela lui paraît difficile et intimidant, mais avec le temps, il y voit un système à la fois intuitif et raffiné
- Environ un mois après son déménagement dans la nouvelle ville, il finalise la fonctionnalité de signature numérique à l’aide de la bibliothèque open source Bouncy Castle
- Il continue ensuite à développer plusieurs parties essentielles du produit, acquérant l’expérience de voir son code intégré dans un système mature utilisé par des centaines de banques et des millions d’utilisateurs
- Son manager était un mentor remarquable, et son soutien a longtemps constitué une base de confiance en soi
- Près de 20 ans plus tard, le produit est toujours en service et, en ouvrant parfois les outils de développement du navigateur comme simple client, il retrouve des traces du code qu’il avait écrit à l’époque
Spaghetti code (Spaghetti Code)
- Vers 2007-2008, il participe à un travail de preuve de concept (PoC) pour développer des widgets destinés à des décodeurs OpenTV
- Alors qu’il écrit du code dans un environnement C extrêmement réduit, un problème survient : le widget plante de manière intermittente
- À cause d’une logique trop enchevêtrée et d’opérations sur pointeurs menées sans discipline, son code devient un spaghetti code difficile à comprendre, même pour lui
- Il remet le code sous forme de tarball à l’architecte, qui dirige aussi cette équipe de quatre personnes
- Là où lui n’avait pas réussi à résoudre le problème pendant des heures, l’architecte identifie précisément en à peine 5 minutes un bug de pointeur dans un fichier donné
- Une fois cette ligne corrigée, le plantage disparaît immédiatement
- Cette expérience lui fait prendre conscience que, même s’il se croyait déjà assez bon, il lui restait encore beaucoup de chemin à parcourir pour devenir un bon développeur logiciel
- Après plusieurs années de progression, il estime aujourd’hui être capable de gérer la complexité logicielle à un niveau sans commune mesure avec celui de l’époque
Widgets TV animés (Animated Television Widgets)
- Dans un autre projet de la même période, il développe des widgets pour une plateforme de décodeur basée sur Java ME (Micro Edition)
- Le projet est mené dans une structure à trois parties prenantes
- Son entreprise : rôle de fournisseur logiciel
- Un grand opérateur télécom : propriétaire de la marque du service de télévision DTH
- Le fabricant du décodeur : fournisseur du matériel et de la plateforme
- L’opérateur demande s’il est possible d’ajouter aux widgets des effets d’animation comme des glissements en entrée et en sortie
- Lors d’une réunion avec les partenaires, le fabricant du décodeur affirme que le boîtier ne prend pas en charge les animations et que c’est impossible
- Il estime que, si le widget peut être dessiné, il doit aussi être possible de l’animer en redessinant son contenu à des positions légèrement différentes
- En appliquant ce principe, il crée une démo fonctionnelle dans l’émulateur
- Lors de la réunion suivante, quand la démo est présentée, le fabricant réagit vivement et exige l’arrêt immédiat des travaux
- Cela contredit en effet sa position officielle selon laquelle la chose était impossible
- Un représentant de l’opérateur intervient en disant : « Vous affirmiez que c’était impossible, et eux sont en train de le faire » ; il reproche vivement au fabricant de ne pas connaître les performances de son propre produit
- Lors des tests sur le matériel réel, l’animation, fluide dans l’émulateur, apparaît à l’écran du téléviseur avec des saccades très nettes
- Pendant plusieurs semaines, ils tentent d’ajuster la fréquence d’image, de modifier la mise en tampon et d’optimiser la boucle de rendu
- Les limites de performance du matériel embarqué se révèlent insuffisantes pour supporter la charge de calcul et de rendu
- Finalement, l’opérateur conclut qu’une animation médiocre vaut moins qu’aucune animation, et abandonne entièrement la fonctionnalité
- En fin de compte, l’évaluation du fabricant du décodeur s’avère pragmatiquement correcte
De bonnes bénédictions (Good Blessings)
- En 2009, après environ un an chez RSA Security, il cherche un travail plus intellectuel, davantage centré sur les mathématiques et les algorithmes
- Dr. Burt Kaliski, scientifique en chef de RSA Laboratories, lui propose personnellement un entretien pour discuter de son orientation de carrière
- Sur la base de ces conseils, il rejoint une nouvelle équipe, dans laquelle il restera six ans
- Développement d’un générateur de parseurs, spécification et implémentation de langages formels
- Développement d’un moteur d’indexation et de requête pour une base de données à l’échelle du pétaoctet
- Il y apprend presque chaque jour quelque chose de nouveau et traverse la période la plus réjouissante de sa carrière
- Des années plus tard, réalisant que ce bref entretien a changé la trajectoire de sa carrière, il envoie un e-mail de remerciement
- La réponse du Dr Kaliski contient notamment cette idée
- Son objectif est d’encourager les personnes en pleine progression, tout comme d’autres ont investi dans sa propre carrière
- Transmettre les bonnes bénédictions d’une génération à l’autre
Le tableau des scores CTF (The CTF Scoreboard)
- En 2019, il n’est plus un jeune ingénieur débutant dans la vingtaine, mais un staff engineer confirmé, avec plusieurs années d’expérience dans le développement de systèmes bas niveau de réseau et de base de données en C/C++
- Sa carrière entre alors dans une nouvelle phase, orientée vers la direction de développements de microservices en Go et Python
- La transition se fait assez naturellement, car il utilisait déjà Python et Go dans des projets personnels
- À l’occasion du mois d’octobre consacré à la sensibilisation à la cybersécurité, l’entreprise organise une compétition CTF (Capture the Flag)
- Elle est composée de divers puzzles techniques : injection SQL, chiffrement faible, reverse engineering binaire, exploitation de dépassement de pile, etc.
- Malgré son appréhension vis-à-vis des problèmes compétitifs et chronométrés, il participe, et en environ 8 heures, résout près de 90 % des épreuves pour prendre la première place
- Pendant la compétition, des collègues passent régulièrement le voir, suivent sa progression et s’étonnent de ses performances, au point qu’il devient un sujet de conversation au bureau
- Il surprend par hasard une conversation entre deux jeunes collègues ingénieurs qu’il respectait beaucoup
- Tandis que l’un saluait sa performance, l’autre répondait : « C’est normal, ça fait plus de dix ans qu’il fait du C »
- Plus jeune, ce type de résolution de problèmes aurait été vu comme de « l’intelligence » ; désormais, il constate qu’on l’interprète naturellement comme le résultat de l’expérience
- Même si les accomplissements techniques sont attribués à l’expérience, il souhaite à l’avenir laisser une bonne impression surtout par son expertise, son éthique et sa manière de traiter ses collègues
Regard d’ensemble
- Ce parcours de 25 ans dans l’informatique suit un fil allant de la curiosité vers l’expérimentation, la collaboration, la gratitude et la réflexion
- Plus que les réussites techniques visibles, ce sont les relations humaines et les apprentissages noués en chemin qui demeurent le plus longtemps
- Les expériences de chaque période se relient entre elles et s’accumulent dans une progression continue et une attitude humble
- Au fond, l’essentiel d’une carrière dans le développement logiciel réside moins dans le code lui-même que dans l’histoire des personnes avec qui l’on a appris et travaillé
Aucun commentaire pour le moment.