Insulter pour enseigner : une fabuleuse façon de faire des années passées.

C’est toujours un truc qui m’échappe : A quel moment se faire insulter/rabaisser donne envie de se former correctement ?

Au delà du débat philosophique, on va prendre un exemple que je vois régulièrement : L’usage de commandes inutiles sur Linux/Unix.

Pour l’histoire il faut savoir que visiblement trouver les gens qui font ce genre de “fautes” serait devenu un sport mondial en plus de les afficher sur la place publique comme des incompétents “qui ne devrait jamais toucher un terminal de leur vie” (essentiellement pour se sentir supérieur). De quoi donner envie aux nouveaux venus de rester dans le métier !

Dans cet article, je vais aborder quelques exemples connus et donner leur version optimisée.Le but étant de donner envie aux gens de faire les choses bien, sans pour autant les insulter ou les rabaisser :)

cat | something

L’exemple le plus connu étant la combinaison cat file | something.

Pour comprendre pourquoi il s’agit d’un problème, il faut comprendre comment la commande cat fonctionne.

Pour cela on va regarder son manuel avec la commande man

“cat - concatenate files and print on the standard output”

En gros quand vous utilisez cat, tout le contenu du fichier est envoyé sur votre terminal (standard output ou stdout).

Du moment où vous ne faîtes que de la lecture directe, ce n’est pas gênant, car il s’agit du but recherché.

A partir du moment où vous commencez à “pipe” le résultat d’une commande cat dans une autre commande, comme par exemple grep, cette commande n’est plus optimisée.

Quand vous faîtes cat file | grep something il y a plusieurs étapes :

  • Le contenu de “file” est envoyé sur stdout par la commande cat.
  • Le contenu récupéré par stdin (stdout -> stdin) est envoyé à la commande grep via un pipe.
  • La commande grep traite la demande au fûr et à mesure qu’elle reçoit des données.

Autant sur un petit jeu de données on ne remarque pas de problème, autant plus c’est gros, pire ça deviens.

Comment optimiser tout ça ? On va regarder le manuel de la commande grep.

“grep [OPTION…] PATTERNS [FILE…]”

Voilà l’alternative optimisée à utiliser : grep something file

Ainsi la commande grep va traiter le fichier directement de lui même sans avoir besoin d’attendre que le jeu de données tombe sur stdout.

On remarque que la version optimisée est plus rapide à l’execution.

On remarque que la version optimisée est plus rapide à l’execution.

Pour les gens qui utilisent cat file |less vous pouvez le remplacer tout simplement par less file :)

Et probablement pareil pour plein d’autres commandes, si vous avez un doute, n’hésitez pas à consulter le manuel de la commande !

grep | something

Même problème que avec cat sauf que la solution est différente cette fois.

grep est un outil relativement puissant capable de faire beaucoup de choses assez optimisées.

Par exemple pour compter le nombres de lignes retournées, certains utiliserons grep something | wc -l

Comment optimiser ça ? On va utiliser la fonction de recherche dans le manuel de grep.

Pour rechercher un terme c’est très simple, une fois dans le manuel, faîtes /<votre terme> et enter. Tous les résultats seront affichés en surbrillance.

Dans notre cas on a cherché “count” pour “compter” en anglais et on trouve donc l’argument grep -c / grep –count.

“Suppress normal output; instead print a count of matching lines for each input file.”

Conclusion

N’hésitez pas à vous servir des pages man de vos commandes et d’abuser de la fonction de recherche, vous apprendrez sûrement plein d’autres choses au passage !

On est tous passés par là, personne n’a la science infuse et encore moins les gens qui tenteront vous rabaisser / insulter pour ce genre de motifs :)

Avis à ces gens là d’ailleurs, plutôt que d’être insultant et rabaissant, soyez formateur dans vos remarques, vous passerez moins pour des personnes indésirables et vous aidez la personne à faire correctement et de continuer à faire correctement :)

Si vous avez pas envie, libre à vous, mais en contre partie, bouclez là, merci. :)