SlideShare uma empresa Scribd logo
1 de 110
CLEAN CODE
 Frescura ou necessidade?


       Thiago Faria
        @ThiagoFAndrade
        www.algaworks.com
Está cheio de lambanças
        por aí...
Merece um 10
           http://www.flickr.com/photos/ricksphotos101/3510477227/
Merece um 10
           http://www.flickr.com/photos/ricksphotos101/3510477227/
Boa ideia!
             http://www.flickr.com/photos/kwramsauer/2787249358/
Boa ideia!
             http://www.flickr.com/photos/kwramsauer/2787249358/
Parabéns!




http://www.flickr.com/photos/william_veerbeek/3875437689/
Parabéns!




http://www.flickr.com/photos/william_veerbeek/3875437689/
OMFG!




        http://www.flickr.com/photos/officeglen/83359172/
OMFG!




        http://www.flickr.com/photos/officeglen/83359172/
OMFG!




        http://www.flickr.com/photos/officeglen/83359172/
E nós, programadores?




     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
E nós, programadores?




     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
E nós, programadores?




     http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
Clean Code - Frescura ou necessidade?
Clean Code - Frescura ou necessidade?
Java Programmer



                                                                Web Designer




UI Programmer




                Como você quer ser
                   lembrado?      http://www.flickr.com/photos/rajthesnapper/2418728391/
Porque priorizamos apenas
   código que funciona?
Clean Code - Frescura ou necessidade?
• Cronogramas apertados
• Cronogramas apertados
• Usuários com necessidades urgentes
• Cronogramas apertados
• Usuários com necessidades urgentes
• Pressão do gerente
• Cronogramas apertados
• Usuários com necessidades urgentes
• Pressão do gerente
• “Quero mostrar que sou produtivo”
Código ruim custa caro
                 http://www.flickr.com/photos/amagill/3366720659/
Código ruim custa caro
                 http://www.flickr.com/photos/amagill/3366720659/
Código ruim dá preguiça
            http://spirithalloween.com/images/spirit/products/processed/00593418.detail.a.jpg
Código ruim gera frustração
                    http://www.flickr.com/photos/zachklein/54389823/
Código ruim precisa de
 muitos, mas muitos
      remendos


                   http://www.pinbax.com/items/4566.jpg
Código ruim precisa de
 muitos, mas muitos
      remendos


                   http://www.pinbax.com/items/4566.jpg
Código ruim gera lentidão
       (baixa produtividade)




                               http://www.flickr.com/photos/johnlamb/2576062549/
Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
Produtividade vs Tempo
                100




                 75
Produtividade




                 50




                 25




                  0




                      Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
Produtividade vs Tempo
                100




                 75
Produtividade




                 50




                 25




                  0




                      Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
Produtividade vs Tempo
                100




                 75




                                                                                                         ?
Produtividade




                 50




                 25




                  0




                      Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
http://www.flickr.com/photos/michigancommunities/5169810229/
O que podemos fazer para
melhorar nossa produtividade?




          http://www.flickr.com/photos/michigancommunities/5169810229/
Coloque mais
  pressão!
                O que podemos fazer para
               melhorar nossa produtividade?




                         http://www.flickr.com/photos/michigancommunities/5169810229/
Coloque mais
  pressão!
                O que podemos fazer para
               melhorar nossa produtividade?




                  Vamos contratar
                   mais pessoas...




                         http://www.flickr.com/photos/michigancommunities/5169810229/
http://www.flickr.com/photos/worldofoddy/757149070/
Mais pessoas para ajudar a
    fazer código sujo




            http://www.flickr.com/photos/worldofoddy/757149070/
Código ruim pode matar
      um projeto




 http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
Código ruim pode matar
      um projeto




 http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
Código ruim pode destruir
      uma empresa http://www.flickr.com/photos/penguincakes/4074411788/
Tem gente que acha que código ruim

pode acabar com o mundo!
                          http://good-wallpapers.com/pictures/3632/End%20of%20the%20World.jpg
A culpa é nossa
  http://www.artsjournal.com/aboutlastnight/pointing-finger.jpg
Sintomas de código ruim
Inflexível




http://infosurhoy.com/cocoon/saii/images/2012/06/08/photo4D.jpg
Frágil
http://www.flickr.com/photos/ocreactive/2280732355/
Inseparável



http://www.flickr.com/photos/momono/4459805690/
Opaco



http://www.flickr.com/photos/avlxyz/5432778291/
http://commadot.com/wp-content/uploads/2009/02/wtf.png
O que é código limpo?




Bjarne Stroustrup                     Grady Booch                        Michael Feathers                    Ward Cunningham
  Inventor do C++             Autor de importantes livros sobre         Escritor e agile coacher          Criador da Wiki, co-criador da
                                 OO e co-criador da UML                                                    eXtreme Programming, etc




    http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
             DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
O que é código limpo?
Elegante e eficiente.
 Código limpo faz
  bem uma coisa.




        Bjarne Stroustrup                     Grady Booch                        Michael Feathers                    Ward Cunningham
          Inventor do C++             Autor de importantes livros sobre         Escritor e agile coacher          Criador da Wiki, co-criador da
                                         OO e co-criador da UML                                                    eXtreme Programming, etc




            http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
                     DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
O que é código limpo?
Elegante e eficiente.              Simples e direto.
 Código limpo faz                Pode ser lido como
  bem uma coisa.                   uma conversa.




        Bjarne Stroustrup                     Grady Booch                        Michael Feathers                    Ward Cunningham
          Inventor do C++             Autor de importantes livros sobre         Escritor e agile coacher          Criador da Wiki, co-criador da
                                         OO e co-criador da UML                                                    eXtreme Programming, etc




            http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
                     DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
O que é código limpo?
Elegante e eficiente.              Simples e direto.                           Parece ter sido
 Código limpo faz                Pode ser lido como                         escrito por alguém
  bem uma coisa.                   uma conversa.                             que se importa.




        Bjarne Stroustrup                     Grady Booch                        Michael Feathers                    Ward Cunningham
          Inventor do C++             Autor de importantes livros sobre         Escritor e agile coacher          Criador da Wiki, co-criador da
                                         OO e co-criador da UML                                                    eXtreme Programming, etc




            http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
                     DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
O que é código limpo?
Elegante e eficiente.              Simples e direto.                           Parece ter sido                           Cada rotina que
 Código limpo faz                Pode ser lido como                         escrito por alguém                          você lê faz o que
  bem uma coisa.                   uma conversa.                             que se importa.                              você espera.




        Bjarne Stroustrup                     Grady Booch                        Michael Feathers                    Ward Cunningham
          Inventor do C++             Autor de importantes livros sobre         Escritor e agile coacher          Criador da Wiki, co-criador da
                                         OO e co-criador da UML                                                    eXtreme Programming, etc




            http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5-
                     DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
A regra do escoteiro




“   Sempre deixe a área de acampamento mais


                                                               ”
               limpa que já estava.
                                        — Robert Stephenson Smyth Baden-Powell




             http://www.flickr.com/photos/zoovroo/2751792596/
A regra do escoteiro




  “   Sempre deixe a área de acampamento mais


                                                                 ”
                 limpa que já estava.
                                          — Robert Stephenson Smyth Baden-Powell




Sempre deixe um código mais limpo que já estava.

               http://www.flickr.com/photos/zoovroo/2751792596/
Algumas técnicas
     by Uncle Bob
Nomes significativos
   • Revelam a intenção
   • Devem ser pronunciáveis
   • Fácil de pesquisar
   • Evite nomes confusos
int d; // tempo gasto em dias
Não revela sua intenção

int d; // tempo gasto em dias

        Se precisa de um comentário para
          explicar isso, algo está errado!
Não revela sua intenção

int d; // tempo gasto em dias

        Se precisa de um comentário para
          explicar isso, algo está errado!


int tempoGastoEmDias;
class Processar
Nomes de classes não
                   devem ser verbos
class Processar
Nomes de classes não
                     devem ser verbos
class Processar



class Processador      Processador de que?
Nomes de classes não
                     devem ser verbos
class Processar



class Processador      Processador de que?



class ProcessadorDeRelatorio
class Fornecedor {
   public void pagamento() {
Nomes de métodos devem ser
                           verbos
class Fornecedor {
   public void pagamento() {
Nomes de métodos devem ser
                           verbos
class Fornecedor {
   public void pagamento() {


class Fornecedor {
   public void pagar() {
class PedComp {
   private Date prvEnt;
}
Difícil de ler, entender e pronunciar
class PedComp {
   private Date prvEnt;
}
Difícil de ler, entender e pronunciar
class PedComp {
   private Date prvEnt;
}

class PedidoCompra {
   private Date dataPrevisaoEntrega;
}
for (int i = 0; i < 10; i++) {
   t[i] += p[i];
}
Confuso e difícil de pesquisar


for (int i = 0; i < 10; i++) {
   t[i] += p[i];
}
Confuso e difícil de pesquisar


for (int i = 0; i < 10; i++) {
   t[i] += p[i];
}

for (int i = 0; i < 10; i++) {
   totais[i] += precos[i];
}
Funções
• Devem ser pequenas
• Menores do que você imaginou
• Devem fazer apenas uma coisa
• Nível de identação não deve ser maior que 2
• Sem parâmetros é melhor, 2 é bom, evite 3
• Don’t Repeat Yourself (DRY)
public boolean validarSenha(String nomeUsuario, String senha) {
   ...
   if (usuario.getSenhaAtual().equals(senha) {
       return true;
   }
   usuario.bloquear();
   return false;
}
public boolean validarSenha(String nomeUsuario, String senha) {
   ...
   if (usuario.getSenhaAtual().equals(senha) {
       return true;
   }
   usuario.bloquear();
   return false;
}

               Métodos não devem ter efeitos
                        colaterais
void cadastrar(String nome, String email, int idade, double peso) {
   ...
}
Muitos parâmetros!

void cadastrar(String nome, String email, int idade, double peso) {
   ...
}
Muitos parâmetros!

void cadastrar(String nome, String email, int idade, double peso) {
   ...
}



void cadastrar(Paciente paciente) {
   ...
}
Comentários

• São úteis se forem colocados nos lugares certos
• Comentários não são atualizados, e por isso mentem e
    não são confiáveis
•   Comentários não fazem código ruim ficar melhor
// verifica se conta está usando cheque especial
if (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
// verifica se conta está usando cheque especial
if (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {




           Explique-se com código

if (conta.estaUsandoChequeEspecial()) {
/**
  * Construtor da classe.
  */
public Lancamento() {
}
Sério?
/**
  * Construtor da classe.
  */
public Lancamento() {
}
Sério?
/**
  * Construtor da classe.
  */
public Lancamento() {
}

                   Ahhh tá! Achei que era o
/**
 * Dia do mês.         dia do século...
 */
private int diaDoMes;
Clean Code - Frescura ou necessidade?
Holy shit!
try {
   while (...) {
      System.out.println(...);
   } // while
} // try
catch (SQLException e) {
   e.printStackTrace();
} // catch
finally {
   conexao.close();
} // finally
Clean Code - Frescura ou necessidade?
Use controle de versão
try {
   while (...) {
      // adicionado por João das Couves
      System.out.println(...);
   }
} catch (SQLException e) {
   // Autora: Maria Abadia
   e.printStackTrace();
} finally {
   // Fechando a conexão (Sebastião)
   conexao.close();
}
Formatação
• Classes menores são mais fáceis de entender
• Conceitos relacionados devem ficar próximos
• Sempre idente bem o código
• Limite o tamanho de uma linha (sugestão de 120
    caracteres)
•   Combine um estilo de formatação entre a equipe
class Produto {
   private int          codigo;
   private Fornecedor   fornecedor;
   private String       descricao;
   private Date         dataUltimaCompra;
}
class Produto {
   private int          codigo;
   private Fornecedor   fornecedor;
   private String       descricao;
   private Date         dataUltimaCompra;
}
class Produto {
   private int          codigo;
   private Fornecedor   fornecedor;
   private String       descricao;
   private Date         dataUltimaCompra;
}



class Produto {
   private int codigo;
   private Fornecedor fornecedor;
   private String descricao;
   private Date dataUltimaCompra;
}
public double calcular(int a,int b,int c){
  double total=numero+(valor*outroValor);
Use espaços entre operadores,
                      parâmetros e vírgulas

public double calcular(int a,int b,int c){
  double total=numero+(valor*outroValor);
Use espaços entre operadores,
                      parâmetros e vírgulas

public double calcular(int a,int b,int c){
  double total=numero+(valor*outroValor);




public double calcular(int a, int b, int c) {
  double total = numero + (valor * outroValor);
Exceções
• Lance exceções ao invés de retornar código de erro
• Crie exceções com informações sobre o erro
• Evite criar métodos que retornam null
• Não passe null como parâmetro
Cliente cliente = repositorioClientes.buscarPorCodigo(10);
if (cliente != null) {
   notificarPendencia(cliente.getEmail());
}
Parece bom...

Cliente cliente = repositorioClientes.buscarPorCodigo(10);
if (cliente != null) {
   notificarPendencia(cliente.getEmail());
}
Parece bom...

Cliente cliente = repositorioClientes.buscarPorCodigo(10);
if (cliente != null) {
   notificarPendencia(cliente.getEmail());
}


                Mas pode ficar melhor, se o método lançar
                    exceção ao invés de retornar null

Cliente cliente = repositorioClientes.buscarPorCodigo(10);
notificarPendencia(cliente.getEmail());
Testes unitários


• Considere usar TDD
• Mantenha os testes limpos
Classes
• Organize as declarações de variáveis e métodos
• Classes devem ser pequenas
• Princípio da Responsabilidade Única - SRP
class Cliente {
   void cadastrar()
   void emitirNotaFiscal()
}
Muitas responsabilidades

class Cliente {
   void cadastrar()
   void emitirNotaFiscal()
}
Muitas responsabilidades

class Cliente {
   void cadastrar()
   void emitirNotaFiscal()
}




class Cliente {
   void cadastrar()
}

class NotaFiscal {
   void emitir()
}
www.cleancoders.com
GRACIAS.

 Thiago Faria
  @ThiagoFAndrade
  www.algaworks.com

Mais conteúdo relacionado

Mais procurados

Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean CodeAndré Leoni
 
tdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdftdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdfDouglas Siviotti
 
[Curso Java Basico] Aula 17: Loop for
[Curso Java Basico] Aula 17:  Loop for[Curso Java Basico] Aula 17:  Loop for
[Curso Java Basico] Aula 17: Loop forLoiane Groner
 
Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Yasser Veleda
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e PráticaEduardo Pires
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsRodrigo Kono
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean ArchitectureRoc Boronat
 
Anatomia Textfielda - F/UKS/UJ #1
Anatomia Textfielda - F/UKS/UJ #1Anatomia Textfielda - F/UKS/UJ #1
Anatomia Textfielda - F/UKS/UJ #1Piotr Stanisławski
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutantStanislas Chollet
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
MVVM - Model View ViewModel
MVVM - Model View ViewModelMVVM - Model View ViewModel
MVVM - Model View ViewModelDareen Alhiyari
 
Python 테스트 시작하기
Python 테스트 시작하기Python 테스트 시작하기
Python 테스트 시작하기Hosung Lee
 
Arquitetura de Microserviços
Arquitetura de MicroserviçosArquitetura de Microserviços
Arquitetura de MicroserviçosNorberto Enomoto
 

Mais procurados (20)

Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean Code
 
tdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdftdc-2022-poa-quem-tem-medo-low-code.pdf
tdc-2022-poa-quem-tem-medo-low-code.pdf
 
[Curso Java Basico] Aula 17: Loop for
[Curso Java Basico] Aula 17:  Loop for[Curso Java Basico] Aula 17:  Loop for
[Curso Java Basico] Aula 17: Loop for
 
Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Java script aula 04 - objeto array
Java script   aula 04 - objeto arrayJava script   aula 04 - objeto array
Java script aula 04 - objeto array
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-Patterns
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean Architecture
 
Anatomia Textfielda - F/UKS/UJ #1
Anatomia Textfielda - F/UKS/UJ #1Anatomia Textfielda - F/UKS/UJ #1
Anatomia Textfielda - F/UKS/UJ #1
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
Aula02 - JavaScript
Aula02 - JavaScriptAula02 - JavaScript
Aula02 - JavaScript
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
Présentation jQuery pour débutant
Présentation jQuery pour débutantPrésentation jQuery pour débutant
Présentation jQuery pour débutant
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
MVVM - Model View ViewModel
MVVM - Model View ViewModelMVVM - Model View ViewModel
MVVM - Model View ViewModel
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Python 테스트 시작하기
Python 테스트 시작하기Python 테스트 시작하기
Python 테스트 시작하기
 
Arquitetura de Microserviços
Arquitetura de MicroserviçosArquitetura de Microserviços
Arquitetura de Microserviços
 

Semelhante a Clean Code - Frescura ou necessidade?

Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Mozart Diniz
 
Receita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front EndReceita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front EndLeonardo Balter
 
Rápido ou Ágil? (AgileBrazil 2010)
Rápido ou Ágil? (AgileBrazil 2010)Rápido ou Ágil? (AgileBrazil 2010)
Rápido ou Ágil? (AgileBrazil 2010)Giovanni Bassi
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployGiovanni Bassi
 
Montagem de Microcomputador
Montagem de MicrocomputadorMontagem de Microcomputador
Montagem de Microcomputadorguest48cce33
 
Montagem de Microcomputador
Montagem de MicrocomputadorMontagem de Microcomputador
Montagem de Microcomputadorguest48cce33
 
Quero ser programador! #comofas?
Quero ser programador! #comofas?Quero ser programador! #comofas?
Quero ser programador! #comofas?Hugo Lopes Tavares
 
Integração e entrega contínua de produtos? Que venha o eXtreme Programming!
Integração e entrega contínua de produtos? Que venha o eXtreme Programming!Integração e entrega contínua de produtos? Que venha o eXtreme Programming!
Integração e entrega contínua de produtos? Que venha o eXtreme Programming!Daniel Wildt
 
Engenharia De Software e O Software Livre
Engenharia De Software e O Software LivreEngenharia De Software e O Software Livre
Engenharia De Software e O Software LivreFabio Sperotto
 
Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...
Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...
Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...Embarcados
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com pythonBruno Rocha
 
Ux for Developers - Build Better Products
Ux for Developers - Build Better ProductsUx for Developers - Build Better Products
Ux for Developers - Build Better ProductsPedro Marques
 
Wireframes para sites e projetos de multimídia
Wireframes para sites e projetos de multimídiaWireframes para sites e projetos de multimídia
Wireframes para sites e projetos de multimídiaTersis Zonato
 
Desafios na globo.com (reloaded)
Desafios na globo.com (reloaded)Desafios na globo.com (reloaded)
Desafios na globo.com (reloaded)Klaus Peter Laube
 
Continuous Delivery com ArgoCD
Continuous Delivery com ArgoCDContinuous Delivery com ArgoCD
Continuous Delivery com ArgoCDRodrigo Souza
 
Empreender em IoT no Brasil - desafios e oportunidades.
Empreender em IoT no Brasil - desafios e oportunidades.Empreender em IoT no Brasil - desafios e oportunidades.
Empreender em IoT no Brasil - desafios e oportunidades.Embarcados
 

Semelhante a Clean Code - Frescura ou necessidade? (20)

Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
Receita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front EndReceita do Sucesso no Mercado Front End
Receita do Sucesso no Mercado Front End
 
Rápido ou Ágil? (AgileBrazil 2010)
Rápido ou Ágil? (AgileBrazil 2010)Rápido ou Ágil? (AgileBrazil 2010)
Rápido ou Ágil? (AgileBrazil 2010)
 
Engenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deployEngenharia ágil de ponta a ponta do clone ao deploy
Engenharia ágil de ponta a ponta do clone ao deploy
 
Montagem de Microcomputador
Montagem de MicrocomputadorMontagem de Microcomputador
Montagem de Microcomputador
 
Montagem de Microcomputador
Montagem de MicrocomputadorMontagem de Microcomputador
Montagem de Microcomputador
 
Web (design+developer)
Web (design+developer)Web (design+developer)
Web (design+developer)
 
Quero ser programador! #comofas?
Quero ser programador! #comofas?Quero ser programador! #comofas?
Quero ser programador! #comofas?
 
Integração e entrega contínua de produtos? Que venha o eXtreme Programming!
Integração e entrega contínua de produtos? Que venha o eXtreme Programming!Integração e entrega contínua de produtos? Que venha o eXtreme Programming!
Integração e entrega contínua de produtos? Que venha o eXtreme Programming!
 
Engenharia De Software e O Software Livre
Engenharia De Software e O Software LivreEngenharia De Software e O Software Livre
Engenharia De Software e O Software Livre
 
Ionic workshop
Ionic workshopIonic workshop
Ionic workshop
 
Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...
Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...
Tecnologias Disruptivas - Sistemas Embarcados - IoT - Inteligencia Artificial...
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
Ux for Developers - Build Better Products
Ux for Developers - Build Better ProductsUx for Developers - Build Better Products
Ux for Developers - Build Better Products
 
Wireframes para sites e projetos de multimídia
Wireframes para sites e projetos de multimídiaWireframes para sites e projetos de multimídia
Wireframes para sites e projetos de multimídia
 
Desafios na globo.com (reloaded)
Desafios na globo.com (reloaded)Desafios na globo.com (reloaded)
Desafios na globo.com (reloaded)
 
Continuous Delivery com ArgoCD
Continuous Delivery com ArgoCDContinuous Delivery com ArgoCD
Continuous Delivery com ArgoCD
 
O que é código bonito?
O que é código bonito?O que é código bonito?
O que é código bonito?
 
Empreender em IoT no Brasil - desafios e oportunidades.
Empreender em IoT no Brasil - desafios e oportunidades.Empreender em IoT no Brasil - desafios e oportunidades.
Empreender em IoT no Brasil - desafios e oportunidades.
 
Divida tecnica
Divida tecnicaDivida tecnica
Divida tecnica
 

Mais de Thiago Faria de Andrade

Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...
Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...
Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...Thiago Faria de Andrade
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Java EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativoJava EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativoThiago Faria de Andrade
 

Mais de Thiago Faria de Andrade (7)

Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...
Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...
Lean Startup + Customer Development + Bootstrapping = Desenvolvimento de prod...
 
Integração Java EE e VoIP
Integração Java EE e VoIPIntegração Java EE e VoIP
Integração Java EE e VoIP
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Mobicents - Plataforma VoIP Open Source
Mobicents - Plataforma VoIP Open SourceMobicents - Plataforma VoIP Open Source
Mobicents - Plataforma VoIP Open Source
 
Mercado Java: como se dar bem?
Mercado Java: como se dar bem?Mercado Java: como se dar bem?
Mercado Java: como se dar bem?
 
Java EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativoJava EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativo
 

Clean Code - Frescura ou necessidade?

  • 1. CLEAN CODE Frescura ou necessidade? Thiago Faria @ThiagoFAndrade www.algaworks.com
  • 2. Está cheio de lambanças por aí...
  • 3. Merece um 10 http://www.flickr.com/photos/ricksphotos101/3510477227/
  • 4. Merece um 10 http://www.flickr.com/photos/ricksphotos101/3510477227/
  • 5. Boa ideia! http://www.flickr.com/photos/kwramsauer/2787249358/
  • 6. Boa ideia! http://www.flickr.com/photos/kwramsauer/2787249358/
  • 9. OMFG! http://www.flickr.com/photos/officeglen/83359172/
  • 10. OMFG! http://www.flickr.com/photos/officeglen/83359172/
  • 11. OMFG! http://www.flickr.com/photos/officeglen/83359172/
  • 12. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
  • 13. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
  • 14. E nós, programadores? http://gartic.uol.com.br/imgs/mural/lu/lusca/1239941851.png
  • 17. Java Programmer Web Designer UI Programmer Como você quer ser lembrado? http://www.flickr.com/photos/rajthesnapper/2418728391/
  • 18. Porque priorizamos apenas código que funciona?
  • 21. • Cronogramas apertados • Usuários com necessidades urgentes
  • 22. • Cronogramas apertados • Usuários com necessidades urgentes • Pressão do gerente
  • 23. • Cronogramas apertados • Usuários com necessidades urgentes • Pressão do gerente • “Quero mostrar que sou produtivo”
  • 24. Código ruim custa caro http://www.flickr.com/photos/amagill/3366720659/
  • 25. Código ruim custa caro http://www.flickr.com/photos/amagill/3366720659/
  • 26. Código ruim dá preguiça http://spirithalloween.com/images/spirit/products/processed/00593418.detail.a.jpg
  • 27. Código ruim gera frustração http://www.flickr.com/photos/zachklein/54389823/
  • 28. Código ruim precisa de muitos, mas muitos remendos http://www.pinbax.com/items/4566.jpg
  • 29. Código ruim precisa de muitos, mas muitos remendos http://www.pinbax.com/items/4566.jpg
  • 30. Código ruim gera lentidão (baixa produtividade) http://www.flickr.com/photos/johnlamb/2576062549/
  • 31. Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  • 32. Produtividade vs Tempo 100 75 Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  • 33. Produtividade vs Tempo 100 75 Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  • 34. Produtividade vs Tempo 100 75 ? Produtividade 50 25 0 Gráfico meramente ilustrativo e baseado no Codecast de Uncle Bob (www.cleancoders.com)
  • 36. O que podemos fazer para melhorar nossa produtividade? http://www.flickr.com/photos/michigancommunities/5169810229/
  • 37. Coloque mais pressão! O que podemos fazer para melhorar nossa produtividade? http://www.flickr.com/photos/michigancommunities/5169810229/
  • 38. Coloque mais pressão! O que podemos fazer para melhorar nossa produtividade? Vamos contratar mais pessoas... http://www.flickr.com/photos/michigancommunities/5169810229/
  • 40. Mais pessoas para ajudar a fazer código sujo http://www.flickr.com/photos/worldofoddy/757149070/
  • 41. Código ruim pode matar um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
  • 42. Código ruim pode matar um projeto http://jamaicanmusics.com/wp-content/uploads/2012/06/shotgun.jpg, http://www.flickr.com/photos/iain/353671249/
  • 43. Código ruim pode destruir uma empresa http://www.flickr.com/photos/penguincakes/4074411788/
  • 44. Tem gente que acha que código ruim pode acabar com o mundo! http://good-wallpapers.com/pictures/3632/End%20of%20the%20World.jpg
  • 45. A culpa é nossa http://www.artsjournal.com/aboutlastnight/pointing-finger.jpg
  • 52. O que é código limpo? Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  • 53. O que é código limpo? Elegante e eficiente. Código limpo faz bem uma coisa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  • 54. O que é código limpo? Elegante e eficiente. Simples e direto. Código limpo faz Pode ser lido como bem uma coisa. uma conversa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  • 55. O que é código limpo? Elegante e eficiente. Simples e direto. Parece ter sido Código limpo faz Pode ser lido como escrito por alguém bem uma coisa. uma conversa. que se importa. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  • 56. O que é código limpo? Elegante e eficiente. Simples e direto. Parece ter sido Cada rotina que Código limpo faz Pode ser lido como escrito por alguém você lê faz o que bem uma coisa. uma conversa. que se importa. você espera. Bjarne Stroustrup Grady Booch Michael Feathers Ward Cunningham Inventor do C++ Autor de importantes livros sobre Escritor e agile coacher Criador da Wiki, co-criador da OO e co-criador da UML eXtreme Programming, etc http://www.computerhope.com/people/pictures/bjarne_stroustrup.jpg, http://www.scientificamerican.com/media/inline/97DDD0F5- DA2F-0971-82C7990D6586E990_1.jpg, http://upload.wikimedia.org/wikipedia/commons/c/c0/Cunningham2.jpg
  • 57. A regra do escoteiro “ Sempre deixe a área de acampamento mais ” limpa que já estava. — Robert Stephenson Smyth Baden-Powell http://www.flickr.com/photos/zoovroo/2751792596/
  • 58. A regra do escoteiro “ Sempre deixe a área de acampamento mais ” limpa que já estava. — Robert Stephenson Smyth Baden-Powell Sempre deixe um código mais limpo que já estava. http://www.flickr.com/photos/zoovroo/2751792596/
  • 59. Algumas técnicas by Uncle Bob
  • 60. Nomes significativos • Revelam a intenção • Devem ser pronunciáveis • Fácil de pesquisar • Evite nomes confusos
  • 61. int d; // tempo gasto em dias
  • 62. Não revela sua intenção int d; // tempo gasto em dias Se precisa de um comentário para explicar isso, algo está errado!
  • 63. Não revela sua intenção int d; // tempo gasto em dias Se precisa de um comentário para explicar isso, algo está errado! int tempoGastoEmDias;
  • 65. Nomes de classes não devem ser verbos class Processar
  • 66. Nomes de classes não devem ser verbos class Processar class Processador Processador de que?
  • 67. Nomes de classes não devem ser verbos class Processar class Processador Processador de que? class ProcessadorDeRelatorio
  • 68. class Fornecedor { public void pagamento() {
  • 69. Nomes de métodos devem ser verbos class Fornecedor { public void pagamento() {
  • 70. Nomes de métodos devem ser verbos class Fornecedor { public void pagamento() { class Fornecedor { public void pagar() {
  • 71. class PedComp { private Date prvEnt; }
  • 72. Difícil de ler, entender e pronunciar class PedComp { private Date prvEnt; }
  • 73. Difícil de ler, entender e pronunciar class PedComp { private Date prvEnt; } class PedidoCompra { private Date dataPrevisaoEntrega; }
  • 74. for (int i = 0; i < 10; i++) { t[i] += p[i]; }
  • 75. Confuso e difícil de pesquisar for (int i = 0; i < 10; i++) { t[i] += p[i]; }
  • 76. Confuso e difícil de pesquisar for (int i = 0; i < 10; i++) { t[i] += p[i]; } for (int i = 0; i < 10; i++) { totais[i] += precos[i]; }
  • 77. Funções • Devem ser pequenas • Menores do que você imaginou • Devem fazer apenas uma coisa • Nível de identação não deve ser maior que 2 • Sem parâmetros é melhor, 2 é bom, evite 3 • Don’t Repeat Yourself (DRY)
  • 78. public boolean validarSenha(String nomeUsuario, String senha) { ... if (usuario.getSenhaAtual().equals(senha) { return true; } usuario.bloquear(); return false; }
  • 79. public boolean validarSenha(String nomeUsuario, String senha) { ... if (usuario.getSenhaAtual().equals(senha) { return true; } usuario.bloquear(); return false; } Métodos não devem ter efeitos colaterais
  • 80. void cadastrar(String nome, String email, int idade, double peso) { ... }
  • 81. Muitos parâmetros! void cadastrar(String nome, String email, int idade, double peso) { ... }
  • 82. Muitos parâmetros! void cadastrar(String nome, String email, int idade, double peso) { ... } void cadastrar(Paciente paciente) { ... }
  • 83. Comentários • São úteis se forem colocados nos lugares certos • Comentários não são atualizados, e por isso mentem e não são confiáveis • Comentários não fazem código ruim ficar melhor
  • 84. // verifica se conta está usando cheque especial if (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) {
  • 85. // verifica se conta está usando cheque especial if (conta.tipo.equals(Tipo.CORRENTE) && conta.saldo < 0) { Explique-se com código if (conta.estaUsandoChequeEspecial()) {
  • 86. /** * Construtor da classe. */ public Lancamento() { }
  • 87. Sério? /** * Construtor da classe. */ public Lancamento() { }
  • 88. Sério? /** * Construtor da classe. */ public Lancamento() { } Ahhh tá! Achei que era o /** * Dia do mês. dia do século... */ private int diaDoMes;
  • 90. Holy shit! try { while (...) { System.out.println(...); } // while } // try catch (SQLException e) { e.printStackTrace(); } // catch finally { conexao.close(); } // finally
  • 92. Use controle de versão try { while (...) { // adicionado por João das Couves System.out.println(...); } } catch (SQLException e) { // Autora: Maria Abadia e.printStackTrace(); } finally { // Fechando a conexão (Sebastião) conexao.close(); }
  • 93. Formatação • Classes menores são mais fáceis de entender • Conceitos relacionados devem ficar próximos • Sempre idente bem o código • Limite o tamanho de uma linha (sugestão de 120 caracteres) • Combine um estilo de formatação entre a equipe
  • 94. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra; }
  • 95. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra; }
  • 96. class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra; } class Produto { private int codigo; private Fornecedor fornecedor; private String descricao; private Date dataUltimaCompra; }
  • 97. public double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);
  • 98. Use espaços entre operadores, parâmetros e vírgulas public double calcular(int a,int b,int c){ double total=numero+(valor*outroValor);
  • 99. Use espaços entre operadores, parâmetros e vírgulas public double calcular(int a,int b,int c){ double total=numero+(valor*outroValor); public double calcular(int a, int b, int c) { double total = numero + (valor * outroValor);
  • 100. Exceções • Lance exceções ao invés de retornar código de erro • Crie exceções com informações sobre o erro • Evite criar métodos que retornam null • Não passe null como parâmetro
  • 101. Cliente cliente = repositorioClientes.buscarPorCodigo(10); if (cliente != null) { notificarPendencia(cliente.getEmail()); }
  • 102. Parece bom... Cliente cliente = repositorioClientes.buscarPorCodigo(10); if (cliente != null) { notificarPendencia(cliente.getEmail()); }
  • 103. Parece bom... Cliente cliente = repositorioClientes.buscarPorCodigo(10); if (cliente != null) { notificarPendencia(cliente.getEmail()); } Mas pode ficar melhor, se o método lançar exceção ao invés de retornar null Cliente cliente = repositorioClientes.buscarPorCodigo(10); notificarPendencia(cliente.getEmail());
  • 104. Testes unitários • Considere usar TDD • Mantenha os testes limpos
  • 105. Classes • Organize as declarações de variáveis e métodos • Classes devem ser pequenas • Princípio da Responsabilidade Única - SRP
  • 106. class Cliente { void cadastrar() void emitirNotaFiscal() }
  • 107. Muitas responsabilidades class Cliente { void cadastrar() void emitirNotaFiscal() }
  • 108. Muitas responsabilidades class Cliente { void cadastrar() void emitirNotaFiscal() } class Cliente { void cadastrar() } class NotaFiscal { void emitir() }
  • 110. GRACIAS. Thiago Faria @ThiagoFAndrade www.algaworks.com

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. A &amp;#xFA;nica coisa boa de c&amp;#xF3;digo ruim:\nC&amp;#xF3;digo sujo rende boas piadas sobre quem fez enquanto ele existir ;)\n
  12. \n
  13. os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  14. os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  15. os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  16. os culpados somos n&amp;#xF3;s ser&amp;#xE1; apresentado mais a frente\n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  40. A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  41. A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  42. A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  43. A equipe fez uma grande bagun&amp;#xE7;a\nBaixa produtividade - coisas que demoravam minutos para fazer, agora demoram horas, dias ou s&amp;#xE3;o imposs&amp;#xED;veis de serem conclu&amp;#xED;das\nGerentes percebem um gap, e precisam tomar uma decis&amp;#xE3;o\n
  44. Mais press&amp;#xE3;o nos devs - s&amp;#xF3; piora a situa&amp;#xE7;&amp;#xE3;o, faz ainda mais c&amp;#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&amp;#xE3;o\nContratar mais pessoas - PR&amp;#xD3;XIMO SLIDE\n
  45. Mais press&amp;#xE3;o nos devs - s&amp;#xF3; piora a situa&amp;#xE7;&amp;#xE3;o, faz ainda mais c&amp;#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&amp;#xE3;o\nContratar mais pessoas - PR&amp;#xD3;XIMO SLIDE\n
  46. Mais press&amp;#xE3;o nos devs - s&amp;#xF3; piora a situa&amp;#xE7;&amp;#xE3;o, faz ainda mais c&amp;#xF3;digo sujo, mais remendos, aumenta mais o custo, aumenta lentid&amp;#xE3;o\nContratar mais pessoas - PR&amp;#xD3;XIMO SLIDE\n
  47. Contrata mais pessoas - novas pessoas precisam das antigas para entender o c&amp;#xF3;digo. Depois de um tempo come&amp;#xE7;am a ficar mais r&amp;#xE1;pidos para criar mais c&amp;#xF3;digo sujo\n
  48. \n
  49. \n
  50. \n
  51. \n
  52. Falamos que vamos melhorar depois, mas nunca fazemos, e sabemos que nunca faremos\n
  53. Como voc&amp;#xEA; sabe que um c&amp;#xF3;digo est&amp;#xE1; ruim?\n
  54. - R&amp;#xED;gido - para incluir ou modificar uma &amp;#xFA;nica coisa, tem que alterar v&amp;#xE1;rios m&amp;#xF3;dulos, v&amp;#xE1;rias classes...\nVoc&amp;#xEA; nunca sabe quantos m&amp;#xF3;dulos precisa alterar, entao &amp;#xE9; dif&amp;#xED;cil estimar o esfor&amp;#xE7;o.\n
  55. coisas param de funcionar quando voc&amp;#xEA; inclui ou altera uma outra coisa\nsistemas ficam inconfi&amp;#xE1;veis. todos percebem que o sistema nao &amp;#xE9; bom\n
  56. M&amp;#xF3;dulos que nao podem ser separados para usar em outros lugares (reutiliza&amp;#xE7;&amp;#xE3;o)\nDif&amp;#xED;cil estimar, porque nunca se sabe se ser&amp;#xE1; poss&amp;#xED;vel reutilizar\n
  57. nao comunica a intencao do desenvolvedor\n dificil ler, entender e mudar\n
  58. \n
  59. aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  60. aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  61. aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  62. aten&amp;#xE7;&amp;#xE3;o aos detalhes, cuidado, simples, direto, sem duplica&amp;#xE7;&amp;#xE3;o, f&amp;#xE1;cil de leitura, eleg&amp;#xE2;ncia.\nC&amp;#xF3;digo com estas qualidades &amp;#xE9; f&amp;#xE1;cil de manter e nos d&amp;#xE1; valor verdadeiro e duradouro.\n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. &amp;#xC9; uma mentira. Promete fazer uma coisa, e faz outra de forma oculta.\n
  93. &amp;#xC9; uma mentira. Promete fazer uma coisa, e faz outra de forma oculta.\n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. Prefira lan&amp;#xE7;ar exce&amp;#xE7;&amp;#xE3;o a retornar null.\n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. p&amp;#xFA;blicas est&amp;#xE1;ticas e constantes\nprivadas est&amp;#xE1;ticas e vari&amp;#xE1;veis\nprivadas inst&amp;#xE2;ncias e vari&amp;#xE1;veis\nfun&amp;#xE7;&amp;#xF5;es\nSRP - classes devem ter uma, apenas uma raz&amp;#xE3;o para ser modificada\n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n