Qu’importe le langage, pourvu qu’on ait l’ivresse

J’aimerais sortir de mes articles techniques habituels pour aborder un sujet qui me tient particulièrement à cœur: être développeur n’a rien à voir avec le fait de maitriser un langage particulier. J’aimerais donc revenir sur le cœur même du développement, sur l’importance de connaitre plusieurs langages de programmation et surtout sur l’importance de respecter chaque communauté de développeurs.

Je sors donc de ma réserve car j’en ai plus que marre d’assister à ces guerres stériles autour des langages de programmation, à cette volonté de certains de se faire passer pour des stars en dénigrant le langage du voisin. Je rencontre aussi trop souvent des développeurs enfermés dans leurs convictions et leurs habitudes ce qui risque de les mener à leur perte.

3615 MaLife: du BASIC à JavaScript en passant par C#

Cela fait maintenant un petit moment que j’abime les touches des claviers pour écrire du code. La passion a commencé jeune chez moi avec la découverte du langage BASIC sur un Atari 800XL. J’avais alors 8 ans. Pour une raison qui m’est toujours inconnue, mon VRP de père s’était mis en tête d’acheter ce fameux ordinateur Atari avec un pack pour apprendre le BASIC. Cela doit être son côté geek vietnamien qui ressortait déjà. Il n’a finalement jamais osé se lancer (le côté VRP a du malheureusement reprendre le dessus).

998443_10151772568444648_513990634_n

La facture de mon 800XL: 3500 Francs en 1984!

L’ordinateur a alors pris la poussière quelque temps avant que je n’ose me lancer. J’étais émerveillé par ce bidule. Il avait un lecteur de cassette. Le cours de basic commençait par une piste audio qui me parlait (l’ordinateur me parle ?!? C’est IN-CRO-YA-BLE!) suivi par des bruits bizarres indiquant le chargement d’un programme. J’ai alors appris seul à faire des INPUT, des PRINT, des GOTO et mon premier programme se moquait de mon frère lorsqu’il entrait son nom tout en me vénérant lorsque j’entrais le mien. Je sentais déjà que le pouvoir allait appartenir aux développeurs! Mon frère déprimé suite à cette 1ère expérience a ensuite totalement foiré sa carrière scolaire en faisant prépa-HEC/EDHEC et en devenant commercial. Je m’en sens parfois coupable. La vie est faite d’erreurs que l’on ne peut parfois corriger.

Quelques années plus tard, en 1988, en revendant mes jouets, ma TV et mon chien, je m’achète mon 1er PC (un 8086 avec 20 Mo de disque dur en MFM et une belle carte CGA). Je passe cette fois à Quick Basic! De temps en temps, je code en BASIC sur les CPC6128 des copains et je pense être trop fort en copiant/collant les pages de DATA des magazines de programmation pour faire de petits jeux (si je retrouve le mec qui faisait les erreurs d’impression dans les PEEK & POKE DATA, je lui pète les dents). J’ai continué comme cela quelques années en tentant aussi d’apprendre un peu le C jusqu’à mon arrivée en école d’ingénieur à Orsay sur le campus de Paris XI (l’école s’appelle la FIIFO, cela ne s’invente pas !).

Comme beaucoup de jeunes que je rencontre aujourd’hui, j’étais alors persuadé d’être à l’époque à une méga star de la programmation. Rapidement, je m’aperçus en fait que je n’y connaissais rien. Je tombe alors de haut en découvrant la vie au près des mes profs. Je découvre alors le langage ADA que j’ai adoré, suivi par du C, du C++ et du JAVA arrosées de quelques touches de SQLCOBOL et de SmallTalk (j’ai détesté les 2). Je découvre surtout l’algorithmie et les bonnes manières de développer, de travailler en équipe sur un projet. J’apprends à calculer la complexité d’un algorithme, à parcourir un graph, à gérer une base de données, à prouver mon code, que l’IA c’est du flan par rapport à ce que je voyais dans les films et que OpenGL, c’est cool mais je suis décidemment trop mauvais en math pour rivaliser avec certains de mes camarades (et je ne vous parle pas du traitement du signal avec les transformées de Fourrier). Bref, je m’aperçois que le langage, tout le monde s’en fout, ce n’est pas ça le problème. Malheureusement, certains “développeurs” n’arrive jamais à ce stade. Le cœur même du développement ne se trouve pas dans la syntaxe et les possibilités du langage mais bien dans toute la réflexion qui se trouve en amont. Rare furent les fois où le langage en lui-même m’ait empêché d’exprimer ma créativité. La plateforme oui, le langage non.

La suite de mes apprentissages linguistiques se passe ensuite chez Microsoft où je rejoins l’équipe de support Visual Basic. On était alors en “concurrence” avec l’équipe de support “C++”. Déjà à l’époque, c’était n’importe quoi. J’avoue que je comprenais pas toujours pourquoi. En VB, j’arrivais à faire des applis fonctionnelles, avec une jolie interface le tout connectée à une base de données en 1h, là où l’autre qui se la racontait passait des jours à se battre avec ATL/MFC et les apis Win32 pour faire la même chose en plus moche. Mais apparemment, faire soi-même son malloc(), c’était la classe. Il y avait donc une tentative d’établir une hiérarchie des langages. Ceux qui faisaient du C++ étaient apparemment les meilleurs, ceux qui faisait du VB était loin derrière et ceux qui faisaient du VBScript n’avaient pas le droit d’adresser la parole aux autres. Moi, j’aimais bien tous les langages et je prenais du plaisir dans chacun d’entre eux. J’avais bien évidemment des affinités plus ou moins grandes avec certains mais je n’en rejetais aucun. Mon 1er contact avec le monde de l’entreprise se soldait pas une découverte étrange: certains langages seraient réservés à une forme d’élite.

Est arrivé ensuite .NET chez nous. C’est à ce moment là que j’ai compris le fond du problème. .NET offre un environnement managé et une abstraction de la plateforme. Ce qui compte, c’est donc d’apprendre à se servir de .NET plus que du langage en lui-même. 2 langages principaux étaient proposés: C# et VB.NET. Réunion de crise pour savoir quelle équipe allait prendre C# et qui allait prendre VB.NET. Réunion absurde par nature. Pourtant, les développeurs C++ faisaient pression pour nous empêcher de pouvoir faire du C#. Après des semaines d’investigation, j’ai fini par obtenir des aveux. Certains avaient peur de perdre leur job en voyant les petits jeunots fraichement sortis de l’école récupérer tous les nouveaux jouets. Leur arrogance et leur dénigrement n’avait qu’une seule origine: la peur. Peur de l’inconnu, peur du changement, peur de tout devoir remettre en cause. Afin de rester dans leur zone de confort, ils préféraient mystifier le management sur leur haute valeur ajoutée en tant que développeur C++. Bref, rien de technique là-dedans, que de l’humain.

Aujourd’hui, je fais beaucoup de JavaScript et j’y prends beaucoup de plaisir. Je garde une affection particulière pour C# qui reste une merveille d’architecture et j’ai récemment découvert TypeScript que je trouve bien positionné. Mais j’ai toujours essayé de ne pas m’enfermer dans un langage et toujours essayé d’éviter de m’encrouter dans ma zone de confort.

Les langages: leurs forces, leurs faiblesses mais surtout leurs contextes

Malgré tout, on peut facilement voir que les langages ont des forces sur d’autres et également leurs faiblesses. C# 5 est par exemple extrêmement bien conçu pour gérer l’asynchronisme avec ses mots clés async/wait et le côté dynamique de JavaScript le rend aussi puissant que dangereux lorsqu’il est mis dans de mauvaises mains. Mais cela veut-il dire que l’un est meilleur que l’autre? Je ne pense pas. Tout est question de contexte: que souhaitez-vous faire et sur quel(les) plateforme(s)?

Je vais ainsi tenter de me lancer dans un exercice dangereux: établir un parallèle avec les langues parlées par les différents peuples et nos langages de programmation préférés.

Les différentes langues ont été inventés pour discuter entre les membres d’une même communauté. D’ailleurs, les langues ont tendance à s’enrichir au contact d’autres communautés. Malgré tout, chaque langue a ses particularités et il est plus facile d’exprimer certaines choses dans certaines langues plutôt que dans d’autres. Mais qui serait assez arrogant pour prétendre qu’une langue serait meilleure que les autres?

J’ai par exemple été marqué au début de ma carrière chez Microsoft sur la langue japonaise. Nous avions des enquêtes de satisfaction créées par des américains à 4 niveau: pas tout satisfait, pas satisfait, satisfait et très satisfait. Les américains ont tendance à être binaire: ils sont soient super content (“Eh! I’m super excited about your work!”), soit carrément pas content (“Guy, you really suck.”). Les français ne seront jamais totalement satisfaits par nature. Les japonais ont alors posé un problème plus important à notre système de mesures. Il n’expriment pas vraiment l’insatisfaction. Ils ont plutôt des couleurs différentes de satisfaction. Bref, ils ne rentraient pas dans les cases fabriquées par les américains et on était alors incapables de comparer nos scorecards respectives (un drame chez nous). Le formulaire n’est pas adapté à leur langue et leur culture.

Plus récemment, j’écoutais un linguiste s’exprimer sur France Info. Il indiquait que certaines langues africaines ne possèdent pas de mots pour désigner la couleur. Ils sont incapables de nommer les différentes couleurs d’un arc en ciel. J’en ai trouvé confirmation ici: Qualification des couleurs en Afrique. En contrepartie, ces mêmes langues semblent plus adaptées à décrire certains animaux. Cela m’a vraiment intrigué! Pourtant, il confirmait que toutes les langues étaient capables d’exprimer les choses de bases.

Mais alors quel est le rapport avec la choucroute me direz-vous? Le contexte.

On voit bien qu’en fonction du contexte, certaines langues sont plus adaptées que d’autres. C’est pareil pour la programmation.

Tu veux écrire une application qui va tourner sur le plus grand nombre de plateformes avec un code unique? JavaScript a de fortes chances de répondre à tes besoins. Tu veux tirer le maximum de jus du matériel pour un jeu vidéo par exemple? C++ est souvent le meilleur candidat. Pourtant, tu veux rentabiliser au maximum ton jeu sur le plus grand nombre de plateformes à moindre couts avec des performances correctes? C# et Unity est plus adapté. Tu veux écrire un driver? Va falloir le faire en C. Bref, il n’existe pas une solution universelle répondant à tous les besoins et toutes les plateformes. Seul compte tes talents de développeurs et ta capacité à t’adapter.

Pourtant, combien de fois ai-je entendu des choses absurdes comme “JavaScript, c’est tout pourri”, “JAVA, c’est un truc d’architecte”, “PHP, c’est tout naze” ? Malheureusement, de trop nombreuses fois et souvent au delà de la blague potache du développeur, les gens deviennent souvent sérieux et convaincus.

De manière amusante, il semblerait que plus un langage soit populaire et accessible, plus il devient facilement dénigré par cette petite frange des développeurs se prenant pour des stars.

Cela me rappelle d’ailleurs comment les films à succès sont dénigrés par nos élites. Un film d’action ou comique a beau faire des millions d’entrées et générer un maximum de cash, rien n’y fait. Seul compte les films serbo-croates racontant comment un petit enfant chinois arrive à fabriquer un bol en bois à la seule force de son ongle, le tout en noir & blanc sous-titré en mandarin. Même si le film ne fait que 2 entrées, on ne se pose pas la question de savoir s’il est bon ou pas. Le réalisateur est un génie. Par contre, “Bienvenue chez les Ch’tis” restera mauvais malgré les millions de spectateurs. Etrange non?

C’est pareil pour JavaScript et PHP. C’est sûr que l’on en trouve un paquet de chèvres faisant du JavaScript et du PHP, qui copient/collent du code depuis un site web sans rien entraver à ce qu’ils font. Il est ainsi fortement probable que le ratio nombre de chèvres/nombre total de développeurs soit plus élevé chez les développeurs JS et PHP que chez les développeurs C++ ou JAVA. Cela veut-il dire pour autant que les langages soient mauvais? Bien sûr que non. J’en ai vu de belles chèvres en C++ et en C#, le poil brillant et persuadées d’être au top. Inversement, j’ai rencontré des développeurs hors du commun dans la communauté JavaScript. Qui oserait dire que Mr Doob est une chèvre avec le boulot qu’il a fait sur Three.JS ou que Mr Catuhe n’est pas un développeur de talents avec son moteur 3D Babylon.JS?

Cependant, JavaScript et PHP ont le tord d’être des langages accessibles et utilisés par la masse. Hors de question pour un développeur top gun d’être considéré comme l’équivalent de ce développeur populaire. Pourtant, s’il passait outre ses aprioris, il découvrirait que Douglas Crockford a écrit un livre JavaScript: The Good Parts expliquant comment écrire du code propre et maintenable en JavaScript. Il verrait alors que les patterns ont évolué. Il verrait aussi que nous sommes à l’aube d’ECMAScript 6 qui va résoudre de nombreux problèmes inhérents à JavaScript. S’il ne se réveille pas assez tôt, il va louper des trains comme celui-ci et s’isoler du futur qui pourrait s’offrir à lui. C’est ainsi que j’ai connu des développeurs s’accrochant tellement à leurs acquis qu’ils ont fini par être en dehors du système et perdre leur job. La parade du “je suis une star car je code en XXX” avait fonctionné quelques années jusqu’au jour où plus personne ne codait en XXX. C’est légitime d’avoir peur de perdre son job. Pourtant, la meilleure façon de garder son poste de développeur, c’est de se remettre fréquemment en question. Pas de jouer l’obscurantisme.

Le point commun de tous les développeurs de talents: leur ouverture d’esprit et leur insatiable curiosité.

Le point commun de tous les développeurs dénigrant les autres: leur peur du changement et leur manque de culture des autres environnements.

Faites du web, pas la guerre!

2476_Photo_B211C277-45CB-63FC-00D1-C37B9D9589EE-2_0CF5B70B

Soyons honnête. Je fais le barbot mais je suis moi-même passé par ces phases de dénigrement et d’enfermement sur mes acquis. Le déclic a eu lieu à partir du moment où je suis sorti du monde Microsoft pour voir ce qui se tramait chez les copains.

Je suis alors allé voir des passionnés du Web dans des conférences comme Paris Web, ParisJS, Kiwi Party, Sud Web, j’en passe et des meilleures. J’étais le seul à utiliser Visual Studio et avoir un PC sous Windows. J’étais un extra-terrestre mais au moins je les faisais rire. J’ai fait des tonnes de soirées Meetup. J’ai discuté avec des gens qui venaient d’horizon totalement différents: des passionnés de CSS, d’accessibilité, de Python, de Ruby, utilisant Sublime Text, Notepad++ ou Eclipse et utilisant étrangement GIT plutôt que TFS. J’ai alors découvert que nous utilisions tous des outils et des méthodes différentes mais que nous étions liés par une passion commune: créer. Un développeur adore créer. Alors passé les aprioris négatifs entre nous, je pense que nous avons beaucoup appris les uns des autres. Cela fait un bien fou et permet vraiment de s’ouvrir l’esprit. Cela permet aussi de mieux comprendre les forces et faiblesses de chacune des plateformes et de chacun des environnements de développement.

Je cite le cas du monde du web car je trouve que c’est la communauté qui m’a le plus impressionnée ces dernières années comme ayant la bonne approche. Les gens sont souvent plus ouverts et plus à même de se remettre en cause fréquemment. Le web va tellement vite que vous ne pouvez pas vous permettre de vous enfermer dans des acquis qui seront caduques quelques mois plus tard. L’esprit de partage est vraiment là aussi. C’était d’autant plus flagrant pour moi que je sortais d’années à avoir fréquenté les développeurs d’applications dites “LOB” chez les grands comptes. Je ne dis pas pour autant que la communauté des développeurs d’entreprise est moins bonne ou moins maline que celle du web. Je me suis vraiment éclaté dans les 2 environnements et le monde du web est loin d’être parfait. Mais j’ai quand même eu l’impression que les développeurs d’entreprise ont plus tendance à avoir plus peur du changement. La conséquence est alors souvent ce même dénigrement d’une nouvelle technologie plutôt que de chercher à la comprendre.

Je ne serais alors que trop vous recommander de sortir de temps en temps, d’aller voir le monde des autres et de vous ouvrir. Faites un Meetup de temps en temps. C’est souvent gratuit. Aller à une conférence sur des sujets qui n’ont rien à voir avec ce que vous faites tous les jours. Ecoutez les arguments des autres et jouez un peu avec leurs technos. Si vous ne voulez pas sortir, testez la techno avec un bon tutoriel en ligne avant de la dénigrer. Vous verrez alors que le langage ne compte pas et que l’on peut prendre du plaisir avec chacun d’entre eux.

Si vous adhérez à cette approche du développement, sachez que nous avons participé à la création du mouvement “Fier d’être Développeur”: http://fierdetredeveloppeur.org/ . Je pense dire sans trop me tromper que les membres fondateurs seront d’accord avec mon discours.

Allez, codez bien et au plaisir de vous voir dans une soirée communautaire.

David

11 thoughts on “Qu’importe le langage, pourvu qu’on ait l’ivresse

  1. Bravo David,

    Mais je crois que chaque langage compte. Ce n’est pas qu’une question d’ouverture d’esprit, c’est une question de contexte. Tous les langages naissent avec un lot de promesses et de motivations. Mais à l’instar d’une boîte à outils, on ne va utiliser un tournevis pour enfoncer un clou (enfin normalement :-)) lorsque Microsoft décide d’écrire WinRT en C++ et de ressortir le modèle COM du placard pour préférer une gestion mémoire orientée refence counter plutôt que d’utiliser un GC, ce n’est sans doute pas une question de mode, mais la conclusion sur l’adéquation entre des contraintes techniques (ARM) et le souhait d’avoir un système véloce (Fast & Fluid). Après, je pense que chacun possède ses préférences technologiques pour des raisons parfois subjectives, mais c’est ce qui fait le charme des humains 🙂

    A bientôt

    Bruno

  2. Merci pour vos retours. 🙂 Je suis totalement d'accord avec toi sur le contexte Bruno. Je n'ai peut-être pas assez insisté sur cette partie. Quand à la partie subjective, comme tu le dis, nous sommes des humains. Elle ne me choque donc pas. Ce que je voulais dénoncer c'est le dénigrement d'un langage de manière totalement subjective. Rien ne t'empêche de vouloir rester sur 1 langage car tu en es fan. Mais cela ne te donne pas le droit de te considérer au dessus des autres pour autant. Merci donc d'avoir ajouté tes précisions. Au passage, tu as vu, j'ai finalement craqué pour mon gamin et je suis dessus plus bas que je ne le pensais pour lui apprendre la programmation. Tu avais raison (en partie! ;-P).

  3. Bon article de fond, très plaisant, bien écrit et auquel je souscris totalement. J'ai été développeur et je suis passé ingénieur système par la suite.Tout ce qui a été dit peut être transposé dans l'opposition Windows vs Linux qui a eu lieu quand Linux est apparu. Opposition qui finit par être dépassée vu qu'aujourd'hui tout se tourne progressivement vers le mode Cloud.

  4. Bonjour,

    A 51 ans (et oui…) je me suis retrouvé dans les différents langages cités et dans ces stupides hiérarchies.

    Néanmoins je ne suis pas du tout d'accord avec le fond de l'article qui semble dire qu'il faut pratiquer plusieurs langages.

    Je suis partisan d'une certaine spécialisation car elle est le gage d'une efficacité optimale. Je m'explique en prenant comme analogie le sport : Si vous pratiquez plusieurs sports, c'est fun. Quelquefois ça peut être complémentaire, quelquefois non ; mais vous expérimentez plusieurs activités et vous vous sentez plus riche. Cependant, vous êtes forcément pas très bon dans toutes vos activités puisque vous n'avez pas le temps d'approfondir, et vos résultats en compétition le montrent. Inversement si vous pratiquez toujours la même activité vous devenez progressivement un des meilleurs éléments de votre club ; vous êtes plus fort, plus rapide, plus expert : vous "sentez" votre activité que vous pratiquez à l'instinct comme si c'était une seconde nature. Certains vous objecterons que vous risquez de vous ennuyez à terme : c'est faux, à moins d'être le champion des champions et de n'avoir plus de challenge, vous aurez toujours des choses à apprendre ; soit sur vous, soit sur votre activité, soit sur votre façon de vous organiser pour progresser davantage.

    Pour le langage, c'est pareil. j'ai l'habitude de dire qu'un langage possède une "philosophie". Quand je connais bien un langage, mes doigts essaient des "trucs" qui doivent marcher parcequ'ils correspondent à la philosophie du langage. Jamais je n'aurai pu faire ça si je n'avais pas développé une epxertise de plusieurs années sur l'activité en question.

    Oui il ne faut pas établir de hiérarchie entre les langages ; comme le dit l'article ça dépend de ce que vous voulez faire. Il serait stupide de dire que le squash est "supérieur' au beach-volley. Ils sont différents. Mais oui il faut pratiquer plusieurs années pour comprendre finement un outil et l'exploiter dans les règles de l'art si on veut faire du bon boulot.

  5. Bon article. Chaque language a sa trousse et comportement .tous permetant d'avoir ce qu' on veut comme finalité.  Ce qui me convain assez, c'est le choix du language que Microsoft a fait poir developper winRt. Du c++ et non avec le fameux c#. cela m'a permis de comprendre assez de choses. On peut etre fanatique d'un language precis mais respecter les autres fai de toi un developpeur "arrivé"

Leave a Reply to fredbeCancel reply