Programação Eficaz
Agile Trends Floripa 2016
Sebastian Ferrari (a.k.a. Sebas)
sebas@taller.net.br
Sebastian Ferrari
CTO e Co-fundador da Taller
sebas5384
+10 anos programando
+4 anos com Ágil
vivendo o pós Ágil
~10 anos atrás
CPU 300 MHZ
RAM 128 MB
640 x 480 px
RAMAC 305 - ano 1956
68 cores = 8 bytes
microSDHC 8 billion bytes
1 bilhão de vezes mais
bytes, em menos espaço
IBM 305 RAMAC de 1956,
considerada um
SUPER computador
com 5 Megabytes de HDD
multiplicações
podiam demorar entre
60 ms a 190 ms
IBM 650
FORTRAN
HOJE
ano 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 vezes
em 60 anos !!
Capacidade de hardware
melhorou muito !
Mas …
e a maneira como
programamos ?
E a qualidade?
… melhorou?
procurou
no Google ?
treta vixe
:(
Por que ?
Softwares complexos
Manutenção muito cara
Novas funcionalidades
Priorizamos a eficiência
Software frágil
Programamos de
maneira familiar
Experiência do
programador é
péssima
O que estamos
fazendo de
errado?
Software
complexo!
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 escondidas
e
overload de abstrações
Estados internos
mutáveis espalhados
pelo sistema
Mutabilidade
torna o sistema
imprevisível
Refatoração
quase impossível
ou muito custosa
Side effects
fora de controle
Testes automatizados
são muito caros e
precisam de muito mock
Acoplamento
dificulta
interoperabilidade
A soma das partes é maior
do que o resultado final.
Entropia
Alto risco e esforço
perante as mudanças
Carregamos
um elefante nas costas
Alto conhecimento do todo
para realizar uma mudança
Overload
cognitivo
para entender
De onde vem
esse 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ção
funcional 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 puras
sã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 recursivas
evita side-effects dentro
de loops
Imutabilidade
mudanças se tornam
declarativas
Código fácil de se
raciocinar
Programação reativa
eventos no sistema
unidirecional
Não precisa
usar linguagens
funcionais puras !
from: mobiltec.com.br
Tendência:
Não é a solução
definitiva ou absoluta
… e o que tem a
ver com Ágil ?
A empresa onde
você trabalha
é um sistema
A qualidade do resultado,
depende do
bom funcionamento
entre as partes do sistema
Se os desenvolvedores
geram 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 Kay
Robert C. Martin (Uncle Bob)
Joe Armstrong
Rich Hickey
Obrigado :)
Sebastian Ferrari
sebas@taller.net.br

Programação Eficaz - Agile Trends Floripa 2016

Notas do Editor

  • #79 Curva de la jota. Costo de la innovación.