Developpez.com

Le Club des Développeurs et IT Pro

Qu'est-ce qui fait un bon programmeur ?

Un senior liste cinq caractéristiques d'un bon programmeur

Le 2014-07-04 20:10:54, par Hinault Romaric, Responsable .NET
Quand peut-on dire que l'on est un bon programmeur ? Quels sont les éléments distinctifs d'un bon programmeur ? Certains d'entre nous se sont probablement déjà posés la question ou ont eu l’occasion d'en débattre.

Henrik Warne, un développeur senior, dans son blog « réflexion sur la programmation », liste cinq points clés qui permettent de distinguer ou de se définir comme un bon programmeur. Les points qu'il évoque sont les suivants :

1 - Décomposition du problème

Selon Warne, l'objectif de la programmation est de résoudre des problèmes. Ainsi, « avant d’écrire le code, le programmeur doit avoir une idée claire sur la démarche pour résoudre le problème ». Un bon programmeur sera donc celui qui sera capable de décomposer son problème au point d'aboutir à des petits éléments pouvant être résolus facilement. « Il ne s'agit pas simplement de résoudre le problème. Un bon programmeur trouve le moyen de modéliser le problème de façon à ce que le programme à mettre sur pied soit facile à implémenter et à tester », explique Warne.

2 – Analyse du scénario

Warne explique dans son billet de blog qu'un bon programmeur est celui qui a la capacité d’anticiper tous les scénarios possibles dans son programme (logique du programme, événements internes et externes qui peuvent se produire). « Pour tenir compte des différents chemins dans la logique, il se pose les questions : qu'est-ce qui se passe si cet argument est nul ? Et si aucune de ces conditions n'est vraie, etc. », affirme-t-il, concluant que le bon programmeur a la capacité de penser comme un testeur.

3 – Nommage

Le nommage des variables, des classes et des méthodes est un aspect clé de la programmation. Lorsque cela est bien fait, le programme « devient en grande partie autodocumenté, ce qui signifie que la fonction du programme est tout à fait claire à la moindre lecture du code », explique Warne.

Cependant, le nommage en programmation est l'une des activités les plus difficiles pour le programmeur, selon lui.

4 – Cohérence

« Le plus grand défi dans la programmation est probablement la gestion de la complexité. La cohérence est un moyen de gérer la complexité. Il réduit une partie de la complexité en nous permettant de voir les modèles et déduire comment les choses sont nommées, utilisées et manipulées », affirme Warne, qui explique que la cohérence permet au développeur de ne pas avoir à utiliser la puissance du cerveau pour se rappeler des exceptions et des variables aléatoires. Au lieu de cela, il peut se concentrer sur la « complexité essentielle et la complexité non accidentelle. »

D'après Warne, la cohérence est importante dans tous les aspects de la programmation. Elle s'applique aux noms de variables, méthodes, structures, interfaces utilisateur, gestions des erreurs, documentations, etc.

5 – L'apprentissage

Le développeur apprend constamment. « Avant d’intégrer une nouvelle fonctionnalité, il doit comprendre ce qu'elle est censée faire. Avant de modifier un code existant, il doit comprendre le fonctionnement de celui-ci, pour adapter ce qui doit être ajouté », explique Warne, pour qui l'apprentissage rapide rend un développeur plus efficace.

Au vu de l'évolution des plateformes et des langages, Warne conclut que la vie d'un programmeur n'est jamais ennuyeuse. Une situation qui convient parfaitement au geek qu'il est.

Source : blog Henrik Warne

Et vous ?

Selon vous, qu'est-ce qui fait un bon programmeur ? Êtes-vous d'accord avec Warne ?
  Discussion forum
45 commentaires
  • tatayo
    Expert éminent sénior
    Le mauvais développeur, il prends son cahier des charges, l'analyse, puis développe. OK.

    Le bon développeur, il prends son cahier des charges, l'analyse, puis développe. Mais c'est pas pareil...

  • Potomac
    Membre habitué
    oui ce genre d'article oublie souvent que les développeurs sont avant tout au service de l'entreprise, avec des contraintes, un contexte qui fait que tous ces bons conseils ne sont pas toujours applicables dans la vie réelle
  • chiv
    Rédacteur
    A mon humble avis, ce qui fait un bon programmeur comme dans toutes les activités, c'est avant tout la passion. Pour devenir vraiment bon dans quelque chose, il faut y prendre du plaisir. Ceux qui prennent du plaisir à faire leur travail ont plus de motivation et d'enthousiasme et surtout l'envie permanente de s'améliorer. Ils fournissent généralement un effort nettement supérieur en auto-formation et veille technologique.
    A l'inverse, ceux pour lesquels leur activité n'est qu'un moyen de remplir le frigo n'ont pas de raison de faire du très bon travail. Après tout quand on en fait du bon, voir du moyen, au lieu du très bon on est payé pareil. Ceux là travaillent avec à l'esprit le soucis de faire moins et pas le soucis de faire mieux. Ils se contentent souvent de faire "du code qui marche", ce qui n'est pas du tout la même chose que "du code de qualité".
  • Heptaeon
    Membre habitué
    J'entends toujours qu'un bon code est modulaire, lisible, testé, optimisé, mais le meilleur n'est il pas le code suffisant ? Il y à la théorie de la bonne programmation et les moyens qu'elle nécessite. N'avons nous pas toujours des contraintes matériels au delà de ce qu'est théoriquement un "bon code".

    Je crois qu'on a tous déjà fait de petits projets dans l'urgence "mal codé". Souvent on ne les retouchent pas pendant des années, car ils font ce qu'on leur demande. Au final on ne les change que quand les technologies ont évolué d'une manière qu'on aurait pas pu prévoir (breaking change, faillite d'une techno, etc...).

    Les développeurs ne se perdent ils pas trop dans des considération technique ? Alors que ce qu'on leur demande la plupart du temps c'est de répondre "rapidement" a un besoin ? Je ne dit pas de faire de très gros projet en free-style non plus => la notion de "suffisant". Parfois ne faut il pas "mal programmer" pour être un "bon programmeur" ?

    Selon Warne, l'objectif de la programmation est de résoudre des problèmes.
    Je suis bien d'accord avec ce point, mais résoudre des problèmes techniques ou ceux de l'entreprise ?
  • pmithrandir
    Expert éminent
    Envoyé par Farid63
    C'est moi ou ce type d'article revient tous les mois pour dire exactement la même chose ? (Nommage, analyser le problème, apprentissage constant...)

    Une chose appréciable serait que les blogueurs qui pondent se genre d'article chacun leur tour nous donnent quelques conseils pour les mettre en application.

    Le nommage. Comment bien nommer une variable ? numeroDeTelephone, numTel, ndt, phoneNumber ?

    Pour la personne qui dit qu'il faut avant tout être passionné,
    Pourquoi est-ce qu'un développeur doit être passionné pour bien faire son travail?
    Est-ce qu'on en ai encore à se dire que le meilleur c'est celui qui code toute la nuit et qui à 15 projets perso en cours?
    Un déménageur peut parfaitement faire son boulot sans être passionné, pourquoi ça ne pourrait pas être le cas dans le développement informatique?
    Je pense que la programmation demande une part importante de créativité.
    On trouve peu de personne qui n'aiment pas leur métier et qui continu à faire preuve de créativité.
  • SylvainPV
    Rédacteur/Modérateur
    Un bon programmeur est un programmeur qui cherche à savoir ce qui fait du programmeur un bon programmeur.
    NB: cela s'applique également aux bûcherons
  • Zefling
    Expert confirmé
    Envoyé par asgard20032
    Selon moi, le bon developpeur est celui qui est capable de faire un code auto descriptif et modulaire aisement, et qui met plus l'emphase sur la qualiter du code que sur son optimisation, lorsque loptimisation est negligable.
    Oui, ça serait vrai sur du code fait par une seule personne. Dans la réalité c'est rarement le cas. T'as 10 personnes qui sont passées sur le code que le dév doit modifier et t'as rarement le temps de tout remettre en ordre. De plus, tout le monde n'a pas la maîtrise parfaite de n frameworks utilisés sur l'ensemble des projets.

    J'ai l'impression que le type décrit un dév parfait dans un monde parfait. Sauf que le monde ne l'est pas, et je dirais que une bonne qualité, c'est de savoir demander de l'aide quand on sait pas ou que l'on ne comprend pas plutôt que de faire n'importe quoi.

    En tout cas, le point 2 me semble utopiste. Personne peux tout prévoir, sinon c'est un dieu. Et une très grande modularité du code prend énormément de temps que l'on a rarement sauf si on fait de la R&D, et encore ça ne sera jamais parfait.
  • Pergos
    Membre habitué
    Pour moi, un bon développeur est aussi un "bon fainéant" qui sait où il passe son temps.

    Par exemple, sur de vieilles applications, casser un bout du code, ça a un cout non négligeable en temps de tests, mais un code devenu illisible ou instable, ça a aussi un coût : un bon développeur, en "bon fainéant" qu'il est, est capable de savoir quand le fait de casser ce bout de code va lui "éviter de perdre trop de temps" sur la maintenance.
    Idem pour les noms de variables ou noms de fonctions : se rappeler de tout, ça squatte la mémoire, ça fait passer du temps dans d'autres portions de code pour être sûr qu'on a bien compris à quoi servait la variable/fonction,... Donc renommer intelligemment des variables/fonctions, c'est avoir "moins besoin de monopoliser son cerveau", et passer moins de temps à relire le code.

    Bref, un bon développeur est un "fainéant intelligent" !
  • Potomac
    Membre habitué
    tiens encore une énième variation sur le thème "qu'est-ce un bon développeur/mouton à 5 pattes ?"

    la dernière news de ce type remontait à il y a quelques jours :

    http://www.developpez.com/actu/72719...us-productifs/

    je pense qu'il y a plusieurs échelons à gravir, on ne nait pas "bon développeur" mais on le devient petit à petit, et souvent dans la douleur :

    - échelon zéro: le point de départ, décrocher son diplôme en maitrisant certains points : l'algorithmie, les concepts de la programmation objet, un peu de base de données ( SQL ), un peu de web, un peu de UML, ça donne un développeur bac+2,

    - échelon un: on a le diplôme, quelques stages et CDD, on est tout content mais on code comme un débutant en faisant plein d'erreurs, et en plus l'entreprise ne fait rien pour nous mettre dans le droit chemin ( c'est même l'inverse qui se produit ! Ah les SSII... ), le code n'est pas optimisé, on se rend compte que l'école ne nous a pas appris à faire des tests unitaires, ni à programmer en modèle-vue-contrôleur ( MVC ), et pire on ne connait pas les principaux framework de développement web, du coup on réinvente sans cesse la roue

    - échelon deux : on a corrigé les manquements de la formation, on ne réinvente plus la roue grâce à la maitrise d'un ou deux framework à la mode, on produit du code plus ou moins optimisé mais on sent qu'on peut encore mieux faire,

    - échelon trois : on a découvert l'existence des design pattern, l'extreme programming, ça a été un long chemin de croix pour tout maitriser mais ça va beaucoup mieux, on peut enfin s’auto-proclamer "développeur 5 étoiles"
  • asgard20032
    Futur Membre du Club
    Selon moi, le bon developpeur est celui qui est capable de faire un code auto descriptif et modulaire aisement, et qui met plus l'emphase sur la qualiter du code que sur son optimisation, lorsque loptimisation est negligable.