SlideShare a Scribd company logo
1 of 22
Clean Code




         Daniel Tamiosso
presentation based on Hendrik Ebel
Tópicos
O que é?
A motivação
Os objetivos
Escolhendo os nomes
Comentários
Métodos
Objetos e estrutura de dados
Tratamento de erros
Testes unitários
Arquitetura
Design
Programação em par
Maus cheiros
Como chegar lá?
O que é código limpo?
Uma questão...




      fácil manutenção                          cuidadoso
                                legível

                 elegante
                                              feito para o problema

                            sem duplicações
        eficiente
                                                    simples

... muitas respostas!
A motivação




O custo total para o proprietário de um código bagunçado
Como mensurar?
Os objetivos
Produzir um código melhor
Escrever código para humanos lerem
Reduzir a complexidade
Manter a manutenibilidade do código ao longo do tempo
Idealizar a produção de software como uma tarefa artesanal
Software não só para o cliente mas também para o
desenvolvedor
Uma lei escoteira: Deixar o local do acampamento, no mínimo,
mais limpo do que quando você o encontrou.
Escolhendo os nomes
Variáveis, métodos e classes devem responder as seguintes
perguntas:
       Por que isto existe? O que isto faz? Como isto é usado?
Se o nome escolhido requer um comentário, então o nome não está
revelando sua intenção.
Evite desinformação
Use uma nomenclatura de domínio
Se usou algum padrão de projeto, identifique-o
Prefira nomes pronunciáveis. Humanos são bons com palavras.
Evite o uso de encodings.
Evite a mesma palavra para dois conceitos distintos
Habilidades em dar nomes vão muito além do conhecimento técnico.
Faz parte da cultura do desenvolvedor. E realmente faz diferença.
Comentários
A principal proposta de um comentário é explanar um código que não
fala por si só
Não use um comentário quando você pode usar um método ou uma
variável
Comentários podem se tornar mentirosos
Mas, lembre-se: comentários muitas vezes são um mal necessário
Por que não comentar?
Representam sinais de “códigos sujos”. Tente reescrevê-lo antes!
Eles tendem a mentir.
Eles são sempre falhas de um código que não explanam sua
intenção.
Com certeza eles não vão melhorar seu código. Esqueça isso.
Onde jamais comentar
Fechando blocos de códigos
Marcando posições dentro do código fonte
Javadocs não público
Na forma HTML
Em redundância
      public Carro(){} // default constructor
Onde podemos comentar
API pública
Avisos para consequências (do tipo: execute-me somente se você
estiver muito tempo disponível!)
TODO “reais”
Comentários de origem legal
Métodos
A sua meta é contar um pedaço de uma estória do sistema
Sua maior lei é ser muito pequeno
E fazer SOMENTE uma coisa
O número ideal de argumentos é ZERO
O máximo é TRÊS
Evite argumentos ao estilo FLAG (booleanos)
Command And Query Separation
Objetos e estrutura de dados
 Use a mesma linguagem do domínio
 Ser apenas uma coisa. E ser mesmo essa coisa.
 Objetos devem esconder seus dados e expor operações
 Estrutura de dados devem expor os dados e não devem possuir
 operações significativas
Tratamento de erros
É um conceito a parte. Trate-o assim.
Use-as sempre exceções ao invés de códigos de retorno
Esqueça as exceções checadas. Use e abuse das não checadas
Nunca retorne NULL
       retorne uma exceção especial
       ou de preferência algo como Collections.emptyList()
Ah! E nunca passe NULL
       InvalidArgumentException ou assert
       Ou melhor: proíba a passagem de NULL como padrão
Testes unitários
Test Driven Development (TDD)
       Teste e código de produção são escritos juntos
       Os testes apenas alguns segundos antes
O código de teste é tão importante quanto código de produção
E devem ser tão limpos quanto eles
Um método de teste deve testar apenas uma coisa (um assert)
ou um conceito
  FIRST                     As três leis
          Fast               Você não deve escrever qualquer
          Independent        implementação antes que você tenha escrito
          Repeatable         um teste que falhe
          Self-Validation    Você não deve escrever mais que um teste
          Timely             unitário para demonstrar uma falha
                             Você não deve escrever mais do que o
                             necessário para passar por um teste que
                             está falhando
Arquitetura
Como a construção de uma cidade: incremental e modular
Big Design Up Front (BDUF) inibe a adaptabiliade do sistema e é
invasiva
       Normalmente resulta na frase: “Uma bazooka pra matar
       uma mosca”
Com isso temos muitas decisões pequenas ao invés de poucas e
arriscadíssimas decisões
As tecnologias devem aparecer por demanda. Jamais por
insegurança futura
Pode ser um padrão ou possuir uma bela API. Se ela não for
necessária, será extremamente danosa.
Assim como o código em geral, deve ser colaborativa.
Design
A melhor definição: emergente, nunca final
Simples. Lembre-se sempre
       SRP, DRY, OCP e Fluent Interfaces
       YAGNI - You Aren’t Gonna Need It
       Design Patterns
       Filosofia Unix
       Princípios de OO
Lei de Demeter
       Um método ou objeto deveria chamar apenas: ele
mesmo; qualquer composição, qualquer parâmetro passado e
qualquer objeto criado por ele
Expressivo e refatorado constante
Ah! Testes não mentem
Avalie dia-a-dia. Evite chegar a um ponto sem retorno.
Programação em Par




Após ajustados, os pares produzem código 15% mais lento que
          um desenvolvedor de forma individual...
Programação em Par




   ... mas com 15% a menos de defeitos.
Maus cheiros
Comentários obsoletos e redundantes
Builds com mais de um passo e duração maior que 10 minutos
Testes que requerem mais que um passo
Muitos argumentos e argumentos booleanos
Métodos esquecidos e métodos que fazem tudo
Muitos idiomas em um código fonte
Duplicação
Nomes que não representam intenção
Polimorfismo é deixado de lado por If/Else e Switch/Case
Números mágicos e condicionais negativos
Longas listas de imports e variáveis de instância
Constantes ao invés de enumerações
Testes insuficientes (não fuja dos testes triviais)
Como chegar lá?
1. Torne escrever código limpo parte do seu processo pessoal.
           Atenção contínua para uma excelência técnica em um
           bom desing melhoram a agilidade da equipe.
2. Aprenda como escrever código limpo.
           Escrever código limpo é como realizar qualquer outro
           tipo de trabalho. Requer prática, criticismo e mais
prática.
3. Valorize código limpo.
Finalizando
“Complexity kills. It sucks the life out of developers, it
makes products difficult to plan, build and test...
Each of us should ... explore and embrace techniques
to reduce complexity” Ray Ozzie, Chief Technology Officer,
Microsoft Corporation



                          Clean code por Robert C. Martin Series

More Related Content

What's hot

Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfAntonio Maniero
 
Test-driven development & Mocking
Test-driven development & MockingTest-driven development & Mocking
Test-driven development & MockingDaniel Tamiosso
 
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
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETAlessandro Binhara
 
Sete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De SucessoSete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De SucessoPlaneta Código
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareivanassisleal
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoRenan Carvalho
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Iure Guimaraes
 
Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Alex Tercete
 
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
 

What's hot (20)

Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Qualidade de Código
Qualidade de CódigoQualidade de Código
Qualidade de Código
 
Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConf
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Test-driven development & Mocking
Test-driven development & MockingTest-driven development & Mocking
Test-driven development & Mocking
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
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
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
Porque PHP?
Porque PHP?Porque PHP?
Porque PHP?
 
PHP Anti Patterns
PHP Anti PatternsPHP Anti Patterns
PHP Anti Patterns
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Sete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De SucessoSete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De Sucesso
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu código
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )
 
Mantendo o código saudável
Mantendo o código saudávelMantendo o código saudável
Mantendo o código saudável
 
Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?
 
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
 

Viewers also liked

At 0900019700
At 0900019700At 0900019700
At 0900019700rgooden77
 
Jornada CÚbicS: Social TV: People, Devices and Networks - Marie-José Montpetit
Jornada CÚbicS: Social TV: People, Devices and Networks - Marie-José MontpetitJornada CÚbicS: Social TV: People, Devices and Networks - Marie-José Montpetit
Jornada CÚbicS: Social TV: People, Devices and Networks - Marie-José MontpetitCREA CCMA
 
Revista febrero 2012
Revista febrero 2012Revista febrero 2012
Revista febrero 2012catpress
 
Proyecto formativo
Proyecto formativoProyecto formativo
Proyecto formativojhonfospino
 
Mobile First Will Not Be Enough | Forrester at Mobile Convention Paris
Mobile First Will Not Be Enough | Forrester at Mobile Convention ParisMobile First Will Not Be Enough | Forrester at Mobile Convention Paris
Mobile First Will Not Be Enough | Forrester at Mobile Convention ParisMobile Convention
 
Budoucnost vzdělávání v 21. století
Budoucnost vzdělávání v 21. stoletíBudoucnost vzdělávání v 21. století
Budoucnost vzdělávání v 21. stoletíBorivoj Brdicka
 
Arxoti eng
Arxoti engArxoti eng
Arxoti engpaianiki
 
Guía y Recetario Vegetarianos
Guía y Recetario VegetarianosGuía y Recetario Vegetarianos
Guía y Recetario VegetarianosDaniel Grajeda
 
Virtual reality with glove one – enabling technology
Virtual reality with glove one – enabling technologyVirtual reality with glove one – enabling technology
Virtual reality with glove one – enabling technologyAshwin Ananthapadmanabhan
 
Unlocking App Success: How to Turn Your App Into a Mobile Growth Engine
Unlocking App Success: How to Turn Your App Into a Mobile Growth EngineUnlocking App Success: How to Turn Your App Into a Mobile Growth Engine
Unlocking App Success: How to Turn Your App Into a Mobile Growth EngineLocalytics
 
Trabajo social de grupos
Trabajo social de gruposTrabajo social de grupos
Trabajo social de gruposClaudio Red's
 

Viewers also liked (20)

Vision compartida [modificado]
Vision compartida [modificado]Vision compartida [modificado]
Vision compartida [modificado]
 
At 0900019700
At 0900019700At 0900019700
At 0900019700
 
Jornada CÚbicS: Social TV: People, Devices and Networks - Marie-José Montpetit
Jornada CÚbicS: Social TV: People, Devices and Networks - Marie-José MontpetitJornada CÚbicS: Social TV: People, Devices and Networks - Marie-José Montpetit
Jornada CÚbicS: Social TV: People, Devices and Networks - Marie-José Montpetit
 
Revista febrero 2012
Revista febrero 2012Revista febrero 2012
Revista febrero 2012
 
Apoyos Fiscales Abril 1
Apoyos Fiscales Abril 1Apoyos Fiscales Abril 1
Apoyos Fiscales Abril 1
 
Proyecto formativo
Proyecto formativoProyecto formativo
Proyecto formativo
 
Bondia.cat 31/12/2013
Bondia.cat 31/12/2013Bondia.cat 31/12/2013
Bondia.cat 31/12/2013
 
Mobile First Will Not Be Enough | Forrester at Mobile Convention Paris
Mobile First Will Not Be Enough | Forrester at Mobile Convention ParisMobile First Will Not Be Enough | Forrester at Mobile Convention Paris
Mobile First Will Not Be Enough | Forrester at Mobile Convention Paris
 
Paris underground
Paris undergroundParis underground
Paris underground
 
BonDia Lleida 24112011
BonDia Lleida 24112011BonDia Lleida 24112011
BonDia Lleida 24112011
 
Budoucnost vzdělávání v 21. století
Budoucnost vzdělávání v 21. stoletíBudoucnost vzdělávání v 21. století
Budoucnost vzdělávání v 21. století
 
Clave konecta-5
Clave konecta-5Clave konecta-5
Clave konecta-5
 
Greslar Ceramic Rustic Catalog
Greslar Ceramic Rustic CatalogGreslar Ceramic Rustic Catalog
Greslar Ceramic Rustic Catalog
 
Singular plural
Singular pluralSingular plural
Singular plural
 
Arxoti eng
Arxoti engArxoti eng
Arxoti eng
 
Guía y Recetario Vegetarianos
Guía y Recetario VegetarianosGuía y Recetario Vegetarianos
Guía y Recetario Vegetarianos
 
Virtual reality with glove one – enabling technology
Virtual reality with glove one – enabling technologyVirtual reality with glove one – enabling technology
Virtual reality with glove one – enabling technology
 
Unlocking App Success: How to Turn Your App Into a Mobile Growth Engine
Unlocking App Success: How to Turn Your App Into a Mobile Growth EngineUnlocking App Success: How to Turn Your App Into a Mobile Growth Engine
Unlocking App Success: How to Turn Your App Into a Mobile Growth Engine
 
Escabiasis
EscabiasisEscabiasis
Escabiasis
 
Trabajo social de grupos
Trabajo social de gruposTrabajo social de grupos
Trabajo social de grupos
 

Similar to Clean Code: Princípios e Tópicos Essenciais

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
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilBruno Eustáquio
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Gabriel Rubens
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 RefactoringWildtech
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
#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
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoTiago Bencardino
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agileAlini Rebonatto
 
// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018
// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018
// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018Tchelinux
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
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
 
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 (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 

Similar to Clean Code: Princípios e Tópicos Essenciais (20)

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
 
TDD
TDDTDD
TDD
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Php Conf08 Refactoring
Php Conf08 RefactoringPhp Conf08 Refactoring
Php Conf08 Refactoring
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Clean code
Clean codeClean code
Clean code
 
#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
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpo
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018
// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018
// Não comente seu código, ... - Márcio Torres - Tchelinux Pelotas 2018
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
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
 
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
 
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
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 

Clean Code: Princípios e Tópicos Essenciais

  • 1. Clean Code Daniel Tamiosso presentation based on Hendrik Ebel
  • 2. Tópicos O que é? A motivação Os objetivos Escolhendo os nomes Comentários Métodos Objetos e estrutura de dados Tratamento de erros Testes unitários Arquitetura Design Programação em par Maus cheiros Como chegar lá?
  • 3. O que é código limpo? Uma questão... fácil manutenção cuidadoso legível elegante feito para o problema sem duplicações eficiente simples ... muitas respostas!
  • 4. A motivação O custo total para o proprietário de um código bagunçado
  • 6. Os objetivos Produzir um código melhor Escrever código para humanos lerem Reduzir a complexidade Manter a manutenibilidade do código ao longo do tempo Idealizar a produção de software como uma tarefa artesanal Software não só para o cliente mas também para o desenvolvedor Uma lei escoteira: Deixar o local do acampamento, no mínimo, mais limpo do que quando você o encontrou.
  • 7. Escolhendo os nomes Variáveis, métodos e classes devem responder as seguintes perguntas: Por que isto existe? O que isto faz? Como isto é usado? Se o nome escolhido requer um comentário, então o nome não está revelando sua intenção. Evite desinformação Use uma nomenclatura de domínio Se usou algum padrão de projeto, identifique-o Prefira nomes pronunciáveis. Humanos são bons com palavras. Evite o uso de encodings. Evite a mesma palavra para dois conceitos distintos Habilidades em dar nomes vão muito além do conhecimento técnico. Faz parte da cultura do desenvolvedor. E realmente faz diferença.
  • 8. Comentários A principal proposta de um comentário é explanar um código que não fala por si só Não use um comentário quando você pode usar um método ou uma variável Comentários podem se tornar mentirosos Mas, lembre-se: comentários muitas vezes são um mal necessário
  • 9. Por que não comentar? Representam sinais de “códigos sujos”. Tente reescrevê-lo antes! Eles tendem a mentir. Eles são sempre falhas de um código que não explanam sua intenção. Com certeza eles não vão melhorar seu código. Esqueça isso.
  • 10. Onde jamais comentar Fechando blocos de códigos Marcando posições dentro do código fonte Javadocs não público Na forma HTML Em redundância public Carro(){} // default constructor
  • 11. Onde podemos comentar API pública Avisos para consequências (do tipo: execute-me somente se você estiver muito tempo disponível!) TODO “reais” Comentários de origem legal
  • 12. Métodos A sua meta é contar um pedaço de uma estória do sistema Sua maior lei é ser muito pequeno E fazer SOMENTE uma coisa O número ideal de argumentos é ZERO O máximo é TRÊS Evite argumentos ao estilo FLAG (booleanos) Command And Query Separation
  • 13. Objetos e estrutura de dados Use a mesma linguagem do domínio Ser apenas uma coisa. E ser mesmo essa coisa. Objetos devem esconder seus dados e expor operações Estrutura de dados devem expor os dados e não devem possuir operações significativas
  • 14. Tratamento de erros É um conceito a parte. Trate-o assim. Use-as sempre exceções ao invés de códigos de retorno Esqueça as exceções checadas. Use e abuse das não checadas Nunca retorne NULL retorne uma exceção especial ou de preferência algo como Collections.emptyList() Ah! E nunca passe NULL InvalidArgumentException ou assert Ou melhor: proíba a passagem de NULL como padrão
  • 15. Testes unitários Test Driven Development (TDD) Teste e código de produção são escritos juntos Os testes apenas alguns segundos antes O código de teste é tão importante quanto código de produção E devem ser tão limpos quanto eles Um método de teste deve testar apenas uma coisa (um assert) ou um conceito FIRST As três leis Fast Você não deve escrever qualquer Independent implementação antes que você tenha escrito Repeatable um teste que falhe Self-Validation Você não deve escrever mais que um teste Timely unitário para demonstrar uma falha Você não deve escrever mais do que o necessário para passar por um teste que está falhando
  • 16. Arquitetura Como a construção de uma cidade: incremental e modular Big Design Up Front (BDUF) inibe a adaptabiliade do sistema e é invasiva Normalmente resulta na frase: “Uma bazooka pra matar uma mosca” Com isso temos muitas decisões pequenas ao invés de poucas e arriscadíssimas decisões As tecnologias devem aparecer por demanda. Jamais por insegurança futura Pode ser um padrão ou possuir uma bela API. Se ela não for necessária, será extremamente danosa. Assim como o código em geral, deve ser colaborativa.
  • 17. Design A melhor definição: emergente, nunca final Simples. Lembre-se sempre SRP, DRY, OCP e Fluent Interfaces YAGNI - You Aren’t Gonna Need It Design Patterns Filosofia Unix Princípios de OO Lei de Demeter Um método ou objeto deveria chamar apenas: ele mesmo; qualquer composição, qualquer parâmetro passado e qualquer objeto criado por ele Expressivo e refatorado constante Ah! Testes não mentem Avalie dia-a-dia. Evite chegar a um ponto sem retorno.
  • 18. Programação em Par Após ajustados, os pares produzem código 15% mais lento que um desenvolvedor de forma individual...
  • 19. Programação em Par ... mas com 15% a menos de defeitos.
  • 20. Maus cheiros Comentários obsoletos e redundantes Builds com mais de um passo e duração maior que 10 minutos Testes que requerem mais que um passo Muitos argumentos e argumentos booleanos Métodos esquecidos e métodos que fazem tudo Muitos idiomas em um código fonte Duplicação Nomes que não representam intenção Polimorfismo é deixado de lado por If/Else e Switch/Case Números mágicos e condicionais negativos Longas listas de imports e variáveis de instância Constantes ao invés de enumerações Testes insuficientes (não fuja dos testes triviais)
  • 21. Como chegar lá? 1. Torne escrever código limpo parte do seu processo pessoal. Atenção contínua para uma excelência técnica em um bom desing melhoram a agilidade da equipe. 2. Aprenda como escrever código limpo. Escrever código limpo é como realizar qualquer outro tipo de trabalho. Requer prática, criticismo e mais prática. 3. Valorize código limpo.
  • 22. Finalizando “Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test... Each of us should ... explore and embrace techniques to reduce complexity” Ray Ozzie, Chief Technology Officer, Microsoft Corporation Clean code por Robert C. Martin Series