Mon avis général sur l’article : en l’état, il va faire un bide. Maintenant, si on regarde un peu plus en détail, il souffre de plusieurs défauts.
Le premier, c’est que tu ne sembles pas t’être posé la question de ton public. À qui t’adresses-tu, et qui cherches-tu à convaincre ? Nécessairement, les arguments et les points plus ou moins détaillés ne seront pas les mêmes.
On voit d’emblée à la lecture que tu ne t’adresses absolument pas à des débutants en programmation : tu utilises bien trop de concepts avancés pour qu’un débutant qui chercherait un premier ou deuxième langage comprenne quoi que ce soit à ton argumentaire. Est-ce vraiment ce que tu veux ? Si oui, pourquoi utiliser un titre aussi généraliste ?
Mais même parmi les développeurs relativement chevronnés, on ne voit pas bien qui tu cibles. Tu as des passages comme ça :
De plus Haskell commence peu à peu à être utilisé en industrie pour sa sûreté sans pareille. Haskell va connaître un succès d'ici les 10 années futures selon moi. Étant donné la difficulté de Haskell, il faut commencer tôt pour d'ici-là maîtriser Haskell au mieux.
Et puis connaître un langage d'un paradigme différent est un vrai plus dans un CV.
… où tu sembles clairement t’adresser à des devs professionnels. Je veux dire, je bosse dans le domaine général de l’administration, avoir tel ou tel langage plutôt qu’un autre sur mon CV ne me sert strictement à rien. Et je me fous de savoir ce qu’utilise l’industrie pour faire mes joujoux dans mon coin.
Et pourtant, une bonne partie de ton argumentaire semblerait vouloir toucher un public plus large. De même, tu sembles globalement t’adresser à un public de gens qui viennent de la programmation impérative, mais tu considères par ailleurs comme acquises des choses qui… justement viennent de la programmation fonctionnelle.
Par exemple, quand tu parles du fait que Haskell permet de faire des fonctions d’ordre supérieur, un programmeur impératif qui n’a jamais eu besoin d’utiliser des fonctions d’ordre supérieur (je dirais, à peu près tous) ne comprendra pas en quoi cela a le moindre intérêt.
De même, tes exemples de code sont difficilement compréhensibles pour quelqu’un qui n’a jamais fait de programmation fonctionnelle, et surtout, manquent cruellement d’intérêt. Sérieusement, qui s’emmerde à écrire une factorielle ?
On en arrive au deuxième défaut : tu présentes tout un tas de fonctionnalités de Haskell, mais tu n’expliques jamais à quoi elles servent. La question majeure, c’est : pourquoi j’irais me faire chier à apprendre un nouveau paradigme, pour utiliser des outils, alors que j’arrive très bien à faire la même chose avec les outils de mon propre paradigme ?
En fait, tel quel tu présentes et expliques les choses, il faut avoir déjà fait de la programmation fonctionnelle pour comprendre à quoi cela sert d’apprendre la programmation fonctionnelle !
Dans un même ordre d’idée, ta section sur les domaines de prédilection ne fait vraiment, vraiment pas envie. Écrire un nouveau langage, écrire un compilateur pour un langage existant et faire de la programmation concurrente. Youhou ! ça envoie du rêve, vraiment… Ah si, quand même, tu mentionnes vaguement à la fin les frameworks Web et le fait que le langage soit généraliste…
Je vais parler un peu d’expérience personnelle, ici. J’ai mis très longtemps à faire comprendre à mon paternel pourquoi j’appréciais coder en Haskell. Pour lui qui n’est pas dev professionnel, mais qui utilise simplement la programmation comme outil pour son boulot, l’élégance des types algébriques, ça lui passe complètement au-dessus.
Le jour où j’ai fini par réussir à lui faire piger, c’est quand je lui ai parlé non des grands principes (Évaluation Paresseuse, Fonctions Comme Données De Premier Ordre, Monades™…), mais des outils du quotidien. Comment j’utilisais map
plutôt que des boucles. La puissance des listes en compréhension. Des trucs comme ça.
Parce que là, il s’est rendu compte que c’était des outils qu’il utilisait lui-même au quotidien, mais sous un autre nom. Et sans savoir qu’ils venaient de la programmation fonctionnelle. Et qu’il les aimait beaucoup.
Troisième défaut majeur à mon sens, ceci :
Haskell est très abstrait, et requiert une grande capacité d'abstraction pour comprendre certains concepts comme les foncteurs, les monades, les arrows, la programmation fonctionnelle réactive et bien d'autres encore.
Dans tous les cas, Haskell a une courbe d'apprentissage très rude. Au départ, il sera normal de se dire toutes les dix secondes "Oh là là, c'est quoi ce langage bizarre" si vous n'avez jamais fait de programmation fonctionnelle avant. Mais d'après mon expérience personnelle, cela vaut vraiment le coup.
Bien que j'adore ce langage, je le déconseille si vous n'aimez pas les mathématiques, et si vous ne cherchez pas à vous casser la tête.
Tout ça, c’est de l’ordre de la prophétie auto-réalisatrice. À force de répéter inlassablement que Haskell est dur à apprendre, que c’est vache d’abstrait, que c’est super chelou comme langage, on finit par générer chez les gens cette impression de difficulté.
Si tu veux parler des défauts de Haskell, parle plutôt du fait que c’est super chiant de faire de l’IO. Ou encore que l’évaluation paresseuse peut te jouer des tours de cochon : même un exemple simple comme le foldl
non strict est suffisant pour bien se rendre compte de l’ampleur du problème.
Quatrième défaut, et je m’arrête là : à quelques détails près, ton article n’explique pas pourquoi les gens devraient apprendre Haskell, il explique pourquoi ils devraient apprendre la programmation fonctionnelle.
Il manque une comparaison avec d’autres langages fonctionnels, et un argumentaire sur pourquoi Haskell plutôt que ceux-là. Par exemple, quand tu écris ceci :
Mais Haskell reste imbattable en ce qui est de la sûreté (il existe quelques langages plus sûrs que Haskell mais encore moins connus).
Clairement, le fait qu’ils soient peu connus n’est pas un argument en soi pour préférer Haskell à ces langages dont tu ne donnes même pas le nom. Alors si la sécurité est si importante, pourquoi se contenter de Haskell plutôt que d’aller directement voir ces langages-là ?
Ou encore, tu parles de la capacité d’Haskell à faire de la programmation concurrente, mais il peut aller se rhabiller à côté d’Erlang sur ces questions-là, alors pourquoi Haskell ?
Voilà, j’espère ne pas t’avoir découragé, mais l’argumentation est un art moins évident qu’il n’y paraît, et il faut bien que je mette le doigt sur les failles de la tienne.