Quelques bonnes pratiques
Introduction
Programmer, ce n’est pas seulement écrire des lignes de code qui font qu’un logiciel se comporte exactement comme défini dans un document. La carrière d’un développeur va bien au-delà de son IDE : la théorie joue un rôle important dans l’écriture de code car elle permet de sélectionner les bonnes armes ; la veille technologique permet de rester au goût du jour en matière d’outils, de langages, de techniques de travail ; l’épanouissement personnel est un facteur primordial pour être plus efficace et plus motivé.
Ce chapitre, moins technique et plus humain, explore l’environnement riche et diversifié du monde du développement. Quels que soient votre intérêt, votre métier, votre niveau, si vous lisez ces lignes, c’est que le développement est un domaine dans lequel vous souhaitez exceller. Parcourez donc les sections suivantes avec un esprit ouvert. Profitez de l’expérience de l’auteur qui, bien que dans le métier depuis une vingtaine d’années, se remet toujours en question, se fonde sur ses bases tout en sachant les mettre au goût du jour, et sait que le meilleur code ne fait pas forcément le meilleur logiciel.
S’assurer avec des bases solides
1. De l’importance du socle
Toute compétence technique doit se baser sur des compétences théoriques fiables et assurées. Le problème est que l’informatique et ses pratiques changent non seulement vite, mais de plus en plus vite.
Il est appréciable d’être compétent dans la technologie du moment, car alors les sollicitations sont nombreuses, les postes souvent bien rémunérés et la sensation d’excellence dans les dernières avancées de son domaine de prédilection est grisante. Mais cette mise à niveau est d’autant plus difficile à vivre quand la mode vient à passer. Or, en tant qu’amateurs de technologies, les développeurs qui se flattent de leur rationalité font souvent les meilleures victimes de toute mode irrationnelle.
Ainsi, le meilleur investissement technique d’un développeur reste d’avoir des bases solides. Cela aide à acquérir toutes les autres compétences, à évaluer les technologies et les conceptions, et à trouver les meilleures réponses où elles se trouvent avec les mots-clés les plus pertinents. De bonnes bases sont la condition sine qua non d’un travail bien fait et l’assurance d’être reconnu et respecté par ses pairs.
2. Structures de données et algorithmes communs
La première des bases est la maîtrise des structures de données. Les ouvrages dédiés à la programmation se focalisent souvent sur ce sujet, et avec raison. De nombreux développeurs (et clients !) estiment avoir fait le tour du problème une fois celui-ci modélisé.
Il ne faut pas tomber dans ce piège, mais force est de reconnaître que l’architecture d’un programme devient de plus en plus difficile à changer avec le temps, tout simplement parce que la modification d’un élément de base implique des modifications dans tous les projets qui reposent...
Rester concis et simple
Deux bonnes pratiques de développement fournissent une philosophie de travail saine et efficace : DRY et KISS.
1. DRY
DRY signifie Don’t Repeat Yourself : ne vous répétez pas. Chaque ligne de code que vous écrivez représente un bogue potentiel dans l’application, une possible incompréhension pour une future personne qui la lira, du code supplémentaire à maintenir, etc. On ne s’en rend pas forcément compte dans cette quête à la fonctionnalité dans laquelle on peut parfois écrire trop vite pour atteindre l’objectif plus tôt. D’où l’importance de bien avoir cette règle en tête.
Se répéter est très (trop) facile dans le monde de l’informatique. Le copié-collé est à portée de raccourcis-clavier aisés à utiliser, la taille des disques durs permet une dépense sans compter des octets, les processeurs rapides avalent les instructions tellement vite qu’on ne perçoit plus les petits détours logiques inutiles. Mais encore une fois : un code qui fonctionne peut être un véritable cauchemar à maintenir et à déboguer.
De façon générale : moins de code vous écrivez, moins de problèmes vous risquez.
En programmation orientée...
Harmoniser l’équipe
La loi de Conway, aujourd’hui considérée comme valide, stipule que toute organisation concevant des systèmes va fatalement y reproduire des copies de ses propres schémas de communication. Autrement dit, le design d’un logiciel n’est que le reflet de la façon dont les équipes et leurs membres communiquent. Il est donc primordial d’avoir une organisation humaine saine pour du code sain, et il est illusoire d’espérer produire du code simple dans une organisation complexe.
Parallèlement, il est plus pragmatique et simple de produire un code reprenant les motifs de la structure dans laquelle il évolue : telle partie de l’application pour tel type d’utilisateur, telle partie du programme pour telle autre équipe, le tout supervisé de telle manière par telles classes de « managers »...
Le travail en équipe est crucial, et un développeur ne travaille jamais seul. Il œuvre dans une entreprise, dans une équipe, sur un projet open source, etc. Même s’il n’y a que vous, comptez au moins trois personnes : vous-même, votre « moi futur » et votre « moi passé ». La personne que vous étiez il y a six mois est (on l’espère) moins expérimentée que vous. Entre-temps, elle a beaucoup appris et grandi, et avec le recul, elle peut réaliser que ses choix six mois auparavant n’étaient pas optimaux. Elle a fait des erreurs qu’elle a dû payer, et que d’autres qu’elle paieront même si elle ne le sait pas encore. Cette personne n’est plus : plus le temps passe, plus il est illusoire d’espérer se rappeler pourquoi vous avez approché un problème comme ceci ou cela.
La personne que vous serez dans six mois, à l’inverse, devra payer vos dettes. Être gentil avec elle, c’est être gentil avec vous ! Documentez, écrivez, annotez, renseignez, expliquez, détaillez, testez !
Et maintenant que vous êtes convaincu, concentrons-nous quand même sur le travail dans une équipe de plusieurs personnes : il sera plus facile de raisonner sur cette base.
1. Rédiger des conventions d’écriture
Personne n’aime...
Rejoindre une communauté
Pour un débutant, apprendre le développement de logiciels est une tâche difficile. Pour obtenir un peu d’orientation ou d’éclaircissement, le support d’un groupe et de quelques mentors est souvent nécessaire. Pour un développeur plus expérimenté, c’est aussi la possibilité de changer de contexte, de partager avec d’autres experts et de ne pas se reposer sur ses lauriers.
Produire du code de qualité n’est qu’une facette d’un développeur expérimenté. D’autres actions viennent s’ajouter au quotidien : enseigner aux collègues moins experts, présenter des choix et leurs conséquences, encourager et motiver votre équipe, etc. Ces nouvelles compétences ne s’acquièrent pas du jour au lendemain : il faut pratiquer, apprendre à parler aux autres, prendre du recul pour se mettre dans la peau d’un débutant. La communauté est un merveilleux espace d’entraînement : pas de relation hiérarchique, pas de contraintes budgétaires, des relations amicales et détendues, etc. Les interactions entre développeurs y sont (théoriquement) honnêtes et franches, ce qui permet d’approfondir ses connaissances tout en améliorant son relationnel. Un expert qui peut présenter son travail...
Maîtriser les problèmes récurrents
L’informatique et plus encore ses approches théoriques datent de plusieurs décennies. Durant ce temps, et avec bien davantage de contraintes qu’aujourd’hui (espace, mémoire, outils), des théoriciens et des praticiens ont uni leurs forces pour étudier, tenter de résoudre des problèmes relevant de plusieurs domaines (compression de données, chiffrement, algorithmes de tri, optimisations, etc.).
Au fil du temps, des dizaines de livres, puis des centaines de blogs ont été écrits sur chacun de ces sujets. Identifiez les sources qui pourraient vous aider pour votre problème et n’hésitez pas à les consulter si besoin.
1. Débogage
Du code, ça produit des bogues. Il est illusoire et utopique d’exiger d’un développeur un code sans aucun bogue. Un code de qualité n’est pas uniquement un code qui contient peu de bogues, mais aussi un code qui permet de les traquer et les éliminer rapidement.
Bien sûr, il existe différents outils et méthodes pour déboguer. Une heuristique qui a fait ses preuves consiste tout simplement à traquer le bogue dans les derniers éléments de code modifiés (parce que les tests ont confirmé que les dernières versions étaient parfaites). Parfois, le problème se cache dans des hypothèses établies durant la genèse du logiciel. Il faudra alors aller le chercher en profondeur, avec en crainte de fond la remise en cause de l’architecture complète de l’application.
Chaque méthode de production de code (IDE, framework, langage) possède ses outils de débogage, et chaque couche logicielle également. On n’utilise pas les mêmes outils pour détecter des problèmes d’accès au système de fichiers ou de surcharge de la RAM, ni les erreurs réseau ou les interblocages. Là encore, regardez ce que proposent votre communauté et votre équipe, et exploitez les compétences particulières de chacun.
2. Traces
Une pratique reste commune à presque toutes ces méthodes et tous ces outils de débogage : tracer ce qui se passe et en écrire un résumé dans un fichier afin...
Poursuivre sa croissance personnelle
« La seule constante est le changement. »
Ce dicton est d’autant plus vrai dans un secteur comme l’informatique en général et le développement en particulier. Si les langages peuvent tenir quelques dizaines d’années (et encore, avec de nouvelles versions régulières), les bibliothèques, frameworks, architectures et approches changent au gré des modes.
Des modes, mais pas seulement : les contraintes matérielles telles que la puissance et l’affichage des équipements, la connectivité, façonnent les usages et les standards, et toutes ces contraintes extérieures rejaillissent sur le code.
1. Savoir poser des questions
Dans l’informatique comme dans l’histoire de la science et tout autre métier, pratiquer l’art de poser des questions est aussi le meilleur moyen d’y répondre.
Ce qui est surprenant devrait être investigué.
Ce qui est à la base des raisonnements devrait être investigué.
Ce qui est vrai depuis trop longtemps sans qu’on se souvienne pourquoi devrait être investigué.
Étudier le problème inverse de celui que l’on examine est intéressant.
Et... les questions que l’on pose sont-elles les bonnes questions à poser ?
La communauté des « hackers » a souvent des réactions épidermiques aux questions trop simples, trop fréquentes, mal formulées. Elles irritent et se voient plus facilement rejetées....
Poursuivre sa croissance professionnelle
1. L’humain
Ce n’est pas une discussion avec un collègue ou un manager qui explique votre promotion ou qu’on vous attribue des projets : c’est surtout la confiance que vous inspirez, la sympathie dont vous faites preuve, le respect que l’on vous porte. En plus des prérequis techniques, votre évolution se base également sur le social et l’humain. Ne perdez jamais cela de vue.
Indépendamment d’un « bon vouloir », il y a aussi le pouvoir : une entreprise en chute libre peut vous offrir des challenges temporaires, mais ne peut pas vous offrir de croissance à long terme.
Quelle que soit la situation, lorsque vous discutez avec votre direction, sachez écouter et être patient : vous disposez d’une connaissance rare et d’informations que votre interlocuteur n’a pas. Ceci peut le mettre mal à l’aise, voire le faire se sentir vulnérable ou dépassé. Prenez le temps de comprendre leurs demandes : cela vous permettra de repérer leurs préoccupations, de les apaiser si possible, et, même si vous ne parvenez pas à résoudre le problème, d’éviter d’aggraver la situation.
Réfléchissez à ces questions et appliquez-en les enseignements, car c’est comme cela qu’on vous verra...
Conclusion
Ce chapitre est plein de conseils. Vous en comprenez sûrement déjà certains qui semblent superflus, vous en ignorez sûrement d’autres qui vous semblent lointains ou annexes. Tout appliquer, tout de suite, semble une tâche effrayante. Votre cerveau est une belle machine et elle est tout aussi faillible. Entretenez-la ! Restez actif et rationnel, curieux et proactif, mais surtout...
Amusez-vous !
Le code est une activité créative, libératrice. Vous en avez fait votre métier ou souhaitez le faire. Profitez-en !