Un programmeur geek acquiert des technologies comme des outils brillants dans une ceinture utilitaire. Mais chaque technologie est simplement une collection de modèles exprimés dans un langage, et la plupart des modèles ne sont pas nouveaux ; si nous comprenons les modèles, nous pouvons facilement comprendre toute technologie qui les incarne.
À divers moments de ma vie, j’ai fait de la programmation, mais je ne pense pas que ce soit la marque d’un bon développeur. Qu’est-ce qui ne va pas avec un développeur talentueux qui se donne à 110 % pour créer du code clair et précis maintenable de 9h à 17h, qui aime déjeuner tout en parlant de tout sauf du travail et qui rentre chez lui pour vivre une vie déchaînée à partir d’un clavier ?
Voici ce que je pense être les cinq compétences clés d’un développeur. Pour voir pourquoi ils sont importants, réfléchissez à ce qu’est un logiciel : ce n’est pas une série interminable d’instructions, ni une collection d’appels arbitraires à une API, ni un simple copier-coller. Au lieu de cela, il s’agit d’un réseau de hiérarchies de code – hautement structuré, avec peu de code copié – principalement des modèles répliqués (pas nécessairement les modèles GOF mais des modèles tels que « initialisation paresseuse », « génération de code basée sur un modèle » ou « script en XML ») . Il n’est également utile que s’il répond aux exigences de l’entreprise et s’il est de qualité adéquate. Nous devons donc évaluer les compétences qui permettent à un développeur d’atteindre ces objectifs.
Assez de préambule ; allons-y.
1. Analytique : structuré, clair, penseur critique et résolveur de problèmes
Le problème est que beaucoup de gens confondent l’équilibre, la confiance ou le discours continu et rapide avec l’intelligence. Nous devons donc être très clairs sur les caractéristiques de l’intelligence pour un développeur.
Le logiciel est une question de décomposition fonctionnelle et structurelle, donc je pense que l’aspect clé de l’intelligence est d’être analytique par nature, éducation ou force de volonté. Une personne analytique considérera une question ou un problème sous plusieurs angles, en choisissant la meilleure approche générale, puis en décomposant le problème en sous-problèmes.
Vous pouvez détecter cette compétence assez facilement lors d’un entretien car le candidat cherchera naturellement à clarifier une question ambiguë ou à lister les parties et les relations d’une solution ou de « haut et bas » un problème pour identifier sa portée avant d’entrer dans les détails.
Pour détecter cette compétence, vous n’avez pas besoin de leur donner un nouveau problème, demandez-leur simplement de décrire presque n’importe quoi : un produit logiciel sur lequel ils ont travaillé, l’orientation objet, les rôles ou le processus de développement logiciel, Internet, le Web, ou tout aussi le tracé d’une ville réelle ou idéale, la nature de la démocratie, la définition et le fonctionnement de l’évolution, etc.
Lorsque la description est complète, demandez-vous si vous avez entendu une énumération des pièces ou si le candidat a décrit le cœur du sujet ; c’est analytique.
2. Résumé : Capable d’identifier et de comprendre les abstractions et les modèles
Le logiciel est complexe ; vous ne pouvez pas le comprendre en lisant simplement chaque ligne de code. Vous l’avez compris en recherchant la structure, en construisant une théorie sur la façon dont le code est modélisé, puis en vérifiant et en modifiant ce modèle au fur et à mesure de votre lecture.
Développer un nouveau logiciel, c’est un peu comme comprendre un programme existant, sauf que le modèle n’existe pas encore, seulement la « théorie » de ce logiciel dans votre esprit. Votre programme exprime la théorie dans le modèle de code.
Si vous pensez en termes d’abstractions, écrire une spécification fonctionnelle ou technique n’est pas si différent du codage, sauf que le langage est humain et que l’interprète sera un ou plusieurs esprits humains. Une spécification est abstraite parce qu’aucun programme ne peut l’exécuter, mais si elle est précise, complète, claire et bien structurée (toutes les qualités que nous recherchons dans le code), alors un développeur peut l’implémenter.
3. Précis : la capacité d’exprimer quelque chose de manière concise et précise
Certains développeurs réussissent quelque peu en ne reproduisant que des exemples ; ils recherchent quelque chose de proche de ce qu’ils veulent mettre en œuvre, puis le modifient. C’est comme la sculpture, sauf que lorsque cela est fait avec du code, le résultat n’est généralement pas très clair, pas très concis et probablement pas entièrement précis.
De même, certains développeurs ne peuvent expliquer les choses que par des exemples, et non en nommant les concepts ou modèles sous-jacents. Ceci est acceptable mais constituera une pierre d’achoppement car ils sont moins susceptibles de reconnaître, de comprendre et d’appliquer des modèles au niveau micro ou macro dans le code.
Un développeur qui peut être précis (mais pas nécessairement rapide ou impressionnant) dans son discours développera un code plus précis et expliquera plus facilement une technique ou une exigence à un autre développeur.
4. Hiérarchisé et pragmatique : la capacité de reconnaître ce qui doit être fait par rapport à ce qui pourrait être fait
L’approche agile privilégie naturellement l’écriture du code d’aujourd’hui aujourd’hui. Même dans les entreprises qui font du développement en cascade, c’est toujours une compétence essentielle de pouvoir faire la distinction entre l’essentiel et le possible.
Les produits ne sont souvent pleinement réussis que s’ils sont livrés à temps. Un développeur pragmatique fait ce qu’il faut, crée quelques crochets et écrit les commentaires qui jettent les bases de demain.
Le pragmatisme se manifeste aussi par le désir d’accomplir, d’achever et de finir ; cela nous pousse et nous encourage à définir ce qu’est le succès, nous aide à hiérarchiser le chemin pour y arriver et se concentre sur l’achèvement des tâches plutôt que sur le placage d’or.
5. Idéaliste : le désir de bien faire les choses
Un développeur qui n’est que pragmatique peut parfois être paresseux ; non seulement ils ne développent que les fonctionnalités d’aujourd’hui, mais ils ne codent que pour aujourd’hui, pas pour le développeur qui doit maintenir ce code demain.
Un développeur idéaliste se soucie réellement de tous les qualités de ce qu’ils délivrent :
- Ils s’assurent de comprendre les exigences.
- Ils examinent et éventuellement documentent les cas de test avant d’écrire une ligne de code.
- Ils écrivent un code clair et correctement commenté ; ils refactorisent continuellement, de sorte que le code commun se déplace dans des méthodes partagées, puis dans des classes de base ou d’assistance.
- Ils écrivent des cas de tests unitaires pour protéger les autres développeurs et testeurs des bogues.
- Ils effectuent systématiquement des tests manuels là où un test automatisé n’est pas pratique.
L’idéalisme et le pragmatisme sont des contreparties nécessaires, équilibrant et informant les décisions qu’un développeur prend tout au long de la journée.
Autres compétences
Naturellement, il existe d’autres compétences :
- Concentration : écrire un logiciel est une tâche complexe consistant à transcrire un modèle de l’esprit en code.
- La capacité de comprendre et d’utiliser les technologies.
- Le désir d’apprendre et d’améliorer toutes les compétences dont ils ont besoin pour être efficaces individuellement et dans le cadre d’une organisation de livraison de logiciels.
- La reconnaissance que leurs compétences n’ont souvent de sens que si elles s’intègrent aux autres rôles de leur équipe et d’autres équipes.
Conclusion
Une dernière compétence ; cependant, est celui dont nous avons tous besoin; la capacité de reconnaître qu’il n’y a pas d’ensemble de compétences ou de comportements particulièrement précieux. Dans toute organisation, il existe plusieurs façons de réussir, de nombreux rôles à remplir, et le travail d’un individu n’est qu’une partie d’un processus plus large, qui doit tous fonctionner pour réussir.
Les gens intelligents négligent parfois d’autres types d’intelligence ; cela aide si nous maintenons le désir d’atteindre le respect mutuel et d’offrir nos points de vue comme une opinion, même si nous croyons que nous corrigeons une erreur – vous seriez surpris de voir combien de fois nous confondons les opinions et les perspectives avec des faits.
Cependant, un développeur ferait bien d’avoir les compétences ci-dessus; alors ils sont bien placés pour progresser dans leur carrière sur la voie technique pour devenir développeur senior, puis responsable du développement et plus tard architecte, ou sur la voie de la gestion où l’intégrité, la passion du respect et le désir d’inspirer et d’aider les autres à atteindre sont encore plus essentiels.