Quand le code devient une oeuvre d'art...

tux peintre    Que vienne l'heure de distribuer votre code ou quand bien-même vous le garderiez pour vous, que vienne l'heure de faire évaluer votre travail ou quand bien-même vous ne le montreriez à personne, coder propre est une nécessité. Pour soit même comme pour les lecteurs, la structuration du code, sa clarté et sa documentation le rendent plus agréable à lire et permettent de différencier le bon développeur du moulineur de code.
    Les personnes issues de l'école du 'faut qu'ça marche', c'est à dire capable de pondre rapidement un code imbuvable mais fonctionnel sont nombreuses et force est de constater que leurs productions représentent la majorité des contributions du web. Vous en connaissez sûrement: ceux qui font des réponses obscures sur les forums et dont les codes incompréhensibles ne compilent jamais. A contrario, vous avez déjà certainement utilisé des librairies ou des codes qui, une fois téléchargés, se compilent, s'exécutent et fonctionnent parfaitement! Soyons honnêtes: ce sont bien ces derniers qui ont la classe ! Au risque d'être pris pour un 'artiste', voici une série d'articles sur des conseils pour programmer propre et coder beau, car oui: un bon programme est une oeuvre d'art. 
 
    Tout au long de ces lignes, nous aborderons diverses méthodes et croiseront différentes conventions dont le but est de faciliter l'édition d'un code agréable à relire. Ces conseils sont une compilation d'expériences personnelles ou d'outils standards qui ont fait leur preuve. Pourtant, au-delà de ces conventions, le lecteur s'attachera à comprendre la philosophie générale plutôt que l'outil puisque celle-ci seulement lui garantira le succès d'un code apprécié. Dans le code qu'il crée comme dans ce document, il devra avoir un regard critique et chercher sans cesse l'amélioration. Si les conseils présentés ci-dessous vous paraissent pertinents -ou au si contraire vous n'êtes pas d'accord- n'hésitez pas à réagir en laissant un commentaire.

Apprendre à programmer en 10 ans

gateau    Je vous propose une petite expérience: lancez votre moteur de recherche préféré et essayez cette recherche: teach yourself in 24 hours. Impressionnant non? Si l'on en croit les résultats, SQL, PHP, C, Java, XML, UML, VisualBasic, HTML, .NET, LISP, tous semblent pouvoir être appris en 24h. Ouvrons Teach yourself C in 24h: les pointeurs sont-ils vraiment compréhensibles en une heure? Certainement pas! Apprendre un langage de programmation prends du temps, de la patience, du travail et surtout de la passion. Si n'importe qui pouvait en 24h apprendre un langage, les professionnels du domaine ayant fait de longues études (techniciens, développeurs, ingénieurs) seraient inutiles sur le marché de l'emploi!
    En quelques jours, il n'est pas possible, comme le vantent ces livres, d'apprendre un langage informatique et d'être performant dans ce langage. Au mieux, vous en comprendrez la syntaxe,  mais certainement pas les subtilités.
    Selon certains chercheurs, tel Bloom (1985) ou encore Hayes (1989) développer une expertise dans un domaine quelconque -échec, mathématiques, programmation, musique,...- prends environ 10 ans. Des études plus précises dans les classes du 'Berlin Academy of Music' par Malcolm Gladwell montre qu'environ 10.000 heures de pratique sont nécessaires pour atteindre une expertise, 8.000 pour un praticien doué et 4.000 pour pouvoir enseigner.
   
    Le but de ce paragraphe n'est pas de vous démotiver mais au contraire de vous prévenir. En peu de temps, le débutant peut effectivement se faire plaisir à développer des programmes ambitieux et intéressants. Cependant, ce n'est pas une raison pour lui de vanter les mérites de son expertise après seulement quelques jours, semaines ou mois. Chaque jour, à chaque programme, à chaque challenge, le programmeur expérimenté découvre encore de nouvelles voies, de nouvelles pistes, de nouvelles optimisations. Apprendre est l'art d'une vie....

Quel langage apprendre:

binaire    L'une des nombreuses questions revenant sans cesse sur les forums concerne le langage à apprendre: 'J'aimerai apprendre à programmer: quel est le meilleur langage?' Que le lecteur comprenne tout de suite que cette question n'est pas la bonne! Demanderiez-vous quelle langue étrangère apprendre pour aller à l'étranger? Evidemment tout dépend de votre pays de destination. Certes pour les langages software comme pour les langues, il en est des plus "rentable" que d'autres. Le C/C++ en première position, (encore que ce soit un avis subjectif) équivalent de l'anglais dans notre exemple. Pourtant, si de nombreux langages existent, c'est que chacun possède des spécificités intéressantes. A vous de déterminer lequel est utile pour ce que vous voulez faire. Souhaitez-vous programmer des jeux-vidéos? des applications d'IA? des programmes embarqués sur des robots?
    L'une des meilleurs solutions me semble-t-il est de commencer doucement. Vous pouvez par exemple commencer par vous initier à l'algorithmique puis aux structures de données, ce sont des parties de programme indépendantes du langage qui déterminent la suite des actions à effectuer pour traiter un problème donné, un peu à la manière d'une recette de cuisine. Si vous êtes intéressés par la programmation de logiciel et si vous possédez une calculatrice programmable, apprenez à programmer des choses simples dessus, puis évoluez vers le Basic -et enfin vers le C.  De là, vous pourrez faire ce que vous voudrez. Si vous préférez la programmation Web: commencez par la base: HTML et CSS, puis évolué le PHP, le SQL et de même vous pourrez par la suite évoluer vers ce que vous voulez...
    Pensez aussi aux langages à caractère éducatif . Vous pouvez par exemple apprendre le KPL: Kids Programming Langage (ici tutoriel 1er programme KPL).
 
D'une manière générale, voici quelques conseils pour vous aider à choisir:
- la communauté: demandez à vos amis quels langages eux-même utilisent. Regardez les langages pour lesquels la communauté est importante et prolifique. En faisant ainsi, vous saurez vers qui vous tourner pour demander des conseils ou pour vous aider en cas de bugs.
- la simplicité: commencez à apprendre un langage simple. Ne commencez pas forcément tout de suite avec un langage typé ou à la syntaxe trop prononcée. Le Python sera un bon moyen de vous initier au C. Pas de pointeur, pas de typage des variables, il permet un développement simple et rapide tout en offrant la possibilité de prendre de bonnes habitudes quant à l'indentation car celle-ci fait partie intégrante d'une syntaxe correcte.
- l'interactivité: vous imaginez-vous apprendre le piano en ne pouvant écouter le résultat uniquement après avoir jouer l'intégralité de la mélodie sur le clavier? Pour la programmation c'est la même chose. Choisissez un langage et un IDE (environement de développement intégré = le logiciel que vous utiliserez pour programmer) qui vous semble pratique, ergonomique et simple d'emploi. CodeBlocks, Borland, MS-Studio, Notepad++, Eclipse, CodeGear, WinDev, 4edimension, EMacs, KDevelopp, NetBean, JCreator... (la liste est longue).

Quelques conseils pour bien programmer:

C'est en forgeant que l'on devient forgeron. Sur l'établi milles fois remet ton usage. Ces deux maximes devraient être l'adage du programmeur. 
 
conseil - Lire du code: c'est par cette pratique que vous pourrez repérer les fautes et les réussites d'un programme écrit par un tiers. Inspirez vous en pour concevoir vos propres programmes. Repérez ce qui fonctionne, améliorez ce qui ne fonctionne pas. Confrontez les idées, cherchez à comprendre les motivations de l'auteur, discutez les choix dans les solutions.
- Ecrire du code: ce n'est qu'en pratiquant par soit même que l'on s'améliore vraiment. Lire la documentation et chercher une solution est bien plus efficace pour son apprentissage que d'en lire la solution dans un livre. (cf: Why is learning by experience better than learning by studying?)
- Rêver du code: comme pour tout domaine non trivial demandant une pratique assidue, programmer est long, difficile, mais extrêmement gratifiant. Le meilleur moyen d'y parvenir et d'avoir envie de continuer dans cette voie est de transformer l'effort en réconfort, d'idéaliser la gratification au point de faire de la fierté de la réussite la motivation principale. Aimer coder vous mènera à coder, coder vous mènera à être bon dans le domaine.
- Etudier: si programmer est la passion de votre vie, si vous êtes prêt à passer plusieurs années dans une école pour développer votre passion et en faire votre métier, alors sans hésiter, faites-le. Apprendre seul n'a rien à voir avec apprendre en cours, les concepts vous seront dispensés de manière rigoureuse, des méthodes vous seront enseignées, vos connaissances seront validées par des examens et vous pourrez vous comparer et échanger avec les autres étudiants. Rappelez-vous qu'apprendre dans son coin n'est jamais bon à long terme.
- Ecrire du code avec les autres: afin de développer votre rigueur, d'apprendre à suivre la structure prédéfinie, rien ne vaut le travail collaboratif. Monter un projet commun avec ses collègues, participer à un projet existant est une excellente mise en situation.
- Ecrire du code après les autres: toujours dans l'optique de lire du code, participez à la correction de logiciels Open Source. Attaquez-vous à un bug, réglez un problème, proposez une amélioration. Cette contribution ne sera jamais vaine, autant pour vous que pour la communauté.
- Respecter les standards et établissez vos conventions: ce point sera abordé plus en détail.
- Apprendre plusieurs langages: pour comprendre les implications de la programmation, pour appréhender au mieux les différents paradigmes, apprenez plusieurs langages, au moins un dans les principaux grands type. Apprenez le HTML pour les langages balisés, le PHP pour les langages de scripts interprétés, le C pour les langages impératifs, le C++ pour les langages objets, le LISP pour les langages fonctionnels....

Conclusion

    Aussi vrai que chacun peut  dessiner un schéma ou sculpter un bout de glaise, peu sont capables de chef-d'oeuvre comme la Joconde ou la Vénus de Milo. De la même façon, nombreux sont les codes qui pullulent sur le net mais peu sont réellement des chef-d'oeuvre.
    Cette conclusion a pour but de souligner une nouvelle fois qu'un code propre sera regardé par les connaisseurs comme une merveille, et que certains d'entre eux sont capables d'être ému devant un algorithme particulièrement astucieux ou devant une implémentation finement codée. Cessons la prétention intellectuelle du RTFM (Read That Fucking Manuel) et soyons altruiste jusque dans nos codes, capables d'en refléter les subtilités pour mieux les offrir à nos relecteurs...
 
-------------
Cet article a été lu et approuvé par Antoine Jouglet, Maître de conférence à l'UTC
------------

Les articles du Dossier

Article spécialisé
Icone de l'article

Conventions et conseils de programmation pour un code propre

Conventions et conseils de programmation pour un code propre : indentation, variables, commentaires. Tout ce qui transforme un code en oeuvre d'art!
Article spécialisé
Icone de l'article

Les étapes d'un projet bien mené

Découvrez les différentes étapes dans la gestion d'un projet de programmation: des conseils, des méthodes et des outils.
Article spécialisé
Icone de l'article

Tutoriel: Documenter un code avec Doxygen

Présentation du logiciel Doxygen permettant la création de documentation claire pour un programme. Utilisation, conseils, liste des balises: retrouvez tout le nécessaire pour créer une documentation parfaite.
Votre note : Aucun(e) Moyenne : 5 (5 votes)

Commentaires

Utilisateur non enregistré

http://norvig.com/21-days.html

Qui a copie qui? De toute facon c'est un tres bon article de toute facon