Programação Eficaz - Agile Trends Floripa 2016

Post on 16-Apr-2017

180 views 0 download

Transcript of Programação Eficaz - Agile Trends Floripa 2016

Programação EficazAgile Trends Floripa

2016Sebastian Ferrari (a.k.a. Sebas)

sebas@taller.net.br

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 Ferrarisebas@taller.net.br