Alors que la conférence aborde historiquement les bons côtés du langage, l'ingénieur de Google a choisi de livrer lors de sa présentation une critique de Java, 15 ans après la sortie de sa première version.

Java: The Good, the Bad, and the Ugly Parts

C’est sans grande surprise que Joshua Bloch a fait salle comble de la plus grande salle de conférence du salon DEVOXX 2011.
Ayant pour habitude d’entendre parler des bons côtés de Java, surtout lors de Devoxx, Joshua Bloch a choisi de surprendre son auditoire et de livrer une critique du langage dont la première version remonte à 1996.

Ainsi est-il revenu sur les aspects qui font son succès :

  • Pas de gestion de la mémoire par les développeurs, c'est la VM qui s'en occupe.
  • Types primitifs entièrement spécifiés : pas de mauvaise surprise en passant d'une plate-forme à l'autre comme il pourrait y en avoir en C.
  • Ordre d'évaluation des expressions constant : de gauche à droite.
  • liaison dynamique permettant de remplacer une librairie par une autre sans nécessairement recompiler, hormis pour les constantes, on y vient !
  • Syntaxe proche du C. Par conséquent, facilement accessible pour nombre de développeurs.
  • Typage fort des données permettant de détecter des erreurs à la compilation, de faciliter l'analyse de code, l'auto-complétion par les IDE, etc.
  • Notion de Threads présente dès la conception du langage.
  • Absence de macros et de surcharge d'opérateurs rendant les codes sources relativement similaires et compréhensibles par quiconque.
  • Absence d'héritage multiple mais possibilité d'implémenter plusieurs interfaces.
  • Déclarations, implémentation et documentation regroupées au même emplacement du code.

Puis Joshua Bloch est passé à une critique du langage en évoquant ce qui implicitement donne lieu à d'improbables Java Puzzlers, objets de certifications Java :

  • Ajout par défaut de constructeurs.
  • Conversion et cast automatique de certains types de données avec éventuelle perte de précision.
  • Substitution des valeurs constantes à la compilation qui casse l'aspect liaison dynamique mentionné précédemment.
  • Absence de types int et long non signés.
  • Absence de méthode toString() sur les tableaux, Etc…

Voilà pour les aspects généraux, après quoi Joshua a passé en revue 135 classes et interfaces constituant le premier Java en soulignant les bons côtés en les moins bons.
Il apparait donc que Java s'est imposé à un moment où il fut moins complexe que C++ et plus puissant que C. Les points forts du langage résident dans le design même de ce langage alors que les points faibles restent cantonnés à des détails plutôt techniques. Java évolue, comme avec l'introduction de StringBuilder par exemple, pour palier à certains choix initiaux critiquables. Reste à savoir quand sera prise la courageuse décision d'abandonner toutes les classes des premiers jours devenues obsolètes et dont le maintien alourdi le langage au fil du temps.