SlideShare uma empresa Scribd logo
1 de 67
Clean Code
Boas práticas para desenvolvimento
Paulo Henrique da Silva
• Benner Tecnologia
• Desenvolvedor há mais de 20 anos
• Graduação em Ciências da
computação
• Pós em Desenvolvimento de
aplicações Web
• Hobbies: Astronomia/Fotografia
Habilidade profissional:
• Conhecimento
• Trabalho
Programar não é diferente!
Escrever código profissional, não
é diferente!
O mundo evolui...
Vai ser mais fácil programar...
O código vai praticamente sumir...
Não é tão difícil assim...
O código nunca vai
sumir…
Código é patrimônio
Como profissionais
devemos evitar o
código ruim
A única maneira de ir mais
rápido, é manter o código
organizado e legível.
O que é um código bom?
”É um código que faz
parecer que a
linguagem foi feita
para o problema”
Ward Cunningham
• Conversor de CSV para JSON
Práticas de Clean Code
• Nomes com propósito
• Escolher bons nomes leva tempo, mas economiza mais
• Cuide dos seus nomes
• Troque-os quando achar melhores
• Todos que lerem seu código ficarão agradecidos
• Nomes pronunciáveis
• Evite informações erradas
• Prefixos de tipo
• Classes devem ser substantivos (Cliente, Conta, Pagina). Evite palavras
como Manager, Data, Info (que também não deve ser verbo)
• Classes com mais construtores, devem utilizar factories.
Evite
Prefira
Evite
Prefira
• Funções!
• Devem ser pequenas!
• Deve fazer apenas uma coisa e fazê-la bem
• Respeite o nível de abstração
• Mínimo possível de parâmetros, máximo 3.
• Um parâmetro booleano, cheiro ruim.
• Se precisa passar muita coisa, pense em passar um objeto (não é trapaca)
• Evite efeitos colaterais.
• Funções devem alterar o estado dos objetos que elas pertencem, não o
estado de outros objetos
• Evite repetição: DRY. A duplicação é a raiz de todo mal!
• Comentários no código
Não utilize!
Comentários são, no máximo, um mal necessário.
Exceto: Copyright, Docs de API, etc
• Formatação
• Ferramentas com o Visual Studio já forcam a formatação correta.
• Mas se você estiver utilizando uma ferramenta que não força, não quer
dizer que não é para formatar.
• Evite linhas muito longas
• Tenha regras de equipe.
• Utilize espaçamento vertical
• Objetos
• Saiba diferenciar estruturas de dados de objetos.
• Estruturas de dados são representadas por classes que
expõem os dados, sem funções significativas.
• Objetos são classes que escondem as informações internas e
expõem operações que operam em tais dados
• Evite classes que são objetos e estruturas de dados ao mesmo
tempo!
• Classes
• Devem ser pequenas!
• Devem ter uma única responsabilidade.
• Poucas variáveis de instância. Alta coesão: Os métodos da classe
devem manipular tentar manipular todas as variáveis da classe.
• Quando isso não acontece normalmente tem uma outra classe
querendo surgir.
• Adote o S.O.L.I.D.
• Testes de unidade
• Código limpo deve estar coberto por testes!
• O teste também deve ser limpo, pois ele é a documentação do seu código.
• Manutenção de código, vai eventualmente exigir mudança nos testes.
• F.I.R.S.T.:
• Fast
• Idenpendent
• Repeatable
• Self-Validating
• Timely
• Tratamento de erro
• Evite códigos de erro
• Utilize exceções, elas deixam o código limpo e legível.
Evite
Prefira
Clean Code na arquitetura
• Sistemas
• Injeção de dependência
• Desenvolvimento gradual – deve funcionar desde o início (evolução de
uma cidade)
• Cross-cutting concenrs
• Cache
• Persistência
• Logs
• Transação
• Segurança
• Regras de negócio
• Linguagens de domínio
• Otimização de decisões
• Concorrência
• Cuidado com os mitos:
• Sempre melhora o desempenho
• Projeto não muda ao utilizar threads
• Não precisamos nos preocupar com concorrência em containers Web (IIS)
• Concorrência correta é complexa!
• Bugs de concorrência, não se repetem facilmente
• Se precisar utilizer, aqui vão algumas dicas:
• Responsabilidade única
• Limite o escopo dos dados
• Utilize cópia dos dados
• Threads independentes
• Conheça sua biblioteca.
• Seções críticas pequenas
• Muito mais em…
SOLID
Código legível, flexivel e fácil de manter.
•Single responsability
•Open/closed
•Liskov substitution
•Interface segregation
•Dependency inversion
Single Responsability
”a class should have only a single responsibility”
Open/closed principle
"software entities … should be
open for extension, but closed for
modification."
Liskov
substitution
"objects in a program
should be replaceable
with instances of their
subtypes without
altering the correctness
of that program."
Interface segregation
"many client-specific interfaces are better than one general-
purpose interface."
Dependency inversion
"depend upon abstractions, not concretions."
Dica final...
Lave suas mãos, escove os seus dentes e
mantenha o seu código limpo!
Código e slides em https://github.com/paulohs/CleanCodeSample
Obrigado!
Paulo Henrique da Silva
benner.com.br

Mais conteúdo relacionado

Semelhante a Clean Code - Boas práticas para desenvolvimento

Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
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
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edtedbrunoaalves
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
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
 
Community webcast
Community webcastCommunity webcast
Community webcastYan Justino
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 

Semelhante a Clean Code - Boas práticas para desenvolvimento (20)

Clean code
Clean codeClean code
Clean code
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
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...
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
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
 
Community webcast
Community webcastCommunity webcast
Community webcast
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 
Clean Coder
Clean CoderClean Coder
Clean Coder
 

Clean Code - Boas práticas para desenvolvimento

  • 1. Clean Code Boas práticas para desenvolvimento
  • 2. Paulo Henrique da Silva • Benner Tecnologia • Desenvolvedor há mais de 20 anos • Graduação em Ciências da computação • Pós em Desenvolvimento de aplicações Web • Hobbies: Astronomia/Fotografia
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. Programar não é diferente!
  • 9. Escrever código profissional, não é diferente!
  • 10.
  • 11.
  • 12.
  • 13. O mundo evolui... Vai ser mais fácil programar... O código vai praticamente sumir... Não é tão difícil assim...
  • 14.
  • 15. O código nunca vai sumir…
  • 17.
  • 18.
  • 20. A única maneira de ir mais rápido, é manter o código organizado e legível.
  • 21. O que é um código bom?
  • 22.
  • 23. ”É um código que faz parecer que a linguagem foi feita para o problema” Ward Cunningham
  • 24.
  • 25.
  • 26. • Conversor de CSV para JSON
  • 28. • Nomes com propósito • Escolher bons nomes leva tempo, mas economiza mais • Cuide dos seus nomes • Troque-os quando achar melhores • Todos que lerem seu código ficarão agradecidos • Nomes pronunciáveis • Evite informações erradas • Prefixos de tipo • Classes devem ser substantivos (Cliente, Conta, Pagina). Evite palavras como Manager, Data, Info (que também não deve ser verbo) • Classes com mais construtores, devem utilizar factories.
  • 29. Evite
  • 32.
  • 33. • Funções! • Devem ser pequenas! • Deve fazer apenas uma coisa e fazê-la bem • Respeite o nível de abstração • Mínimo possível de parâmetros, máximo 3. • Um parâmetro booleano, cheiro ruim. • Se precisa passar muita coisa, pense em passar um objeto (não é trapaca) • Evite efeitos colaterais. • Funções devem alterar o estado dos objetos que elas pertencem, não o estado de outros objetos • Evite repetição: DRY. A duplicação é a raiz de todo mal!
  • 34.
  • 35. • Comentários no código Não utilize! Comentários são, no máximo, um mal necessário. Exceto: Copyright, Docs de API, etc
  • 36. • Formatação • Ferramentas com o Visual Studio já forcam a formatação correta. • Mas se você estiver utilizando uma ferramenta que não força, não quer dizer que não é para formatar. • Evite linhas muito longas • Tenha regras de equipe. • Utilize espaçamento vertical
  • 37. • Objetos • Saiba diferenciar estruturas de dados de objetos. • Estruturas de dados são representadas por classes que expõem os dados, sem funções significativas. • Objetos são classes que escondem as informações internas e expõem operações que operam em tais dados • Evite classes que são objetos e estruturas de dados ao mesmo tempo!
  • 38. • Classes • Devem ser pequenas! • Devem ter uma única responsabilidade. • Poucas variáveis de instância. Alta coesão: Os métodos da classe devem manipular tentar manipular todas as variáveis da classe. • Quando isso não acontece normalmente tem uma outra classe querendo surgir. • Adote o S.O.L.I.D.
  • 39.
  • 40. • Testes de unidade • Código limpo deve estar coberto por testes! • O teste também deve ser limpo, pois ele é a documentação do seu código. • Manutenção de código, vai eventualmente exigir mudança nos testes. • F.I.R.S.T.: • Fast • Idenpendent • Repeatable • Self-Validating • Timely
  • 41. • Tratamento de erro • Evite códigos de erro • Utilize exceções, elas deixam o código limpo e legível.
  • 42. Evite
  • 44. Clean Code na arquitetura
  • 45. • Sistemas • Injeção de dependência • Desenvolvimento gradual – deve funcionar desde o início (evolução de uma cidade) • Cross-cutting concenrs • Cache • Persistência • Logs • Transação • Segurança • Regras de negócio • Linguagens de domínio • Otimização de decisões
  • 46.
  • 47.
  • 48.
  • 49. • Concorrência • Cuidado com os mitos: • Sempre melhora o desempenho • Projeto não muda ao utilizar threads • Não precisamos nos preocupar com concorrência em containers Web (IIS) • Concorrência correta é complexa! • Bugs de concorrência, não se repetem facilmente • Se precisar utilizer, aqui vão algumas dicas: • Responsabilidade única • Limite o escopo dos dados • Utilize cópia dos dados • Threads independentes • Conheça sua biblioteca. • Seções críticas pequenas
  • 50. • Muito mais em…
  • 51. SOLID Código legível, flexivel e fácil de manter.
  • 53. Single Responsability ”a class should have only a single responsibility”
  • 54.
  • 55.
  • 56. Open/closed principle "software entities … should be open for extension, but closed for modification."
  • 57.
  • 58. Liskov substitution "objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program."
  • 59.
  • 60.
  • 61.
  • 62. Interface segregation "many client-specific interfaces are better than one general- purpose interface."
  • 63. Dependency inversion "depend upon abstractions, not concretions."
  • 64.
  • 65. Dica final... Lave suas mãos, escove os seus dentes e mantenha o seu código limpo! Código e slides em https://github.com/paulohs/CleanCodeSample
  • 66.
  • 67. Obrigado! Paulo Henrique da Silva benner.com.br

Notas do Editor

  1. Gosto de entender como as coisas funcionam.
  2. Há duas vertentes para ter habilidade profissional: Conhecimento e trabalho! Não há como ser profissional sem as duas.
  3. Programar com código limpo, não é diferente...
  4. Alguns alegam que o fim do código está próximo; que logo todo código será gerado e não mais escrito; e não precisaram mais de programadores, pois as pessoas criarão programas a partir de especificações.
  5. Bobagem. O código representa os detalhes dos requisitos. Não há como ignorar os detalhes. Eles precisam ser especificados. E especificar detalhadamente os requisitos de modo que uma máquina possa executá-los é programar e tal especificação é o código!
  6. Na verdade só aumenta...
  7. Como patrimônio, precisa de cuidados.
  8. Pessoas já perderam seu emprego por conta de código ruim. Produtos já deixaram de existir por conta de código ruim. Empresas faliram por conta de código ruim. As vezes por conta da pressão, do prazo, acabamos criando código ruim. Estamos cansados de trabalhar num problema. Deixamos para refatorar algo depois. Nosso gerente nos pressiona, as vezes temos medo de ser demitidos e deixamos as coisas pela metade.
  9. O gerente quer um código bom. Ele vai cobrar o prazo, pois é o trabalho dele. Nós como programadores profissionais temos que proteger o código com a mesma paixão. Se você fosse um médico, e seu cliente exigisse que você se apressasse, que parasse com a higienização das mãos pois demora demais. Você, como médico profissional, o que faria?
  10. Nós programadores sempre temos um dilema: Sabemos que bagunça no código atrapalha. Mas por causa da pressão nos sentimos forçados a cometer essa bagunças. Mas profissionais sérios sabe que a desorganização do código vai reduzir a velocidade do seu trabalho e você perderá o prazo. A única maneira de ir mais rápido, é manter o código organizado e legível.
  11. Há brigas por linguagens em todo o lugar. Mas essa afirmação coloca a responsabilidade nas nossas costas. Não é a linguagem que faz os programas parecerem simples. É o programador!
  12. Isto é um código limpo.
  13. Injeção de dependências
  14. Injeção de dependências
  15. .