Nous recherchons tous de “bons” développeurs

Mais qu’est-ce donc qu’un « bon » développeur ?

Il m’arrive de demander à mes étudiants au début d’un cours à l’Université d’évaluer leur niveau en programmation orientée objet, en programmation fonctionnelle, ou encore pour ce qui concerne leur maîtrise d’un langage de programmation comme Java, Kotlin ou Swift. Je suis souvent surpris d’entendre des réponses du style « Swift, je maîtrise », « Kotlin, ça va », « La programmation par protocoles, ce n’est pas difficile »…

Avec les années et l’expérience, j’ai appris que de telles réponses, aussi spontanées que trompeuses, sont susceptibles de cacher de profondes lacunes dans la maîtrise des sujets évoqués. Sans chercher à rabaisser mes étudiants ni à leur donner une leçon, il m’arrive de les prendre au mot en leur proposant de répondre à une simple question, emblématique des enjeux concernés, à l’instar de « en Swift, quand devez-vous utiliser une structure plutôt qu’une classe ? ».

Force est de constater que, dans leur réponse, la plupart des étudiants soi disant « experts » se perdent en conjectures qui ne témoignent pas de leur prétendue maîtrise du sujet. Il en va de même lorsque j’interroge un candidat au cours d’un entretien d’embauche. Le cloisonnement en silos des architectures, langages et outils contribue à rendre difficile l’évaluation des compétences d’un ingénieur ou d’un technicien, quel que soit le niveau d’études et l’expérience professionnelle de celui-ci. Je ne prétends pas que tous les langages se valent, notamment en terme de puissance sémantique, ni qu’il existe un procédé simple permettant de transposer le code d’une fonction f() écrite à l’aide du langage A (f:A) vers la même implémentation dans un langage (f:B). Mais les idées, les modèles (les fameux design patterns par exemple) mis en œuvre pour produire f:A peuvent assurément être traduits à l’aide d’autres idées et de modèles adaptés au langage B, encore faut-il les maîtriser. C’est d’ailleurs l’un des principaux enjeux de l’apprentissage de l’informatique, une science que les étudiants semblent bouder, préférant lui donner des synonymes alambiqués tels que fullstack programmingdevops ou encore framework-based software development.

Les meilleurs techniciens que j’ai eu la chance de croiser au cours de ma carrière, notamment lorsque je dirigeai 01net.com ou libe.fr, m’ont toujours surpris par leur aptitude à résoudre des problèmes fonctionnels ou techniques plutôt qu’à en poser. Certes, les technologies d’aujourd’hui évoluent vite, au point d’être obsolètes avant d’être matures et les développeurs doivent fournir un effort constant pour s’adapter à cette situation ubuesque.

“À chacun son métier et son expertise”

Les empilements de couches techniques et la complexité grandissante des écosystèmes associés (notamment les SDK, frameworks et autres librairies) rendent cette tâche ardue. Mais un juriste ou un spécialiste médical est confronté à des contraintes au moins aussi exigeantes. À chacun son métier, à chacun ses domaines de compétences, à chacun son expertise.

Les « bons » développeurs connaissent leurs limites. Ils cherchent, par passion et par professionnalisme, à combler leurs lacunes et à accroître leur expertise. Il s’intéressent aux nouveautés, tentant de les appréhender plutôt que de les subir. Apprendre un nouveau langage, un SDK ou de nouveaux éléments d’architecture logicielle, bien que requérant possiblement un effort significatif, ne les effraie pas : c’est une question de temps et de volonté.

C’est pourquoi, au cours des entretiens d’embauche, j’apprécie les candidats qui, répondant à une offre d’emploi de développeur iOS, se présentent à moi avec un CV qui témoigne seulement d’une bonne expérience en développement d’applications Android, et m’expliquent avec aplomb qu’apprendre iOS ne les effraie pas mais au contraire les motive, qu’ils sont désireux d’ajouter une corde à leur ARC [SIC Objective-C] et prennent le pari d’y parvenir après quelques semaines seulement. Il faut suivre ce genre de développeurs, les aider, les pousser, leur faire confiance. L’enjeu est bien souvent à la hauteur du risque.

Je ne nie pas qu’il existe de vrais experts iOS, React ou Angular. Je dis juste qu’un tel statut s’acquiert au prix de milliers d’heures de pratique, d’étude et sans doute de partage. Je suis un technicien, passionné de culture digitale. Ce sont les modèles d’un côté et les utilisateurs de l’autre qui motivent mon intérêt, pas les langages ni les outils. Ce que permettent de faire les technologies modernes est simplement phénoménal et limité par notre aptitude à concevoir des usages. Les bons développeurs sont créatifs et ingénieux. Ils sont capables de questionner les aspects fonctionnels d’un sujet et ne se contentent pas de coder aveuglément des user stories.

Alors non, un développeur web front qui totalise 2 ans d’expérience n’est pas un expert. S’il le prétend, j’invite les recruteurs à échanger avec lui, afin d’éprouver sa maîtrise des modèles et des architectures, de l’algorithmique classique, des techniques permettant de concevoir un modèle de données, des règles gouvernant l’exposition de services web à plusieurs types de clients, des bonnes pratiques en matière de stylistique de codage, de la prise en compte de contraintes de performances et de répétabilité du code, etc.

admin9501

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.