Por que todos os tutoriais de programação funcional são tão matemáticos?

20

Eu tenho tentado aprender programação funcional e a maioria dos tutoriais que encontrei usam a matemática como exemplos para construções mais complicadas (mesmo as mais simples em alguns casos). Por que é isso? Eu imaginaria que algo mais fácil poderia ser usado. Está dificultando o aprendizado.

Informações básicas: Escrevo software há 12 anos. Entendo alguns dos conceitos, como fechamentos, funções como cidadãos de primeira classe e genéricos. Talvez esteja tendo problemas com funções de ordem superior em algum nível avançado, mas gostaria de acreditar que tenho uma compreensão básica. Mônadas estão me mordendo na bunda, e neste momento eu não superei isso (tenho certeza que acabarei, porque sou persistente).

Charles Lambert
fonte
só um pouco, eu não tentei os outros 3 idiomas que você sugeriu
Charles Lambert
F # é a coisa mais fácil de começar, se você conhece C #. Não requer grandes conhecimentos de matemática.
CND
6
Experimente o SICP - ele não vai muito além da matemática do ensino médio.
SK-logic
@ Charles Lambert - Assista ao OfficeSpace e você verá a segunda parte do comentário de Jó.
Jetti
@Charles Lambert: Saiba Você é uma Haskell para Ótimo Bom não é muito mathy: D
Matthieu M.

Respostas:

21

Eles usam matemática porque a Programação Funcional é muito boa na modelagem de construções matemáticas e está muito ligada a conceitos matemáticos, particularmente o Lambda Calculus. Além disso, como a E / S é normalmente um assunto bastante espinhoso e avançado em muitas linguagens da matemática do paradigma funcional por meio dos REPLs das várias linguagens, torna-se uma boa maneira de ensinar a língua primeiro.

Como a Programação Funcional trata as Funções como construções de primeira classe na linguagem de programação, a geração de funções se torna muito importante. Portanto, a matemática mais alta se torna bastante importante, particularmente a teoria dos grafos.

As línguas imperativas são igualmente matemáticas, mas são todas aritméticas na base, pois estão mais próximas da máquina, que só podem ser adicionadas de qualquer maneira. As linguagens funcionais com sua abstração mais alta tendem mais à matemática. O uso geral na academia também não ajuda, à medida que se acostuma e, portanto, é ensinado por pessoas que conhecem muita matemática e estão ensinando pessoas que esperam aprender muita matemática. Portanto, é possível "emburrecer", por assim dizer, mas é improvável esses fatores.

http://learnyouahaskell.com/ - É provavelmente uma das introduções mais gentis à Programação Funcional, verifiquei duas vezes e não há nada além da álgebra básica e da teoria dos grafos.

Engenheiro Mundial
fonte
learnyousomeerlang.com também é uma opção se você quiser algo mais além do Haskell.
Travis
11

Existem inúmeras razões, e todas elas estão relacionadas:

  • A maioria das linguagens de programação funcionais foi desenvolvida em um contexto acadêmico, onde o CS está intimamente ligado à matemática, para que as pessoas que os projetaram tenham uma sólida formação em matemática (e tendam a assumir o mesmo sobre seu público).
  • A programação funcional é um paradigma especialmente adequado para resolver problemas pesados ​​de matemática
  • A teoria por trás do FP, cálculo lambda (basicamente, uma teoria abstrata de funções), é um ramo da matemática, e as linguagens FP tendem a usar os conceitos e terminologia do cálculo lambda

Além disso, a FP não é mais matemática do que outros paradigmas, mas os conceitos-chave (funcionam como cidadãos de primeira classe, funções de ordem superior, fechamentos e pureza) exigem uma certa mentalidade. Em algum momento, sua mente deve "clicar"; se você entender essas quatro idéias principais, o resto provavelmente será tão fácil quanto qualquer outro paradigma.

tdammers
fonte
3
+1 para desenvolvido na academia: pessoas criando linguagens funcionais baseá-lo em propriedades matemáticas, por isso escapa ...
Matthieu M.
@ Matthieu M: Basear uma linguagem de programação em propriedades matemáticas ajuda a escrever o software correto e reduzir o tempo de desenvolvimento. Por exemplo, eu definitivamente gasto menos tempo depurando meu código Haskell do que meu código C ++. Reduzir o tempo de desenvolvimento (e os custos) é uma enorme vantagem prática que pode justificar o esforço de aprender matemática. Como os tdammers apontaram, existem alguns conceitos extras que precisam ser aprendidos, mas depois de entender algumas idéias centrais, o FP é tão intuitivo quanto a programação imperativa.
Giorgio
Também concordo com os tdammers que também linguagens imperativas podem ser descritas usando conceitos matemáticos. De fato, uma descrição matemática de um programa imperativo é normalmente muito mais complexa do que uma descrição matemática de um programa funcional. Na IMO, isso explica por que as linguagens imperativas têm maior probabilidade de conter erros: é mais difícil entender completamente o código imperativo. Pelo menos, esta é minha experiência pessoal com alguns anos de programação funcional e muitos mais anos de programação imperativa.
Giorgio
@ Giorgio: existe uma diferença entre "vazar na linguagem" (de alguma forma) e "vazar no tutorial". Tenho certeza de que você poderia escrever um tutorial de programação funcional sem muita matemática. É claro que se eles seriam melhores ou não, está em debate e provavelmente subjetivo.
Matthieu M.
@MatthieuM .: Muito obrigado por esclarecer o que você quis dizer com vazando (vazando para o tutorial): seu comentário faz muito mais sentido para mim agora. Concordo com você que um tutorial sobre FP deve conter o mínimo de matemática possível. De alguma maneira, interpretei mal o seu comentário: tendo trabalhado tanto na indústria quanto na academia, sou um pouco sensível a "na academia eles fazem muita matemática que é inútil no mundo real". +1 para o seu comentário e a resposta do tdammer.
Giorgio
5

É porque, fundamentalmente, a programação de computadores é matemática. As linguagens funcionais foram projetadas com isso em mente e é por isso que muitos dos tutoriais estão focados na matemática.

Só é difícil aprender se você não está acostumado a pensar em programação de computadores como tendo uma base matemática.

Rudolf Olah
fonte
4
Fundamentalmente, a computação é uma combinação de lógica e aritmética. Isto não é matemática. Você não pode expressar uma instrução de ramificação em uma fórmula matemática - portanto, não pode ser baseada em matemática. A multidão de programação funcional gostaria que fosse baseada em matemática, para que desenvolvessem linguagens de programa que se comportassem como se as instruções de ramificação não existissem.
James Anderson
9
@ James Anderson, você está dizendo que lógica e aritmética não são matemática? E já vi toneladas de fórmulas matemáticas que contêm instruções de ramificação (geralmente expressas em um formalismo parecido com um switch).
Peter Taylor
4
Aritmética é um subconjunto de matemática que lida com cálculos simples. A lógica é um superconjunto de matemática que é a base de todo pensamento racional. Aliás, a programação funcional é uma ótima idéia para resolver problemas que podem ser expressos matematicamente; não é tão quente quando você está tentando seguir uma confusão ilógica de regras arbitrárias como GAP (Geralmente práticas aceitas Contabilidade)
James Anderson
6
@ian31, como você definiria a palavra " fundamentalmente "? Você sabe, a engenharia civil também se baseia em física e matemática, enquanto na prática trata-se de construir coisas para as pessoas usarem e se divertirem. E, de qualquer forma, antes mesmo de começar a pensar em programar uma solução para algum problema do mundo real, você deve traduzir esse problema em algum formalismo matemático. Simplesmente não vai funcionar de outra maneira. A programação é toda sobre formalismos.
SK-logic
6
@ian31, linguagens de programação são formalismos. Seu comportamento é estritamente definido e previsível. Assim, a codificação de qualquer modelo em particular (mesmo que seja vago) está transformando-o em um tipo de formalismo. A matemática escala bem nessa área vaga, apesar da percepção geral de que ela está confinada ao mundo brilhante e cristalino de modelos estritos bem definidos.
SK-logic
1

Eu acho que "The Little Schemer" é uma introdução incrível à programação funcional e não é nada matemática. Ele não entra nas Mônadas, portanto pode ser muito básico para o seu gosto, mas faz uma derivação do combinador Y no final.

Recentemente, eu passei por isso depois de não fazer nenhuma programação funcional desde a faculdade, há 12 anos, e foi uma ótima atualização, eu definitivamente me sinto pronto para lidar com coisas mais avançadas depois de trabalhar com a maioria dos problemas do livro usando o Racket.

Paul Sanwald
fonte