SlideShare uma empresa Scribd logo
1 de 66
Thiago Barradas
Software Developer | MundiPagg
[ Web Applications ] [ ASP .NET ]
[ API RESTful ] [ Microsoft ♥ Linux ]
[ Elasticsearch ] [ DevOps ]
tbarradas@mundipagg.com
Linkedin: thiagobarradas
(21) 99329-9143
CLEAN CODE
POR UM MUNDO COM
CÓDIGOS MELHORES
POR QUE
VOCÊ ESTÁ AQUI?
PRECISAMOS MUITO DE
UM MUNDO COM
CÓDIGOS MELHORES
Robert C. Martin
(Uncle Bob)
The Clean Coder
Princípios do Clean Code
Eficiente
Simples
Direto ao ponto
Fácil leitura
Sem dependências
Fácil manutenção
Padrões definidos
Sem duplicação
Coberto de testes
Elegante
“Qualquer tolo consegue escrever
código que um computador entende.
Bons programadores escrevem código
que humanos podem entender.”
Martin Fowler
POSSO VER SEU CÓDIGO?
“Ainda ta bagunçado, depois vou
melhorar e refatorar o código.”
FILHO FEIO
NÃO TEM PAI!
“Fiz o meu melhor dentro do tempo que eu tinha.”
“Mas o prazo era extremamente curto.”
“Meu gestor me faz pressão o tempo inteiro.”
“Preciso entregar, preciso ser muito produtivo.”
NÃO EXISTE DESCULPA
PARA UM CÓDIGO RUIM!
TENHA ORGULHO DO SEU CÓDIGO!
OK. CHEGA DE LERO-LERO,
VAMOS AO QUE INTERESSA!
#1
NOMENCLATURA
Nomenclatura
Use nomes que revelem a intenção;
Use nomes pronunciáveis;
Não importa que o nome seja grande;
Mantenha o padrão, sempre;
Nomenclatura
#2
Classes
Classes
Ser representadas por substantivos;
Nome claro ao seu contexto;
Não importa que o nome seja grande;
Mantenha o padrão, sempre;
Classes
#3
Métodos
Métodos
Devem ser representados por verbos;
Nome claro ao seu contexto;
Devem ser pequenos. Quanto menor, melhor;
Extraia sempre que puder em métodos auxiliares,
seja um método privado ou utilitários;
Métodos
Um método deve fazer apenas uma coisa. Uma;
Argumentos booleanos não costumam ser elegantes.
Muitos parâmetros devem ser substituídos por
objetos.
Não importa que o nome seja grande;
Mantenha o padrão, sempre;
Métodos
Métodos
#4
Condições
Condições
Sempre que possível, extrai para métodos
privados;
Não importa que o nome seja grande;
Mantenha o padrão, sempre;
Condições
#5
Objetos e Estruturas de Dados
Objetos e Estruturas de Dados
Métodos de C;
Objetos criados por M;
Objetos passados por parâmetro para M;
Objetos em propriedades de instâncias de C.
Basicamente devem seguir a Lei de Demeter:
Um método M de uma classe C só deve conhecer:
#6
Abstração
Abstração
Tente ao máximo generalizar suas classes;
Abstraia em quantos níveis for preciso;
Não importa que o nome seja grande;
Mantenha o padrão, sempre;
Abstração
Abstração
#7
Comentários
Comentários
Um código bem escrito dispensa comentários;
São aceitáveis quando há necessidade de
explicação do negócio
Também para licença de uso e documentação;
Não importa que o comentário seja grande;
Mantenha o padrão, sempre;
Comentários
#8
Formatação do Código
Formatação do Código
Não existe um padrão definitivo para formatação;
Defina regras no time;
Tente sempre se basear no padrão que a
comunidade propõe;
Não importa que o padrão seja grande;
Mantenha o padrão, sempre;
#9
Exceções
Exceções
Utilize exceções específicas para seus erros;
Evite códigos de erros;
Trata exceções exclusivamente em métodos;
Não importa que o tratamento seja grande;
Mantenha o padrão, sempre;
Exceções
Exceções
#9
Testes
Testes
Se tiver flexibilidade pra usar o TDD, use;
Se não tiver, implemente testes continuamente a
cada implementação/correção;
Use e abuse; Teste de integração, funcional, etc;
Não importa que o teste seja grande;
Mantenha o padrão, sempre;
Testes
Fast: Testes rápidos, resultados rápidos.;
Indepedent: Não deve ter dependências;
Repeatable: Os testes devem funcionar em qualquer ambiente;
Self-validation: Não é necessária nenhuma validação manual;
Timely: Os testes devem ser elaborados antes do código;
Podemos seguir também o “F.I.R.S.T.”:
#10
Regra do Escoteiro
Regra do Escoteiro
“Deixe a área do acampamento mais limpa
do que quando e como você a encontrou.”
Regra do Escoteiro
“Deixe o código mais limpo do que quando e
como você o encontrou.”
Pontos extras
#11
Idioma
Idioma
Mantenha o padrão, sempre;
PORTUGUÊS INGLÊS
#12
Chaves {}
Chaves {}
Mantenha o padrão, sempre;
#13
Repositório
Repositório
Utilize commits pontuais, com pouco código e de
mudanças específicas;
Utilize algum workflow em suas branchs (exemplo
gitflow)
Deixe o seu readme bem explicado, com todas
instruções para executar o projeto;
Deixe o seu contributing bem explicado, com todas
instruções para contribuir com o projeto;
Repositório
Utilize tags para marcar suas releases, utilize as
releases do próprio repositório para o changelog
ou crie um arquivo para exibi-lo;
Adicione badges ao seu projeto. Validação de
build/CI, code coverage, etc;
Utilize a parte de issues para relatar bugs ou
solicitar novas features. Tenha um arquivo
explicando como criar uma nova issue.
Repositório
Crie uma wiki, use para a documentação;
Tenha um template para a criação de pull-requests;
Configure um resumo e as tags do projeto;
Mantenha todos esses pontos atualizados;
Mantenha o padrão, sempre;
Links
Clean Code: Por um Mundo com Códigos Melhores (Esta apresentação)
https://tinyurl.com/cleancode-thiagobarradas
Clean Code: Por um Mundo com Códigos Melhores (Artigo Revista/Online)
Revista iMasters #23 (Agosto 2017) – Páginas 56, 57, 58 e 59
https://issuu.com/imasters/docs/23
Clean Code: Por um Mundo com Códigos Melhores (Artigo Online)
http://barradas.me/2017/06/18/clean-code-um-mundo-codigo-melhores/
Referências e Links
Clean Code: A Handbook of Agile Software Craftsmanship
Robert C. Martin (2009) - Book
Clean Code: A Code of Conduct for Professional Programmers
Robert C. Martin (2011) - Book
Clean Code Presentation
Hendrik Ebel (2009) - https://tinyurl.com/cleancode-hendrikebel
Clean Code Presentation
Rodrigo Kono (2013) - https://tinyurl.com/cleancode-rodrigokono
Thiago Barradas
tbarradas@mundipagg.com
+55 (21) 99329-9143
Linkedin: thiagobarradas
Obrigado!

Mais conteúdo relacionado

Mais procurados

Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPJessyka Lage
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de ProgramaçãoCOTIC-PROEG (UFPA)
 
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
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaLeandro Parazito
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenterPaulino Michelazzo
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendiVinta Software
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
Como ser-um-programador-melhor
Como ser-um-programador-melhorComo ser-um-programador-melhor
Como ser-um-programador-melhorMarcos Paulo
 

Mais procurados (20)

Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
Mantendo o código saudável
Mantendo o código saudávelMantendo o código saudável
Mantendo o código saudável
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de Programação
 
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
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
Pep 8
Pep 8Pep 8
Pep 8
 
Oracle x PostgreSQL
Oracle x PostgreSQLOracle x PostgreSQL
Oracle x PostgreSQL
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenter
 
5 meses de python o que aprendi
5 meses de python  o que aprendi5 meses de python  o que aprendi
5 meses de python o que aprendi
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Code smell gsw
Code smell   gswCode smell   gsw
Code smell gsw
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Como ser-um-programador-melhor
Como ser-um-programador-melhorComo ser-um-programador-melhor
Como ser-um-programador-melhor
 
Postgres Chainsaw Massacre
Postgres Chainsaw MassacrePostgres Chainsaw Massacre
Postgres Chainsaw Massacre
 

Semelhante a Clean Code: Princípios e Boas Práticas

TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
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
 
Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code StandardToni Albuquerque
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedoresguitoper
 
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
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de ProgramaçãoPaulo Souza
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
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
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
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
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehaveMarcelo Zeferino
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
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
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 

Semelhante a Clean Code: Princípios e Boas Práticas (20)

TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code Standard
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedores
 
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
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de Programação
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
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...
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
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
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehave
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
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
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Clean code
Clean codeClean code
Clean code
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 

Mais de Thiago Barradas

Capacity planning - Projetando o seu cluster de Elasticsearch
Capacity planning - Projetando o seu cluster de ElasticsearchCapacity planning - Projetando o seu cluster de Elasticsearch
Capacity planning - Projetando o seu cluster de ElasticsearchThiago Barradas
 
Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019
Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019
Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019Thiago Barradas
 
Criando componentes e disponibilizando o como opensource em 5 minutos em .NET
Criando componentes e disponibilizando o como opensource em 5 minutos em .NETCriando componentes e disponibilizando o como opensource em 5 minutos em .NET
Criando componentes e disponibilizando o como opensource em 5 minutos em .NETThiago Barradas
 
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJCodacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJThiago Barradas
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Thiago Barradas
 
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Thiago Barradas
 
Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016Thiago Barradas
 

Mais de Thiago Barradas (7)

Capacity planning - Projetando o seu cluster de Elasticsearch
Capacity planning - Projetando o seu cluster de ElasticsearchCapacity planning - Projetando o seu cluster de Elasticsearch
Capacity planning - Projetando o seu cluster de Elasticsearch
 
Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019
Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019
Elasticsearch - O motor de busca que está mudando o mercado! @ PHPeste 2019
 
Criando componentes e disponibilizando o como opensource em 5 minutos em .NET
Criando componentes e disponibilizando o como opensource em 5 minutos em .NETCriando componentes e disponibilizando o como opensource em 5 minutos em .NET
Criando componentes e disponibilizando o como opensource em 5 minutos em .NET
 
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJCodacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
Codacy, CodeClimate, Sonarqube @ 5º DevOps Inside RJ
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
 
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
 
Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016Workshop Elasticsearch - Android Dev Conference 2016
Workshop Elasticsearch - Android Dev Conference 2016
 

Clean Code: Princípios e Boas Práticas