Note : 6 ; Craftsmanship, niveau junior
Le code de qualité, il faut bien commencer à l’écrire un jour. Et ce jour, ce peut être sur les bancs de l’université. C’est ce qui a motivé en premier lieu l’écriture de ce texte. Contrairement aux classiques du Craftsmanship qui s’adressent au développeur aguerri, celui-ci s’adresse au débutant et la progression des chapitres reflète cela.
C’est un texte assez court, qui n’excède pas 165 pages et compte 9 chapitres au long desquels sont distillés 70 exemples, toujours présentés de la même façon : une page avec le code « avant » auquel fait face le code « après » sur la page en vis-à-vis, agrémenté de quelques explications, mais le tout contenu dans ces deux pages. Le premier chapitre adresse des basiques de clarté du code, sur une vingtaine de pages, soit 8 exemples, qui vont des formulations booléennes à la notion de symétrie du code. Tout cela reste très simple, mais nécessaire à couvrir pour le débutant. On remarquera toutefois une approche « opiniated » qui persistera tout au long du livre, mais cela me semble normal.
On passe la seconde avec le second chapitre. Cela continue sur des questions de clarté, par exemple avec les énumérations, mais aussi de code sain, notamment à propos des itérations. Tout ceci est couvert en 8 exemples également. Alerte maximum pour le chapitre 3 dédié aux commentaires ! Ce sont même 10 exemples qui figurent ici. Mais, oh soulagement, les 4 premiers nous suggèrent d’éliminer les commentaires redondants. Finalement on fait dans le bon sens.
Le nommage est classiquement considéré comme un gros sujet. Dans ce chapitre 4 il n’occupe que 6 exemples. Les auteurs ciblent les débutants et se contentes de couvrir les bases : éviter les variables en une seule lettre, les abréviations ou les noms vagues ou trop généraux. La fin du chapitre nous invite au DDD. C’est au chapitre 5 que nous passons la 3ème vitesse, avec le traitement des erreurs et plus spécifiquement des exceptions. 9 exemples figurent ici, couvrant même des sujets comme le sous classement des exceptions, leur chainage ou le try avec ressources.
C’est à la conception de tests unitaires avec JUnit 5 qu’est consacré le chapitre 6. Je l’ai trouvé remarquable par la qualité des sujets abordés en si peu d’espace. On dépasse ici le cadre du strict débutant, mais ce dernier y trouvera son compte. On enclenche la 4ème vitesse avec le chapitre 7 qui nous assène des conseils de modélisation objet, le tout sur 7 exemples. Bon nombre d’entre eux ont trait aux refactoring de base de Martin Fowler, mais c’est quand même du sérieux ! Mention spéciale pour l’évocation du null.
Le chapitre 8 est réellement consacré à Java 8 (et un peu Java 9), et pour une grande partie à la programmation fonctionnelle en Java. Les lambdas ne sont pas formidablement traités, mais le chapitre pourrait servir de tutorial aux streams ! Optional a aussi droit à un traitement satisfaisant. Le chapitre 10 « prepare for the real world » a un format un peu différent, car les 10 sujets ne sont pas tous sous la forme d’exemple. La plupart sont des conseils plus généraux d’ingénierie : se mettre d’accord sur le formatage, utiliser une intégration continue, etc.
Très clairement, l’ouvrage frustrera le développeur expérimenté. Le sous-titre du livre (Become a Java Craftsman in 70 examples) aurait pu être plus explicite à cet égard. Mais il fait du très bon boulot pour les débutants et les sorties d’université (son positionnement à l’origine). Il a même un positionnement unique sur ce point et la couverture des sujets double l’intérêt de le recommander sans réserve à cette population.
Référence complète : Java by Comparison – Simon Harrer, Jörg Lenhard & Linus Dietz – Pragmatic Bookshelf 2018 – ISBN: 978 1 68050 287 9