Download - O programador pragmático
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 softwarenão duplicar informaçõesescrever código flexível, dinâmico e adaptávelevitar a programação baseada no acasoblindar seu código com contratos, asserções e exceçõescapturar requisitos reaistestar de modo incansável e eficazagradar seus usuáriosmontar equipes de programadores pragmáticosaumentar a precisão de seus desenvolvimentos com automação.
Preocupe-se com seu trabalhoPor que passar sua vida desenvolvendo software
se não estiver interessado em fazê-lo bem?
Reflita sobre seu trabalhoDesligue 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.
Não tolere janelas quebradasCorrija projetos incorretos, decisões erradas e códigos frágeis quando os
encontrar
Seja um catalisador de mudançasVocê 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 escalaNã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 requisitosEnvolva 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 ouveNã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
Não adianta ter grandes idéias se elas não forem divulgadas de modo eficaz.
NSR – Não Se RepitaCada 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 definitivasNenhuma decisão é irrevogável: planeje-se para a mudança.
Crie protótipos para aprenderA 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 surpresasEstime antes de começar. Você identificará possíveis problemas
logo de início.
Use controle de versãoO versionamento é a máquina de tempo de seu trabalho – ele o
permite 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
Comprove suas suposições no ambiente real – com dados e
condições reais.
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.
Use exceções para problemas excepcionais
As exceções podem sofrer de todos os problemas de legibilidade e manutenção dos emaranhados de códigos clássicos. Guarde-‐as 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 sempreDa 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
Comece a pensar no teste antes de escrever uma linha de código
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
Wizards podem gerar muitas linhas de código. Verifique se você o entendeu por completo antes de introduzi-lo no seu projeto.
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 detalhesInvista 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 adote cegamente qualquer técnica sem
trazê-la para o contexto de suas práticas e capacidades de desenvolvimento
Ferramentas caras não produzem projetos melhores
Cuidado com a propaganda dos fornecedores, com dogmas da indústria e com o apelo da etiqueta de preço. Julgue as
ferramentas por seu mérito
Organize as equipes com base na funcionalidadeNão separa projetista de codificadores,
testadores de modeladores de dados. Construa equipes como constrói o código.
Teste cedo. Teste Sempre. Teste automaticamenteTestes executados a cada construção são muito mais eficazes do que planos de teste que ficam aguardando para ser executados.
A codificação só estará concluída após todos os testes serem
executadosNada mais a declamar.
Use o seu conhecimento para testar seus testesIntroduza 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ódigoIden,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
Documentação criada separadamente do código tem menos probabilidade de estar correta e atualizada
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 trabalhoOs artesões da an,guidade ficavam orgulhosos em assinar seu
trabalho. Você também deve ficar
Obrigado!