Devoxx 2011 : Joshua Bloch se livre à une critique de Java

Alors que la conférence aborde historiquement les bons coté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 par Joshua Bloch de chez Google

Sans grande surprise Joshua Bloch a fait salle comble et pas n'importe laquelle puisqu'il c'est celle qui offre le plus de places assises, près de 700.
Alors qu'on a l'habitude d’entendre parler des bons cotés de Java et surtout lorsqu'on se rend à Devoxx, Joshua Bloch a choisi de nous livrer sa critique du langage dont la première version date déjà de 1996.

D'abord les bons côtés, qui ont fait sont succès  :
  • Pas de gestion de la mémoire par le développeurs, c'est la VM qui s'en occupe.
  • Des types primitifs entièrement spécifiés, donc pas de mauvaise surprise lorsqu'on passe d'une plate-forme à l'autre comme on pourrait en avoir en C.
  • Ordre d'évaluation des expressions constant : de gauche à droite.
  • Une liaison dynamique qui permet de remplacer une librairie par une autre sans nécessairement recompiler, hormis pour les constantes, on y vient !
  • Une syntaxe proche du C donc facile d'accès pour nombre de développeurs.
  • Une typage fort des données qui permet de détecter des erreurs à la compilation, de faciliter l'analyse de code, l'auto-complétion par les IDE, etc.
  • La notion de Threads présente dès la conception du langage.
  • L’absence de macros et de surcharge d'opérateurs ce qui rend les codes sources relativement similaires et compréhensibles par quiconque.
  • L'absence d'héritage multiple mais la possibilité d'implémenter plusieurs interfaces.
  • Le fait que les déclarations, l'implémentation et la documentation soient toutes regroupées au même endroit du code.
Puis Joshua est passé au coté sombre du langage en commençant par les choses implicites qui donnent lieu à d'improbables Java Puzzlers et font l'objet de certifications Java :
  • L'ajout par défaut de constructeurs.
  • La conversion et le cast automatique de certains types de données avec éventuelle perte de précision.
  • La substitution des valeurs constantes à la compilation qui casse l'aspect liaison dynamique mentionné précédemment.
  • L’absence de types int et long non signés.
  • L'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 cotés en les moins bons.

En conclusion, il apparait que Java s'est imposé à un moment ou il était moins complexe que C++ et plus puissant que C. Les point forts du langage résident dans le design du langage tandis que ses points faibles restent cantonnés à des détails plutôt techniques.
Depuis Java a évolué pour palier à certains choix initiaux critiquables comme avec l'introduction de StringBuilder par exemple. Reste à savoir quand sera prise la courageuse décision d'abandonner toutes les classes des premiers jours devenues obsolètes dont le maintien alourdi le langage au fil du temps.