Python 3 - les fondamentaux du langage (éditions ENI)
L'adoption de Python 3 prend du temps mais elle avance de manière sûre. De plus en plus d'outils, frameworks et bibliothèques fonctionnement maintenant bien en Python 3 et il est conseillé d'utiliser cette version pour tout nouveau projet. À Anybox, lorsqu'on développe de nouvelles idées, on s'efforce de les faire fonctionner en Python 3. C'est le cas notamment d'outils comme anybox.pg.odoo, qui permet de versionner des instantanés PostgreSQL pour Odoo, ou des expérimentations comme Anyblok, un framework en construction, inspiré par Odoo, mais basé sur SQLAlchemy.
Lorsqu'on écrit du Python 2 propre et moderne, on est surpris par la vitesse à laquelle on peut effectuer le portage vers Python 3. De nombreuses fonctionnalités ont été rétro-portées vers Python 2.7 et si vous êtes habitué à cette version vous n'aurez aucun mal à transiter vers la version 3.3 ou 3.4.
Un livre en version papier ou électronique
Si vous n'êtes encore habitué à rien ou si vous avez des mauvaises habitudes, si vous partez de zéro ou si vous voulez élargir votre horizon Python, dans ce cas un bon ouvrage à conseiller est celui de Sébastien Chazallet aux éditions ENI : Python 3 - les fondamentaux du langage. Ça ne se voit pas bien sur une simple photo de couverture, mais c'est un livre épais et extrêmement complet, à jour avec Python 3.4, qu'on peut largement qualifier de pavé avec plus de 850 pages. Par conséquent la version recommandée est plutôt la version électronique. Celle-ci apporte le gros avantage d'avoir un poids limité à celui de quelques électrons, mais aussi et surtout de pouvoir effectuer des recherches rapides sur l'intégralité de l'ouvrage avec une interface très honnête. Vous pouvez aussi télécharger les chapitres individuellement en fichier PDF, mais pas la totalité de l'ouvrage d'un coup.
Le contenu et les points forts
Parmi les sujets abordés, il y a tout d'abord un assez long argumentaire sur Python, son positionnement dans le paysage informatique, une présentation générale de ses caractéristiques et de sa philosophie, les différentes utilisations possibles, des références et retours d'expérience, etc. Même si vous connaissez déjà le langage et son écosystème, vous apprendrez des choses. Si cela ne suffit pas vous trouverez même une petite histoire des langages informatiques et de leur typologie !
On trouve ensuite le très classique chapitre sur l'installation, puis un ensemble de chapitres très progressifs sur le langage lui-même, ses instructions, sa syntaxe, la notion de variable, les classes et les modules. C'est donc un livre tout à fait adapté à un débutant complet. C'est d'autant plus vrai que l'auteur prend le temps d'expliquer les choses et de les remettre dans le contexte. Il y a donc une vraie valeur ajoutée par rapport à la documentation officielle.
Le chapitre suivant aborde les inévitables motifs de conception (les design patterns). C'est un chapitre indispensable pour commencer à développer des application sérieuses : vous apprendrez tout d'abord la différence entre « motif de conception » et « motif d'architecture ». Puis vous pourrez découvrir ce que sont les singletons, fabriques, fabriques abstraites, monteurs, prototypes, adaptateurs, ponts, composites, décorateurs, façades, poids-mouches, proxy, chaînes de responsabilité, commandes, itérateurs, mémentos, visiteurs, observateurs, stratégies et fonctions de rappel. Ouf ! L'auteur prend bien soin d'éviter les anglicismes : parler de « fonction de rappel » en français est beaucoup plus explicite que « callback » pour quelqu'un qui apprend ! Chaque motif de conception est d'abord introduit par une mise en situation pour expliquer le besoin, puis la solution est présentée avec le code correspondant en Python. C'est donc plus utile qu'un bouquin générique sur les design patterns. Si ça ne suffit pas vous aurez aussi une présentation de l'Architecture de Composants de Zope (la ZCA), dont l'intérêt est d'offrir un système de plugin très puissant basé sur la notion d'interfaces et de composants, et utilisable hors Zope.
Toute la suite de l'ouvrage, et c'est là son plus gros point fort, s'attarde sur des cas concrets basés sur des bibliothèques tierces : génération de contenu PDF avec reportlab, ou de fichiers OpenDocument, programmation système et réseau, la programmation asynchrone (avec un passage sur asyncio), écriture de scripts, accès au matériel, création d'une application web, d'une interface graphique riche, et même d'un jeu avec PyGame.
Les bonnes pratiques ne sont pas oubliées, avec un chapitre sur la programmation dirigée par les tests, et programmation dirigée par la documentation. Je n'exagèrerai pas en disant qu'il s'agit du chapitre le plus important pour un développeur, et de très loin. L'optimisation est aussi abordée, avec des explications sur la façon de mesurer et améliorer les performances et l'utilisation mémoire d'une application.
Que manque t-il à ce livre ?
Nous avons regretté l'absence d'un chapitre consacré au portage d'applications de Python 2 vers Python 3 car il s'agit d'un réel enjeu au niveau de la commauté. Sur ce point nous vous conseillons l'excellent ouvrage de Lennart Regebro : Porting to Python 3: An in-depth guide. Un autre manque est un chapitre un peu plus poussé sur le packaging, c'est à dire la façon de construire et publier des paquet, et sur les nouveautés apportées par le format Wheel. Mais comment reprocher à un livre de 864 pages d'être incomplet ??