La place des langages
Le métier de développeur. C’est aujourd’hui un métier très prisé. Il y a beaucoup de demandes sur le marché de l’emploi, les conditions de travail sont bonnes tout comme les salaires.
Dans ce contexte, bon nombre de formations sont apparues pour former des développeurs s’appuyant sur le « manque » de profils pour attirer du monde. Elles s’appuient sur les demandes des entreprises qui cherchent des développeurs RoR, React, Angular, Android, PhP, etc.
Elles se sont donc mises à former des profils pour ces technologies. On a vu fleurir un paquet de formations sur quelques mois, de bootcamps et de formations en ligne qui promettent de devenir développeur. Elles promettent qu’en sachant utiliser ces outils, on peut trouver un job rapidement parce que la demande est énorme dans le monde.
Si on regarde les choses simplement, ce n’est pas idiot. Les entreprises ont besoin de développeurs sur la techno machin, et bien, si on forme de gens pour développer avec cette techno, on répond à la demande et tout roule. Sauf que pas de bol, ce n’est pas aussi simple.
Un développeur n’est pas bloqué sur un langage
En fait, cela ne marche que si on considère que les développeurs sont des ressources comme des machines à produire. C’est-à-dire qu’on peut remplacer n’importe quel développeur par un autre utilisant la même techno. Donc si on amène plus de ressources sur le marché les entreprises auront ce qu’elles demandent. Sauf qu’un employé n’est pas une machine et qu’un développeur est bien plus qu’un langage.
En fait, les langages ne sont qu’une infime partie des compétences nécessaires. Pire que ça, les langages ne sont pas des connaisances transposables facilement. Par exemple, une expertise PHP ne sert plus à rien si on se retrouve à devoir travailler sur un projet qui utilise Scala. C’est même pire quand on pense à AngularJs VS Angular2. En revanche, les compétences profondes qui font un bon développeur, ne sont pas limitées aux technologies. La maîtrise de la programmation orientée objet est valorisable de la même manière qu’on code en Java, TypeScript ou Ruby. La compréhension des architectures logicielles et des techniques de programmation le sont tout autant. Ce sont ces compétences qui sont importantes aujourd’hui et qui sont malheureusement manquantes sur le marché.
On imagine souvent un développeur collé derrière son écran à pondre des lignes de code. Mais c’est un stéréotype et surtout éloigné du métier d’un développeur aujourd’hui. On passe beaucoup plus de temps à réfléchir, modéliser, concevoir, échanger ou débattre qu’à écrire du code.
En fait, l’écriture du code est l’étape ultime d’un processus bien plus long. Et les langages de programmation sont les outils utilisés lors de cette étape. Pourtant, on continue de les mettre en avant comme s’ils étaient l’essentiel de notre métier.
Dans mes expériences, j’ai pratiqué plusieurs langages C, C++, Java, JavaScript, TypeScript, Python, Ruby, OCaml. Je ne suis jamais devenu un expert dans aucun langage ni aucun Framework, car je me suis toujours concentré sur des compétences qui vont au-delà des outils et je me suis aussi intéressé au métier. Heureusement que j’ai eu cette façon de voir les choses. Cela me permet d’être mobile, je peux m’adapter à n’importe quel outil (langage, Framework, IDE, plateforme, etc.) en fonction du besoin ou du contexte. Si je dois chercher un nouveau poste, je ne vais pas me limiter aux technologies utilisées. Je ne dis pas que je n’ai pas mes préférences, mais, l’entreprise, son contexte et son métier sont bien plus importants que le Framework qui a été choisi pour un service.
Quelle place laisser aux langages ?
Quand on se pose la question de la place des langages dans le métier de développeur, il paraît évident qu’ils sont un des aspects les plus visibles. Certainement, parce qu’ils sont utilisés comme accroche sur les offres d’emploi. Parce qu’il semble plus facile de lier l’offre et la demande sur des noms de techno. Parce que cela semble plus aisé d’évaluer le niveau de quelqu’un en se concentrant sur cet aspect.
Le souci, c’est que cela revient à se concentrer sur un seul aspect du notre métier et je dirai qu’il ne s’agit même pas du plus important. J’embaucherais sans hésiter quelqu’un qui n’a jamais utilisé les langages de ma boite, mais qui vient avec la maîtrise du TDD, de l’architecture hexagonale et des concepts qui la composent. À l’inverse, je me poserais beaucoup plus de questions quant à prendre un expert dans le langage utilisé sans aucune connaissances des bonnes pratiques de notre métier. Avec une bonne compréhension des paradigmes de programmation et une bonne maîtrise des compétences profondes, un langage s’apprend rapidement. Il est, en revanche, beaucoup plus compliqué d’acquérir ces compétences lorsque notre expertise n’est bâtie que sur des outils.
Conseil pour les développeurs juniors ou en formation
Ne vous prenez pas le têtes sur les technologies. Elles n’ont pas autant de valeur qu’on peut vous le faire penser. Elles peuvent disparaître aussi vite qu’elles sont apparues. Au début, contentez-vous d’un ou deux langages (un front et un back par exemple) et d’un framework. Concentrez vos efforts sur des compétences plus valorisables, comme la POO (programmation orientée objet), les principes d’architecture, les designs patterns, l’algorithmie, les tests, le TDD (test driven development) et la liste est encore longue. Mais je peux vous garantir qu’avec ça dans votre arsenal, les entretiens techniques ne seront plus qu’une formalité.