Standards de programmation
Cet article ne couvre pas les efforts de standardisation comme ceux de WG21, qui oeuvre à la standardisation pour ISO
du langage C++, mais discute plutôt des standards qui imposent un cadre aux pratiques des programmeurs ou des programmeuses en classe ou en entreprise.
Dans la pratique de la programmation, la question des standards de
programmation est matière à débats :
indenter avec des espaces ou
des tabulations? Comment marquer l'indentation?
Comment nommer les variables, les types et les
fonctions? Y a-t-il des mots clés à éviter ou des façons de faire qui sont
proscrites dans une entreprise ou dans un projet donné? Et ainsi de suite. Par
exemple, certains domaines d'application sont réfractaires aux
exceptions, d'autres à la
récursivité, d'autres
encore éviteront la
programmation générique ou les
conteneurs
standards, etc.
Les standards de programmation entraînent une sorte signature pour le code,
et donnent une impression d'homoigénéité stylistique pour un groupe donné. Ce
faisant, ils facilitent la compréhension du code aux gens du même groupe qui le
rencontrent pour la première fois : les indices visuels et les façons de faire
communes accélèrent le repérage des éléments clés d'un programme et permettent
aux gens de se concentrer sur l'essentiel.
Quelques standards de programmation au sens large
Les standards qui suivent sont des exemples de diverses provenances. Aucun n'a raison dans l'absolu.
Pour C :
Pour
C# :
Proposition de règles pour programmer avec
C#
dans Unity (je ne sais pas s'il s'agit d'un standard accepté par la
communauté) :
http://wiki.unity3d.com/index.php/Csharp_Coding_Guidelines
Pour C++ :
- Chez Google :
http://google-styleguide.googlecode.com/svn/trunk/cppguide.html
http://www.possibility.com/Cpp/CppCodingStandard.html
- http://www.doc.ic.ac.uk/lab/cplus/c++.rules/
- http://www.chris-lott.org/resources/cstyle/CppCodingStandard.html
- http://www.stevenpigeon.org/Essais/std_prog/std_prog.html
- Chez GNU :
http://gcc.gnu.org/wiki/CppConventions
- Chez Mozilla :
https://developer.mozilla.org/en-US/docs/Using_CXX_in_Mozilla_code
- Chez CERN, pour le projet
ATLAS :
http://atlas-computing.web.cern.ch/atlas-computing/projects/qa/draft_guidelines.html
- Le « standard PPP », proposé en 2011 par
Bjarne
Stroustrup et qui se veut pragmatique (mais est, en pratique, son style
personnel). Il y a de bonnes idées là-dedans, cela dit, dont « faire de la
longueur d'un nom un reflet de sa portée » (donc : un nom long si la
variable vit longtemps, un nom court si sa vie est limitée; un compteur
nommé i est Ok, mais une variable globale nommée
x ne l'est pas) :
http://www.stroustrup.com/Programming/PPP-style.pdf
- Chez
LLVM :
http://llvm.org/docs/CodingStandards.html
- Chez Insomniac Games :
https://gist.github.com/Kerollmops/fcad27cfef9e3552cb75a3d201494ba6
- Chez Epic Games, pour le moteur Unreal :
https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine?application_version=5.4
- Chez WG21, dans le groupe
LEWG, un guide
pour soumettre des propositions dont la terminologie est de qualité est
disponible sur :
https://github.com/cplusplus/LEWG/blob/master/library-design-guidelines.md
- Réflexion d'Arne Mertz en 2018 sur la
question des styles de programmation en C++ :
https://arne-mertz.de/2018/05/trailing-return-types-east-const-and-code-style-consistency/
Pour Go :
Pour Java :
Pour JavaScript :
Pour Lisp :
Pour les langages de la plateforme
.NET :
Pour
Objective-C :
Pour Python :
Pour Ruby :
Pour
Scala :
Pour les shells :
Chez X.org :
Pour le Web :
Pour les projets
GNU :
Autres :
- Liste de standards de programmation : http://repeatgeek.com/technical/a-list-of-coding-standard-websites/
- Guides de styles de Google :
https://code.google.com/p/google-styleguide/
- Quelques standards sur lesquels les programmeurs s'accordent, selon Phil
Johnson en 2014 :
http://www.infoworld.com/slideshow/141285/coding-conventions-9-areas-where-developers-actually-agree-236851
- Le standard du département d'informatique de l'Université de
Sherbrooke :
http://pages.usherbrooke.ca/bfraikin/Departement/normes-de-programmation.pdf
- Standards programmatiques appliqués au Collège Lionel-Groulx :
- Une réflexion sur les guerres qui naissent des prises de position
quasi-religieuses quant aux guides de style en programmation, proposée par
Bill Sourour
en 2017 :
https://medium.freecodecamp.com/the-100-correct-coding-style-guide-5b594a1655f0
- Réflexion de 2017 par Jay Thomas sur la
nécessite des standards de programmation dans un contexte contemporain :
http://mil-embedded.com/guest-blogs/coding-standards-are-they-necessary/
- Étude d'Aylin Caliskan, Fabian Yamaguchi, Edwin Dauber, Richard Harang, Konrad Rieck, Rachel Greenstadt et Arvind Narayana en 2018, qui montre que le style de programmation des
individus survit (en partie) à la compilation, jusque dans le code généré :
https://arxiv.org/pdf/1512.08546.pdf
- Réflexion d'Arthur O'Dwyer en 2023 sur le
rôle des Style Guides, à savoir ce qu'ils devraient faire et ce qui
n'est pas de leur ressort :
https://quuxplusone.github.io/blog/2023/08/11/style-guide-guide/
« It's not possible to write simple rules for how to write simple code » – Kate Gregory (source)
Critiques :