• # "The Right Thing" vs "Worst is Better"

    Posté par (site web personnel) . En réponse à la dépêche Opa, un nouveau langage pour le développement d’applications Web. Évalué à 10.

    Je reprend la typologie de http://www.dreamsongs.com/Files/AcceptanceModels.pdf

    M'excuserez le franglais, que j'assume.

    OPA :

    • Technological model:
    • - ✓Old technology: Principalement inspiré de Caml, circa 1985
    • - ✗Tried before: no
    • - ✗Appeals to market need: Pas vraiment. Les dev web sont nuls et aiment des merdes comme PHP. Ils ont du mal à comprendre qu'on pourrait faire mieux. Leur horizon lointain, c'est Rails. Les entreprises n'ont de plus aucun intérêt à voir un accroissement net de la productivité de la programmation.
    • - ✗Smallest investment: Non, syntaxe à revoir, et à étudier sur un angle de psychologie du développeur. Je vous conseille d'aller lire les papiers de PPIG, the Psychology of Programming Interest Group http://ppig.org
      • ✓Minimize typing: Oui
    • Design model:

      • ✓Simplicity: Oui
      • ✓Minimal completeness: A peu près
      • ?Minimal correctness: A voir sur de gros projet
      • ?Minimal consistency: idem
      • ✗Minimal abstraction: Le développeur web moyen ne peut pas comprendre ce genre de concept, pas le niveau.
    • Implementation:

      • ✓Fast: Je suppose que oui
      • ✓Small: A priori
      • ✓Interoperate: Limitée
    • Environment:

      • ✓Cultural change: Le cloud. La concurrence s'y adaptera, J2EE va finir pas y arriver. Quand aux concepts du langage, Caml n'a jamais pris. Trop conceptuel.
      • ✓Quickly adapted: Bon courage
      • ✗Gambler’s Ruin-safe: Assez peu. Ie. si votre produit devient intéressant, peut être récupéré par Kro$oft, ils ont bien fait F# (qui est plus multicore ready que Ocaml, et de loin)
    • Language requirements:

      • ✓Runs everywhere: En gros oui, merci le compilateur Ocaml, que ça serait mieux qu'il ait un jour un back end C, il serait vraiment multiplateforme.
      • ✓Minimal computer requirements: oui
      • ?Simple performance model: Aucune idée !!!
      • ✗Minimal mathematical sophistication: Encore le gros problème de la syntaxe et des concepts très cameliens du langage.
      • ✗Minimally acceptable for purpose: pas dans le milieu des devs web
      • ✗Similar to popular language: Les gens qui codent en ocaml sont pas du genre à faire du web, et il y a Ocsigen
      • ✗Gurus: Pas à ma connaissance

    Verdict:

    1. La syntaxe - un moyen d'attirer le dev

    Même pour un type comme moi qui a qq milliers de lignes en ocaml (dont je suis loin de maitriser toute la syntaxe), la syntaxe d'OPA est vraiment bizare.
    Sur IRC, il y a un mois, vous me disiez que vous pensiez à une syntaxe à la Java/C. Je ne suis pas sûr que ce soit indispensable.

    Mais la syntaxe est vraiment à penser, les concepts derrières sont intelligents et puissant. Ya moins de sophistiction mathématique qu'en OCaml, et ça peut
    aider à l'adoption.

    Déjà, les dev sont habitués à mettre les template séparé du code.
    Le template a aussi l'avantage d'être compréhensible du designer, et lui permet de mettre au point sa CSS dans son coin.
    Je vois bien que c'est beau de mettre son code dans un seul fichier, mais c'est de la philosophie The Right Thing et pas Worst is Better ( http://en.wikipedia.org/wiki/Worse_is_better ). C'est toujours la seconde qui a marché.
    Je vous comprend, je suis comme vous, je préfère The Right Thing mais la masse aime Worst is Better
    La masse aime Céline Dion et Britney Spears aussi, hein.

    Le concept
    type message = { ... }
    C'est trop camelien !
    Pourquoi pas message is { ... } ?

    user_update(x: message) =
     line = <div class="line">
     <div class="user">{x.author}:</div>
     <div class="message">{x.text}</div>
     </div>
     do Dom.transform([#conversation +<- line ])
     Dom.scroll_to_bottom(#conversation)
    

    C'est chaud à comprendre

    C'est de la pure invention/impro, hein :-)

    event user_update(x: message) 
    line = <div class="line">
     <div class="user">{x.author}:</div>
     <div class="message">{x.text}</div>
     </div>
    do :
     - Dom.add_to_id #conversation html line (* Plus clair que +<-*)
     - Dom.modify_id #conversation with_html line (* Autre exemple que l'imbitable et camelien <-*)
     - Dom.scroll_to_bottom_id #conversation
    

    En gros, c'est une syntaxe à mot clé.

    Ca, pareil, c'est trop camelien

    <input id=#entry onnewline={_ -> broadcast(author)}/>
    

    Pour comprendre que c'est un pattern matching par défaut, bon courage...
    <input id=#entry onnewline={ do : broadcast author }/>
    

    Pitié, évitez de reprendre les opérateurs chiant de ocaml pour les flottants !

    if time > 20. then
    

    2. Le modèle de perf

    On a pas trop d'info sur le modèle de perf.
    Dans son modèle, Gabriel explique que le modèle de perf doit être simple. Ce qui signifie qu'en gros le langage doit être rangé dans la catégorie Rapide, Moyen ou Lent.
    Mais les trucs du style Lent dans tel cas, rapide dans tel autre, les gens aiment pas trop...

    3. Les concepts derrière

    Il y a beaucoup trop de concept camelien derrière. Prenez 2 ou 3 dev web PHP de base, d'un niveau moyen, et cuisinez les 1 après midi chacun pour voir comment ils conçoivent l'architecture d'un site.
    Quand on regarde le code, on a beaucoup de mal à comprendre dans quel sens ça tourne, et ça le dev de base, il a besoin de ça...

    Vous verrez que le pattern matching, s'il est simple ça va, mais le _ -> toto(coucou) en plein milieu d'un code html , évitez..

    Bon voilà, plein de choses à dire, mais critiquez d'abord mon intervention, on discutera :-)

    « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker