Question

J'ai lu beaucoup de discussions sur les langages de programmation fonctionnels ces derniers temps (presque l'année dernière, en fait). Je voudrais vraiment choisir un et de l'apprendre à fond.

Dernière [cours] semestre, j'ai été introduit au schéma. Je l'ai aimé. Nous avons adoré la simplicité extrême de la syntaxe, le principe homoiconicité , les macros ( hygiénique et non hygiénique), le n-arité des procédures, etc.

Le problème avec le schéma est-il est une langue académique. Je ne pense pas qu'il est vraiment utilisé dans des environnements de production. Je ne crois pas non plus qu'il est particulièrement bon d'avoir sur notre CV. Donc, je cherche des solutions de remplacement. Il y a beaucoup d'entre eux et ils semblent en quelque sorte que tous aient le même niveau de popularité.

Quelques réflexions sur d'autres langages fonctionnels que j'ai encore envisagé:

  • Clojure: Il sonne bien, car il peut accéder au monde Java, il est orienté vers l'évolutivité et de la concurrence, mais pas le monde Java sur un bord en ce moment? Je sais déjà Java assez bien, mais serait-il sage d'ajouter encore plus d'énergie en fonction de la machine virtuelle Java?
  • Haskell. On dirait un langage très apprécié, mais de ce que j'ai lu, il est aussi plus d'une langue académique
  • Lisp: Il a été autour depuis toujours. Il semble avoir le plus de ce que je veux du régime. Il a une grande communauté. Pour ce que je [pense] sais, il est probablement le plus largement utilisé le langage de programmation fonctionnelle dans l'industrie (?).
  • F #: Est-ce vraiment considère pas. Je ne suis pas un grand fan de choses MS. Je n'ai pas l'argent pour payer leurs logiciels (je aurais pu les libérer des alliances universitaires, mais je suis plus enclin à aller avec des solutions axées sur la collectivité). Bien que ... Je pense que ce serait le meilleur choix axé sur la carrière.

Ce soir, je me penche vers Lisp. Il y a une semaine, il était Haskell. Avant qu'il était Clojure. L'année dernière, je faisais un peu de régime pour le plaisir, ne pas pousser pour la raison que vous savez. Maintenant, je voudrais prendre au sérieux (au sujet de l'apprentissage d'une, de faire des projets réels avec elle, peut-être au sujet éventuellement travailler professionnellement avec lui). Mon problème est que je aurais besoin de les apprendre en profondeur avant de pouvoir choisir un.

Était-ce utile?

La solution

Puisque vous voulez pratique langue:

text alt

Notez que Haskell et Lisp sont utilisés plus que les autres dans l'industrie, bien qu'il y ait eu un certain intérêt récent Clojure et F #.

Mais regardez ce qui se passe lorsque l'on ajoute au mélange schéma:

text alt

Hmm, ne regarde pas tellement comme une langue académique maintenant, non?

En fait, le graphique ci-dessus est probablement un mensonge; le mot « système » peut apparaître dans l'aide voulait annonces dans d'autres contextes en dehors des langages de programmation. :)

Voici donc un autre graphique qui est probablement (un peu) plus représentatif:

text alt

Si vous voulez explorer un dialecte vraiment kick-ass du schéma, jetez un oeil à Racket.

Autres conseils

Si vous voulez apprendre la programmation fonctionnelle, vous pourriez être mieux servi à apprendre Haskell d'abord, puis utilisez la langue que vous voulez. Vous pouvez apprendre la programmation fonctionnelle avec les autres langues, mais ils permettent encore du code impératif et orienté objet. Si vous écrivez un véritable programme en Haskell, vous apprendrez la programmation fonctionnelle plus rapide parce que les autres paradigmes ne seront pas disponibles pour se replier sur.

Après avoir écrit votre programme Haskell, vous aurez des outils comme des monades et des techniques telles que le codage sans le point d'apporter à la langue de votre choix. Les concepts semblent carte particulièrement bien au schéma.

En fait, si vous étiez en mesure de mettre en œuvre un système assez complexe dans le schéma, vous seriez assez souhaitable dans les entreprises où vous auriez probablement souhaitez travailler. Plus tôt dans ma carrière, je suis tombé sur des étudiants qui avaient fait un montant équitable du travail dans le schéma, et la seule fois qu'il était un inconvénient était quand ils ont été incapables d'expliquer leur travail ou ne comprenais pas vraiment bien assez pour mettre en œuvre les données de base structures et algorithmes dans un laps de temps raisonnable. Je laisse toujours les candidats répondre à ces questions dans leur langue préférée; Je ne rencontrer quelques personnes qui pensaient qu'ils étaient mieux au régime qui a réussi à lutter un peu avec des choses qui devrait être facile, comme l'ajout d'un élément à une liste chaînée, qui me mystifié.

Mais si vous étiez en mesure de « get » Scheme assez bien pour écrire même une application Web moyenne, ce serait un très bon point de vente dans la plupart des sociétés de logiciels graves.

Si vous interviewez à un « blub » boutique et les développeurs juste pensé que vous étiez bizarre à cause de votre compétence au régime ou Haskell ou F #, vous auriez probablement pas envie de travailler. Dans la plupart des cas, les développeurs compétents obtiennent leur choix de concerts, donc ne pas transpirer « pratique » à moins que les seules options que vous pouvez imaginer dans votre avenir sont des entreprises. Les travaux d'être compétents, flexibles, et de briser les problèmes.

College est pas pratique. Il est de créer un environnement sûr pour explorer et apprendre. C'est, en fait, utile, même si vous finissez par écrire un logiciel ordinaire pour le reste de votre carrière.

Cela étant dit, je ne vois pas pourquoi vous voulez limiter à l'un de ces choix si tôt. Vous pouvez facilement obtenir un sentiment de tous les quatre des langues dans environ 4 semaines, puis choisissez un à se concentrer sur ce que les mailles le mieux à vos caprices actuels. Revenez ensuite à un autre de vos options et essayer de mettre en œuvre quelque chose de similaire. Passez à quelque chose de plus complexe, et d'examiner vos options encore. Expérimentation est bon. À moins que vous essayez de faire un mois suivant la vie, vous n'avez pas besoin de devenir un spécialiste encore.

J'ai écrit quelques-uns dans le schéma, F #, Emacs Lisp et Common Lisp, et lu au moins un peu de Haskell, au moins de temps en temps au cours des dernières années. Je ne peux pas dire que je suis un expert dans l'un d'eux, mais chaque excursion dans ces langues m'a bénéficié dans toutes les autres langues que je travaille dans professionnellement (C #, Java, Ruby, et parfois Boo, Perl et Python). La curiosité vous bâtir un monde plus durable, l'accomplissement de carrière que toute autre chose.

Je plongé dans Haskell pendant un certain temps, mais la conclusion que je suis arrivé à était qu'il était un peu trop académique. Il était très difficile de faire quoi que ce soit pratique. Dans un langage fonctionnel pur, des choses comme IO juste ne correspondent pas tout à fait dans le modèle, vous devez traiter monades. Je déterminé que je dois mettre en une énorme quantité de temps pour être à peine compétent, donc je suis parti.

Je l'ai fait schéma à l'université. Peut paraître trivial, mais tous les parens sont vraiment distrayant / ennuyeux. Difficile de revenir à ce que, après l'utilisation des langues comme Python.

Récemment, je l'ai exploré F #. Il est fonctionnel, mais peut aussi être impératif et orienté objet quand vous voulez. Ceci, en plus d'être en mesure d'utiliser les bibliothèques .NET, permet de mélanger facilement vos parties fonctionnelles pures avec des choses plus pratiques comme des interfaces graphiques, IO et la mise en réseau. Vous pouvez obtenir une version autonome de F #.

http://www.microsoft.com /downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5&displaylang=en

J'évalué toutes les principales langues fonctionnelles d'un ou deux ans, du point de vue de vouloir un but pratique, le général langage de programmation fonctionnelle.

J'ai fini par choisir Clojure , qui a par la suite avéré être un excellent choix.

D'une manière générale les principales raisons sont les suivantes:

  • Bibliothèque écosystème - pour une langue soit utile, vous avez besoin d'accéder aux bonnes bibliothèques. Être sur les moyens JVM que vous avez un accès facile à la plus grande bibliothèque open source et de l'écosystème d'outils, allant même pour une langue JVM est une évidence d'un point de vue pragmatique. Scala a aussi marqué très ici.

  • Macro-metaprogramming - Cet aspect de Lisp toujours fait appel à moi, surtout que je prévoyais faire un peu de génération de code. Je l'ai beaucoup apprécié les arguments bref essai de Paul Graham « Battant moyennes ». Les différents Lisps ont tous marqué fortement ici.

  • Performance était "assez bon" - Clojure est toujours compilé et obtient les avantages de la machine virtuelle Java Optimiseur JIT et un excellent GC. Comme toujours, il y a des frais généraux à l'aide d'un langage fonctionnel mais avec Clojure il était clair que vous pouvez chaque proche de la vitesse Java avec un peu d'effort (Clojure prend en charge les primitives Java et typage statique en option pour les situations où vous en avez besoin). Mon estimation est que Clojure est plus lent que Ballpark 2-5x ce que vous pourriez réaliser avec Java optimisé ou le code C, ce qui correspond à ce que vous voyez dans la section flawed , et au fil du temps je me attends à cet écart pour affiner plus loin. Aussi, il est assez facile d'écrire tout le code particulièrement sensible à la performance en Java et l'appeler de Clojure.

  • Concurrency - Clojure a une approche assez unique et puissant pour la concurrence, en particulier pour les très multi-accès simultané de base. Il est un peu difficile à expliquer, mais cette vidéo est excellente pour donner un avant-goût de la des principes. Je pense que Clojure est actuellement la meilleure réponse à la question délicate « Comment gérer partagé, l'état simultané et mutable dans un langage de programmation fonctionnelle? ».

  • Langue conception - Clojure est l'OMI un design très bien la langue pensé. Des exemples sont ayant vecteur [] et carte {} littéraux, en plus des parenthèses Lisp régulières, l'utilisation de structures de données persistantes immuables, en soutenant la paresse dans toute la langue par l'abstraction de la séquence, et en fournissant le programmeur avec une variété de fonctions orthogonales pour résoudre différents problèmes . Voir l'art de l'abstraction et simple, facile fait.

  • Communauté - toujours subjective, mais j'aimé ce que je voyais dans la communauté Clojure. L'attitude a été très utile, constructive et pragmatique. Il y a une forte « faire avancer les choses » l'accent, ce qui reflète peut-être le fait que beaucoup de gens (y compris Clojure Rich Hickey lui-même) proviennent d'un arrière-plan de la construction de systèmes d'entreprise complexes. Le fait que la communauté Clojure a des liens solides dans la communauté Java et est important pour me convaincre que Clojure ne serait pas courir le risque de se retrouver dans une « niche ».

Si je devais nommer quelques inconvénients mineurs de Clojure, ceux-ci seraient:

  • dynamique taper - souvent c'est un avantage en termes de productivité, mais en moyenne je pense que je trader ce type de vérification plus forte et l'inférence. La plupart du temps cela s'atténué par avoir une suite de tests de bonne automatisé, mais sivous aimez vos types statiquement validés par le compilateur Haskell ou alors Scala peut être plus votre tasse de thé.

  • pointe - Clojure se développe très rapidement et il y a beaucoup d'innovation en cours - l'inconvénient est qu'il ya beaucoup d'expérimentation, des bibliothèques et des outils sont encore immatures et il y a des changements de rupture occasionnels entre les versions majeures Clojure que vous devez garder un oeil sur.

Dans l'ensemble cependant, je ne pense pas que vous pouvez vous tromper avec Clojure si vous voulez une excellente et pragmatique langage moderne et fonctionnel!

On dirait que vous avez fait vos devoirs, vous le savez probablement déjà, mais le schéma est un dialecte de Lisp comme Common Lisp est. Si vous aimez beaucoup de choses sur le schéma, mais ne pas comme sa nature académique, essayez Common Lisp. Selon l'indice TIOBE , c'est la 13e langue la plus populaire vs schéma à la position 26.

Peu de langues que vous avez mentionnés apparaissent sur les descriptions de travail que j'ai vu récemment, mais qui pourrait être juste mon petit ensemble d'échantillons. Je serai personnellement d'apprendre Haskell, même si je ne pense pas utiliser cette langue directement dans mon travail. Les concepts de la programmation fonctionnelle sont plus précieux pour moi la conception des programmes futurs que la commercialisation directe de la langue elle-même.

Licencié sous: CC-BY-SA avec attribution
scroll top