J'ai jeté un œil à Clojure récemment et je suis tombé sur ce post sur Stackoverflow qui indique que certains projets suivent les meilleures pratiques et un bon code Clojure dans l'ensemble. Je voulais me familiariser avec la langue après avoir lu quelques tutoriels de base, j'ai donc jeté un coup d'œil à quelques projets "réels".
Après avoir regardé ClojureScript et Compojure (deux des "bons" projets susmentionnés), j'ai juste l'impression que Clojure est une blague. Je ne comprends pas pourquoi quelqu'un choisirait Clojure plutôt que, Ruby ou Python, deux langues que j'aime et qui ont une syntaxe si propre et sont très faciles à comprendre alors que Clojure utilise tellement parenthèses et symboles partout que cela ruine la lisibilité pour moi.
Je pense que Ruby et Python sont beaux, lisibles et élégants. Ils sont faciles à lire même pour quelqu'un qui ne connaît pas la langue à l'envers. Cependant, Clojure est opaque pour moi et je sens que je dois connaître chaque petit détail sur l'implémentation du langage afin de pouvoir comprendre n'importe quel code.
Alors, éclairez-moi!
Pour le contexte que vous avez donné, si je peux paraphraser:
... Je pense que la meilleure réponse est de lire le livre Clojure Programming par Emerick, Carper et Grand. Le livre contient de nombreuses comparaisons de code explicites avec Python, Ruby et Java, et contient des explications textuelles concernant les codeurs de ces langages. Personnellement, je suis venu à Clojure après avoir construit des projets de bonne taille avec Python et avoir une certaine expérience LISP; la lecture de ce livre m'a aidé à me convaincre de commencer à utiliser Clojure non seulement dans des projets parallèles mais à des fins professionnelles.
Pour répondre directement à vos deux questions:
Suggestions supplémentaires: l'élégance et la puissance de LISP proviennent en partie de sa syntaxe minimaliste et tout à fait cohérente. Il est beaucoup plus facile d'apprécier cela avec un bon éditeur, par ex. Emacs avec mode clojure et ParEdit. Au fur et à mesure que vous vous familiarisez avec elle, la syntaxe s'estompe et vous "voyez" la sémantique, les intentions et les abstractions concises. Deuxièmement, ne commencez pas par lire la source de ClojureScript ou Compojure, ce sont trop à la fois; essayez quelques problèmes 4clojure.org, et comparez les solutions avec les meilleurs codeurs là-bas. Si vous voyez 4-6 autres solutions, invariablement quelqu'un aura écrit une solution de style FP vraiment idiomatique et succincte que vous pouvez comparer avec une solution de style impératif maladroite, verbeuse et inutilement compliquée.
Les dialectes LISP ont une niche unique en raison de leur syntaxe simple. Cette syntaxe simple rend la méta-programmation grâce à l'utilisation de macros très simple. Cela vous permet de modéliser la langue en fonction de votre domaine problématique au lieu de modéliser pour adapter votre domaine problématique à votre langue. C'est vraiment cool une fois que vous avez compris, et cela vous permet de faire beaucoup de choses facilement, ce qui est très difficile dans d'autres langues.
L'inconvénient, c'est que puisque chaque programme LISP définit essentiellement son propre langage, vous avez vraiment besoin d'une solide compréhension des choses pour comprendre ce qui se passe.
Maintenant, pour répondre à vos questions ...
Clojure est un dialecte LISP moderne qui s'exécute dans la JVM/CLR. Il est ainsi facile de profiter de la puissance de LISP dans une infrastructure existante.
Il est essentiel de comprendre comment utiliser les macros pour créer LISP sur votre domaine problématique afin d'apprécier son utilisation. Je n'ai vraiment compris cela qu'après avoir implémenté un runtime LISP, quand j'ai trouvé qu'une grande partie des fonctionnalités du langage de base peuvent facilement être implémentées dans LISP lui-même. Il faut un projet de bonne taille pour l'obtenir.
Ses avantages mis à part, même si c'est amusant de programmer, je n'ai personnellement pas beaucoup de cas où je me tournerais vers lui pour des problèmes quotidiens. C'est un très bon outil pour apprendre pour l'expansion de l'esprit, et après avoir appris LISP correctement, il est devenu beaucoup plus naturel de profiter des fonctionnalités de méta-programmation dans d'autres langues.
La syntaxe simple facilite l'interprétation par les ordinateurs (permettant des macros puissantes aussi simples), mais il est très difficile pour un humain d'analyser rapidement des expressions complexes.
Les points forts de Clojure ont été mis en évidence à plusieurs reprises et, bien sûr, font un langage très puissant, donc je ne les répéterai pas ici.
J'ai toujours adoré LISP, depuis les années uni et j'étais très excité quand j'ai découvert Clojure (peut-être enfin la chance d'utiliser LISP en dehors du monde universitaire!). Cependant, lorsque j'ai commencé à apprendre, un sentiment de malaise a commencé à s'infiltrer, bien que je ne puisse pas identifier exactement ce que je n'aime pas. Tout d'abord, je dirais que le codage dans Common LISP a été facile et amusant pour moi, mais Clojure a une courbe d'apprentissage plus abrupte. Clisp avait une certaine beauté et élégance. Je ne suis pas sûr que j'obtiendrai le même sentiment de Clojure. Je me demande si ce sentiment disparaîtra à mesure que j'aurai plus d'expérience.
J'ai une autre supposition pour ma mystérieuse répulsion. Je pense que ce pourrait être sa grande flexibilité. Par exemple, vous pouvez avoir des structures à moitié vectorielles et à moitié cartographiques et avec quelques caractères de code, vous pouvez les accepter comme paramètres, les démonter et les traiter correctement. Oui, il supprime tout le passe-partout, mais d'une certaine manière, il ne se sent pas bien. C'est comme si vous ne connaissiez jamais très bien les règles sous toutes ces parenthèses, ces deux points, ces braquets, etc.
Pour moi, j'aime toujours le langage pour tous ses avantages (principalement, fonctionner dans la JVM et simplifier la concurrence, tout en étant beaucoup plus puissant et concis que Java et avec des défauts de conception moins évidents) mais le jury ne sait toujours pas si quelque chose aurait pu être amélioré.