Je me tiens informé sur plusieurs enjeux de l'informatique de plusieurs sources. Une que j'apprécie bien est Developpez.com. À presque chaque jour, il y a des nouvelles sur différents produits, frameworks et enjeux légaux et sociaux liés à l'informatique. Ce site est aussi doublé d'un forum et d'un blogue qu'utilisent certains développeurs, au même titre que j'utilise newblog.ca comme tribune.

En faisant une lecture du texte d'opinion "Un développeur qui refuse de partir de zéro ne mérite pas le titre de développeur", j'ai comme eu un sentiment de colère: Ce gars ne comprend rien à rien au développement professionnel. Il fallait que je réponde à cet article. Voilà qui sera fait avec ce billet. Je vous conseille fortement de lire l'article de Guillaume Loulier, alias Guikingone avant de poursuivre votre lecture.

La réalité du développement professionnel

C'est plaisant de programmer, développer et faire du code jusqu'à 2h du matin. J'adorais ça quand j'étais étudiant, et j'aime encore ça lorsque je planche sur un projet open-source. Cependant, je sens qu'un développeur professionnel ne devrait pas aimer créer du code, du moins dans un contexte professionnel. Et voilà pourquoi: créer du bon code, c'est difficile, et pour plusieurs raisons.

Se fier à l'expertise des autres projets

Je pense que presque n'importe qui peut créer du code. Il suffit de regarder la multitude de gens qui créent des macros sous Excel ou sous Access pour s'en rendre compte. Ayant personnellement eu à travailler sur des projets Excel débutés par des non-développeurs à plusieurs reprises, je peux affirmer que c'est souvent un paquet de nœuds incompréhensibles.

Alors, me direz-vous que cela prend du temps et qu’il faut s’y atteler, mais bon sang, pourquoi sommes-nous développeurs si une tâche aussi simple vous semble impossible ?! Pour moi, toute personne me répondant par la négative à cette invitation ne mérite pas le titre de développeur ! [sic]

Pour pouvoir créer du bon code, il faut avoir une compréhension profonde de ce que l'on veut faire et du contexte dans lequel ce code sera exécuté. J'avais d'ailleurs un collègue de travail qui me reprenait à chaque fois je disais "il suffit juste de ..." Il me disait que pour chaque chose, il y a un contexte, et que ce contexte peut transformer des choses simples en casse-tête complexes. J'ai depuis arrêté d'utiliser cette expression (et je reprends maintenant moi aussi les gens qui me servent ce discours). Lorsque l'on comprend comment l'outil sera utilisé, sous quelle plate-forme et quels états et chemins une activité peut prendre, on sait immédiatement que tout peut devenir difficile. Comme tout peut facilement devenir compliqué, j'ai tendance à me fier à des gens qui ont de l'expertise et qui se spécialisent en la matière. Cela ne fait pas de moi un semi-développeur, mais bien quelqu'un de prudent qui livrera son projet à temps, sans faire 10 000 heures de temps supplémentaire.

J'aimerais en profiter pour faire une parenthèse sur le sujet de l'expertise dans un domaine. Je crois fermement que n'importe qui peut devenir expert de n'importe quel sujet, en autant que la personne s'y focalise. C'est en forgeant que l'on devient forgeron. C'est pourquoi je n'hésite pas à utiliser des projets open-source pour accélérer mes développements. Cependant, je crois aussi que dans un projet commercial, il vaut mieux se concentrer sur des aspects qui apportent de la valeur à notre client. Il reste important d'être curieux et d'explorer de nouvelles possibilités en réimplémentant des fonctionnalités pour mieux les comprendre, par exemple. Mais le milieu professionnel n'est pas la place pour le faire. Livrer de la valeur passe souvent par de l'intégration de plusieurs morceaux différents qui travailleront de pairs, du glue code. Ce n'est peut-être pas ce qu'il y a de plus palpitant, mais c'est ce qui est nécessaire la plupart du temps. On tombe rarement sur une fonctionnalité véritablement palpitante. Si forger est ce qui t'intéresse, peut-être vaudrait-il mieux que tu fasses un emploi certes un peu moins passionnant (sans non plus devenir de la torture), mais qui prenne moins de ton temps journalier et qui te permette de forger sur ton propre temps sur tes propres projets et sur des projets communs (j'adore l'open-source pour cela). C'est ce que je fais et ce que je pense que chaque développeur qui veut vraiment s'améliorer devrait faire. (Fin de la parenthèse).

Arrières-pensées pour certains, priorités pour d'autres

[...]Un développeur débutant sera capable sans soucis de développer un système de gestion de contenu (SGC et non CMS) sans effort[...]. La qualité finale sera la même que celle de Wordpress sauf que ce projet sera purement adapté à un besoin.

Quand on décide d'utiliser un outil comme un CMS, on n'importe pas que l'éditeur de contenu, mais bien d'autres morceaux comme le routing, la sécurité, le workflow d'approbation des billets et la console d'administration. Plusieurs des morceaux qui viendront avec l'outil seront probablement des arrières pensées de notre projet courant, mais seront des priorités pour les créateurs de ces outils. Cependant, la chose la plus importante que l'on importe avec ces outils sont les tests qui accompagnent ces fonctionnalités. Il ne faut pas oublier que chaque ligne de code que l'on écrit en milieu professionnel devra être testée, maintenue et supportée. En connaissant le coût de ces activités, mieux vaut déléguer ce code à quelqu'un d'autre. N'est-il pas plus facile de demander conseil à un expert que de chercher soi-même dans le code pendant quelques heures afin de trouver la cause profonde d'un problème, sachant que chaque heure écoulée coûte un montant X ?

Un monde d'optimisation des coûts

Là où un framework comme Symfony est conçu pour du développement « from scratch », WordPress vous fournit les fondations d’un projet, aucun intérêt à mes yeux !

Ce que je décris est le développement professionnel. C'est un monde où l'on cherche à optimiser les coûts et à maximiser chaque dollars. Puisqu'il y a une limite de temps et d'argent, mieux vaut se concentrer sur ce qui importe réellement et qui apporte une véritable valeur au client. Le temps de mettre en place un système de gestion de contenu est du temps perdu, car l'utilisateur ne verra pas la différence entre Wordpress et l'implémentation qui sera mise en place. Pis encore, le client a peut-être même une expérience passée dont il aurait pu profiter, mais à cause d'une folie de programmeur qui voulait se sentir plus intelligent, il devra apprendre à utiliser un nouveau système. Je me fais souvent dire que je sur-estime les capacités des utilisateurs, et mes critiques ont probablement raison. Il ne faut pas oublier que la plupart des utilisateurs ne comprennent pas nécessairement ce qu'ils font: certains font exactement comme ils l'ont appris sans jamais se demander comment faire autrement. Je serais d'ailleurs curieux de voir des chiffres à ce sujet.

Programmer est une activité mentale exhaustive

[...] J’aime ce métier de développeur [...], ce métier qui me donne envie de me lever le matin, celui qui occupe mes journées en freelance, celui qui me fait faire des journées de 10H-12H 7/7 [...].

J'ai aussi remarquer dans le billet que faire des journées de 10 à 12 heures semble être monnaie courante pour un vrai développeur. Je ne crois pas que cela devrait être le cas. Je crois que développer est une activité mentale intensive qui ne peut durer plus de quelques minutes consécutives. Après quelques répétitions, il est normal d'être épuisé. Je remarque aussi que bien souvent, le code que je ponds à 1h00 du matin n'a pas la valeur de se retrouver en production. Je sais que si à cette heure tardive, le happy path d'un cas fonctionnera probablement bien, on ne pourra certainement pas en dire autant de toutes les autres possibilités. En fait, on pourrait probablement dire la même chose du code que j'ai écrit à 11h00 ce matin, ou à 13h00 un vendredi 13 juin d'une quelconque année, à un degré plus ou moins élevé. Un développeur qui se dit professionnel sait une chose: Son code est le pire code qu'il n'a jamais vu.

En fait, ce n'est probablement pas que son code qui est affreux. C'est probablement la majorité du code qui sert à faire tourner la plupart de nos composantes technologiques (et le monde, pensez-y) qui est affreux. Cependant, mieux vaut avoir un code affreux qui a été testé et éprouvé qu'un code affreux abandonné à lui-même qui pourrit dans un projet par manque de priorité. La réalité, c'est que l'on se retrouve toujours à faire des compromis sur le code que l'on envisage par manque de temps. Dès lors que l'on sait que le code que l'on produit est immonde, mieux vaut en produire le moins possible et utiliser ce que les autres ont créé, testé et repris autant de fois que nécessaire, parce que c'était leur priorité et que ce n'est pas la nôtre.

Pour moi, un développeur amateur peut devenir un professionnel à condition de mettre de côté sa fierté de ne pas utiliser du "pré-fait" et son désir de réinventer la roue. Je ne suis pas d'accord avec le billet de Guikingone, parce que je pense que l'auteur tente d'appliquer une mentalité de développeur amateur à un domaine plus contraint. Le développement professionnel n'est pas nécessairement palpitant, mais il s'agence bien à l'open source (bien plus palpitant selon moi), car il donne un but concret à ces outils créés par des amateurs. Je pense que chaque développeur passionné reste un amateur, mais qu'il peut mettre un habit plus professionnel. Je pense aussi que la nécessité d'être concret justifie l'usage de certains outils afin d'y transférer certaines responsabilités. Cela permet de nous concentrer sur ce qui crée de la valeur. Enfin, un développeur professionnel sait que son code est affreux et débile et qu'il vaut mieux éviter le plus possible de le mettre en production. C'est pourquoi ces développeurs font usage des outils comme des CMS: Les gens qui y travaillent sont plus spécialisés et comprennent mieux le contexte dans lequel leur outil s'exécutent. Il s'agit d'une question d'efficacité.

N'oubliez pas: De 8h00 à 17h00, je me consacre à mon travail professionnel, mais après mes heures de travail, je retire mon costume de professionnel et je redeviens un développeur amateur qui aime réinventer la roue et qui adore programmer jusqu'à 2h00 du matin. Il suffit de comprendre qu'à chaque travail son outil.


Un développeur qui refuse de partir de zéro ne mérite pas le titre de développeur

Guillaume Loulier, alias Guikingone
http://www.developpez.com/actu/95013/Un-developpeur-qui-refuse-de-partir-de-zero-ne-merite-pas-le-titre-de-developpeur/

Aujourd’hui, je n’ai pas envie de parler technique ou manipulation PHP, non, aujourd’hui, j’ai envie de parler de code, le vrai, le pur, le dur. Récemment, j’ai obtenu un entretien d’embauche pour un poste de développeur Web, chouette me dis-je, mon CV intéresse les entreprises, jusqu’au moment du rendez-vous, tout me semblait bien, et puis la douche froide.

Je l’avoue, je débute dans le développement, je sais travailler, mais je manque d’expérience in situ, dans le monde stressant et envoûtant du développement en équipe, je veux découvrir ce monde, je tente de combler ce vide, car oui, je suis motivé, attentif et patient (je ne ferai pas de lettre de motivation ici, mais au besoin, mon CV vous attend sur mon profil) et j’aime ce métier de développeur (j’aime aussi les fruits et alors ?), ce métier qui me donne envie de me lever le matin, celui qui occupe mes journées en freelance, celui qui me fait faire des journées de 10H-12H 7/7 (oui, je suis comme ça) et qui me fait me coucher heureux, car j’ai résolu un souci de contrôleur.

Revenons à cet entretien, tout se passait bien puis la recruteuse m’a parlé de CMS, je connais Wordpress, Joomla, PrestaShop et j’en passe, mais je ne les utilise pas, pourquoi me direz-vous ?
La vérité est qu’à mes yeux, ces outils ne sont pas des outils de développeur (mais change de métier alors !), mais des outils de travailleur à la chaîne, pourquoi ce jugement ?

À ses débuts, Wordpress était pensé pour créer des blogs, oui, des blogs pas des applications web, le CMS a évolué et est devenu un outil polyvalent, mais est-il devenu pour autant un outil de développeur au même titre que Symfony ? Non, simplement car il n’est pas « personnel », mais bien formaté pour une utilisation standard. Là où un framework comme Symfony est conçu pour du développement « from scratch », WordPress vous fournit les fondations d’un projet, aucun intérêt à mes yeux ! Mais pourquoi ce jugement ?

Quand j’ai effectué mes mois de formations en tant que développeur Web, j’ai compris que le métier est celui de gens passionnés et méticuleux, ce métier est celui des gens qui aiment ce qu’ils font, pas celui de ceux qui « piratent » leur workflow, comment prétendre développer un site « adapté » si ce dernier est lié à un outil formaté ?
Alors oui, je le conçois, cet outil est utile, il permet de travailler plus vite et de manière « formatée » en suivant des règles, mais est-ce bien toujours du métier de « développeur » dont nous parlons ? Je ne pense pas, à mes yeux, un développeur part de zéro et est aidé dans sa progression par un ensemble de développeurs qui améliorent son workflow en s’occupant de certaines parties, prenons un exemple tout simple.

Imaginons une application web tournant sous Symfony, cette dernière peut sembler complexe, mais un développeur débutant sera capable sans soucis de développer un système de gestion de contenu (SGC et non CMS) sans effort, comment ? Simplement en utilisant les bundles, la console, Doctrine, Twig et j’en passe, la qualité finale sera la même que celle de Wordpress sauf que ce projet sera purement adapté à un besoin, si le développeur s’arrête à ce stade, tout projet utilisant Symfony pourra utiliser son SGC sans effort et de plus, il pourra le partager avec le monde entier afin que tout un chacun puisse l’améliorer et accélérer son workflow, au fond, est-ce si difficile de faire simple ?

Imaginons un site de vente en ligne qui veut un résultat sur mesure, le SGC précédemment cité pourra remplir les besoins et le développeur pourra de surcroît améliorer son application afin que les besoins du client soient matchés.
Alors, me direz-vous que cela prend du temps et qu’il faut s’y atteler, mais bon sang, pourquoi sommes-nous développeurs si une tâche aussi simple vous semble impossible ?! Pour moi, toute personne me répondant par la négative à cette invitation ne mérite pas le titre de développeur !

Alors oui, je vous vois venir, vous me direz que je n’y comprends rien et que je débute, mais je vous arrête là par une affirmation, réfléchissez-y deux secondes, pourquoi passer par un outil qui n’en est pas un, c’est comme si un cuisinier utilisant un Magimix, aucun cuisinier digne de ce nom n’utilise de Magimix, cela facilite la vie, mais au fond, celui qui aime son métier ne compte pas les heures de travail, ni celle de frustration ni l’échec, car c’est dans ce dernier que nous arrivons à la saveur même de chaque métier, celui de se dépasser, de pousser plus loin notre vision étriqué du métier que nous chérissons, car oui, mesdames, messieurs, j’aime ce métier et utiliser une pelle pour planter un clou ne me semble pas adapté.

Alors je conclus, je n’ai pas eu ce poste et finalement, je crois que cela n’est pas un mal, car au fond, donner le meilleur de moi-même dans un environnement qui n’est pas celui que j’affectionne me rendrait malheureux et je finirais par rogner sur la qualité de mon travail, au fond, je dois bien l’avouer, je suis méticuleux, attentif, patient, rigoureux et passionné, mais plus que cela, j’aime ce que je fais et cela n’a pas de prix.