pourquoi tous les tutoriels de programmation fonctionnelle sont-ils si mathématiques?


20

J'ai essayé d'apprendre la programmation fonctionnelle et la plupart des tutoriels que j'ai trouvés utilisent les mathématiques comme exemples pour les constructions les plus compliquées (même les plus simples dans certains cas). Pourquoi est-ce? J'imagine que quelque chose de plus simple pourrait être utilisé. Cela rend son apprentissage difficile.

Informations générales: j'écris des logiciels depuis 12 ans. Je comprends certains des concepts tels que les fermetures, les fonctions de citoyens de première classe et les génériques. Je peux avoir des problèmes avec des fonctions d'ordre supérieur à un niveau avancé, mais j'aimerais croire que j'ai une compréhension de base. Les monades me mordent dans le cul, et à ce stade, je n'ai pas dépassé cela (je suis sûr que je finirai par le faire, car je suis persistant).


seulement un peu, je n'ai pas essayé les 3 autres langues que vous avez suggérées
Charles Lambert

F # est la chose la plus simple à démarrer si vous connaissez C #. Ne demande pas de grandes connaissances en mathématiques.
cnd

6
Essayez le SICP - cela ne va pas trop au-delà des mathématiques au secondaire.
SK-logic

@Charles Lambert - Allez regarder OfficeSpace et vous obtiendrez la deuxième partie du commentaire de Job.
Jetti

@Charles Lambert: Learn You a Haskell for Great Good is not too mathy: D
Matthieu M.

Réponses:


21

Ils utilisent les mathématiques parce que la programmation fonctionnelle est très bonne pour modéliser les constructions mathématiques et est très liée aux concepts mathématiques, en particulier Lambda Calculus. De plus, comme les E / S sont généralement un sujet assez épineux et avancé dans de nombreuses langues du paradigme fonctionnel, les mathématiques via les REPL des différentes langues deviennent un bon moyen d'enseigner la langue au début.

Parce que la programmation fonctionnelle traite les fonctions comme des constructions de première classe dans le langage de programmation, la génération de fonctions devient très importante. Par conséquent, les mathématiques supérieures deviennent assez importantes, en particulier la théorie des graphes.

Les langages impératifs sont tout aussi mathématiques, mais tout est arithmétique à la base car ils sont plus proches de la machine, ce qui ne peut que s'ajouter de toute façon. Les langages fonctionnels avec leur abstraction plus élevée tendent davantage vers les mathématiques. L'utilisation générale dans le monde universitaire n'aide pas non plus car ils sont habitués et donc enseignés par des gens qui connaissent beaucoup de mathématiques et enseignent à des personnes qui s'attendent à apprendre beaucoup de mathématiques. Il est donc possible de "baisser le ton" pour ainsi dire, mais c'est peu probable compte tenu de ces facteurs.

http://learnyouahaskell.com/ - C'est probablement l'une des introductions les plus douces à la programmation fonctionnelle, j'ai vérifié deux fois et il n'y a rien au-delà de l'algèbre de base et de la théorie des graphes.


Learnyousomeerlang.com est également une option si vous voulez autre chose que Haskell.
Travis

11

Il existe de nombreuses raisons, et elles sont toutes liées:

  • La plupart des langages de programmation fonctionnels ont été développés dans un contexte académique, où CS est étroitement lié aux mathématiques, de sorte que les personnes qui les ont conçus ont une solide formation en mathématiques (et ont tendance à supposer la même chose de leur public)
  • La programmation fonctionnelle est un paradigme particulièrement adapté pour résoudre des problèmes mathématiques lourds
  • La théorie derrière FP, le lambda calcul (fondamentalement, une théorie abstraite des fonctions), est une branche des mathématiques, et les langages FP ont tendance à utiliser les concepts et la terminologie du lambda calcul

De plus, la FP n'est pas plus mathématique que les autres paradigmes, mais les concepts clés (fonctions de vrais citoyens de première classe, fonctions d'ordre supérieur, fermetures et pureté) nécessitent un certain état d'esprit. À un certain moment, votre esprit devrait "cliquer"; si vous comprenez ces 4 idées fondamentales, le reste sera probablement aussi simple que tout autre paradigme.


3
+1 pour développé en milieu universitaire: les gens qui créent des langages fonctionnels le basent sur des propriétés mathématiques, donc ça fuit ...
Matthieu M.

@Matthieu M: Baser un langage de programmation sur des propriétés mathématiques aide à écrire un logiciel correct et à réduire le temps de développement. Par exemple, je passe définitivement moins de temps à déboguer mon code Haskell que mon code C ++. La réduction du temps (et des coûts) de développement est un énorme avantage pratique qui peut justifier l'effort d'apprentissage de certains mathématiques. Comme l'ont souligné tdammers, il y a quelques concepts supplémentaires à apprendre, mais après avoir compris quelques idées fondamentales, FP est aussi intuitif que la programmation impérative.
Giorgio

Je suis également d'accord avec les tdammers sur le fait que les langues impératives peuvent également être décrites à l'aide de concepts mathématiques. En fait, une description mathématique d'un programme impératif est normalement beaucoup plus complexe qu'une description mathématique d'un programme fonctionnel. Cela explique pourquoi les langages impératifs sont plus susceptibles de contenir des bogues: il est plus difficile de comprendre pleinement le code impératif. C'est du moins mon expérience personnelle avec quelques années de programmation fonctionnelle et de nombreuses années de programmation impérative.
Giorgio

@Giorgio: il y a une différence entre "fuite dans la langue" (en quelque sorte) et "fuite dans le tutoriel". Je suis sûr que vous pourriez écrire un tutoriel de programmation fonctionnelle sans trop de mathématiques. Bien sûr, ce serait mieux ou pas est à débattre et probablement subjectif.
Matthieu M.

@MatthieuM .: Merci beaucoup d'avoir clarifié ce que vous vouliez dire par fuite (fuite dans le tutoriel): votre commentaire a beaucoup plus de sens pour moi maintenant. Je suis d'accord avec vous qu'un tutoriel sur la PF devrait contenir le moins de maths possible. J'ai en quelque sorte mal interprété votre commentaire: Ayant travaillé à la fois dans l'industrie et dans le milieu universitaire, je suis un peu hypersensible à "dans le milieu universitaire, ils font beaucoup de mathématiques qui sont inutiles dans le monde réel". +1 pour votre commentaire et la réponse de tdammer.
Giorgio

5

C'est parce que fondamentalement, la programmation informatique est mathématique. Les langages fonctionnels ont été conçus dans cet esprit et c'est pourquoi la plupart des didacticiels sont axés sur les mathématiques.

Il est difficile d'apprendre si vous n'êtes pas habitué à penser que la programmation informatique a une base mathématique.


4
Fondamentalement, l'informatique est une combinaison de logique et d'arithmétique. Ce ne sont pas des mathématiques. Vous ne pouvez pas exprimer une instruction de branche dans une formule mathématique - elle ne peut donc pas être basée sur les mathématiques. La foule de la programmation fonctionnelle aimerait qu'il soit basé sur les mathématiques afin de développer des langages de programme qui se comportent comme si les instructions de branchement n'existaient pas.
James Anderson

9
@James Anderson, dites-vous que la logique et l'arithmétique ne sont pas des mathématiques? Et j'ai vu des tonnes de formules mathématiques qui contiennent des instructions de branchement (généralement exprimées dans un formalisme de type interrupteur).
Peter Taylor

4
Arithmétique un sous-ensemble de mathématiques qui traite du calcul simple. La logique est un surensemble de mathématiques qui est la base de toute pensée rationnelle. La programmation par ailleurs fonctionnelle est une très bonne idée pour résoudre des problèmes qui peuvent être exprimés mathématiquement; ce n'est pas si chaud quand vous essayez de suivre un désordre illogique de règles arbitraires comme GAP (pratiques comptables généralement acceptées)
James Anderson

6
@ ian31, comment définiriez-vous le mot " fondamentalement "? Vous savez, le génie civil est également basé sur la physique et les mathématiques, alors qu'en pratique, il s'agit de construire des choses que les gens peuvent utiliser et apprécier. Et, de toute façon, avant même de commencer à penser à la programmation d'une solution à un problème du monde réel, vous devez traduire ce problème dans un formalisme mathématique. Cela ne fonctionnera tout simplement pas dans l'autre sens. La programmation est une question de formalismes.
SK-logic

6
@ ian31, les langages de programmation sont des formalismes. Leur comportement est strictement défini et prévisible. Ainsi, coder un modèle particulier (même s'il est vague) le transforme en un formalisme en quelque sorte. Les mathématiques évoluent bien sur cette zone vague, en dépit de la perception générale qu'il se limite au monde brillant et cristallin de modèles stricts bien définis.
SK-logic

1

Je pense que "The Little Schemer" est une formidable introduction à la programmation fonctionnelle et n'est pas du tout mathématique. Il n'entre pas dans les monades, il peut donc être trop basique pour vos goûts, mais fait une dérivation du combinateur Y vers la fin.

Je l'ai récemment passé en revue après n'avoir fait aucune programmation fonctionnelle depuis l'université il y a 12 ans, et c'était un excellent rappel, je me sens vraiment prêt à aborder des choses plus avancées après avoir travaillé la plupart des problèmes du livre en utilisant Racket.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.