La Programmation Informatique


Aujourd’hui, je vais vous parler de programmation, ou plus exactement, je vais expliquer pourquoi je n’aborde pas la programmation sur ce blog.

Récemment, un journaliste de Pix’n Love m’a demandé d’écrire un article sur mon expérience dans le jeu vidéo.
J’ai été programmeur de jeux vidéos de 1985 à 2003, et j’ai travaillé dans plus d’une dizaine de sociétés. Dans l’article que j’ai écrit, je décris les 28 plus grandes leçons humaines que j’ai retenues, je ferai probablement un post sur ces 28 leçons après la parution du magazine.

Mon histoire personnelle

Quand j’étais petit, je m’ennuyais profondément à l’école. Je n’avais pas de challenge intellectuel intéressant à résoudre (j’étais probablement un enfant surdoué).

A 14 ans, j’ai découvert par hasard les mathématiques. Non, pas à l’école, mais en lisant un livre de Martin Gardner, je crois qu’il s’agit de Jeux Mathématiques. Enfin, j’avais des challenges intéressants à résoudre, des problèmes dont la solution n’était pas connue !

La première conséquence de cette découverte fût que je suis devenu le meilleur de ma classe en mathématiques en moins d’un mois.
La seconde conséquence qui a été importante pour mon futur est que j’avais décidé de devenir mathématicien.
Mais en fait, ce qui m’intéressait dans les mathématiques, c’était l’algèbre, les nombres et les équations. La géométrie et les statistiques m’intéressaient beaucoup moins.

Deux ans plus tard, je me suis acheté une calculatrice TI58C (480 pas de programme, et quelques registres de stockage). Je pouvais enfin résoudre certains des problèmes de manière automatisée: le rêve de tout mathématicien !!!
Je me suis mis ensuite à essayer de dépasser les limites de la calculatrice en poussant l’optimisation au maximum.
Un an plus tard, je me suis acheté mon premier ordinateur: l’Oric 1.
48Ko de RAM, 1Mhz, cela explosait les limites de ma pauvre calculatrice.
Après moult efforts, j’ai appris le Basic et le langage assembleur tout seul, sans documentation, et j’ai à nouveau continué à essayer de dépasser les limites de la machine, en poussant l’optimisation et le hardware toujours plus loin.

Mon intérêt grandissant pour l’informatique allait de pair avec mon désintérêt grandissant pour les études, et à la mort de mon père, le dernier lien qui me poussait à continuer mes études ayant disparu, je me suis lancé à corps perdu dans l’informatique. Personne ne peut imaginer à quel point cette expression « à corps perdu » prend ici tout son sens, je pouvais enfin ne plus me consacrer qu’à mon esprit, mon corps n’existait plus du tout pour moi.

A cette époque, j’avais changé mon objectif de « devenir mathématicien » à « devenir le meilleur programmeur au monde » (il faut toujours viser haut).
Je me souviens que j’avais acheté très cher les 3 volumes de « The Art of Computer Programming » de Donald Knuth, et j’acquérais tout seul les bases algorithmiques.

J’ai programmé 2 jeux avant d’être embauché en 1985 par Titus Software, qui était la pire boîte que j’ai jamais connue, avec un encadrement méprisant les êtres humains. Titus était le parangon du harcèlement moral. Curieusement, cela m’a forcé à réfléchir sur ce qui motivait les gens, et comment travailler harmonieusement en groupe (bien avant qu’on ne parle d’agilité !).
J’ai quitté Titus en 1988, et je vous raconterai plus en détails mes péripéties par la suite.

En 1986, j’ai fait mon premier jeu en C, et 10 ans plus tard, mon premier jeu en C++, avec beaucoup de jeux en assembleur et sur consoles entre les deux.

Au fur et à mesure des années, les jeux demandaient de plus en plus de monde. Au début, j’étais seul (avec un graphiste), puis dans de petites équipes (<20), puis dans des grosses équipes (>40).

Si vous voulez avoir une idée du travail de programmeur dans le jeu vidéo, je vous conseille de lire cet article qui décrit bien la mentalité dans les années 90:
http://www.codeofhonor.com/blog/tough-times-on-the-road-to-starcraft

J’ai arrêté le jeu vidéo en 2003, lors de la 3ème crise du jeu vidéo en France, et après avoir réalisé que j’avais fait le tour en tant que programmeur, parce qu’à l’époque, aider les équipes à s’organiser n’était pas vraiment ma préoccupation.

Je vais dresser quelques constats de toute mon expérience informatique.

L’optimisation des ressources

J’ai programmé des jeux vidéos parce que faire un jeu avec des contraintes est un challenge passionnant. Il fallait à la fois écrire un jeu et faire tenir ce jeu dans les limites de la machine, tout en poussant la machine dans ses derniers retranchements.

Dans l’informatique professionnelle, il n’y a pas du tout ce genre de challenge, à part peut-être dans des sociétés comme Google, où chaque micro-seconde compte. J’ai essuyé des moqueries de mes collègues de travail quand je parle d’optimisation, tellement l’informatique est devenue une sorte de construction de Légo (avec des grosses pièces bien génériques et bien lentes).

Laissez les équipes s’auto-organiser !

Dans le jeu vidéo, les équipes sont assez petites pour être auto-organisées. Les seuls gros échecs que j’ai connus sont quand les équipes deviennent énormes (plus de 10 programmeurs). L’échec n’en est que plus retentissant.
Les meilleures équipes sont composées de programmeurs expérimentés auto-organisés.

En fait, le problème apparaît dès qu’on introduit une hiérarchie, ce qui entraîne un ralentissement de tout le processus de développement. Scrum essaye timidement d’enlever la hiérarchie, mais à force de vouloir plaire à tout le monde, Scrum ne plait plus à personne.
Certaines entreprises ont poussé l’auto-gestion encore plus loin.
Un ami qui travaille à Valve m’a expliqué comment on y travaille: si quelqu’un veut monter un projet, il peut former sa propre équipe en interne.

J’aime beaucoup l’approche du manifeste: http://programming-motherfucker.com/

Le manque de créativité de l’industrie informatique

Malheureusement, les projets informatiques sont de plus en plus construits avec des briques maîtrisées de logiciel, même dans le jeu vidéo.
On essaye de rester dans les limites de ce que l’on sait faire.
Le désir de réduire le risque logiciel à zéro fait qu’il ne reste plus vraiment quelque chose d’intéressant à programmer.
L’agilité fonctionne très bien sur des projets non créatifs, mais que se passe-t-il sur des projets hautement originaux et à risque ?

10000 heures pour devenir un expert

Il faut à peu près 10 ans de travail pour devenir un expert en programmation.
J’adore l’article de Peter Norvig: http://norvig.com/21-days.html

J’ai dû faire mes 10000 heures en 5-6 ans, parce que je ne faisais que ça à l’époque, j’étais un no-life.

Un point qui manque dans l’article est que programmer un projet n’apporte pas énormément de connaissances !
Dans un jeu, il y a assez peu de choses à apprendre.
Il faut vraiment développer sa culture générale informatique pour devenir excellent.
J’ai programmé des dizaines de projets tous différents, afin d’avoir le plus de culture possible. Dans mon cas: un calcul distribué sur Internet, plusieurs concours de programmations, des démos, des algorithmes de compression, des programmes de remplissage de mots croisés, etc…
Plus on fait de choses variées, et plus on est capable de résoudre des problèmes variés.

L’autre point qui manque est que programmer est presque devenu une activité sociale.

La programmation, une activité sociale ?

J’ai grandi avec l’idée que la programmation était une activité solitaire, où chacun faisait sa part du travail.
Cette activité devient sociale lorsque le projet requiert la coordination d’une équipe.
L’agilité essaye d’apporter une réponse au découpage des tâches.
Le pair-programming est d’un grand secours quand un programmeur inexpérimenté doit intégrer un nouveau projet et monter en compétence.
Mais le pair-programming n’est pas une solution quand l’équipe est expérimentée, à moins que le projet ne soit super chiant à programmer.

Introversion, extraversion et ambiversion

J’ai basculé il y a 4 ans de l’introversion à l’ambiversion.

Un introverti est quelqu’un qui est principalement intéressé par sa propre vie mentale. Tous les très bons programmeurs que j’ai croisés sont introvertis.
Un extraverti est quelqu’un qui est plutôt intéressé par les interactions avec les autres, mais il s’ennuie facilement.
Un ambiverti est quelqu’un qui a les 2 traits: il est confortable dans ses interactions avec les autres (comme un extraverti), mais apprécie d’être seul (comme un introverti).
Pour plus de détails, consultez http://en.wikipedia.org/wiki/Extraversion_and_introversion
Des statistiques montrent que 66% des gens sont introvertis, le reste se répartit équitablement entre extravertis et ambivertis.
Mes statistiques personnelles montrent que 100% des programmeurs sont introvertis, et le focus de l’agilité sur les rapports humains les met mal à l’aise.

L’éloge de la qualité

Dans l’article de Norvig, un point important est que le programmeur doit se focaliser sur la qualité, ce qui correspond bien à la démarche agile.
Malheureusement, dans la majorité des projets, la focalisation est sur le résultat, ce qui fait que les gens font n’importe quoi pour que ça tienne. J’ai vu d’innombrables horreurs à la fois techniques et humaines (souvent simultanées, il suffit de passer une nuit blanche sur un programme pour constater le résultat lamentable).
La qualité, ce n’est pas simplement écrire des tests, c’est aussi résoudre des problèmes de manière créative.

Les langages informatiques

Je vois beaucoup de programmeurs essayer d’utiliser toutes les fonctionnalités d’un langage même quand c’est inutile, juste pour flatter leur égo (oui, je faisais ça aussi, j’aimais montrer que je savais faire mieux que les autres !).
Pour moi, tout langage informatique est une langue, et il faut essayer de s’exprimer avec les mots les plus simples possibles.
Je parlerai dans un prochain article de la fascination de la complexité.
Bien évidemment, il faut toujours s’adapter. Je suis passé du Basic à l’assembleur, puis au C, puis au C++, puis au VB.Net et au C#.
J’ai appris à faire des tests unitaires avec NUnit et fonctionnels avec Selenium. J’ai dû me mettre au Perl et à Java récemment.

Le statut du Programmeur Senior

Cela va faire 30 ans que je programme.
Comme je l’ai expliqué précédemment, je suis persuadé que les meilleures équipes sont auto-organisées et sans hiérarchie.
Quelle peut-être l’évolution pour un programmeur dans ces conditions ?
J’avoue que je n’ai pas encore de réponse à cette question.

Conclusion

L’informatique a beaucoup changé en 30 ans.

La performance était obligatoire quand j’ai commencé et a progressivement disparu, au profit de la livraison du projet et d’une dégradation de la qualité du travail et l’augmentation du stress chez les programmeurs.

Nous sommes vraiment dans une culture d’instantanéité: comment résoudre mon problème le plus rapidement possible ?
Comment réduire le Time-to-Market ? Très simplement: en utilisant un langage qui résoudra tous les problèmes auxquels je peux être confronté !

Je pense que j’ai passé plus de 5000 heures à expérimenter la psychologie sur moi-même. La psychologie me semble très proche de la programmation, et son champ d’application est bien plus vaste que l’informatique.
Enfin, la psychologie des informaticiens me semble un domaine passionnant, mais trop limité pour les psychologues, qui ne peuvent pas comprendre la mentalité des informaticiens.

Publicités

3 réflexions sur “La Programmation Informatique

  1. Excellent comme d’habitude. Moi aussi après avoir touché un peu à la psychologie, c’est un sujet que je trouve passionnant et qui peut apporter beaucoup au développement de logiciels (du code au management). Perso, je suis plus parti sur le design qui reprend énormément de notion de psychologie 🙂

  2. Salut Jean-Charles !
    Je me reconnais bien dans cet article 🙂 Mais j’ai laissé tomber la programmation « professionnelle » quand on a commencer à parler en gigaoctets de ram, de Hz… L’optimisation n’était plus dans l’air du temps. J’ai donc développé à mon compte. On m’appelait le compteur de cycles 😉 Arf nostalgie !

  3. Pingback: La Programmation Informatique | Psychologie Agile | Méthodes Agiles et User Experience, Agile-UX | Scoop.it

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s