SlideShare a Scribd company logo
1 of 60
Download to read offline
Princípios Básicos para
Desenvolvedores
while(!(succeed=try()))
Guilherme Reis
Agenda
• Dicas para iniciantes;
• Mau cheiro;
• Porque se importar com o código;
• Código limpo;
• Princípios básicos de design;
Programação...
Programação é lógica,
não magia negra
• “Eu gosto de programar, só não gosto de lógica” (Ex-
aluno de Computação)
Antes de codificar, pense
no que quer/precisa fazer
Não funcionará na primeira vez!
Provavelmente nem na segunda ou terceira;
Mas quando funciona...
Trabalho em equipe
Maus cheiros
• Primeiramente usado por Kent Beck e citado por Martin
Fowler;
• Indicação superficial de alerta à problemas mais
profundos no sistema;
• Não são bugs, mas falhas no design:
• Atraso no desenvolvimento
• Risco de bugs e falhas no futuro
• “Qualquer nariz” consegue identificar;
Exemplos
• Classes e métodos/funções enormes;
• Código ilegível;
• Códigos repetidos;
• Códigos redundantes;
• Métodos/Funções com vários parâmetros;
• Baixa coesão*;
• Alto acoplamento*;
Baixa Coesão
Alto Acoplamento
• Forte dependência entre componentes;
• Dificulta mudanças;
• Dificulta reaproveitamento de código;
Alto Acoplamento
Fases de um projeto
• Tudo é muito bonito, limpo, elegante e convincente;
• Tudo funciona e as atividades são cumpridas como se
esperava;
• Tudo flui conforme o cronograma...
No começo...
O importante é
funcionar...
• O código começa a “ter um cheiro desagradável”
• No começo nem parece tão ruim;
• Uma verruga aqui, uma gambiarra ali, mais tudo ainda
parece bonito e funcional;
• Não há tempo para organização e melhorias;
• “Em time que está ganhando não se meche”;
A culpa não é minha...
“Tudo muda, tudo
sempre mudará...”
• Bugs começam a aparecer;
• Mudanças nos requisitos começam a surgir;
• Puxadinhos (Extensões) se tornam necessários;
• Novos campos e botões são adicionados;
• Então o código começa a apodrecer
e consequentemente, o “cheiro” fica insuportável;
Como prevenir?
• Mínimo:
• Se importe com o código gerado;
• Escrevendo um “código limpo”;
• Preocupando-se com o design do software;
• Melhor ainda:
• Fazer revisões de códigos com a equipe;
• Escrevendo testes automatizados;
• Realizando refactors ao identificar
maus cheiros no software;
Por que devo me
importar?
Por que devo me
importar?
Ciclo de um projeto
Prevenção
Por que devo me
importar?
• Não é só pelaos 20 centavos estética:
• É pelo TEMPO gasto!
Como assim tempo?
• O que fazemos em nosso tempo? Sim, os 20% que sobram após o
coffe break, pipi break, tea break, brief break, etc.
• Planejamos mudanças;
• Lemos (e muito) código;
• Atuamos nos planos;
• Codificação de verdade? Não muito...
Mais e o código?
• Similar aos bancos de dados:
• Taxa de leitura:escrita de 10:1;
• Não fazemos UPDATE e sim várias sequências de
GET e PUT;
• Nosso cérebro não é um bom cache;
Tempo é dinheiro!
• Como reduzir custos através do código? Enchendo o projeto de
estagiários?
• Tempo de leitura/entendimento;
• Seus colegas lerão seus códigos inúmeras vezes
• Entender um módulo leva 2 horas ou 5 minutos?
• Tempo de escrita/adaptação/manutenção;
• O software irá mudar: fato;
• Quão fácil será esta mudança?
• Quanto do código será reaproveitado em outro projeto?
Pensando bem...
Código limpo
Humanos <- Código
Máquinas <- 01101001010
Por falar em nome...
Nomenclatura
• Sim, o nome importa!
• O propósito de um nome é revelar intenção/objetivo;
• Depois do ctrl+c e ctrl+v, o que mais utilizamos em IDEs
é o ctrl+SPACE
Nomenclatura
• Qual componente do formulário será mostrado ou
escondido?
Nomenclatura
• Qual componente do formulário será mostrado ou
escondido?
O que este código faz?
Melhor?
E assim?
O que mudou?
• Nomes que revelam intenção:
• flaggedCells no lugar de list
• cell no lugar de x
• Remoção de números mágicos:
• cell[STATUS_VALUE] no lugar de x[0]
• Abstração de tipo de dados:
• Cell cell no lugar de int[] cell
Princípios básicos
design
• 5 princípios de boas práticas vindas de décadas de experiência
em engenharia de software;
• [S]ingle Responsibility Principle
[O]pen/Closed Principle
[L]iskov Substitution Principle
[I]nterface Segregation Principle
[D]ependency Inversion Principle
S – Single Responsibility
S – Single Responsibility
• Uma classe/método deve ter apenas uma razão para ser
modificado(a);
• Menor impacto em mudanças;
• Reaproveitamento de código;
• Alta coesão;
S – Single Responsibility
S – Single Responsibility
O - Open Closed
• Fechado para edições;
• Aberto para extensões;
O - Open Closed
O - Open Closed
L - Liskov substitution
• As classes derivadas não devem ser mais fracas e nem
mais fortes que sua base
L - Liskov substitution
Customer
Gold Silver Guest
L - Liskov substitution
L - Liskov substitution
I - Interface Segregation
• Melhor ter várias interfaces pequenas para propósitos
específicos
• Do que interfaces genéricas enormes
I - Interface Segregation
I - Interface Segregation
D - Dependency inversion
• Dependa de abstrações, não de detalhes concretos
D - Dependency inversion
D - Dependency inversion
Resultado
Perguntas
Interessado?
OBRIGADO!
• Skype: guitoper
• Twitter: @guitoper
• LinkedIn: br.linkedin.com/pub/guilherme-reis/22/5a2/a44/
• Slides: http://pt.slideshare.net/guitoper/princpios-bsicos-
para-desenvolvedores

More Related Content

What's hot

TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?tdc-globalcode
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
Testes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-diaTestes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-diaAlex Tercete
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - IntroduçãoHélio Costa e Silva
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHPFernando Chucre
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Test-driven development & Mocking
Test-driven development & MockingTest-driven development & Mocking
Test-driven development & MockingDaniel Tamiosso
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador PragmáticoTadeu Marinho
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passosGabrielly Gomes
 

What's hot (20)

TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
Testes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-diaTestes Unitários: Começando a escrever testes no seu dia-a-dia
Testes Unitários: Começando a escrever testes no seu dia-a-dia
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - Introdução
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de Código
 
Clean code
Clean codeClean code
Clean code
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Tirando Certificação PHP
Tirando Certificação PHPTirando Certificação PHP
Tirando Certificação PHP
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Test-driven development & Mocking
Test-driven development & MockingTest-driven development & Mocking
Test-driven development & Mocking
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
Clean Code
Clean CodeClean Code
Clean Code
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador Pragmático
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passos
 

Similar to Princípios Básicos Desenvolvimento

Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSprofjotamarcosduarte
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingPedro Pereira Martins
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Thiago Barradas
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Pedro Edson Silva Barros
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 

Similar to Princípios Básicos Desenvolvimento (20)

Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Clean Code
Clean CodeClean Code
Clean Code
 
Clean Code
Clean CodeClean Code
Clean Code
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Clean code
Clean codeClean code
Clean code
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Seu código fede e você nem sabia
Seu código fede e você nem sabiaSeu código fede e você nem sabia
Seu código fede e você nem sabia
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 

Princípios Básicos Desenvolvimento

  • 2. Agenda • Dicas para iniciantes; • Mau cheiro; • Porque se importar com o código; • Código limpo; • Princípios básicos de design;
  • 4. Programação é lógica, não magia negra • “Eu gosto de programar, só não gosto de lógica” (Ex- aluno de Computação)
  • 5. Antes de codificar, pense no que quer/precisa fazer
  • 6. Não funcionará na primeira vez! Provavelmente nem na segunda ou terceira;
  • 9. Maus cheiros • Primeiramente usado por Kent Beck e citado por Martin Fowler; • Indicação superficial de alerta à problemas mais profundos no sistema; • Não são bugs, mas falhas no design: • Atraso no desenvolvimento • Risco de bugs e falhas no futuro • “Qualquer nariz” consegue identificar;
  • 10. Exemplos • Classes e métodos/funções enormes; • Código ilegível; • Códigos repetidos; • Códigos redundantes; • Métodos/Funções com vários parâmetros; • Baixa coesão*; • Alto acoplamento*;
  • 12. Alto Acoplamento • Forte dependência entre componentes; • Dificulta mudanças; • Dificulta reaproveitamento de código;
  • 14. Fases de um projeto
  • 15. • Tudo é muito bonito, limpo, elegante e convincente; • Tudo funciona e as atividades são cumpridas como se esperava; • Tudo flui conforme o cronograma... No começo...
  • 16. O importante é funcionar... • O código começa a “ter um cheiro desagradável” • No começo nem parece tão ruim; • Uma verruga aqui, uma gambiarra ali, mais tudo ainda parece bonito e funcional; • Não há tempo para organização e melhorias; • “Em time que está ganhando não se meche”;
  • 17. A culpa não é minha...
  • 18. “Tudo muda, tudo sempre mudará...” • Bugs começam a aparecer; • Mudanças nos requisitos começam a surgir; • Puxadinhos (Extensões) se tornam necessários; • Novos campos e botões são adicionados; • Então o código começa a apodrecer e consequentemente, o “cheiro” fica insuportável;
  • 19. Como prevenir? • Mínimo: • Se importe com o código gerado; • Escrevendo um “código limpo”; • Preocupando-se com o design do software; • Melhor ainda: • Fazer revisões de códigos com a equipe; • Escrevendo testes automatizados; • Realizando refactors ao identificar maus cheiros no software;
  • 20. Por que devo me importar?
  • 21. Por que devo me importar?
  • 22. Ciclo de um projeto
  • 24. Por que devo me importar? • Não é só pelaos 20 centavos estética: • É pelo TEMPO gasto!
  • 25. Como assim tempo? • O que fazemos em nosso tempo? Sim, os 20% que sobram após o coffe break, pipi break, tea break, brief break, etc. • Planejamos mudanças; • Lemos (e muito) código; • Atuamos nos planos; • Codificação de verdade? Não muito...
  • 26. Mais e o código? • Similar aos bancos de dados: • Taxa de leitura:escrita de 10:1; • Não fazemos UPDATE e sim várias sequências de GET e PUT; • Nosso cérebro não é um bom cache;
  • 27. Tempo é dinheiro! • Como reduzir custos através do código? Enchendo o projeto de estagiários? • Tempo de leitura/entendimento; • Seus colegas lerão seus códigos inúmeras vezes • Entender um módulo leva 2 horas ou 5 minutos? • Tempo de escrita/adaptação/manutenção; • O software irá mudar: fato; • Quão fácil será esta mudança? • Quanto do código será reaproveitado em outro projeto?
  • 31. Por falar em nome...
  • 32. Nomenclatura • Sim, o nome importa! • O propósito de um nome é revelar intenção/objetivo; • Depois do ctrl+c e ctrl+v, o que mais utilizamos em IDEs é o ctrl+SPACE
  • 33. Nomenclatura • Qual componente do formulário será mostrado ou escondido?
  • 34. Nomenclatura • Qual componente do formulário será mostrado ou escondido?
  • 35. O que este código faz?
  • 38. O que mudou? • Nomes que revelam intenção: • flaggedCells no lugar de list • cell no lugar de x • Remoção de números mágicos: • cell[STATUS_VALUE] no lugar de x[0] • Abstração de tipo de dados: • Cell cell no lugar de int[] cell
  • 39. Princípios básicos design • 5 princípios de boas práticas vindas de décadas de experiência em engenharia de software; • [S]ingle Responsibility Principle [O]pen/Closed Principle [L]iskov Substitution Principle [I]nterface Segregation Principle [D]ependency Inversion Principle
  • 40. S – Single Responsibility
  • 41. S – Single Responsibility • Uma classe/método deve ter apenas uma razão para ser modificado(a); • Menor impacto em mudanças; • Reaproveitamento de código; • Alta coesão;
  • 42. S – Single Responsibility
  • 43. S – Single Responsibility
  • 44. O - Open Closed • Fechado para edições; • Aberto para extensões;
  • 45. O - Open Closed
  • 46. O - Open Closed
  • 47. L - Liskov substitution • As classes derivadas não devem ser mais fracas e nem mais fortes que sua base
  • 48. L - Liskov substitution Customer Gold Silver Guest
  • 49. L - Liskov substitution
  • 50. L - Liskov substitution
  • 51. I - Interface Segregation • Melhor ter várias interfaces pequenas para propósitos específicos • Do que interfaces genéricas enormes
  • 52. I - Interface Segregation
  • 53. I - Interface Segregation
  • 54. D - Dependency inversion • Dependa de abstrações, não de detalhes concretos
  • 55. D - Dependency inversion
  • 56. D - Dependency inversion
  • 60. OBRIGADO! • Skype: guitoper • Twitter: @guitoper • LinkedIn: br.linkedin.com/pub/guilherme-reis/22/5a2/a44/ • Slides: http://pt.slideshare.net/guitoper/princpios-bsicos- para-desenvolvedores