On voit souvent, sur ce site comme sur d'autres, des articles sur « comment coder proprement », « les bonnes habitudes de programmation », etc, etc... En revanche, j'ai vu très peu d'articles expliquant comment coder salement. Je tiens à réparer cet oubli dans ce tutoriel qui, je l'espère, vous servira et vous permettra de le mettre en pratique sans délai.
Et effet, ma longue expérience dans des entreprises diverses et variées m'a convaincu que, si programmer proprement vous vaut les félicitations de votre supérieur (et encore), les raisons de programmer salement sont généralement bien plus nombreuses : besoin d'affirmer son autorité, de se rendre indispensable, nécessité de créer aujourd'hui les bugs de demain, vengeance personnelle, bizutage des nouveaux, principe de Dilbert, tout vous pousse à programmer comme un gros porc. D'ailleurs, étant donné tout le code dégueulasse que j'ai vu dans ma carrière, je suis persuadé que la majorité d'entre vous en êtes déjà convaincus.
Mais j'en vois déjà qui vont me dire « pour programmer salement, il suffit de ne pas programmer proprement ». Pourquoi faire un article là-dessus ? Alors là je m'inscris en faux et je m'insurge : Si ne pas programmer proprement est à la portée de n'importe quel débutant, programmer salement est un art qui demande des compétences, une parfaite connaissance des langages de programmation, de l'inventivité, de la subtilité et de la créativité.
A part quelques génies qui font ça de manière innée (je ne citerais pas de noms mais j'en connais), c'est un domaine qui s'apprend, qui se travaille, et qui nécessite un effort quotidien. Je tiens à cette occasion à remercier mon ancien chef qui m'a tout appris dans ce domaine, et sans qui je ne serais qu'un « expert en développement » comme on en voit des milliers.
1) Le nommage des variables
La technique de base pour programmer salement, quel que soit le langage, réside dans le nommage des variables. Mais bien entendu il ne faut pas faire ça n'importe comment : appeler une variable « sslkhskldghlfd » sera vu comme un acte de sabotage évident. Par contre, appeler une variable « Toponime », « DatteInsrciption » avec des petites fautes d'orthographes (mais totalement conforme à la charte de programmation si vous en avez une) passera presque inaperçu. Le temps que quelqu'un s'en aperçoive, le code concerné aura été copié-collé un peu partout, utilisé dans les classes dérivées, et il sera très vite plus coûteux de le remplacer partout que de le laisser tel quel.
Si vous avez la chance d'utiliser un langage qui accepte les accents (VB, ACCESS), ne vous en privez surtout pas : code non portable, problèmes d'affichage pour certains éditeurs, création automatique de BOM ou transformation en Unicode pour d'autres, gestionnaire de sources configuré en ANSI, le pouvoir de nuisance des accents est redoutable. Vous pouvez aussi tirer un large parti des mots français et anglais qui se ressemblent, comme « connexion » et « connection », « langage » et « language », « fonction » et « function », en mélangeant habilement français et anglais : « OpenConnexion » ou « OuvreConnection » sont d'excellents noms de fonction, par exemple.
2) L'indentation
Veillez à respecter très précisément l'indentation de votre code. Plus vous avez une indentation rigoureuse, plus vous pourrez y glisser quelques imperfections d'autant plus vicieuses que tout le reste est parfait, comme dans le code suivant :
1 2 3 4 5 6
| Compteur = 0;
for (i = 0; i < 10; i++);
{
Compteur++;
}
// Suite du code : Compteur est égal à 1, pas à 10 ! |
3) Ne jamais mettre de parenthèses, sauf lorsque c'est inutile
Pour appliquer cette règle, il vous faudra connaître sur le bout des doigts la priorité des opérateurs, priorités d'autant plus amusantes à apprendre qu'elles sont différentes selon les langages. Vous pourrez ensuite allègrement mélanger les « and » et les « or », les « = » et les « == », les « & » et les « && » pour faire des conditions dont le résultat sera pratiquement imprévisible sans passer dessus avec le debugger. N'oubliez pas les opérateurs peu connus : par exemple en C++ l'opérateur virgule, l'opérateur bool ou l'opérateur vide. Vous pouvez même les redéfinir, et c'est encore plus intéressant : l'opérateur « - » peut être redéfini pour que « a - b » renvoie la valeur de a + b.
4) Jamais les bons commentaires
C'est la partie qui fera le plus appel à votre créativité : ne pas mettre de commentaires dans vos programmes serait une faute professionnelle. Mettre des commentaires pertinents serait improductif. Ici, tout le talent consiste à mettre des commentaires, mais suffisamment inutiles ou imprécis pour qu'ils ne servent à rien. Mettez-y le maximum de fautes d'orthographe afin que, même s'ils contiennent encore quelques informations intéressantes, ils soient tellement désagréables à lire que personne ne le fera.
5) Les lignes n'ont pas que 80 caractères
N'hésitez pas à mettre le maximum d'instructions sur la même ligne. Les subtilités que vous mettrez dans vos programmes seront d'autant plus discrètes. Encore plus vache : mettez une centaine de blancs avant les instructions importantes. Le stagiaire, qui n'a qu'un écran 17 pouces, ne les verra jamais : elles sont à droite de la partie visible et il faut scroller pour les voir. Bien sûr il n'y comprendra donc rien et vous pourrez le traiter de nul. Soyez odieux avec les stagiaires, c'est bon pour votre avancement.
6) Variables préprocesseur
Je vous conseille d'utiliser les petites astuces suivantes avec parcimonie, leur efficacité étant amoindrie par une utilisation trop intensive. Trop de sale tue le sale. Néanmoins, il est bon de les connaître et de les utiliser de temps en temps :
Par exemple, si a la ligne 1352 de votre programme C++, dans une fonction effroyablement complexe, vous avez l'instruction suivante :
Vous pouvez avantageusement la remplacez-la par ceci :
Variable = __LINE__ - 1352;
Résultat : le simple fait de copier-coller cette fonction à un autre endroit la fera très certainement planter. Même l'insertion d'une ligne vide avant la ligne 1352 changera le comportement de la fonction. Une bonne occasion pour engueuler l'« imbécile qui a fait une connerie » (le stagiaire qui a ajouté un commentaire, par exemple). Il faut que les stagiaires comprennent bien qu'ils n'ont pas à toucher au code. Leur boulot c'est de faire le café.
De la même façon, en PHP, on peut utiliser le mot-clé préprocesseur « __FILE__ » qui donne le nom complet du fichier. Vous voyez l'astuce ? Vous testez cette variable, et le seul fait de déplacer le fichier fait planter le programme. Si on vous fait une remarque, vous pourrez dire innocemment « Ah bon ? Chez moi ça marche ! ».
Pour plus d'efficacité, vous pouvez bien sûr combiner les points 5 et 6 et mettre ces instructions à la fin des lignes très longues et totalement imbitables.
7) C'est devenu un classique, mais vous pouvez toujours l'utiliser, ça ne coute rien :
1 2
| #define private public
#define protected public |
8) Et pour finir dans la même veine, je vous rappelle ce petit chef-d'oeuvre qui a failli être intégré au noyau Linux en 2003. C'est un modèle du genre sur lequel vous pouvez prendre exemple :
1 2
| if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
retval = -EINVAL; |
En vous souhaitant à tous des programmes bien crados, je vous invite à compléter ce tutoriel si vous avez vous-même des techniques de sale programmation que j'aurais oublié.
Partager