Note de lecture : Effective Java 3rd edt., par Joshua Bloch

Note : 7 ; Grosse prise de poids et hélas moins digeste, mais toujours une référence.

A chaque nouvelle édition, le titre phare du langage Java prends un peu plus d’embonpoint. L’édition précédente avouait 315 pages pour 78 items, nous voici avec 366 pour 90 items ! Il est vrai que cette nouvelle édition était nécessaire et attendue, essentiellement pour couvrir les nouveautés de Java 8, mais Java 9 n’est pas en reste bien que les modules ne soient pas abordés.

La pertinence du propos reste de mise. Mais il s’agit bien d’une édition augmentée et mise à jour, à l’exception de l’item 73 de la seconde édition qui a disparu. Mise à jour, elle l’est indubitablement. Chaque item et chaque exemple de code a été scrupuleusement revu afin de prendre en compte les évolutions de la librairie standard et du langage, aussi minimes soient-elles. Augmentée, elle l’est aussi des items touchant essentiellement les lambdas et les streams.

Le premier chapitre (en fait le second, car je n’ai pas compté l’introduction) n’a que peu changé, à part un nouvel item sur l’injection de dépendance (en fait le RAII) qui illustre un focus renforcé sur l’immutabilité des objets. Aucune modification au chapitre 3, hormis les quelques rafraichissements qui mettent les exemples au goût du jour.

Le chapitre 4 est l’objet de plus de bouleversements. L’un des items a été à la fois transmuté et déplacé : il s’agit de celui évoquant l’usage des stratégies où l’auteur a préféré ici proposer l’emploi de lambdas. « design interfaces for posterity » est un nouvel item permettant d’introduire les méthodes par défaut. Enfin un second item supplémentaire figure également sur la gestion du code source, qui n’est pas relatif aux nouveautés de Java. Peu de modifications sur le chapitre 5 dédié aux génériques, qui était en soi une grosse introduction de la seconde édition. L’auteur a juste ajouté un item sur le mixte périlleux entre les varargs (qui pour moi mime une fonctionnalité vieillotte du C) et les génériques.

Passons rapidement sur le chapitre 6 qui a gagné quelques pages mais ne voit pas sa liste d’items évoluer. Arrive le chapitre 7, qui est lui totalement nouveau et traite des lambdas et des streams. Je suis un peu frustré par la frugalité du traitement, mais ce livre n’est pas une introduction au sujet. Je garde l’idiome d’utilisation des lambdas avec les enums, pratique et élégant. Les streams nécessitent un minimum de connaissance pour bénéficier de la sagesse de Joshua Bloch, et là je cale un peu.
Le chapitre 8 ne présente pas de grosses différences. On y notera la référence aux optionals, une des nouveautés de cette édition. Le chapitre 9 « general programming » est probablement le chapitre le plus stable, à peine a-t-il droit au toilettage de printemps. Pas non plus de surprises au chapitre 10 traitant des exceptions, un aspect du langage désormais stable.

Le chapitre 11 « concurency » ne révolutionne pas les items, bien que l’un d’entre-eux disparaisse à l’occasion de ce nouvel opus. Le texte des différents items a toutefois droit à de conséquentes mises à jour. Enfin le chapitre 12 s’enorgueillis d’un nouvel item pour proposer des alternatives à la sérialisation Java. C’était déjà un sujet controversé par l’auteur, il passe un cran sur l’hostilité qu’il affiche sur le sujet.

Cette mise à jour est réalisée de manière réellement scrupuleuse, jusque dans les benchmarks de performances tous remis à jour. L’auteur n’a rien laissé devenir ne serait-ce qu’un peu obsolète dans le texte. Ce livre reste (ou redeviens) une lecture absolument incontournable pour tout développeur Java souhaitant devenir solide sur le sujet. Cela étant, j’ai pris moins de plaisir à lire cette édition. Si la rédaction est claire et efficace, elle ne gagne pas en sex-appeal. D’où le petit point de recul.

Effective Java 3rd edt., par Joshua Bloch

Référence complète : Effective Java, 3rd edition – Joshua Bloch – Addison Wesley 2018 – ISBN: 978 0 13 468599 1

Publicités

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.