Je sais que Lisp et Haskell sont respectivement des langages de programmation logique et fonctionnel, mais qu'est-ce que cela signifie exactement? Comment diffèrent-ils des autres langues? J'ai entendu dire que leur apprentissage ferait de vous un meilleur programmeur et améliorerait votre logique. Est-ce vrai et si j'apprends le Lisp ou le Haskell à un niveau compétent, ma programmation s'améliorera et serai-je mieux à même de traiter n'importe quel problème dans n'importe quelle langue? Je voulais juste savoir pour voir s'ils valaient la peine d'apprendre. Ces langages sont-ils également utiles dans des domaines tels que l'interface graphique et les graphiques, ou sont-ils simplement utiles pour les applications console?
41
Réponses:
C'est comme si l'apprentissage des mathématiques améliorait vos compétences analytiques et que l'apprentissage de la littérature latine / classique améliorait vos compétences en écriture.
Les personnes qui ont conçu ces langues ont réfléchi à ce que signifie écrire un programme. Et ces langues sont les résultats de ces recherches.
Cela dit, l'apprentissage de Java fera également de vous un meilleur programmeur. Et apprendre C. Les avantages réels proviennent de l’apprentissage de langues avec une philosophie différente. Vous pourrez alors avoir votre propre opinion sur la manière dont un programme devrait être écrit.
modifier
Je me rends compte que cette réponse n’est pas très utile pour les personnes qui n’ont pas encore appris le haskell et / ou le lisp. Voici quelques exemples pour expliquer davantage ce que je veux dire
ZÉZAYER
Lisp pense que la syntaxe devrait être minimale et que tout devrait être une liste ou une primitive (Lisp signifie Traitement de liste). Même les programmes sont principalement des listes contenant d’autres listes et symboles. Lisp vous permet de manipuler des programmes sous forme de liste et de générer de nouveaux programmes à la volée. D'où toute la
code is data and data is code
devise.La conséquence directe est que les langages Lisp vous permettent de définir l’interface de votre choix. Un bon exemple est compojure, qui est un framework web de clojure. Voici à quoi ressemble une fonction de routage
Un autre bel exemple est le framework de création de hiccup:
Comme vous pouvez le constater, le résultat est aussi succinct que dans DSL comme moustache, mais vous permet d’utiliser les fonctionnalités du langage telles que
(for [x (range 1 4)] block)
. Encore plus agréable, vous avez tous les outils pour résumer et structurer votre code.Dans d'autres langues, la syntaxe est plus complexe. Vous ne pouvez pas lire un programme Java en tant que groupe de listes. Mais en utilisant Lisp, vous avez une meilleure idée de ce à quoi devrait ressembler une interface idéale et de ce que votre code peut être extrait sous forme de données. Cela vous aide également à voir votre langue préférée comme une grande structure de données et à mieux comprendre sa sémantique.
Haskell
Haskell croit au typage statique fort et à la pureté. Les fonctions pures ressemblent aux fonctions mathématiques: elles sont définies sur un ensemble de valeurs et mappées sur un autre ensemble. Les fonctions n'ont pas d'effets secondaires et les valeurs sont immuables. La pureté est intéressante parce que ce n'est pas quelque chose qu'un langage multi-paradigme peut avoir. Une langue est pure ou non.
Une conséquence est que vous ne pouvez pas effectuer d'action IO quand vous le souhaitez (Haskellers pense que c'est une bonne chose). Les actions IO sont définies comme des transactions, qui sont elles-mêmes des valeurs pures. La
main
valeur d'un programme haskell est une transaction IO exécutée lorsque vous exécutez le programme.Vous devez traiter explicitement du flux de données dans votre programme. Vous ne pouvez pas faire communiquer deux composants en écrivant et en lisant des éléments dans une variable globale. Vous devez construire et transmettre des valeurs.
Une autre caractéristique mentionnée par Jimmy Hoffa est le système de type riche. Tandis que d'autres langues utilisent le typage statique, dans haskell vous pouvez avoir des choses comme:
length :: [a] -> Int
(fonction d'une liste de a à un int)map :: (a -> b) -> [a] -> [b]
(fonction qui prend unea to b
transformation et une liste de a, et retourne une liste de b)La bonne chose est que je n'ai pas besoin d'expliquer ce que ces fonctions font réellement: vous comprenez déjà leur comportement. De plus, les fonctions portant ces signatures ne peuvent en réalité que calculer la longueur d'une liste et mapper une transformation sur une liste.
Dans d'autres langages typés, les hiérarchies de classes associées à la mutabilité font de la gestion de ces types un cauchemar. Vous devez comprendre des choses telles que la covariance et la contravariance, impossibles à comprendre du point de vue linguistique (c.-à-d. Simple, puissant et sûr).
Soit vous prenez le chemin sûr (comme scala) et vous vous retrouvez avec un langage très complexe, soit vous prenez le chemin simple et obtenez quelque chose qui est soit limité (google go génériques limités à la liste et aux cartes) ou peu sûr covariant).
En utilisant haskell, vous découvrez principalement les avantages de la pureté et comment écrire du code pur.
la source
tl; dr Apprendre de nouvelles choses ne peut que faire de vous un meilleur programmeur, mais être un meilleur programmeur ne concerne pas les langues dans lesquelles vous pouvez écrire du code.
Quels sont les avantages d'utiliser LISP et Haskell?
ZÉZAYER:
De: Pourquoi Lisp est-il utile?
Haskell:
Vous pouvez y lire une description de Functional vs imperative
De: http://www.haskell.org/haskellwiki/Introduction
Vont-ils faire de moi un meilleur programmeur?
Oui, bien sûr, connaître davantage de langues et de paradigmes ne peut que faire de vous un meilleur programmeur, mais comprenez bien ceci:
Il n'y a pas un seul outil, un seul livre, un seul paradigme de programmation qui fera de vous un meilleur programmeur.
Apprendre différents langages de programmation avec différents paradigmes vous aidera certainement à être un meilleur programmeur, apprendre à résoudre des problèmes avec des approches différentes bénéficiera également grandement à votre pensée logique.
Être un bon programmeur, ce n’est pas une question de langue, mais bien d’être capable de résoudre tout problème, quelle que soit sa langue. Et lorsque vous ne connaissez pas la langue, vous pourrez apprendre cette langue rapidement et l'utiliser efficacement.
Divulgation: Il s'agit d'une publicité sans vergogne du pire type, car elle provient de mon blog.
la source
Lorsque vous apprenez des langues qui ne font pas partie du paradigme que vous utilisez habituellement, cela vous ouvrira l'esprit à des solutions alternatives au quotidien et vous aidera peut-être même à mieux comprendre certaines caractéristiques de la langue de votre choix. Le simple fait de connaître ces langues ne fera pas de vous un meilleur programmeur si vous ne pouvez pas tirer les leçons que vous avez apprises de ces langues et les appliquer à des situations que vous voyez tous les jours.
Cela étant dit, cela ne se limite pas aux langues. Lorsque vous lisez des informations sur diverses structures de données que vous n'avez pas vues ou utilisées auparavant, cela peut vous aider à élargir votre champ de connaissances afin que la prochaine fois que vous rencontrez un problème, vous disposiez d'une solution supplémentaire.
la source