Poor taste coding

Suite à un article lu ce matin (Applying the Linus Torvalds “Good Taste” Coding Requirement), je me suis demandé si les “nouveaux” langages de programmation (ex: Ruby, Python, etc …) ne nous transforme pas en codeur de mauvais goût.

je reprend le code que Linux Torvalds considère comme “not good taste”:

remove_list_entry(entry)
{
   prev = NULL;
   walk = head;

   //Walk the list
   while (walk != entry){
      prev = walk;
      walk = walkt->next;
   }
   
   // Remove the entry by updating the head 
   // or the previous entry
   if (!prev)
      head = entry->next;
   else
      prev->next = entry->next;
}

La critique de Linux porte sur le dernier if qui est laid mais nécessaire.

et le code “good taste”

remove_list_entry(entry)
{
   // The "indeirect" pointer points to the *address* 
   // of the thing we'll update
   indirect = &head;

   // Walkt the list, looking fot the thing that points 
   // to the entry we want to remove
   while ((*indirect) != entry)
      indirect = &(*indirect)->next;

   // ... and just remove it
   *indirect = entry-next;
}

Même si le premier code peut être amélioré, ce qui m’a le plus “choqué” en voyant le “Good Taste Code” c’est ma réaction:
“Ah oui, les pointers ça existent”

et je me demande combien de fois je dois faire du code de mauvais goût car les “nouveaux” langages m’habitue à style de programmation qui est le leur.

Ps: autre exemple les return, je ne les utilisais que rarement, maintenant j’ai fait plein car je n’ai pas toujours les pointeurs. Et quand j’ai les pointeurs, je fais un return par habitude.

1 « J'aime »

Les “nouveaux” langages de programmation ont ça de bon qu’ils rendent accessible la programmation à un plus grand nombre de personnes, avec une barrière à l’entrée moins haute que les langages de programmation dits “traditionnels”.

Aussi, il n’y a pas lieu de critiquer ni leur existence, ni ce qu’en font ses programmeurs.

Rien n’empêche celui qui veut progresser, et programmer de manière élégante, d’apprendre à le faire comme M. Torvald, au contraire, c’est souvent une bonne idée une fois les bases acquises.

Mais une analogie à ton raisonnement serait de dire que c’est prendre de mauvaises photos que de prendre des photos avec son téléphone. Le photographe peut penser cela. Est-ce que pour autant il ne faut pas prendre de photos avec son téléphone ? Je ne crois pas. Est-ce que pour autant la discipline “photographie” a régressé ? Je ne pense pas non plus.

4 « J'aime »

«Avec de grands pouvoirs viennent de grandes responsabilités» comme disait l’autre…

Dans les langages dits de haut niveau, il n’est pas forcément possible de gérer finement la mémoire, à la différence des langages plus bas niveau où plus de choses sont possibles, mais aussi plus de responsabilités à faire porter sur le dos du programmeur.
Cependant, je ne pense pas que ce soit là que se situe le problème. Quelque soit le langage ou la plateforme, maîtriser ses internes offre plus de possibilités, possibilités qui ouvrent la porte à des pratiques puissantes mais potentiellement dangereuses.
Aller chercher en profondeur le fonctionnement interne permet de prendre plus de recul par rapport au fonctionnement global de la plateforme et ainsi, adopter des pratiques plus pragmatiques.

Ce que Linus appelle “good taste”, c’est à mon avis clairement cette notion de pragmatisme. Un code écrit avec élégance est un code qui exprime ce qui est nécessaire plutôt que des étapes qui peuvent faire penser à du scotch et du chatterton pour faire fonctionner le bousin. En gros, une écriture directe plutôt qu’une écriture alambiquée juste pour faire que les choses fonctionnent.

Cependant, être capable d’adopter une telle discipline d’écriture demande à avoir une certaine maturité, une certaine expérience. Derrière cette demande de Linus se cache peut être une étape de sélection des programmeurs qui peuvent contribuer à son projet : si tu veux contribuer, je dois être sûr que tu as les compétences pour le faire. Et la façon dont tu t’exprimes est déjà un élément discriminatoire.
Si tu cherches quelqu’un pour bosser dans ton équipe, tu auras plus tendance à faire confiance à celui qui écrit une lettre claire, concise et précise ou à celui qui l’a truffée de fautes d’orthographe et lourdeurs grammaticales ?

1 « J'aime »

Je vais reprendre ton exemple mais avec le passage de l’analogique au numérique. Le fait d’avoir un appareil numérique, change la façon de prendre des photos ou de filmer.

Pour avoir poser la question à des pro, le numérique a bien changer leur façon de travailler. Ex: le cadrage, avec Photoshop, tu pourras recadrer ta photo a posteriori.

J’ai justement l’impression que la “souplesse” des nouveaux langages fait qu’ils nous permettent de coder avec du scotch et du chatterton.

Par exemple, le C est sans pitié sur le type des variables. Mais le Python est beaucoup plus souple sur ça, on peut mettre du int puis du string dans la même variable sans problème (mais tu dois format le int si tu veux l’ajouter à une string).
Je ne comprends pas l’intérêt si ce n’est de permet de faire du code caca.

(Peut-être que je me focalise sur certains points de ses langages qui sont les points tordus/bizarres de ces langages)

Le sujet du poste parlait plutôt d’élégance au travers expressivité du code selon moi, et pas forcément de savoir revoir les allocation au bon moment. En gros, que le code exprime le cheminement de la pensée (dans l’exemple, je parcours la liste jusqu’à trouver l’entrée et je l’exclus).

Au contraire, les langages de haut niveau comme Python permettent cette expressivité et cette élégance.

2 « J'aime »

OK avec Romain, c’est question d’élégance et expressivité (et un saupoudrage “fonctionnel”).
Et là on part avec un sacré handicap vu que c’est du C.

Attention avec les déclarations de Linus, qui mérite tout mon respect d’humain et de codeur, mais qu’il utilise souvent pour dénigrer des contributeurs-trices de sa propre communauté :/

1 « J'aime »
Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s