perché tutti i tutorial di programmazione funzionale sono così math?


20

Ho cercato di imparare la programmazione funzionale e la maggior parte dei tutorial che ho trovato usano la matematica come esempi per i costrutti più complicati (anche quelli semplici in alcuni casi). Perchè è questo? Immagino che potrebbe essere usato qualcosa di più semplice. Sta rendendo difficile l'apprendimento.

Informazioni di base: scrivo software da 12 anni. Comprendo alcuni concetti come chiusure, funzioni come cittadini di prima classe e generici. Potrei avere problemi con le funzioni di ordine superiore a un livello avanzato, ma vorrei credere di avere una conoscenza di base. Le monadi mi stanno mordendo nel sedere, e a questo punto non l'ho superato (sono sicuro che alla fine lo farò, perché sono persistente).


solo un po ', non ho provato le altre 3 lingue che hai suggerito
Charles Lambert,

F # è la cosa più semplice da iniziare se conosci C #. Non richiede grandi conoscenze matematiche.
cnd

6
Prova SICP: non va molto oltre la matematica del liceo.
SK-logic,

@Charles Lambert - Vai a guardare OfficeSpace e otterrai la seconda parte del commento di Giobbe.
Jetti,

@Charles Lambert: Learn You a Haskell for Great Good non è troppo math: D
Matthieu M.

Risposte:


21

Usano la matematica perché la programmazione funzionale è molto brava a modellare costrutti matematici ed è molto legata ai concetti matematici, in particolare Lambda Calculus. Anche dal momento che l'I / O è in genere una materia piuttosto spinosa e avanzata in molte lingue del paradigma funzionale, la matematica attraverso le REPL delle varie lingue diventa inizialmente un buon modo di insegnare la lingua.

Poiché la programmazione funzionale considera le funzioni come costrutti di prima classe all'interno del linguaggio di programmazione, la generazione di funzioni diventa molto importante. Pertanto, la matematica superiore diventa abbastanza importante, in particolare la teoria dei grafi.

Le lingue imperative sono altrettanto matematiche, ma sono tutte aritmetiche alla base poiché sono più vicine alla macchina che può solo aggiungere comunque. I linguaggi funzionali con la loro maggiore astrazione tendono maggiormente verso la matematica. L'uso generale in ambito accademico non aiuta neanche perché vengono abituati e quindi insegnati da persone che conoscono molta matematica e insegnano a persone che dovrebbero imparare molta matematica. Quindi è possibile "smorzarlo" per così dire, ma è improbabile dato questi fattori.

http://learnyouahaskell.com/ - È probabilmente una delle introduzioni più delicate alla programmazione funzionale, ho ricontrollato e non c'è nulla al di là della teoria di base dell'algebra e dei grafi.


learnyousomeerlang.com è anche un'opzione se vuoi qualcos'altro oltre a Haskell.
Travis,

11

Le ragioni sono numerose e sono tutte correlate:

  • La maggior parte dei linguaggi di programmazione funzionale sono stati sviluppati in un contesto accademico, in cui CS è strettamente legato alla matematica, quindi le persone che li hanno progettati hanno una solida preparazione matematica (e tendono ad assumere lo stesso riguardo al loro pubblico)
  • La programmazione funzionale è un paradigma particolarmente adatto per risolvere problemi matematici pesanti
  • La teoria alla base di FP, il calcolo lambda (fondamentalmente, una teoria astratta delle funzioni), è una branca della matematica, e i linguaggi FP tendono ad usare i concetti e la terminologia del calcolo lambda

Inoltre, FP non è più una vera e propria matematica rispetto ad altri paradigmi, ma i concetti chiave (funzioni come veri cittadini di prima classe, funzioni di ordine superiore, chiusure e purezza) richiedono una certa mentalità. Ad un certo punto, la tua mente dovrebbe "fare clic"; se capisci queste 4 idee fondamentali, è probabile che il resto sia facile come qualsiasi altro paradigma.


3
+1 per sviluppato in ambito accademico: le persone che creano linguaggi funzionali lo basano su proprietà matematiche, quindi perde ...
Matthieu M.

@Matthieu M: basare un linguaggio di programmazione su proprietà matematiche aiuta a scrivere software corretto e ridurre i tempi di sviluppo. Ad esempio, dedico sicuramente meno tempo al debug del mio codice Haskell rispetto al mio codice C ++. Ridurre i tempi (e i costi) di sviluppo è un enorme vantaggio pratico che può giustificare lo sforzo di apprendere alcuni calcoli matematici. Come sottolineato da tdammer, ci sono alcuni concetti extra che devono essere appresi, ma dopo aver compreso alcune idee fondamentali, FP è intuitivo quanto la programmazione imperativa.
Giorgio,

Concordo anche con i tdammer sul fatto che anche i linguaggi imperativi possono essere descritti usando concetti matematici. In effetti, una descrizione matematica di un programma imperativo è normalmente molto più complessa di una descrizione matematica di un programma funzionale. Questo spiega perché le lingue imperative hanno più probabilità di contenere bug: è più difficile comprendere appieno il codice imperativo. Almeno, questa è la mia esperienza personale con alcuni anni di programmazione funzionale e molti altri anni di programmazione imperativa.
Giorgio,

@Giorgio: c'è una differenza tra "infiltrarsi nella lingua" (in qualche modo) e "infiltrarsi nel tutorial". Sono abbastanza sicuro che potresti scrivere tutorial di programmazione funzionale senza troppa matematica in essi. Certo, se sarebbero migliori o meno, è in discussione e probabilmente soggettivo.
Matthieu M.

@MatthieuM .: Grazie mille per aver chiarito cosa volevi dire trapelando (perdendo nel tutorial): il tuo commento ha molto più senso per me ora. Concordo con te sul fatto che un tutorial su FP dovrebbe contenere meno matematica possibile. Ho in qualche modo frainteso il tuo commento: avendo lavorato sia nell'industria che nel mondo accademico, sono un po 'troppo sensibile a "in ambito accademico fanno molti calcoli inutili nel mondo reale" tipo di commenti. +1 sia per il tuo commento che per la risposta di tdammer.
Giorgio,

5

È fondamentalmente perché la programmazione per computer è matematica. I linguaggi funzionali sono stati progettati tenendo presente questo aspetto e per questo gran parte dei tutorial sono focalizzati sulla matematica.

È difficile imparare solo se non sei abituato a pensare alla programmazione informatica come a una base matematica.


4
Fondamentalmente l'informatica è una combinazione di logica e aritmetica. Questa non è matematica. Non puoi esprimere un'istruzione di ramo in una formula matematica, quindi non può essere basata in matematica. La folla di programmatori funzionali vorrebbe che si basasse sulla matematica, così sviluppano linguaggi di programma che si comportano come se non esistessero le istruzioni del ramo.
James Anderson,

9
@James Anderson, stai dicendo che la logica e l'aritmetica non sono matematica? E ho visto tonnellate di formule matematiche che contengono istruzioni di diramazione (di solito espresse in un formalismo simile a un interruttore).
Peter Taylor,

4
Aritmetica un sottoinsieme di matematica che si occupa di semplici calcoli. La logica è un superset di matematica che è la base di tutto il pensiero razionale. La programmazione incidentale funzionale è un'ottima idea per risolvere problemi che possono essere espressi matematicamente; non è così caldo quando stai cercando di seguire un disordine illogico di regole arbitrarie come GAP (pratiche di contabilità generalmente accettate)
James Anderson,

6
@ ian31, come definiresti la parola " fondamentalmente "? Sai, l'ingegneria civile si basa anche sulla fisica e sulla matematica, mentre praticamente si tratta di costruire cose che le persone possano usare e divertirsi. E, in ogni caso, prima ancora di iniziare a pensare di programmare una soluzione a qualche problema del mondo reale, è necessario tradurlo in un formalismo matematico. Semplicemente non funzionerà nell'altro modo. La programmazione riguarda solo i formalismi.
SK-logic,

6
@ianian, i linguaggi di programmazione sono formalismi. Il loro comportamento è rigorosamente definito e prevedibile. Pertanto, codificare un modello particolare (anche se è vago) lo sta trasformando in un formalismo di un tipo. La matematica si adatta bene a questa vaga area, nonostante la percezione generale sia confinata nel brillante mondo cristallino di modelli rigorosi ben definiti.
SK-logic,

1

Penso che "The Little Schemer" sia un'incredibile introduzione alla programmazione funzionale e non sia affatto math. Non entra in Monadi, quindi potrebbe essere troppo semplice per i tuoi gusti, ma fa una derivazione del combinatore a Y verso la fine.

Di recente l'ho sperimentato dopo 12 anni fa dopo aver fatto alcuna programmazione funzionale, ed è stato un grande aggiornamento, mi sento sicuramente pronto ad affrontare cose più avanzate dopo aver lavorato con la maggior parte dei problemi del libro usando Racket.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.