5 points par spilist2 2021-12-04 | 7 commentaires | Partager sur WhatsApp

À force de réfléchir ces temps-ci à des thèmes comme l’apprentissage, la progression ou la productivité, je me suis mis à me poser cette question.

Plus largement, selon vous, qu’est-ce qui distingue un bon développeur d’un développeur exceptionnel ?

Vous pouvez aussi remplacer « développeur » par un autre rôle ou métier dans lequel vous travaillez ou que vous connaissez bien. (p. ex. tech lead, CTO, CEO, fondateur, designer, PM, ...)

Pour ma part, je pense que les développeurs exceptionnels ont en commun, grosso modo, les trois points suivants.

  • Identification des problèmes : ils repèrent des choses que les autres ne perçoivent même pas comme des problèmes, et y voient des possibilités d’amélioration.

  • Définition des problèmes : ils examinent la situation problématique et ses causes à des niveaux et sous des angles extrêmement variés, puis transforment leur expérience accumulée en schémas récurrents afin de ramener le problème à une forme beaucoup plus simple (ou plus efficace, plus fondamentale).

  • Résolution des problèmes : ils sont capables d’imaginer plusieurs solutions possibles et, en comprenant les compromis de chacune, choisissent celle qui convient à la situation actuelle de l’organisation. Ils savent aussi à quel moment et en observant quels signaux ils devront réviser cette décision. Enfin, ils appliquent la solution par petites étapes, de manière à obtenir rapidement du feedback.

7 commentaires

 
benjamin 2021-12-17

Sens de la mode : 0 point.

Si je devais citer un point commun, c’est le seul qui me vient à l’esprit.

À moitié une blague, à moitié sérieux..... haha

 
xguru 2021-12-04

Fondamentalement, je pense moi aussi qu’un développeur est quelqu’un qui résout des problèmes.

Mais il n’est pas forcément nécessaire de limiter cela aux seuls développeurs : pour ma part, je citerais la « connexion » comme caractéristique des personnes exceptionnelles.

Nous avons tous en tête beaucoup de choses — connaissances, expérience, idées, etc. — et je pense qu’il est essentiel de savoir bien les relier entre elles.

Quand on identifie un problème, imaginer une solution est une première forme de connexion,

mais relier plusieurs problèmes entre eux pour envisager une situation plus complexe et trouver d’autres solutions, c’est aussi une forme de connexion,

et relier différentes solutions et idées pour produire une solution plus simple, plus flexible et plus remarquable, c’est également de la connexion.

Je pense qu’aujourd’hui, au-delà du seul développement, la capacité à faire des liens entre le développement et les aspects business, ou même entre des choses qui n’ont a priori aucun rapport, est une compétence extrêmement importante.

 
spilist2 2021-12-04

J’ai aussi posé la question sur Facebook, et M. Kim Chang-jun a laissé un commentaire me conseillant de consulter des articles de recherche. Je me demande pourquoi je n’y ai pas pensé.

Je vais essayer de lire un article de 2015 intitulé “What Makes a Great Software Engineer?”, qui a été cité 150 fois.

https://ieeexplore.ieee.org/abstract/document/7194618

 
guswns1659 2021-12-15

Bonjour spilist2 ! Il me semble avoir vu que vous aviez aussi posé la question sur Facebook :) C’est aussi une question que je me pose constamment, mais recommanderiez-vous éventuellement le contenu de l’article scientifique ?

 
spilist2 2021-12-15

Je pense que l’article est probablement une thèse de doctorat (dissertation), et selon le PDF elle fait quand même 300 pages. https://digital.lib.washington.edu/researchworks/bitstream/…

Du coup, je n’ai encore lu que jusqu’au chapitre 2 (introduction, related works), mais même rien que jusque-là, j’aime beaucoup le contenu. Les phrases sont aussi écrites de façon assez accessible. Je recommande.

 
guswns1659 2021-12-29

J’ai lu le chapitre 6 parmi les articles que vous avez partagés, car il me semblait être le plus essentiel, haha, et son contenu est vraiment excellent ! Ça m’a aussi amené à refaire mon propre examen de conscience !! Haha, merci.

 
spilist2 2021-12-04

En cherchant sur Google après avoir posé la question, je vois quelques articles. Il y a aussi le mot-clé 10x engineers.

https://linkedin.com/pulse/great-engineer-vs-good-marissa-fayer-mba/

  • Un bon développeur dispose d’outils particuliers pour résoudre les problèmes. Un bon développeur est méthodique et rationnel, il examine le problème sous tous les angles et analyse toutes les entrées et sorties possibles.

  • Un développeur exceptionnel, en s’appuyant sur toutes les compétences mentionnées ci-dessus, les applique à des solutions immédiatement exploitables. Il applique de manière créative des schémas déjà connus (principes scientifiques et mathématiques, principes du développement lean, etc.) à de nouveaux problèmes concrets de la vie réelle.

  • Les développeurs les plus exceptionnels savent écouter. Ils écoutent le problème, les parties prenantes et ce à quoi elles accordent de la valeur, le marché, les retours, ainsi que leur voix intérieure qui leur souffle des approches créatives.

==

https://www.quora.com/How-do-you-identify-a-good-vs-great-engineer

Il y a énormément de réponses... mais si on ne regarde que quelques-unes des plus votées :

  1. (En prenant l’exemple de la personne qui a apporté un ventilateur sur un tapis roulant) une personne paresseuse cherche toujours un moyen de ne pas travailler. Un ingénieur paresseux est le meilleur des ingénieurs.

  2. Un bon ingénieur résout le problème qui lui est demandé. Il suit parfois des cours pour améliorer ses compétences techniques. Un ingénieur exceptionnel va un pas plus loin que ce qu’on lui demande.

  • Quand les gens ont des questions, c’est vers lui qu’ils se tournent.

  • Il apprend en permanence.

  • Il partage continuellement ce qu’il sait.

  • Il défend ce qu’il pense juste, mais sait aussi quand il faut lâcher prise.

  • Il n’a pas peur de mettre les mains dans le cambouis.

  1. Un mauvais ingénieur se cherche des excuses sur la difficulté à corriger un bug dans un système. Un bon ingénieur corrige le bug en s’appuyant sur son expertise. Un ingénieur exceptionnel cherche le sens caché derrière le problème donné.
  • Il vérifie si des bugs similaires n’existent pas dans les autres systèmes (ou s’ils ont déjà été corrigés).

  • Il propose une solution ou une conception de long terme permettant d’éviter que des bugs similaires ne se reproduisent. (avec une analyse coût/bénéfice de chaque solution)

  • Il regarde aussi au-delà de son domaine d’expertise pour voir si d’autres équipes n’ont pas rencontré un problème similaire. (ou les a déjà contactées)