Mude minha maneira de pensar em preparação para a programação funcional

9

Ao mudar para um estilo funcional de programação depois de procedimental e OOP, que coisas eu preciso saber antecipadamente sobre "essa nova maneira de pensar"?

Como você se prepara para mergulhar no mundo dos FP e obtê-lo pela primeira vez?

Quais são os princípios básicos para aprender e corrigir primeiro?

JohnDoDo
fonte
2
Isso é muito geral, imho. Basta começar a ler! Hoje em dia, a maioria dos livros e manuais de programação funcional começam com as respostas à sua pergunta.
Devmiles.com
Experimente então postar uma pergunta se você ficar preso em alguma coisa
Tom Squires
@ Vladimir Volodin: Isso seria legal, mas não é obrigatório para todos os livros. Você pode recomendar alguns bons (de preferência agnósticos no idioma)?
JohnDoDo 29/02
Você não precisa mergulhar . Você pode tentar a expressão lambda em uma linguagem OOP como c # para facilitar a transição de OOP para FP.
TomCaps 29/02/2012
4
Eu acho que você tem ao contrário. Experimente a programação funcional, e seu modo de pensar mudará.
Kevin cline

Respostas:

6

Você precisará de um pensamento declarativo em vez da maneira processual "primeiro faça isso, depois faça isso, depois faça isso ..." para resolver problemas. Compreender a recursão pode ser um bom ponto de partida, pois é um tipo de ponto ideal entre o pensamento processual e o declarativo.

Joonas Pulakka
fonte
4

Você colocou a carroça diante do cavalo. Você não precisa se preparar. Escolha um idioma que pareça interessante, encontre alguma documentação e tente. Se você ficar preso, pare e procure uma resposta. À medida que você progride, sua maneira de pensar mudará.

Kevin Cline
fonte
3

O FP é baseado no cálculo lamdba. Você precisa saber disso. É um bom ponto de partida. Funções são tudo. Não há conceito de estado (embora você possa falsificá-lo em um nível superior).

No POO,

a = 1 a = a + 1

é aceito. Não é assim no FP. Você simplesmente não pode atribuir à variável um outro valor. Se você deseja aprender FP a longo prazo, aprenda Haskell. É a versão mais pura do FP por aí e também é bastante complicada (eu apenas comecei a aprender), mas ainda vale a pena aprender.

Uma Introdução à Programação Funcional oferece uma visão geral de alto nível sobre o que é o FP.

Duas advertências

  1. Se você quer aprender FP para empregos, não há muitas vagas por aí. Procedural e OOP ainda governam o mercado de trabalho. Mas o FP pode ajudá-lo muito a explorar novas maneiras de resolver um problema.
  2. Compiladores FP não são incrivelmente rápidos. Como a FP está mais preocupada em resolver o problema, você não pode esperar a velocidade C. Mas ainda assim você pode emitir instruções ao compilador (em Haskell) para acelerar o processo de execução. A desvantagem é que você dedica muito tempo a focar no programa em vez de nos bugs de combate a incêndios.
Ubermensch
fonte
8
"FP é baseado no cálculo lamdba. Você precisa saber disso." Não você não. Conhecer o cálculo lambda não é necessário para entender a programação funcional mais do que conhecer máquinas de Turing (ou montagem) é necessário para entender a programação imperativa.
sepp2k
@ sepp2k Para melhorar o FP com um objetivo de longo prazo, acredito sinceramente que é necessário aprender o cálculo lambda. Você pode aprendê-lo sem o cálculo lambda, mas aprendê-lo o tornaria melhor no FP.
Ubermensch
2
A FP certianly afirma apenas que esse estado geralmente é imutável, também não tenho certeza se concordo com a afirmação de que os compiladores são lentos
jk.
@jk. Certamente, eles têm estado, mas não o são da maneira OO (os estados podem ser incluídos em funções ou como padrões correspondentes e de maneiras mais sutis). E um estado imutável significa que você tem apenas um único estado. É por isso que uma função sempre deve retornar o mesmo valor. Em relação aos compiladores, não acho que eles possam corresponder ao C / C ++ em termos de velocidade pura, pois o compilador cuida das etapas necessárias na computação do resultado, em vez de especificarmos a ordem. O FP tem sua maior vantagem em custos reduzidos de desenvolvedor e computação paralela, em vez de pura velocidade da CPU.
Ubermensch
3

Eu tento o meu melhor para lembrar o seguinte mantra:

Entrada de dados -> Transformação de dados -> Saída de dados

ou

TransformData (entrada de dados) -> saída de dados

Noite escura
fonte
11
Deve ser TransformData (DataIn) -> DataOut
Ubermensch
:) como matra "Entrada de dados, transformação de dados, saída de dados" é mais fácil dizer "TransformData, suporte aberto, entrada de dados, suporte fechado, saída de dados" Estou brincando, concordo com você.
Darknight
É apenas um companheiro de comentário amigável. Obrigado pela resposta.
Ubermensch
Eu sei, eu estava apenas brincando com você, sem ofensas, na verdade, acho que vou atualizar meu matra.
Darknight
O seu conjunto de habilidades é bastante grande.
Ubermensch