Question

Ces jours-ci, je me lance sérieusement dans la programmation fonctionnelle.

Bien que je sois vraiment excité à propos de Haskell et des possibilités qu’il semble offrir, je peux aussi voir maintenant que cela va me prendre un certain temps pour apprendre. Dans une question SO sur Comment apprendre Haskell , une réponse indique que cela prendra des mois, sinon ans pour réellement " maîtriser " il.

Maintenant, je connais C, PHP, certaines choses orientées objet, etc. Et après avoir appris que Haskell n'était pas très utilisé dans le "monde réel", aurais-je intérêt à améliorer mes compétences de manière régulière? langues que je connais? Haskell vaut-il la peine de lutter?

Dans cette question sur Pourquoi les gens pensent-ils qu'une programmation fonctionnelle capturera sur , la conclusion semble être que la programmation fonctionnelle va "s'accrocher". Mais sûrement, la programmation procédurale restera au top, non?

EDIT: keparo clarifie joliment ma question: Contrairement aux langages procéduraux, est-il utile pour moi d’étudier le paradigme de Haskell et de la programmation fonctionnelle?

Était-ce utile?

La solution

Haskell n’est pas aussi difficile que les gens aiment apprendre à apprendre. Haskell ouvre un nouveau monde que vous ne saviez pas qu'il existait pour vous. C'est aussi utile d'apprendre que n'importe quelle autre langue. Vous ne trouverez peut-être pas un travail vous obligeant à programmer Haskell, mais cela signifie-t-il vraiment qu'un langage n'a pas de valeur?

Haskell vous apprendra beaucoup de nouvelles choses et vous montrera comment programmer encore mieux dans les langues avec lesquelles vous travaillez / travaillez / que vous travaillez. Vous pouvez réaliser vos propres projets personnels pendant votre temps libre.

Haskell n'est pas vraiment utilisé dans le "monde réel". si vous définissez " monde réel " en tant que "générateur de trésorerie". Donc, si tel est votre objectif, vous devrez peut-être repenser les objectifs: p

De plus, je n'aime pas trop cette partie de "comment apprendre haskell". réponse. Il faut des mois, voire des années pour maîtriser une langue, pas seulement Haskell. Selon la définition de "maître". Je peux utiliser Haskell avec un assez bon degré d’efficacité et je ne l’apprends que depuis un mois, et je le prends même lentement.

Autres conseils

À tout le moins, le changement de mentalité offert par l’apprentissage de Haskell vous aidera à utiliser de nouveau les langages procéduraux encore utilisés sur le lieu de travail.

Le paradigme fonctionnel commence à faire son chemin dans diverses applications et langages grand public - même le C ++ va ajouter un lambda (paralysé) en C ++ 0x.

Vous pouvez également vous intéresser à certains langages hybrides tels que Scala ou OCaml. Scala est utilisé sur Twitter et OCaml est utilisé sur Jane's Street sur une plateforme de trading financier.

Vous ne devriez probablement pas vous attendre à utiliser Haskell n'importe où aussi souvent que la langue de la famille C en milieu professionnel. Si la question est de savoir s’il vous sera utile d’étudier les paradigmes de programmation fonctionnelle et de Haskell, la réponse est oui. Vous pouvez appliquer votre compréhension enrichie de la programmation à l'ensemble de votre travail.

J'ai appris Haskell parce que c'était de loin le meilleur langage fonctionnel que j'avais essayé avec Scala, Clojure, OCaml et Scheme, mais je ne m'attendais pas vraiment à l'utiliser pour le travail.

En fait, il convient parfaitement à ce type de travaux trop petits pour une équipe et trop longs en Java. Jusqu'ici, je l'ai utilisé pour les migrations de données ad-hoc, c'est-à-dire la gestion des exportations CSV dans un autre format, les conversions par lots de XML (HXT est plus concis et plus puissant que XSLT), la suppression d'écran d'Internet et l'estimation de logiciels, y compris la modélisation. risque en utilisant la monade de probabilité et en produisant des diagrammes de Gantt optimaux en utilisant des retours arrière. C’est un travail réel qui mérite d’être réalisé et que je n’aurais même pas pris la peine d’essayer de faire en Java, car ce serait une entreprise de plusieurs jours.

Je l’utilise maintenant à la place d’Excel pour tout ce qui est vaguement mathématique, car il est un peu plus difficile de créer une liste de valeurs dans haskell source dans un éditeur de texte que de les taper dans Excel. Une fois dans haskell, je peux alors faire toutes sortes de magies comme le retour en arrière, les distributions de probabilité, etc. qu'Excel ne peut pas faire. Si j'ai besoin d'un graphique, je crache les valeurs au format CSV (2 lignes de code) et je les charge dans Excel.

Le seul inconvénient est qu'il faut plusieurs mois pour devenir compétent, mais cela en vaut la peine, à mon humble avis.

  

Contrairement aux langages procéduraux, aurai-je intérêt à étudier Haskell et les paradigmes de programmation fonctionnels?

Si le fait d’avoir un ensemble de compétences élargi est précieux, alors: oui.

Un avantage que vous pourriez avoir: la programmation parallèle et simultanée. Les langages procéduraux du passé ont tendance à ne pas avoir de notion claire des effets secondaires, il est donc difficile d’écrire correctement des programmes parallèles. Les langages fonctionnels (en particulier ceux qui limitent les effets secondaires comme Haskell) ont beaucoup à dire sur la programmation parallèle productive.

Avoir cette compétence dans votre manche ne peut faire de mal.

Je peux voir que la programmation fonctionnelle peut être un avantage dans un environnement de production si elle est très facile à utiliser avec du code non fonctionnel. MS pouvait le voir aussi quand ils ont eu l'idée de F #, je suppose.

Puisqu'ils compilent tous les deux en IL, vous pouvez gérer les problèmes qui demandent une approche fonctionnelle fonctionnelle et utiliser ces solutions très facilement dans votre code de procédure.

De cette manière, le code fonctionnel peut facilement trouver son chemin dans un environnement de production petit à petit

Par conséquent, et puisque la base d'utilisateurs de MS est si grande, je suppose que si F # ne parvient pas à s'imposer dans un avenir très proche, Haskell ne le sera pas non plus.

Je pense que ça vaut le coup de se battre. Cela vous aidera à comprendre comment les problèmes sont résolus et pas seulement le fonctionnement d’un ordinateur.

Peut-être que Haskell lui-même est un problème particulier: en tant que langage purement fonctionnel, il est un peu "hardcore". ce qui peut par ailleurs même compliquer les choses.

La programmation fonctionnelle peut être extrêmement utile d'une manière très pragmatique - De nombreux langages orientés objet / impératifs ont désormais inclus des éléments fonctionnels pour cette raison (Linq, fonctions anonymes, valeurs en lecture seule, pointeurs / délégués de fonction, inférence de type): Vous pouvez concentrez-vous sur ce qui doit être fait pour pouvoir exprimer plus en moins de code (c'est encore moins sujet aux erreurs).

Les langages non purement fonctionnels (langages fonctionnels standard) tels que Scala ou F # peuvent être facilement intégrés à des projets Java ou .NET existants. Vous pouvez ainsi combiner les avantages des deux paradigmes là où ils sont nécessaires. Pour des avantages typiques des langages fonctionnels, voir ce fil . Pensez simplement à une analyse extrêmement puissante (combinateurs d’analyseurs monadiques / Parsec) ou à une programmation simultanée possible avec les langages fonctionnels et vous verrez à quel point ils sont utiles.

  

Contrairement aux langages procéduraux, aurai-je intérêt à étudier Haskell et les paradigmes de programmation fonctionnels?

Sauf si vous voulez être misérable. Luke Plant explique, dans Pourquoi apprendre Haskell / Python fait de vous un pire programmeur :

  

Ainsi, apprendre Python et Haskell m'a démoralisé et encouragé   moi d’écrire un code bizarre et difficile à comprendre ...

(Ceci n'est pas entièrement une blague.)

En élargissant vos horizons, vous devenez un meilleur programmeur, quelle que soit la langue que vous utilisez en ce moment. Vous ne verrez plus jamais la programmation de la même manière après avoir écrit des macros Lisp, par exemple. Une fois que vous avez commencé à penser en termes de Haskell, vous vous retrouvez à composer des fonctions et à souhaiter des fermetures dans des langues moins avancées.

À en juger par les bonnes choses en C #, telles que lambdas, inférence de type, fermetures, et ainsi de suite , apprendre Haskell vous donnera une longueur d’avance sur les technologies de pointe de demain.

Certaines personnes aiment programmer en Haskell. Si vous pouvez choisir votre environnement et que le plaisir est une considération, alors vous devriez peut-être y aller.

De nombreux programmeurs ne sont pas en position de choisir leurs outils et le plaisir n’est pas un facteur de choix. Beaucoup d’entre eux utilisent C / Java / etc sur leur lieu de travail pour la "source de projet principale", mais choisissent également ou doivent utiliser Python pour les "scripts". tels que des scripts de compilation avec SCons, d'autres scripts générant du code Java / etc, des systèmes de test, des preuves de concept, etc. Et ailleurs, Python est également utilisé dans le "projet principal".

Dans 8 ans, ce sera Haskell et non Python qui "viendra à vous". Mais vous pouvez y venir plus tôt.

Vous pouvez combiner l’utilisation de la programmation fonctionnelle et avec un langage pragmatique.

Tous les langages de script modernes, par exemple JavaScript ou Lua autorisent l’utilisation du paradigme fonctionnel.

Le concept fonctionnel commence à être puissant. Notez la flambée d'activité et d'intérêt autour de Ruby. J'ai également remarqué un peu plus d'intérêt pour JavaScript au-delà d'un simple langage de script pour navigateur récemment. Vous pouvez avoir une longueur d'avance en plongeant maintenant, même si le temps investi ne sera peut-être pas rentable cette année ou l'année prochaine.

Cela dépend de votre plan de jeu général. La programmation est-elle une fin en soi ou un moyen de parvenir à une fin? Si c'est le premier cas, devenez dingue avec Haskell. Si ce dernier, restez avec mainstream, & employable " langues. Attendez que Haskell décolle puis saute.

Pourquoi procédural et non objet, on ne voit pas la procédure utilisée pendant de nombreuses années en dehors de C.

Commercialement parlant. Je voudrais aller avec Java ou C #. Peu importe qu'ils paient bien tous les deux et que leurs compétences soient interchangeables avec d'autres langages comme ceux de Python, Ruby et JavaScript.

Haskell en vaut la peine, bien que très académique, certaines banques l’utilisent, même si beaucoup en Europe et au Royaume-Uni sont en train de déplacer la base de code vers F #.

Je ne pense pas que FOP évoluera à grande vitesse commercialement. Mais les techniques font définitivement leur apparition dans les principales langues de séjour. Surtout avec les conceptions de puces multi-cœurs et pour que le code soit exécuté parallèlement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top