O programador pragmático

edgarddavidson 6,282 views 51 slides Apr 30, 2012
Slide 1
Slide 1 of 51
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51

About This Presentation

O Programador Pragmático se concentra no processo fundamental do desenvolvimento de software:
a partir de um requisito, produzir código funcional e de fácil manutenção que agrade aos usuários.
Sem se ater a uma tecnologia específica, esta obra aborda tópicos que vão do desenvolvimento da ...


Slide Content

Edgard Davidson
@edgarddavidson
a mestre
De aprendiz
O programador Pragmático

Referências
Andrew Hunt
David Thomas

!
!"#$%%
&'(()(*+",%
!"#$#%&'#($)(*+*,-*./0$#1$21$
3(04#)05$60.)(*)*(#7$0%$*2)0(#%$
/#%)#$,7'(08$"#$.90$60.%#:27(5$
3(062(*(#7$6*./7/*)0%$;2#$,#(*1$
#%)*$0+(*8<$

Este livro contempla:
combater a deterioração de software
não duplicar informações
escrever código flexível, dinâmico e adaptável
evitar a programação baseada no acaso
blindar seu código com contratos, asserções e exceções
capturar requisitos reais
testar de modo incansável e eficaz
agradar seus usuários
montar equipes de programadores pragmáticos
aumentar a precisão de seus desenvolvimentos com automação.

Preocupe-se com seu trabalho
Por que passar sua vida desenvolvendo software
se não estiver interessado em fazê-lo bem?

Reflita sobre seu trabalho
Desligue o piloto automático e assuma o controle.
Critique e avalie constantemente seu trabalho.

Forneça opções, não dê
desculpas
esfarrapadas
Em vez de desculpas, forneça
opções. Não diga que não
pode ser feito; explique o que
pode ser feito.

/ãPUPMFSFKBOFMBTRVFCSBEBT
$PSSJKBQSPKFUPTJODPSSFUPTEFDJT õFT
FSSBEBTFD óEJHPTGSáHFJTRVBOEPPT
FODPOUSBS

Seja%um%catalisador%de%mudanças
Você não pode impor mudanças às pessoas.
Em vez disso, mostre a elas como o futuro pode ser e
ajude-as a participar de sua criação

Lembre-se do cenário em larga escala
Não fique tão absorvido pelos detalhes a ponto de não ver o que
está acontecendo ao seu redor

Tome a qualidade parte dos requisitos
Envolva seus usuários na determinação dos requisitos de qualidade
do projeto.

!
"#$%!#!&'(%)*+,&*#!!-$!./0+1#!
!
2)3+41&!5%6-7&($%)1%!%$!4-&!8&(1%+(&!*%!
8#).%8+$%)1#!

Analise criticamente o que você lê e ouve
Não se deixe levar por fornecedores, pela mídia ou por dogmas. Analise as
informações em relação a si mesmo e ao seu projeto

É o que você diz e a maneira como diz
/ãPBEJBOUBUFSHSBOEFTJE éJBTTFFMBTO ãPGPSFNEJWVMHBEBTEFNPEPFGJDB[

NSR%–%Não%Se%Repita
Cada$bloco$de$informações$deve$ter$uma$representação$oficial,$
exclusiva$e$sem$ambiguidade$dentro$de$um$sistema.

Facilite a reutilização
Se#for#fácil#reu,lizar,#será#reu,lizado.#Crie#um#ambiente#que#
apóie#a#reu,lização

Elimine efeitos entre
elementos não
relacionados
Projete componentes que sejam auto-
suficientes, independentes e com uma
finalidade exclusiva bem definida.

Não há decisões definitivas
Nenhuma decisão é irrevogável: planeje-se para a mudança.

Crie protótipos para aprender
A criação de protótipos é uma experiência de aprendizado. Seu valor não
está no código produzido, mas nas lições aprendidas.

Programe em um nível próximo ao
domínio do problema
Projete e codifique na linguagem do seu usuário.

Estime'para'evitar'surpresas
Estime'antes'de'começar.'Você'identificará'possíveis'problemas'
logo'de'início.

Use con"ole de versão
O versionamen$ é a máquina de 'mpo de seu "abalho – ele o
permi' voltar.

Corrija o problema,
esqueça o culpado
Não importa se você ou outra
pessoa foi o culpado pelo bug –
ele precisará de correção de
qualquer forma.

Não suponha – teste
$PNQSPWFTVBTTVQPTJçõFTOP
BNCJFOUFSFBMyDPNEBEPTF
DPOEJçõFTSFBJT

Escreva um código que escreva códigos
Os geradores de códigos aumentam a
produtividade e ajudam a evitar a
duplicação

Programe por contratos
Use contratos para
documentar e provar que
o código não faz mais nem
menos do que ele propõe
fazer.

6TFFYDFçõFTQBSBQSPCMFNBTFYDFQDJPOBJT
As$exceções$podem$sofrer$de$todos$os$problemas$de$
legibilidade$e$manutenção$dos$emaranhados$de$códigos$
clássicos.$GuardeAas$para$acontecimentos$excepcionais.$try{
}catch(){
}catch(){
}finally{
}

Reduza a vinculação entre módulos
Evite a vinculação escrevendo códigos
“cautelosos” e aplicando a lei de Deméter

Es,me#a#ordem#de#complexidade#O(n)#de#seus#algoritmos#
Tenha#uma#idéia#de#quanto#o#processo#deve#demorar#antes#de#escrever#o#código
Fonte: Nívio Ziviani

Tenha suas estimativas
A análise matemática de algoritmos não diz tudo. Tente
cronometrar seu código em seu ambiente de destino.

Refatore cedo, refatore sempre
Da mesma forma que você pode capinar e reorganizar um jardim,
reescreva, reorganize e reconstrua o código quanto necessário.
Ataque a raiz do problema.

Projete para testar
$PNFDFBQFOTBSOPUFTUFBOUFTEF
FTDSFWFSVNBMJOIBEFDóEJHP

Teste seu código ou seus usuários
testarão
Teste incansavelmente. Não deixe que seus
usuários encontre erros para você

Não use código de wizard que você não entende
8J[BSETQPEFNHFSBSNVJUBTMJOIBTEFD óEJHP7FSJGJRVFTFWPD êPFOUFOEFVQPS
DPNQMFUPBOUFTEFJOUSPEV[JMPOPTFVQSPKFUP

Trabalhe com usuários para
pensar como um usuário
É a melhor maneira de entender como o
sistema será usado de verdade

Abstrações tem vida mais longa do que detalhes
Invista na abstração e não na implementação.
As abstrações podem sobreviver às diversas
mudanças provenientes de diferentes
implementações e novas tecnologias.

Use um glossário do projeto
Crie'e'mantenha'uma'fonte'exclusiva'com'todos'os'termos'e'
vocabulário'específicos'de'um'projeto

Não pense fora da caixa – encontre
a caixa
Quando diante de um problema difícil, identifique todas as
restrições reais. Faça a si próprio a pergunta: “Isso
precisa ser feito?” De fato, precisa ser feito?

Não seja escravo de métodos
formais
Não ado# cegamen# qualquer técnica sem
%azê-la para o con#x' de suas prá)cas e
capacidades de desenvolvimen'

Ferramentas caras não produzem proje's melhores
$VJEBEPDPNBQSPQBHBOEBEPTGPSOFDFEPSFTDPNEPHNBTEB
JOEÙTUSJBFDPNPBQFMPEBFUJRVFUBEFQSFÇP+VMHVFBT
GFSSBNFOUBTQPSTFVNÉSJUP

0SHBOJ[FBTFRVJQFTDPNCBTFOBGVODJPOBMJEBEF
Não separa projetista de codificadores,
testadores de modeladores de dados. Construa
equipes como constrói o código.

Teste cedo. Teste Sempre. Teste automaticamente
5FTUFTFYFDVUBEPTBDBEBDPOTUSVçãPTãPNVJUPNBJTFGJDB[FTEP
RVFQMBOPTEFUFTUFRVFGJDBNBHVBSEBOEPQBSBTFSFYFDVUBEPT

A codificação só estará concluída
após todos os testes serem
executados
Nada mais a declamar.

Use o seu conhecimento para testar seus testes
Introduza erros de propósito em uma cópia
separada da fonte para verificar se os testes
irão capturá-los.

Teste#a#cobertura#de#estados#e#não#a#cobertura#do#código
Iden,fique#e#teste%estados%significa:vos#do#programa.#
Testar#apenas#linhas#de#código#não#é#suficiente.

Encontre os erros apenas uma vez
Quanto um testador humano encontrar um
erro, essa deve ser a última vez que um
testador humano o encontrará. Testes
automatizados devem procurá-lo desse
momento em diante.

Construa a documentação no código, não a acrescente como
complemento
%PDVNFOUBÇÄPDSJBEBTFQBSBEBNFOUFEPDÓEJHPUFNNFOPT
QSPCBCJMJEBEFEFFTUBSDPSSFUBFBUVBMJ[BEB
Narrative:
In order to calculate BMI with ease
As a doctor
I want to have BMI Calculator application

Scenario: Simple BMI calculator validation

Given a body mass index calculator
When a patient's is with mass 77 kg and height 1.75 m
Then patient's body mass index is 25.14285659790039

Exceda gentilmente as expectativas de seus usuários
Tente estender as expectativas de seus usuários e então
entregue apenas um pouco mais

Assine#seu#trabalho
Os#artesões#da#an,guidade#ficavam#orgulhosos#em#assinar#seu#
trabalho.#Você#também#deve#ficar

Obrigado!