Developpez.com

Le Club des Développeurs et IT Pro

Les langages statiques sont-ils trop sophistiqués et complexes ?

Un cadre de Google montre Java et C++ du doigt

Le 2010-07-26 08:55:14, par Katleen Erna, Expert éminent sénior
Mise à jour du 26.07.2010 par Katleen
Les langages statiques sont-ils trop sophistiqués et complexes ? Un cadre de Google montre Java et C++ du doigt


Il y a trois jours, dans l'Oregon, lors de la conférence O'Reilly consacrée à l'open source, le prestigieux ingénieur de Google Rob Pike a tenu des propos assez durs envers "les langages de programmation industrielle".

Il reproche aux langages actuels (Java et C++ en tête de liste) d'être trop complexes et pas assez adaptés aux environnements informatiques d'aujourd'hui.

"Ces langages sont trop difficiles à utiliser, trop subtils. Ils sont bien trop verbeux et leur subtilité, leur complexité et leur verbosité semble ne jamais cesser d'augmenter. En plus, ils sont vendus de façon excessive et bien trop largement utilisés.", assène-t-il.

Pour argumenter ses propos, il a montré quelques exemples de code C++, dont une déclaration variable qui s'étendait sur presque une ligne complète de l'écran. Pour lui, "de telles choses" ne peuvent assurément pas être "le standard de l'informatique enseigné à l'école et utilisé dans l'industrie".

Pour lui, ce type de programmation est "trop bureaucratique : il faut justifier de tout auprès du compilateur".

Il explique ensuite que le C++ a été crée pour répondre à la frustration des programmeurs à propos du langage low-level C. Java est ensuite arrivé pour simplifier C++. Mais de nouvelles fonctionnalités ont été ajoutées aux deux langages, les rendant encore plus complexes. A l'inverse, ils s'accommodent très mal des processus multicoeurs (qui sont apparus après leur développement et s'adaptent mal à ces environnements.

Le mois dernier, lors de la conférence annuelle USENIX, un autre ingénieur de renom à tenu un discours similaires. Adam de Boor (Gmail) a ainsi révélé que le service de mail en ligne de Google était intégralement écrit en Javacript (443.000 lignes de code) et ce, à la main.

Si Java est plus expressif, il est aussi plus verbeux selon lui. Face à cela, les langages comme JavaScript, Ruby et Python (qui ont été développés en réponse à la complexité grandissante de C++ et de Java), ont aussi leurs défauts : "leur syntaxe est plus simple, mais ils sont plus lents et peuvent abriter davantage d'erreurs", a-t-il argumenté.

"La saisie dynamique n'est pas forcément une bonne chose, vous obtenez des erreurs statiques en run time que vous pourriez éviter en compilant", termine-t-il.

Revenons à Rob Pike. Il a terminé sa keynote en présentant Go, un nouveau langage de programmation qu'il a développé avec d'autres ingénieurs de Google.

Il explique qu'il s'agit d'une tentative de fusion des meilleures qualités des deux catégories de langages (dynamiques et statiques) : "Go a pour but de combiner la sécurité et la performance des langages statiques avec la praticité et la décontraction des langages dynamiques".

Source : Déclarations de Rob Pike

Voir aussi

Installer Go

Et vous ?

Pensez-vous que Java et C++ soient devenus trop complexes ?

Pourquoi les langages gagnent-ils toujours en complexité ?

Que pensez-vous de l'initiative Go ?

Go deviendra-t-il à terme aussi compliqué que les autres langages lorsqu'il sera beaucoup utilisé ?
  Discussion forum
53 commentaires
  • Fr@ncky
    Membre régulier
    Pour argumenter ses propos, il a montré quelques exemples de code C++, dont une déclaration variable qui s'étendait sur presque une ligne complète de l'écran.
    Le problème là n'est pas le langage, mais le programmeur...
  • bubulemaster
    Membre éclairé
    Envoyé par Katleen Erna

    Il reproche aux langages actuels (Java et C++ en tête de liste) d'être trop complexes et pas assez adaptés aux environnements informatiques d'aujourd'hui.
    Ces langages ne sont-ils pas à l'image de l'informatique aujourd'hui, c'est à dire complexe. L'assembleur est quant à lui peu complexe, par contre, sortir de gros programmes, c'est dur et long de l'utiliser.

    Envoyé par Katleen Erna

    "Ces langages sont trop difficiles à utiliser, trop subtiles. Ils sont bien trop verbaux et leur subtilité, leur complexité et leur verbalité semble ne jamais cesser d'augmenter. En plus, ils sont vendus de façon excessive et bien trop largement utilisés.", assène-t-il.
    C'est sûr que le Cobol ou Logo sont moins subtiles. En plus, ils sont moins utilisés.
    Le fait qu'un langage soit vendu de façon excessive peut irriter, mais qu'ils soient trop largement utilisés, là, faut rappeler au gars, dans ce cas, qu'il y a la même chose avec l'anglais. Trop vendu, trop utilisé. Je suis sûr qu'il sera d'accord pour abandonner l'anglais et passer l'Espérento

    Envoyé par Katleen Erna

    Pour argumenter ses propos, il a montré quelques exemples de code C++, dont une déclaration variable qui s'étendait sur presque une ligne complète de l'écran. Pour lui, "de telles choses" ne peuvent assurément pas être "le standard de l'informatique enseigné à l'école et utilisé dans l'industrie".
    Ah, des arguments, des preuves (scientifiques), des stats ?

    Envoyé par Katleen Erna

    Pour lui, ce type de programmation est "trop bureaucratique : il faut justifier de tout auprès du compiler".
    Oui, c'est vrai que les langages informatiques sont de natures agricoles

    Envoyé par Katleen Erna

    Il explique ensuite que le C++ a été crée pour répondre à la frustration des programmeurs à propos du langage low-level C. Java est ensuite arrivé pour simplifier C++.
    C'est sa vision des choses, où il se base sur des faits ou des sondages ?
    Jamais entendu dire ça.

    Envoyé par Katleen Erna

    Mais de nouvelles fonctionnalités ont été ajoutées aux deux langages, les rendant encore plus complexes. A l'inverse, ils s'accommodent très mal des processus multicoeurs (qui sont apparus après leur développement et s'adaptent mal à ces environnements.
    Là, je suis assez d'accord (si, si)

    Envoyé par Katleen Erna

    Si Java est plus expressif, il est aussi plus verbal selon lui. Face à cela, les langages comme JavaScript, Ruby et Python (qui ont été développé en réponse à la complexité grandissante de C++ et de Java), ont aussi leurs défauts : "leur syntaxe est plus simple, mais ils sont plus lents et peuvent abriter davantage d'erreurs", a-t-il argumenté.
    Des chiffres pour étayer ?

    Envoyé par Katleen Erna

    "La saisie dynamique n'est pas forcément une bonne chose, vous obtenez des erreurs statiques en run time que vous pourriez éviter en compilant", termine-t-il.
    Ça c'est sûr, on apprend rien de nouveau.

    Envoyé par Katleen Erna

    Revenons à Rob Pike. Il a terminé sa keynote en présentant Go, un nouveau langage de programmation qu'il a développé avec d'autres ingénieurs de Google.
    Voilà le véritable enjeu, il veut vendre son produit.
    Je suis sûr qu'il veut le vendre de façon excessive et qu'il soit trop largement utilisés

    Envoyé par Katleen Erna

    Il explique qu'il s'agit d'une tentative de fusion des meilleures qualités des deux catégories de langages (dynamiques et statiques) : "Go a pour but de combiner la sécurité et la performance des langages statiques avec la praticité et la décontraction des langages dynamiques".
    A voir...

    Envoyé par Katleen Erna
    Pensez-vous que Java et C++ soient devenus trop complexes ?
    Ils l'ont toujours été.

    Envoyé par Katleen Erna
    Pourquoi les langages gagnent-ils toujours en complexité ?
    Parce que l'humain est réticent, à réapprendre tout, tout les 4 matins.

    Envoyé par Katleen Erna
    Que pensez-vous de l'initiative Go ?
    A suivre.

    Envoyé par Katleen Erna
    Go deviendra-t-il à terme aussi compliqué que les autres langages lorsqu'il sera beaucoup utilisé ?
    Certainement
  • S(ô.Ô)B
    Membre régulier
    On peut programmer de façon "simple" avec C++ et Java, mais à partir du moment où on veut faire des choses compliquées, je crois bien qu'on est obligé de programmer de façon "complexe".

    S'il veut un langage peu verbeux, moi je lui propose Prolog, mais gare à l'entorse du cerveau pour pondre les quelques lignes permettant de résoudre une grille de Sudoku...

    Il ne faut pas se leurrer, on ne peut pas tout avoir sans virer dans l'utopie.
  • Julien Bodin
    Membre éclairé
    En fait il essaye de vendre sa came quoi
    Quelqu'un a déjà essayé "Go" ?
  • Camille_B
    Membre éclairé
    Avec des frameworks comme GWT ou Wicket, ça reste à voir... (encore faut-il les connaître)
    Oui, on pourrait aussi citer Grails ou Play.

    Malheureusement il y a la réalité du langage et de son écosystème, et sa "réputation".

    Prenons Perl, par exemple. Qui sait que Perl (sa version 5) est un langage qui s'est très largement "modernisé" ? Qu'il offre plusieurs modèles objets extrêmement souples (voire MooseX) ? Qu'il permet de faire des trucs fun "à la" Ruby avec beaucoup de sucre syntaxique ? Tout en conservant son "framework" monstrueux (CPAN), une excellente documentation, et une histoire suffisamment longue pour en faire un langage solide et dont la communauté a atteint une grande maturité ?

    Presque personne, car Python et Ruby ont meilleure réputation.

    Qui connaît les extraordinaires framework web écrits en Common LISP ? Qui sait que les langages de la famille LISP ont bien souvent des performances proche du C pour une souplesse inégalée et une concision dans l'écriture semblable aux Python et aux Ruby ?

    Personne, car LISP a une réputation de langage vieux et conçu exclusivement pour l'intelligence artificielle.

    Bref, il y a le langage, et son image. Et parfois, malheureusement, le monde industriel (ou amateur) passe à un nouveau langage pour de simples raisons de "réputation".

    Or, au jour d'aujoud'hui, Java a toujours sa réputation de langage verbeux (alors que l'on peut garder le framework et passer à Scala, Rhino, Clojure etc.) aux framework lourdingues.

    Peut-être la communauté a-t-elle un rôle à jouer sur ces points ? Sans doute le joue-t-elle déjà d'ailleurs !
  • dissert
    Membre averti
    Je suis presque d'accord sur la conclusion, à avoir les langages mainstream actuels sont trop complexes et pas adaptés aux besoins d'aujourd'hui, mais les arguments développés sont complètement à côté de la plaque (voire dépassés) et non étayés. Je pense, comme les autres, qu'il cherche à vendre son langages, mais ses arguments sont mauvais.

    Je suis d'accord avec le fait que Java (je ne m'exprimerai pas sur C++) soit trop verbeux, mais c'est la contrepartie au fait que le langage soit relativement simple. Si on fait du Scala, par exemple, il faut apprendre plein de nouvelles notions abstraites compliquées qui nous permettent de bénéficier des mêmes API qu'en Java, mais avec trois fois moins de code.

    Après il faut voir de quels développeurs on bénéficie et de l'écosystème, des contraintes ...

    Pour faire un système complexe, en ce qui me concerne, je prendrais aujourd'hui un langage statique. Pour certains usages, essentiellement marginaux, oui, j'ai envie d'utiliser des langages dynamiques, voire des DSL (donc statiques).

    Il serait intéressant de savoir quels usages Go est capable d'adresser de la manière la plus pertinente.

    Mais si l'objectif de Go est de devenir un langage mainstream pour gros systèmes, à la place de Java et C++, d'une part je lui souhaite bonne chance, d'autre part je lui souhaite de meilleurs promoteurs.
  • C'est de la pub pour un langage développé par Google.
  • dingoth
    Membre expérimenté
    Pour être polyvalent, un langage a besoin de subtilités. Je ne comprends pas ce faux-problème.

    En interne, Google utilise très fort Java (regardez le nombre de bibliothèques Java que Google crée et maintient) et ils ont des pontes du langage tel Josh Bloch. C'est quoi ce double discours ?

    Envoyé par Katleen Erna
    Si Java est plus expressif, il est aussi plus verbal selon lui. Face à cela, les langages comme JavaScript, Ruby et Python (qui ont été développés en réponse à la complexité grandissante de C++ et de Java), ont aussi leurs défauts : "leur syntaxe est plus simple, mais ils sont plus lents et peuvent abriter davantage d'erreurs", a-t-il argumenté.
    Faux : JavaScript n'a pas été construit en réponse à une complexité grandissante, mais bien à un besoin différent dans le contexte (browser, bande passante limitée, etc.) ; Ruby n'est pas non plus une réponse à Java ou C++ spécifiquement, mais davantage aux tendances de tous les langages de l'époque.

    P.S. C'est bien "verbeux" et "verbosité" qu'il faut utiliser et non "verbal" et "verbalité".
  • _skip
    Expert éminent
    S'il ne s'agit pas d'en inventer une carrée en prétendant que la ronde est démodée...
  • cfranco
    Membre du Club
    Par rapport au cas de Java, il est clair que l'ajout des génériques a rendu le language beaucoup plus verbeux... Mais beaucoup plus sûr aussi, et finalement plus simple à utiliser (quand on les a bien compris) puisque cela évite tout un tas de casts plus ou moins hasardeux. Et au niveau du développement, on gagne forcément à détecter les erreurs dès la compilation (ou même plus précisément dès la frappe du code source, la plupart des IDE les signalant en temps réel), qu'à l'execution.

    Le véritable problème est à mon avis plutôt lié au fait que bon nombre de développeurs sont incapables de structurer leur programmes. Or ce type de langage ne peut être utilisé sur un projet un peu plus gros qu'un exercice scolaire que si les méthodes, les classes, les packages sont délimitées de manière extrèmement restrictive, et logique. Dans le cas contraire, on se retrouve vite avec un boxon incompréhensible.

    Mais dès qu'on travaille sur un projet un peu gros, ça implique plusieurs personnes travaillant ensemble et/ou de reprendre un code source qu'on a soi-même écrit, plusieurs mois voir plusieurs années après l'avoir vu pour la dernière fois. Et là, ce genre de fonctionnalités du langage s'avère incontournable pour réussir à s'en sortir sans trop s'arracher les cheveux.

    Je programme en Java, Javascript et Objective-C, et très clairement c'est en Java que je peux avoir le plus de facilité à programmer, et c'est grâce justement à la complexité du langage. Par contre, c'est sûr que ça ne se maîtrise pas en 5min...