o programador pragmático

Post on 02-Dec-2014

6.002 Views

Category:

Education

73 Downloads

Preview:

Click to see full reader

DESCRIPTION

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 carreira a técnicas de projeto para manter seu código flexível e fácil de adaptar

TRANSCRIPT

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!

top related