Informaticienzero

Le blog d'un informaticien passionné de partage, d'échanges et surtout, pas si zéro que ça.

Dans la première partie de cet article, nous avons abordé plusieurs points. Sous la métaphore d’un chat mangeur de code source, nous avons compris qu’un bon programmeur ne fournit pas de mauvaises excuses mais plutôt qu’il doit fournir des solutions. D’ailleurs, c’est lui qui prend en main sa carrière, ses projets et son travail quotidien, même si cela lui demande humilité et modestie.

Ensuite, nous avons examiné l’importance de corriger la moindre vitre brisée dans le projet. Ne pas le faire peut couler un projet si bien parti. D’ailleurs, depuis la publication de la première partie de cet article, un commitstrip est sorti, s’amusant d’un problème pas si éloigné.

Enfin, nous nous sommes quittés sur l’histoire de la soupe de cailloux et la grenouille, pour comprendre l’importance d’être un catalyseur amenant des changements positifs tout en évitant de trop se laisser absorber par les détails au point de perdre l’image générale du projet.

Il est donc temps d’examiner les 3 autres principes, qui concluront ce premier chapitre.

Des logiciels de qualité

Aux États-Unis existe une blague mettant en scène une compagnie américaine achetant 100.000 circuits intégrés à un fabriquant japonais. Une des conditions était de n’avoir qu’une pièce défecteuse par lot de 10.000. Quand, quelques semaines plus tard, l’entreprise américaine reçu sa commande, elle remarqua qu’il y avait deux paquets. L’un contenait des milliers de composants ; l’autre, minuscule, n’en contenanait que 10 avec joint un message disant « Voici les pièces défectueuses. »

Une telle qualité est malheureusement bien compliquée à obtenir dans le monde du développement. Les développeurs ont des contraintes de temps, de technologie, de mentalité aussi (certains pourraient se dire « Pourquoi se casser la tête à essayer de faire un excellent produit ? »). Mais ce constat ne nous laisse pas sans espoir : il est possible de créer des logiciels suffisamment bons.

Cette section du premier chapitre de The Pragmatic Programmer, contrairement à ce qu’on pourrait penser, ne vas pas parler de la qualité du code (bonne conception, tests unitaires, preuve formelle, etc) mais va plutôt parler de la qualité du produit lui-même. Répond-il aux besoins ? Correspond-il aux attentes du client ? Est-il agréable à utiliser ?

Le livre suggère par exemple d’impliquer tous les utilisateurs et acteurs sur la qualité du produit. On peut faire le lien aujourd’hui avec les méthodes agiles et les délais très courts entre chaque itération qui permet au client d’avoir un retour presque en temps réel sur le produit. L’ajustement par rapport à ses attentes et besoins sera ainsi plus facile et rapide.

Dans le genre d’écueils à éviter, il y a ceux qui ignorent complètement les utilisateurs ou les contraintes (du projet, de temps, d’argent, etc) simplement pour ajouter une fonctionnalité supplémentaire ou peaufiner le code à l’excès. À l’autre opposé, c’est tout aussi peu professionnel de passer outre les bases de la conception et les bonnes pratiques pour tenter de tenir des délais impossibles. Après, ces écueils sont-ils imputables uniquement aux développeurs ? Non, il faut aussi que les autres membres du projet (architectes, chefs de projets, commerciaux) jouent le jeu en ne demandant l’impossible ni au client ni aux équipes de développement. Mais là, on tombe dans un autre domaine, celui de la gestion de projet.

La morale de cette section, résumée en une phrase est de faire de la qualité du produit une fonctionnalité requise aussi importante que les aspects techniques.

Cette section conclut avec un piège dans lequel il est facile de tomber par excès de zèle : le perfectionnisme. Le perfectionnisme, sous prétexte de vouloir encore plus améliorer, peaufiner, corriger, au final, ne livre jamais rien si l’on ne le force. Et puis, qui ne préfère pas avoir un bon logiciel aujourd’hui qu’un logiciel parfait demain ?

Voilà pourquoi je suis sous Archlinux et non Debian.

Un portefeuille de connaissances

Un investissement dans la connaissance rapporte toujours les meilleurs intérêts.

  • Benjamin Franklin

Je n’ai pas l’habitude de noter les citations du livre, mais celle-ci m’a paru excellente. En effet, est-ce que la connaissance et l’expérience ne sont pas les aspects les plus précieux et les plus importants pour un développeur ? Et puis, sans investissement, on stagne, nous ne sommes plus à jour, nos connaissances peuvent se périmer (exemple de C++ pré et post 2011), nous perdons de la valeur au fil du temps qui passe. Investir dans la connaissance est donc important. Commençons donc par voir 5 conseils donné dans le livre.

  1. Investir régulièrement, qu’investir devienne une habitude. Même si la somme est petite. Tout investissement est bon à prendre.
  2. Diversifier. C’est la clé du succès à long terme. De plus, la diversification apporte de la valeur : plus on élargie ses connaissances et plus l’on est à même de s’adapter aux situations ou au changement. Pour illustrer, un topic a été créé sur Zeste de Savoir à propos des langages fonctionnels ; beaucoup d’intervenants conseillaient l’apprentissage d’un de ces langages parce qu’il aide à mieux réfléchir et utiliser les langages impératifs ou objets.
  3. Sécuriser ses investissements. Un investisseur raisonnable ne va pas placer tout son argent dans des placements à hauts risques, même si ceux-ci peuvent rapporter beaucoup plus. Mais à l’opposé, il ne va non plus tout mettre dans des placements sécurisés mais particulièrement peu rentables. De même, un bon développeur doit apprendre à trouver l’équilibre entre des technologies émergeantes qui peuvent disparaitres du jour au lendemain et des technologies matures mais bien ancrées.
  4. Acheter à bas prix, revendre très cher. Dans la suite directe du point ci-dessus. Apprendre une technologie émergeante est parfois une véritable gageure, à cause du manque de documentation, des bugs, du peu de personnes capables de répondre à des questions qu’on se pose, etc. Mais qu’elle devienne populaire et murisse et bing ! le gros lot ! À l’heure où j’écris cet article (24 septembre 2015), je pense à Docker, une technologie basée sur les conteneurs Linux dont on entend de plus en plus parler depuis 2014 et qui grimpe. Bien qu’apprendre à bien s’en servir semble encore un peu compliqué, je pense que ça vaudra son beau pesant d’or d’ici quelques années, quand Docker sera mature et répandu.
  5. Mettre à jour et rééquilibrer son portefeuille. Un bon exemple est C++. On peut avoir investi dedans avant 2011 et enrichi son portefeuille avec. Mette ce dernier à jour consistera à apprendre les nouveautés depuis cette date.

La suite du chapitre contient plusieurs conseils d’investissements. Je ne détaillerai que ceux que je tente de mettre en pratique.

Mais si apprendre est bien, il ne faut pas donner crédit à tout ce qu’on lit, entend ou voit. N’oublions pas que l’on vit dans un monde rempli d’entreprises et de corporations qui veulent vendre leurs produits, même en informatique. Ce n’est pas parce qu’une page Internet est la première référencée par un moteur de recherche qu’elle est forcément de qualité ou objective.

Ça me rappelle des articles dans le magazine Programmez qui présentent un outil résolvant tel ou tel problème, le dit article étant écrit par la société éditrice de l’outil. De la publicité quoi. Tout n’ést pas à jeter, mais il faut néanmoins garder un esprit critique en lisant ce genre de publication.

Communique !

Un développeur communique tout le temps. Dans des réunions avec le client pour comprendre ses besoins (tiens, on me souffle dans l’oreillette que dans un monde parfait ce ne serait pas au développeur de faire ça). On écrit du code grâce à un langage, signe de notre communication avec la machine. On documente aussi, pour nous-mêmes mais aussi les développeurs futurs. On échange avec son équipe pour définir l’orientation du projet, on défend ses idées, on propose des améliorations. Et tiré de mon expérience professionnelle : on râle après la machine à café. En bref, il faut apprendre à bien communiquer.

Nous voici arrivés à la fin de ce premier chapitre, chapitre présentant un peu l’éthique d’un développeur pragmatique. Dans le chapitre deux, nous verrons comment avoir cette fois une approche pragmatique. Mais en attendant, bonne méditations de ces principes et bonne mise en pratique !