Sebastian FerrariCTO e Co-fundador da Tallersebas5384
+10 anos programando
+4 anos com Ágilvivendo o pós Ágil
~10 anos atrás
CPU 300 MHZRAM 128 MB640 x 480 px
RAMAC 305 - ano 1956
68 cores = 8 bytesmicroSDHC 8 billion
bytes
1 bilhão de vezes mais
bytes, em menos espaço
IBM 305 RAMAC de 1956, considerada um
SUPER computadorcom 5 Megabytes de
HDD
multiplicaçõespodiam demorar entre
60 ms a 190 ms
IBM 650FORTRAN
HOJEano 2016
MOTO X2
CPU Quad Core de 2.5 GHz.GPU Adreno 330, 26 frames por segundo.Memória de 32 GB e 2 GB de RAM.Alta Resolução de 1080 x 1920 pixels.Velocidade de download de 150 Mbps.
+10.000 vezesem 60 anos !!
Capacidade de hardware
melhorou muito !
Mas …
e a maneira comoprogramamos ?
E a qualidade?
… melhorou?
procurouno Google ?
treta vixe
:(
Por que ?
Softwares complexos
Manutenção muito cara
Novas funcionalidades
Priorizamos a eficiência
Software frágil
Programamos demaneira familiar
Experiência doprogramador é
péssima
O que estamos fazendo deerrado?
Softwarecomplexo!
Programação imperativa é um paradigma de
programação que descreve a computação como ações,
enunciados ou comandos que mudam o estado (variáveis)
de um programa.
Lógicas escondidase
overload de abstrações
Estados internosmutáveis
espalhadospelo sistema
Mutabilidadetorna o sistema
imprevisível
Refatoraçãoquase impossívelou muito custosa
Side effectsfora de controle
Testes automatizados
são muito caros eprecisam de muito
mock
Acoplamentodificulta
interoperabilidade
A soma das partes é maior do que o resultado final.
Entropia
Alto risco e esforçoperante as mudanças
Carregamosum elefante nas
costas
Alto conhecimento do todo para realizar
uma mudança
Overloadcognitivo
para entender
De onde vemesse campo?
Quem está trocando o texto desse botão?
Porque não está funcionando?
Porque está funcionando?
Não temos mais as mesmas restrições
Podemos usar outros
paradigmas
Programaçãofuncional e reativa
λlamba
Simples e declarativo que
aumenta o entendimento do
código
Familiar vs. Legibilidade
pessoas novas no time podem entender o que o
código faz
Funções purassão previsíveis,fácil de testar
e sem estado interno
Funções de ordem superior,
evita herança a favor da composição
Funções recursivasevita side-effects
dentrode loops
Imutabilidademudanças se tornam
declarativas
Código fácil de seraciocinar
Programação reativa
eventos no sistemaunidirecional
Não precisausar linguagensfuncionais puras !
from: mobiltec.com.br
Tendência:
Não é a soluçãodefinitiva ou
absoluta
… e o que tem a ver com Ágil ?
A empresa ondevocê trabalhaé um sistema
A qualidade do resultado, depende
dobom funcionamentoentre as partes do
sistema
Se os desenvolvedoresgeram software
de baixa qualidade
●Código frágil.●Código que não
escala.●Refatoração de alto
risco.●Manutenção cara.●Mudanças são
lentas.
O que é ágil ?ou agilidade
“ It’s not what happens
that counts…it’s how you react.
Bruce Lee
Sua empresa vai precisar de:mais gerenciamento,
mais negociações,mais contratos complexos,
mais disciplinas,…. mais … mais …
Referências:
Alan KayRobert C. Martin (Uncle Bob)Joe ArmstrongRich Hickey
Obrigado :)
Sebastian [email protected]