samedi 15 décembre 2007

Java old comments

Jean-Philippe, a friend but also my nephew, asked me how I felt about Java. Here is my reply.

Si je suis familier avec Java? Oui et non. Je le connais pour l'avoir étudié au début, mais il ne m'a jamais vraiment servi. Il était horriblement truffés d'erreurs au début (les SDK en particulier), et nous dépendions totalement de Sun pour les corrections, ça m'a laissé un arrière-goût assez tenace, même si je sais que tout s'est correctement stabilisé depuis. Le souvenir de Java s'est émoussé depuis, mais j'imagine que ça reviendrait vite.

En fait, les langages, j'en ai étudié beaucoup (je les étudiais tous au début), mais maintenant, j'ai plutôt tendance à apprendre au besoin, parce que dans un certain sens, j'en ai trop appris pour rien. Maintenant, je les apprends selon les projets à réaliser.

Java est dans la lignée des langages fortement typés de manière statique (comme Pascal, Ada, et un grand nombre d'autres). Comme tous les langages de sa catégorie, il est plutôt verbeux. Mais il pourrait être bien pire, s'il n'offrait pas cette originalité de libérer le programmeur du besoin de penser au détail de l'allocation mémoire.

Oh, plusieurs autres langages le font aussi, mais généralement, ils offrent en même temps un typage fort dynamique plutôt que statique — le type est porté par l'objet à l'exécution, plutôt que par la position lexicale de l'objet dans le source (Lisp, Python, Scheme, et plusieurs langages fonctionnels utilisent le typage dynamique — à ne pas confondre avec la portée dynamique — Lisp est à portée dynamique, Scheme à portée lexicale). L'avantage de ces langages sur Java, c'est qu'ils sont excellents pour le prototypage (développement rapide). En pratique, une fois que le prototype fonctionne, il est en général satisfaisant, et on laisse les choses comme ça. Un moment donné, on apprend à directement viser des prototypes utilisables sans les voir comme intermédiaires, et les langages de protypages supplantent carrément PL/I, C++ ou Java. D'ailleurs, certains développeurs Java utilisent Jython pour travailler plus vite et beaucoup réduire la dimension de leurs sources.

Il y a des langages à typage statique faible (il y en a beaucoup, mais parmi les langages populaires, Perl est typique de cette catégorie). Ils sont un peu à l'opposé de Java, et pourtant, plusieurs programmeurs parlent à la fois Java et Perl. Question de mode probablement.

Java est encore très populaire, même si parmi les spécialistes des langages, il est plutôt mal vu. On voit pour Java une incroyable panoplie de bibliothèques disponibles, où chaque chose est offerte des douzaines ou des centaines de fois de manières différentes, et tout n'est pas également bon. L'embarras du choix est submergeant.

Le modèle de développement de gros projets Java apporte son lot de difficultés, avec ses définitions d'interfaces, ses compilations séparées admettant des mélanges ouverts / fermés, public / privé, et la foison de classes induites par la nature même de ses orientations de base. Mais ces problèmes particuliers ont suscité le développement de réponses originales, comme Eclipse, que l'on dit remarquable et brillant dans ce contexte, malgré sa lourdeur informatique intrinsèque. Des amis compétents m'en ont dit tellement de bien que j'ai le goût de l'examiner mieux.

Il faudrait que j'imagine un projet, pour m'amuser, qui rendrait Java justifiable. Il y a pratiquement toujours mieux, comme langage, pour à peu près n'importe quel problème (quoique beaucoup de gens se sentent sécurisés, en quelque sorte, par le typage statique). Alors, il faut trouver un environnement où les concurrents de Java ne peuvent exister. J'ai récemment acquis un téléphone mobile (cellulaire) que je pourrais programmer en Java, et probablement rien d'autre — ça me servira peut-être de jouet et d'excuse pour rafraîchir le souvenir que j'en ai. ☺