SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Clean Code
Elevando o nível de
desenvolvimento de
software
Jean Carlo Machado
Sobre
CompuFácil
⇢ php-src
⇢ Doctrine
⇢ Zend Framework
⇢ phpunit
⇢ PHPmd
⇢ nfephp
Sintomas de
apodrecimento
Rigidez
Fragilidade
Imobilidade
Viscosidade
Software ruim implica em políticas ruins
Janelas quebradas
O grande
redesign
Clean code
Estilo de desenvolvimento de software focado na leitura e
manutenção
Programming is the art of telling another human what one
wants the computer to do Donald Knuth
Por que
manutenção?
Ler código é a parte que mais consome tempo em manutenção
Manutenção consome 70% do custo de um software
Skills do Clean
Coder
Readability
!==
Complexity
Nomes
Se precisar olhar o código tem que trabalhar nos nomes
"And" ou "Or" comunicam múltiplas responsabilidades
Evite nomes com
⇢ Object
⇢ Thing
⇢ Manager
⇢ Component
⇢ Part
⇢ Entity
⇢ Item
Largura
Código largo é código belo
100% de correlação inversa com quantidade de símbolos
80 caracteres é o su ciente
Quebre computação em múltiplas linhas
$mean = array_sum($dataSet) / count($dataSet);
$varrianceSum = array_reduce($dataSet, function($accumulator, $entry) {
return $accumulator + pow($entry - $mean, 2);
}, 0);
$variance = $varianceSum / count($dataSet);
$standardDeviation = sqrt($variance);
Comentários
Para expressar código
Nomes dos autores
Explicar tradeo s
Comentários inúteis
/**
*
* @param $title The title of the CD
* @param $author The author of the CD
* @param $tracks The number of tracks of the CD
*
*/
public addCd($title, $author, int $tracks);
Funções
Argumentos booleanos
Mais de 3 argumentos é difícil justi car
Classes
Metáfora do artigo
Evite
⇢ Elses
⇢ Código de erros
⇢ Libs desconhecidas
⇢ Getters e setters (Deméter)
⇢ Dependências bidirecionais
⇢ Dados e comportamento
⇢ Editar modelagem editar diagramas? (DRY)
SOLID
⇢ Single responsability principle (SRP)
⇢ Open close principle (OC)
⇢ Liskov substitution (LS)
⇢ Interface segregation (ISP)
⇢ Dependency inversion (DI)
Shapes Bad
Shapes Good
Calisthenics
⇢ Um nível de indentação
⇢ Não use o else
⇢ Guarde primitivas em objetos
⇢ Uma classe de coleção não deve ter outros atributos
⇢ Um ponto por linha
⇢ Sem abreviação
⇢ 50 linhas por aquivo 10 arquivos por diretórios
⇢ Nenhuma classe com mais de 2 variáveis de instância
⇢ Sem getters e setters
Disciplinas
Review de código
Programação em pares
Test driven development
Testes
TDD é um processo de design
Não se testa código se testa requisitos
Se uma escolha de design torna algo mais difícil de testar está
errado
Testes TEM que ser rápidos / Testes ruins podem te atrasar
Arquitetura
===
Intenção
KISS
Relatively simple things can tolerate a certain level of
disorganization. However, as complexity increases,
disorganization becomes suicidal. Robert Martin
YAGNI
Presumir adiciona complexidade desnecessária
Vai custar muito adicionar depois?
Não inclui o custo de fazer o software mais fácil de modi car
Ultimo momento responsável
Mais fácil com o tempo
Conclusão
Focar no 80% que não requer performance
Você é o especialista
Clean code não é sobre perfeição é sobre honestidade
Lei do escoteiro
Clean Code is a code that is written by someone who cares
Michael Feathers
Ferramentas
⇢ php styleguides
⇢ phpmd
⇢ phpcs
⇢ codacy
⇢ object-calisthenics/phpcs-calisthenics-rules
⇢ mamuz/php-dependency-analysis
⇢ pdepend
⇢ phpstan
⇢ phan/phan
Literatura
⇢ Clean code: A hand book of Agile Software craftsmanship;
Robert C. Martin
⇢ The pragmatical programmer; Andrew Hunt
⇢ Code Complete; Steve McConnell
⇢ Refactoring: Improving the Design of Existing Code;
⇢ Release It!: Design and Deploy Production-Ready Software;
Michael T. Nygard
Dúvidas?
Talk link: https://goo.gl/FKzgqn
Github: https://github.com/jeanCarloMachado
Twitter: https://twitter.com/JeanCarloMachad
E-mail: contato@jeancarlomachado.com.br

Mais conteúdo relacionado

Mais procurados

Critérios de avaliação de linguagens
Critérios de avaliação de linguagensCritérios de avaliação de linguagens
Critérios de avaliação de linguagensPaulo Muniz
 
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Letticia Nicoli
 
Introdução a BDD
Introdução a BDDIntrodução a BDD
Introdução a BDDIsmael
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...Joberto Diniz
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featuretdc-globalcode
 
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...tdc-globalcode
 
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
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
A culpa é de todos: reduzindo o "gap" entre Dev e Ops
A culpa é de todos: reduzindo o "gap" entre Dev e OpsA culpa é de todos: reduzindo o "gap" entre Dev e Ops
A culpa é de todos: reduzindo o "gap" entre Dev e OpsFlaudísio Tolentino
 
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
 
Processo de Desenvolvimento de Software - Programação
Processo de Desenvolvimento de Software - ProgramaçãoProcesso de Desenvolvimento de Software - Programação
Processo de Desenvolvimento de Software - ProgramaçãoNatanael Simões
 
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
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Gabriel Rubens
 
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
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 

Mais procurados (20)

Critérios de avaliação de linguagens
Critérios de avaliação de linguagensCritérios de avaliação de linguagens
Critérios de avaliação de linguagens
 
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
 
Introdução a BDD
Introdução a BDDIntrodução a BDD
Introdução a BDD
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Condingdojo
CondingdojoCondingdojo
Condingdojo
 
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
A Importância do Código Limpo na Perspectiva dos Desenvolvedores e Empresas d...
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
TDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e featureTDC2018SP | Trilha Arq .Net - Performance e feature
TDC2018SP | Trilha Arq .Net - Performance e feature
 
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
 
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)
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
A culpa é de todos: reduzindo o "gap" entre Dev e Ops
A culpa é de todos: reduzindo o "gap" entre Dev e OpsA culpa é de todos: reduzindo o "gap" entre Dev e Ops
A culpa é de todos: reduzindo o "gap" entre Dev e Ops
 
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
 
Processo de Desenvolvimento de Software - Programação
Processo de Desenvolvimento de Software - ProgramaçãoProcesso de Desenvolvimento de Software - Programação
Processo de Desenvolvimento de Software - Programação
 
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
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 
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?
 
Desenvolvimento BDD
Desenvolvimento BDDDesenvolvimento BDD
Desenvolvimento BDD
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 

Semelhante a Clean code v3

Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 
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
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDDLeonn Leite
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu códigoAna Claudia Nogueira
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedoresguitoper
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...Toni Esteves
 
Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013Gabriel Rubens
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Softwareguest2f8cba
 
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
 

Semelhante a Clean code v3 (20)

Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
clean code
clean codeclean code
clean code
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Clean Code
Clean CodeClean Code
Clean Code
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de Código
 
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
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Do legado ao DDD
Do legado ao DDDDo legado ao DDD
Do legado ao DDD
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu código
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedores
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
 
Introducao
IntroducaoIntroducao
Introducao
 
Clean code
Clean codeClean code
Clean code
 
Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Software
 
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
 

Mais de Jean Carlo Machado

Mais de Jean Carlo Machado (11)

Python clean code for data producs
Python clean code for data producsPython clean code for data producs
Python clean code for data producs
 
Domain Driven Design Made Functional with Python
Domain Driven Design Made Functional with Python Domain Driven Design Made Functional with Python
Domain Driven Design Made Functional with Python
 
Search microservice
Search microserviceSearch microservice
Search microservice
 
Git avançado
Git avançadoGit avançado
Git avançado
 
Functional php
Functional phpFunctional php
Functional php
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
 
Clean Code V2
Clean Code V2Clean Code V2
Clean Code V2
 
Review articles bio inspired algorithms
Review articles bio inspired algorithmsReview articles bio inspired algorithms
Review articles bio inspired algorithms
 
Introduction to Rust
Introduction to RustIntroduction to Rust
Introduction to Rust
 
Limitações do HTML no Desenvolvimento de Jogos Multiplataforma
Limitações do HTML no Desenvolvimento de Jogos MultiplataformaLimitações do HTML no Desenvolvimento de Jogos Multiplataforma
Limitações do HTML no Desenvolvimento de Jogos Multiplataforma
 
Clean code
Clean codeClean code
Clean code
 

Clean code v3