Développeurs : Réfléchissez !

Bonjour,

Dans le cadre de mon travail, je suis amené à tester les capacités des candidats développeurs.
Je me rends compte d’une chose évidente : vous êtes de plus en plus attirés par la facilité, vous ne réfléchissez plus !

reflechir

Je pense que la formation est en partie responsable de cet état. Réussir à l’école, c’est répondre ce que souhaite le professeur, pas résoudre un problème. Il n’est pas question de réfléchir ou de remettre en cause, alors que c’est pourtant la clé de la réflexion et de l’innovation.
En philosophie par exemple, le principe est de ne pas réfléchir par soi-même. Je m’explique avant de recevoir des insultes. Il faut répondre à un prédicat selon un schéma établi à l’avance en prenant les points de vue opposés de deux philosophes. L’examinateur n’est pas intéressé par votre avis, il veut connaitre le cheminement de votre pensée et savoir si vous savez retranscrire ce qu’on vous a appris. Il n’est pas souhaitable de proposer un point de vue personnel ! C’est dur à entendre…

En informatique, c’est pareil, les développeurs sont conditionnés.
Lors d’un entretien avec un candidat, si je demande à quoi sert un Adapter pour une ListView Android, il va me répondre immédiatement. C’est du par cœur, et franchement, ça ne m’intéresse pas vraiment. Cette info est disponible sur Google en quelques clics.
Mais si je demande comment trouver le n-ième nombre de la suite de Fibonacci, il me regarde avec des grands yeux et se retrouve face à un mur qu’il juge infranchissable. Pourtant, c’est un calcul extrêmement simple. Pour rappel, la suite de Fibonacci est faite en additionnant les 2 nombres précédents: 1, 1, 2, 3, 5, 8, 13, 21, … N’importe quel développeur digne de ce nom est sensé savoir faire ce type de calcul. Certains candidats ont même refusé de répondre en argumentant qu’ils étaient là pour un poste de développeur pour Android ! Vous vous doutez bien de la suite donnée à leurs candidatures…

Il y a quelques années, j’allais à des concours de type démo 4k ou 64k. L’objectif de ces concours est de réaliser des animations temps réel avec des effets spéciaux, de la musique… dans un programme qui fait moins de 4Ko ! Aujourd’hui, c’est pour ainsi dire, impossible de retrouver ça. Ça me fait penser à mon garagiste qui me dit qu’il ne peut rien faire pour réparer ma voiture, il lui faut un ordinateur spécial…

Les développeurs d’aujourd’hui ne connaissent plus les ordinateurs, ils sont simplement des utilisateurs de logiciel qui connaissent un peu plus que Excel ou Word…

En fait, je pense que l’éducation n’est pas la seule fautive, les nouveaux logiciels que l’on utilise sont si performants qu’on peut coder n’importe comment et obtenir un résultat correct ! C’est un constat dur à admettre mais c’est vrai. Pas besoin d’être John Carmack pour faire un FPS. On lance Unity 3D et en quelques clics, on obtient un résultat sympa.

Je vais vous prouver que la facilité prime sur la qualité. Prenons un exemple simple sur Stackoverflow, l’un des sites des plus utilisés par les développeurs du monde entier :

How would you count occurrences within a string (C#)?

La première réponse qui récolte 199 votes positifs est :

string source = "...";
int count = source.Length - source.Replace("\n", "").Length;

Pour compter le nombre d’occurrences d’un caractère dans une string, il suffit de compter le nombre de caractères total, supprimer tous les caractères recherchés et recompter le nombre de caractères…
Oui, le calcul est fait en une ligne et non, c’est n’importe quoi ! La réallocation de string est très coûteuse, une proposition comme celle-ci est contre performante et je n’imagine pas le nombre de programmeur qui l’utilise sans réfléchir…

Regardons la 2e proposition :

int count = source.Split('\n').Length - 1;

WTF ? Mais comment peut-on proposer ça ?
Là, c’est encore pire ! Notre string est décomposée en plein de petites strings indépendantes puis, on compte le nombre d’occurrences du tableau de string créé.
C’est avec douleur que je constate qu’il y a 245 votes positifs !

La troisième solution avec seulement 51 votes positifs est déjà mieux :

int count = 0;
foreach (char c in source) if (c == '\n') count++;

On parcourt la string une seule fois et on incrémente un compteur. C’est clair et j’aime bien.

Que se passe-t-il ? Et bien, c’est très simple, en C#, il n’existe pas de méthode intégrée pour réaliser ce décompte. Au lieu d’utiliser leur cerveaux quelques secondes, les développeurs tapent simplement ce qu’ils recherchent sur Google et recopient ce qui leur parait le plus simple. Et il y a des dizaines d’exemple comme celui-ci.

Le pire c’est que leur programme fonctionne bien : la puissance processeur et la mémoire compense la qualité médiocre du code… Mais, je reste vraiment persuadé que les batteries de nos téléphones tiendraient deux fois plus longtemps si les programmes qu’on télécharge étaient mieux codés… Qui s’en soucie ?

Snif

Messieurs développeurs, s’il vous plait, arrêtez de toujours rechercher des fonctions qui font le boulot à votre place ! Réfléchissez 🙂

Bon code à tous.

ZeroKcm

2 thoughts on “Développeurs : Réfléchissez !

  1. Il y a du vrai dans ce que tu dit mais…
    – tout le monde ne sait pas qu’un allocation de string prend des ressources, car comme tu le dit c’est masqué par le processeur et pour 70% des programmes (source : je-viens-de-l’inventer), fondamentalement, on s’en fous.
    Tout le monde devrait le savoir ? Va dire ça à la tétra-chiée de codeurs de 15 ans qui kiffent le code. Ils ne peuvent pas tout savoir. Personne ne sait tout, même les vieux cons (comme nous) qui ont 10+ ans de code.

    Pour les applis en prod, perso je pense qu’on a un problème d’outil. De la même façon qu’un anti-virus détecte les malware, il faudrait inventer un anti-anti-pattern qui détecte le malcode.
    Dans ce cas précis, le Split retourne un tableau, et seul la taille de ce tableau est exploité…
    Dans certains cas on pourrait même lui demander de corriger.
    On est loin d’un compilateur classique et même d’un compilateur optimisateur, manque un vrai outil…

  2. Rappelons au passage qu’il y a moyen de calculer le n-ième nombre de Fibonacci sans calculer les précédents.

    Concernant les « mauvais » développeurs, il y en a 10 types :
    – ceux qui ne réfléchissent pas assez et qui écrivent le genre de choses que tu as citées (d’ailleurs, je n’avais jamais pensé à ça, ce qui peut être pratique pour écrire du code de debug concis)
    – ceux qui réfléchissent trop et ne font pas assez confiance au compilateur pour optimiser et au final écrivent du code difficile à relire et à maintenir

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *