Il est souvent facile de savoir quand un développement n’est pas de bonne qualité. Des bugs qui surgissent de nulle part, un code qui tourne comme de la mélasse et des structures de projet peu maniables, en sont quelques signes révélateurs. Mais parfois, il n'est pas facile de savoir si l'on fait bien les choses. En matière de programmation, les bonnes pratiques sont comparables aux effets spéciaux du cinéma : on ne remarque jamais leur présence, car ils ne s'annoncent pas.
Comment reconnaître les bonnes pratiques de programmation en Python ? Si vous êtes novice dans le langage, et si vous voulez savoir à quoi peuvent ressembler les bonnes pratiques de développement en Python, ou si vous voulez simplement savoir si certaines pratiques acquises valent la peine d'être conservées, voilà quelques points de repère. En suivant ces huit meilleures pratiques, vous aurez l’assurance d’utiliser correctement le langage.
1 - Utiliser des environnements virtuels et des outils de gestion de projet
Même les petits projets Python ponctuels gagnent à utiliser un environnement virtuel et une structure de projet appropriée. Des outils comme Poetry rendent le processus d'installation pratiquement automatique. Un simple environnement virtuel venv peut apporter à lui-seul des bénéfices. Le contrôle de version est un autre outil essentiel de gestion de projet. Aujourd’hui, Git est l’outil généralement utilisé pour cela. Et oui, vous devriez utiliser Git même pour de simples projets à un seul fichier. Vous ne savez jamais à quel moment vous reviendrez à une version de code antérieure. La plupart des IDE supportant Python offrent également un support intégré pour venv et Git, il est donc facile de les utiliser.
2 – Se servir des fonctions intégrées de Python
Un programmeur Python avisé sait utiliser les fonctions intégrées et la bibliothèque standard de Python pour traiter la grande majorité des cas d’usage courants. La plupart des tâches de routine que vous aurez à accomplir - manipulations de fichiers, expressions régulières, travail avec un navigateur web, etc. - sont déjà gérées quelque part dans Python. Les développeurs Python moins expérimentés se posent souvent la question suivante : comment savoir si quelque chose dans la bibliothèque standard couvre mon cas d’usage, sans avoir à en mémoriser le contenu ? La réponse consiste à mettre en signet l'index de la bibliothèque standard et les pages de présentation des fonctions intégrées et de les parcourir chaque fois que vous vous trouvez aux prises avec un problème de « programmation courante ». Une confrontation constante avec les outils disponibles dans Python est une source d’apprentissage inestimable.
3 – S’appuyer sur les bons modules
Comme pour les modules intégrés et la bibliothèque standard, l'utilisation de la vaste collection de modules tiers de Python permet de gagner du temps. En lançant une recherche pour un problème donné via le front-end web de PyPI, vous trouverez presque toujours des modules qui offrent une solution prête à l'emploi. Encore une fois, pourquoi réinventer la roue (Python) quand on peut installer simplement des modules adéquats en utilisant le gestionnaire de paquets pip ? De plus, de nombreux modules Python sont dotés de performances accélérées par le langage C, ce qui signifie que vous bénéficiez d'une vitesse de développement et d'une exécution de programme plus rapide lorsque vous utilisez les modules d'autres développeurs. C'est une question qui revient souvent : si plusieurs modules sont disponibles pour gérer mon cas d’usage, lequel dois-je utiliser ? La réponse est simple : commencez par le projet qui semble afficher le plus de cas d’usage ou bénéficier d’une forte adoption (en fonction du nombre d’étoiles ou de forks GitHub, par exemple), car il y a de fortes chances que votre cas d’usage soit semblable à celui de beaucoup d'autres personnes.
4 - Ne pas tout faire en POO
La programmation orientée objet (POO) regroupe les structures de données avec les méthodes utilisées pour les manipuler, ce qui facilite l'écriture de code de haut niveau. Pour un langage de haut niveau comme Python, la programmation orientée objet convient parfaitement. Mais tout le code Python n'a pas besoin d'être orienté objet. Les développeurs Python avertis comprennent que 20 lignes (ou même 200 lignes) de code « get-it-done-and-get-on-with-it » peuvent faire gagner un temps précieux par rapport à une alternative orientée objet, tant que le travail n'a pas besoin de l'approche POO. Dans l'ensemble, les grands projets complexes bénéficient de l'orientation objet, mais à moins que le projet n'exige une POO, rien n’empêche d'assouplir les règles.
5 - Tester le code
Concernant des projets plus importants, les Pythonistes avisés savent bien l'intérêt qu’il y a à créer des suites de tests. Aussi fastidieux et fatigant que puisse être l'écriture de tests, ils sont inestimables quand un projet dépasse un certain niveau de complexité. Une maîtrise encore plus avancée consiste à construire des tests en parallèle avec chaque nouvelle fonctionnalité, et non après coup. En réalité, plus vite vous franchirez l’obstacle des tests, plus vite vous améliorerez votre code. Commencez à tester dès l’implementation de la première fonctionnalité et vous serez heureux de l'avoir fait.
6 - Ne plus utiliser Python 2
C'était déjà vrai l’an dernier et c'est doublement le cas aujourd’hui. Pendant longtemps, Python 2 a bien fonctionné, mais il n'est désormais plus du tout supporté par l'équipe de développement officielle de Python. Les Pythonistes avisés ont déjà migré leurs projets vers Python 3 ou sont en train de le faire.
7 - Ne pas utiliser, non plus, la dernière version de Python
Python 3.8 est peut-être la dernière et la « meilleure » version de Python, mais cela ne signifie pas que vous êtes obligés de l'utiliser. Un développeur avisé sait que l'utilisation de la version la plus récente de n’importe quel outil est toujours hasardeuse. Python n'est pas différent. Un tel programmeur utilisera la révision précédente la plus récente pour s’assurer de la plus large compatibilité avec les modules tiers. Après tout, la possibilité d’exploiter tous ces modules est l'une des principales raisons d'utiliser Python.
8 - Utiliser d'autres langages de programmation
Python est considéré comme le « second meilleur langage de programmation » pour à peu près tout. Mais parfois, l'écart entre le « meilleur » et le « second » est vraiment important. Les développeurs Python avisés savent que Python n'est qu'un outil parmi d'autres et qu’il faut toujours utiliser l’outil le plus adapté au travail que l’on veut accomplir. Pour les applications ou les opérations nécessitant une vitesse d'exécution maximale, le Python pur n’est pas forcément le plus indiqué. Mieux vaudrait aller voir du côté de C, de Rust ou même de Go. Mais toute programmation à haute performance n’implique pas forcément de se détourner complètement de Python. On peut, par exemple, utiliser une bibliothèque en C pour Python comme Numpy ou Pandas, ou envelopper du code C ou compatible C dans un shell Python, ou encore utiliser Cython pour transformer le Python en C.