Ada versus C, C++ et Java
Opposer Ada à ses concurrents les plus connus (ici C, C++ et Java) c'est un peu comme opposer Linux à Windows, Firefox à Internet Explorer ou encore OpenOffice à Word. Les débats tournent vite à une guerre type "idéologique" entre des camps qui s'ignorent mutuellement (et qui souvent ne se connaissent même pas).
Chaud partisan de Ada je ne peux prétendre être complètement neutre dans cette tentative de comparaison et d'analyse des qualités de ces quatre langages. Je vais essayer de poser un point de vue et quand cela sera possible faire des références à d'autres "voix" autorisées sous la forme de liens hypertexte (mais en anglais!).
En ce qui concerne l'apprentissage (et donc l'enseignement) de l'informatique je me sens beaucoup plus qualifié : voir notamment le chapitre "Enseigner Ada" et le papier correspondant sur cet URL. A l'heure actuelle pour enseigner l'informatique la "mode" est à Java! Ceci n'est absolument pas justifié : choisir comme support d'enseignement un langage "tout objet" pour coder de nombreux algorithmes où n'apparaît aucun concept orienté objet est pour le moins déroutant (surtout pour l'apprenti informaticien). Un plaidoyer intéressant est un article "A comparison of Ada and Java as a Foundation Teaching Language" à lire absolument.
C a beaucoup vieilli (mais reste encore estimé). De nombreuses applications tournent encore en C et le resteront. Si des composants logiciels (en C) performants et testés sont encore utiles il est intéressant de pouvoir interfacer ces modules dans sa propre application (C++ et Ada le permettent mais pas Java). C que l'on a surnommé le plus transportable des assembleurs (il est d'ailleurs le seul de sa catégorie!) ne supporte pas l'orienté objet et s'est vu rajeunir avec le C++ soit! Cependant le C++, à l'usage, n'est pas exempt de reproches : "A critique of C++" (voir ce lien). Ces critiques expliquent l'émergence de Java ;au dire de ces concepteurs "Java c'est du C++ sans les couteaux!". Mais Java n'est pas encore normalisé alors que Ada et C++ le sont depuis longtemps.
On entend dire que Ada n'est pas un langage à objet !! C'est pourtant le premier langage à objet à avoir été normalisé (1995) C++ le fut plus tard. Ada implémente la quasi-totalité des notions objets :"classes, héritage, polymorphisme, généricité". J'ai presque envie d'écrire qu'il les implémente mieux que ces concurrents mais, restons "objectif", il les implémente "autrement". Autrement veut dire, entre autres, seulement quand c'est nécessaire. L'article "A comparison of the Object-Oriented Features of Ada 95 and Java" (voir ce lien) est intéressant de ce point de vue.
En ce qui concerne enfin l'aspect "programmation des processus concurrents" (improprement connu sous le titre de programmation temps réel) le C++ n'est pas le langage idéal pour ce paradigme. Les seuls concurrents (si l'on peut dire!) sont Ada et Java. J'ai déjà dit dans l'article "enseigner Ada" tout le "bonheur didactique" qu'offrait Ada pour cet enseignement. N'étant pas un grand spécialiste de Java je propose là encore un article plus avisé "A comparison of the concurrency and Real-Time features of Ada 95 and Java" (voir ce lien).
Enfin, si l'on s'intéresse à l'aspect "génie logiciel" (point oh combien important! et ... parfois négligé!) il existe une étude très argumentée qui compare les quatre langages qui nous intéressent. Ce papier "Ada, C, C++, and Java vs. The Steelman" (voir ce lien) part d'un document "officiel" à savoir les exigences "Steelman" à voir au même lien.