Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Por que a programação funcional é importante?
Search
Igor Soares
June 26, 2019
0
45
Por que a programação funcional é importante?
Igor Soares
June 26, 2019
Tweet
Share
More Decks by Igor Soares
See All by Igor Soares
Javascript Funcional
nulligor
1
150
Featured
See All Featured
A designer walks into a library…
pauljervisheath
207
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Visualization
eitanlees
146
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.3k
GitHub's CSS Performance
jonrohan
1031
460k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
4 Signs Your Business is Dying
shpigford
184
22k
How GitHub (no longer) Works
holman
314
140k
Adopting Sorbet at Scale
ufuk
77
9.5k
The Pragmatic Product Professional
lauravandoore
35
6.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
Por que a programação funcional é importante? @nulligor nulligor.github.io
simplex complect one fold/braid um laço/nó to interleave, intertwine entrelaçar,
associar
Simplicidade =\= Facilidade Facilidade é subjetiva Simplicidade é objetiva
“Simplicidade é pré-requisito para confiabilidade.” Edsger W. Dijkstra
Mudança
Mudança - Faça melhor - Faça mais - Faça diferente
Mudança Mudanças no software requerem análise e decisões - Faça
melhor - Faça mais - Faça diferente
Mudança A habilidade de ponderar sobre o código é essencial
Mudanças no software requerem análise e decisões - Faça melhor - Faça mais - Faça diferente
Mudança Assim como a habilidade de modificá-lo rapidamente A habilidade
de ponderar sobre o código é essencial Mudanças no software requerem análise e decisões - Faça melhor - Faça mais - Faça diferente
Mudanças no software geram complexidade
“O principal desafio do ‘programador’ é não ficar confuso com
as complexidades de sua própria criação” Edsger W. Dijkstra
Quanto mais seu código fica assim:
Cada vez mais é importante estruturá-lo bem
Código bem estruturado é simples De escrever, ler, ponderar e
modularizar
Programação funcional?
“Poderíamos estar criando os exatos mesmos programas com componentes muito
mais simples.” Rich Hickey
immutable values functions namespaces data state objects methods syntax
Um pouco de história
Church-Turing Conjecture 1936 - Lambda Calculus 1936 - Turing Machine
Modelos de Computação Descreve como a saída de uma função
matemática é computado dada uma entrada Em Teoria da Computabilidade, denotamos o ato de “computar” por “effective method”
Modelos de Computação - Cellular Automata - Finite State Machines
- Turing Machines - Lambda Calculus - Actor Model - ...
state interno instruções goto (jump) fita infinita de símbolos λCalculus
Turing Machines funções matemáticas puras variáveis e valores + binding
Bottom-to-Top Top-to-Bottom ... ...
λCalculus - Codifica toda forma de computação
λCalculus - Codifica toda forma de computação - Base de
toda linguagem funcional
λCalculus - Codifica toda forma de computação - Base de
toda linguagem funcional - 3 regras, dados M e N: - (M) - λid.M - MN
λCalculus
Lisp (1958)
1958?
eval
S-exps + Prefix notation
Data =/= Syntax (* 2 (+ 3 4))
Composição de Funções (em Clojure)
comp
hipotenusa
Composição de Programas
G (F (input))
None
Lisp e λCalculus estão presentes em toda linguagem atual
comp em JS
Cada vez mais estamos tentando “acompanhar” a matemática na programação
Finite State Machine em Clojure
Obrigado :)