SlideShare uma empresa Scribd logo
Beleza de Código

    Nelson Lago / Prof. Dr. Fabio Kon

Centro de Competência em Software Livre
              IME-USP

       Campus Party - Janeiro de 2011
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
Por que falar de beleza?

• É comum abordar a gerência de projetos de
  software como outros processos ou sistemas de
  produção
  • Mas desenvolvimento de software tem um forte
    caráter de “artesanato”
• Há um grande número de gerentes de software
  que jamais escreveram código
  • Será possível que exista um bom Chef de Cuisine que
    nunca cozinhou na vida?
Por que falar de beleza?

• Cientistas, engenheiros etc. muitas vezes tendem
  a superestimar o poder da ciência, da matemática
  e da engenharia
  • Mas será que a ciência, a matemática e a engenharia
    sozinhas oferecem tudo o que é necessário para
    explicar e vivenciar o universo?
  • E, em particular, o desenvolvimento de software?
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
O que é beleza?

• Segundo o dicionário Houaiss da língua
  portuguesa:
  • Caráter do ser ou coisa que desperta sentimento de
    êxtase, admiração ou prazer através dos sentidos
  • Característica daquilo que possui harmonia,
    proporção, simetria, imponência etc.
  • Qualidade do ser ou coisa que suscita a admiração e
    um sentimento de adesão por seu valor moral ou
    intelectual
• Parece um bom objetivo para qualquer coisa que
  se faça na vida!
• Trabalhar com isso parece ser bom!
O que é beleza?

• Várias formas na cultura ocidental:
  • pré-socráticos (pitágoras): beleza e matemática,
    proporção áurea, simetria
  • romantismo: fragmentação e irregularidade como
    belo, talvez pela alusão à harmonia ausente
  • modernismo:
   - “Less is more” (Mies van der Rohe)
   - “a perfeição é atingida não quando não há mais o que
     acrescentar, mas quando não há mais o que remover”
     (Antoine de Saint-Exupéry)
 • pós-modernismo: “Less is a bore” (Robert Venturi)
O que é beleza?

• As visões grega e moderna parecem uma boa
  base para pensar em beleza no contexto da
  ciência e tecnologia
  • Ciência: “Faça as coisas da maneira mais simples
    possível, mas não mais simples que isso” (atribuído a
    Einstein)
  • Tecnologia: “integridade conceitual: o arquiteto deve
    desenvolver uma ideia do que o sistema deve fazer e
    garantir que essa visão é compreendida pelo restante
    da equipe. Para garantir um sistema fácil de usar,
    pode-se deliberadamente oferecer menos
    funcionalidades do que seria possível” (Fred Brooks)
O que é beleza?

• Beleza é fundamental!
• Código bonito:
  • Dá prazer ao leitor
  • Faz o escritor feliz
  • Torna o trabalho em equipe mais agradável
• O que traz:
  • Menos bugs
  • Melhor manutenibilidade
  • Maior produtividade da equipe
  • Ou seja, qualidade
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
What is Clean
Code?
                       “ I like my code to be elegant and
                        efficient. The logic should be
                        straighforward to make it hard
                        for     bugs    to     hide,  the
                        dependencies minimal to ease
                        maintenance, error handling
                        complete     according     to  an
                        articulated      strategy,    and
                        performance close to optimal so
                        as not to tempt people to make
  Bjarne Stroustrup     the code messy with unprincipled
     Inventor of C++    optimizations. Clean code does
                        one thing well.”
What is Clean
 Code?


                                         “ Clean code is simple and direct.
                                          Clean code reads like well-
                                          written prose. Clean code never
                                          obscures the designer's intent but
                                          rather is full of crisp [clearly
                                          defined]     abstractions      and
                                          straighforward lines of control.”



         Grady Booch
Author of Object Oriented Analysis and
       Design with Applications
What is Clean
Code?
                                “ Clean code can be read, and
                                 enhanced by a developer other
                                 than its original author. It has
                                 unit and acceptance tests. It
                                 has meaningful        names. It
                                 provides one way rather than
                                 many ways for doing one thing. It
                                 has     minimal    dependencies,
                                 which are explicitly defined, and
                                 provides a clear and minimal
     Dave Thomas                 API. Code should be literate
 Founder of OTI, godfather of    since depending on the language,
    the Eclipse Strategy         not all necessary information can
                                 be expressed clearly in code
                                 alone.”
What is Clean
Code?
                                 “ I could list all of the qualities
                                  that I notice in clean code, but
                                  there is one overarching quality
                                  that leads to all of them. Clean
                                  code always looks it was
                                  written by someone who cares.
                                  There is nothing obvious that
                                  you can do to make it better.
                                  All of those things were thought
                                  about by the code's author, and if
  Michael Feathers                you try to imagine improvements,
 Author of Working Effectively    you're led back to where you are,
      With Legacy Code            sitting in appreciation of the code
                                  someone left for you – code left
                                  by someone who cares deeply
                                  about the craft.”
What is Clean
Code?

                           “ In recent years I begin, and
                            nearly end, with Beck's rules of
                            simple code. In priority order,
                            simple code:
                            •
                              Runs all tests
                            •
                              Contains no duplication
                            •
                              Expresses all the design ideas
                            that are in the system
                            •
                              Minimizes the number of
                            entities such as classes, methods,
     Ron Jeffries           functions, and the like.”
    Author of Extreme
   Programming Installed
What is Clean
Code?



                                         You know you are working on
                                         clean code when each routine
                                         you read turns out to be pretty
                                         much what you expected. You
                                         can call it beautiful code when
                                         the codes also makes it look like
                                         the language was made for the
                                         problem.”
     Ward Cunningham
 Inventor of Wiki, Fit and much more
”Godfather of all those who care about
                 code”
What is Clean
Code?
                                                 Without
      Simple
                        Efficient                 obvious
                                               improvements
               Straightforward
                                    Expressive
                                                    Contains no
Turns out to be what
                                                    duplications
   you expected        Runs all tests

 Full of meaning                     Literal         Reads well

  Beautiful: when the                            Minimal
  language was made               Written by
  for the problem                someone who
                                    cares
O que é beleza no
                    desenvolvimento de software?
• Um exemplo bastante popular: a classe
  “Collection” do SmallTalk (citando Rebecca Wirfs-
  Brock):
  • Garante todas as funcionalidades básicas exigindo que
    as subclasses implementem três métodos:
   - add: anObject
   - remove: anObject ifAbsent: exceptionBlock
   - do: aBlock
 • Os métodos da classe abstrata “Collection” para
   adicionar e remover elementos, acumular diferentes
   resultados ao processar todos os elementos, checar se
   a classe está vazia etc. são todos implementados
   utilizando esses aspectos básicos ou através de outros
   procedimentos pré-definidos que dependem apenas
   dessas implementações; reúso belo e elegante!
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
Aspectos específicos: nomes

• Nomes expressivos são fundamentais!
  • Um programa é basicamente composto de palavras
    reservadas e nomes
  • Escolher bons nomes toma tempo; no entanto, isso
    acaba economizando mais tempo ainda
  • Os nomes devem ser expressivos e eliminar dúvidas
  • Exemplo:

   public List<int[]> getThem() {
      List<int[]> list1 = new ArrayList<int[]>();
      for (int[] x : theList)
         if(x[0] == 4)
            list1.add(x);
      return list1;
   }
Aspectos específicos: nomes

   public List<int[]> getThem() {
      List<int[]> list1 = new ArrayList<int[]>();
      for (int[] x : theList)
         if(x[0] == 4)
            list1.add(x);
      return list1;
   }




• Dúvidas!!!
  • O que esse método seleciona?
  • Quais tipos de coisa estão em theList?
  • Qual a relevância da posição zero?
  • O que significa “4”?
Aspectos específicos: nomes
    public List<int[]> getThem() {
       List<int[]> list1 = new ArrayList<int[]>();
       for (int[] x : theList)
          if(x[0] == 4)
             list1.add(x);
       return list1;
    }


• Que tal assim:
   public List<int[]> getFlaggedCells() {
      List<int[]> flaggedCells = new ArrayList<int[]>();
      for (int[] cell : gameBoard)
         if(cell[STATUS_VALUE] == FLAGGED)
            flaggedCells.add(cell);
      return flaggedCells;
   }
Aspectos específicos: nomes

   public List<int[]> getFlaggedCells() {
      List<int[]> flaggedCells = new ArrayList<int[]>();
      for (int[] cell : gameBoard)
         if(cell[STATUS_VALUE] == FLAGGED)
            flaggedCells.add(cell);
      return flaggedCells;
   }


• Ahá!
  • O que esse método seleciona? As células marcadas!
  • Quais tipos de coisa estão em theList? theList é um
    tabuleiro com células!
  • Qual a relevância da posição zero? É o status!
  • O que significa “4”? Significa “marcado”!
Aspectos específicos: nomes

  public List<int[]> getFlaggedCells() {
     List<int[]> flaggedCells = new ArrayList<int[]>();
     for (int[] cell : gameBoard)
        if(cell[STATUS_VALUE] == FLAGGED)
           flaggedCells.add(cell);
     return flaggedCells;
  }


• Mas ainda dá pra melhorar!
  public List<Cell> getFlaggedCells() {
     List<Cell> flaggedCells = new ArrayList<Cell>();
     for (Cell cell : gameBoard)
        if(cell.isFlagged())
           flaggedCells.add(cell);
     return flaggedCells;
  }
Aspectos específicos: nomes

• Modificar o código precisa ser fácil, e portanto o
  código precisa ser fácil de entender
  • Use nomes legíveis
   - XYZControllerHandlingOfStrings !=
     XYZControllerStorageOfStrings
 • Use nomes que possam ser usados em buscas
 • Use os padrões da linguagem (camelCase etc.)
 • Use nomes do domínio da solução
   - Padrões de projeto, algoritmos, termos matemáticos etc.
 • Use nomes do domínio do problema
 • Não confunda o leitor
   - Uma palavra para cada conceito (get, fetch, retrieve)
   - Evite piadinhas ou metáforas de significado obscuro
Aspectos específicos: nomes

• Falar é fácil, mas isso é importante MESMO
• É melhor que os nomes sejam relativamente
  curtos, desde que sejam claros (economizar
  alguns toques no teclado não é uma boa razão
  para promover a obscuridade)
• Se você encontrar um mau nome, mude-o
  imediatamente!
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
Aspectos específicos:
                                  funções
• Funções devem ser pequenas
  • Cada uma delas deve ser óbvia quanto ao que faz e
    simples de entender quanto ao como o faz
• Funções devem evitar estruturas aninhadas
  • Blocos de if's/while's/else's devem ser diretos no que
    fazem (provavelmente, apenas chamar uma função)
   - Condicionais provavelmente devem ir para uma função
     separada
Aspectos específicos:
                                     funções
• Funções devem fazer uma e apenas uma coisa, e
  fazê-la corretamente
  • evita repetição de código em diferentes funções
  • Uma função que faz apenas uma coisa não pode ser
    dividida em seções
  • Se não é possível extrair uma sub-função de dentro
    dela cujo nome não seria o mesmo que o nome que
    ela já tem, ela provavelmente faz só uma coisa
• Exemplo:
    public void pay() {
        for (Employee e : employees) {
            if (e.isPayday()) {
                Money pay = e.calculatePay();
                e.deliverPay(pay);
            }
        }
    }
Aspectos específicos:
                                     funções
    public void pay() {
        for (Employee e : employees) {
            if (e.isPayday()) {
                Money pay = e.calculatePay();
                e.deliverPay(pay);
            }
        }
    }

• Esta função faz mais que uma coisa!
  • Itera por todos os empregados
  • Checa para ver quais empregados precisam ser pagos
  • Paga os empregados
Aspectos específicos:
                                     funções
public void pay() {                         Apenas itera
    for (Employee e : employees)
        payIfNecessary(e);
}


private void payIfNecessary(Employee e) {   Verifica se o
    if (e.isPayday())                       funcionário precisa
        calculateAndDeliverPay();           ser pago
}


private void                                paga o empregado
calculateAndDeliverPay(Employee e) {
    Money pay = e.calculatePay();
    e.deliverPay(pay);
}



• Será um exagero?
Aspectos específicos:
                                    funções
• Um único nível de abstração
  • Todas as linhas de uma função devem operar no
    mesmo nível
  • Quando detalhes se misturam a conceitos mais
    abstratos, mais e mais detalhes tendem a se insinuar
  • É o primeiro passo rumo às funções gigantes
• Exemplo:
   public void gameLoop() {
       advanceTimer();
       moveMonsters();
       movePlayers();
       removeDeadBodies();
       if (keyPressed) {
           if key.scancode == “X”; then...   Hein?!?!
       }
   }
Aspectos específicos:
                                   funções
• O número de argumentos de uma função deve
  ser pequeno
  • Argumentos dificultam os testes
  • um grande número de argumentos sugere que a
    função faz mais que uma coisa
  • um grande número de argumentos sugere que a
    função é usada de maneiras muito díspares
  • Argumentos que na verdade são “flags” praticamente
    garantem que a função faz mais que uma coisa
   - rotaciona (int angulo, bool sentidoHorario)
   - rotacionaHorario (int angulo), rotacionaAntiHorario (int angulo)
• Funções devem evitar efeitos colaterais
  • Uma função deve ter um efeito sobre um objeto OU
    devolver algo
Visão geral
• Por que falar de beleza?
• O que é beleza?
• O que é beleza no desenvolvimento de software?
• Aspectos específicos: nomes
• Aspectos específicos: funções
• Aspectos específicos: comentários
Aspectos específicos:
                           comentários
• Comentários são, no máximo, um mal necessário
  • O quase único uso dos comentários é compensar
    nossa incapacidade de expressão através do código
• Comentários são mentirosos
  • Comentários nem sempre acompanham as mudanças
    no código
  • Mantê-los requer tempo; Na prática, mantê-los acaba
    sendo impossível
  • A verdade está em um único lugar: no código
Aspectos específicos:
                           comentários
• Bons comentários:
  • Comentários sobre aspectos legais que influenciam o
    código
  • Alguns tipos de comentários informativos, como
    explicações sobre expressões regulares
  • Esclarecimentos sobre decisões tomadas em função
    não da implementação, mas do problema
  • Esclarecimentos sobre bibliotecas de terceiros que
    não são tão claras
  • Comentários que frisam a importância de um
    determinado elemento
  • Comentários tipo TODO e JavaDoc para APIs públicas
Bibliografia

• Fontes relevantes sobre o tema:
  • Robert C. Martin. Clean Code - A Handbook of Agile
    Software Craftsmanship. Prentice Hall. 2008.
  • Andy Oram and Greg Wilson. Beautiful Code. O'Reilly.
    2007.
  • beaut.e(code) - exposição de arte por Bob Hanmer,
    Karen Hanmer e Andrea Polli. Algum material pode ser
    acessado em http://karenhanmer.com/gallery/?
    gallery=beautecode
  • Conversas e entrevistas
  • Estes slides foram baseados no trabalho de João
    Machini de Miranda - IME/USP
Obrigado!


   Centro de Competência em Software Livre
                  IME/USP



Nosso sítio web está no endereço:

 http://ccsl.ime.usp.br

Mais conteúdo relacionado

Destaque

Uma visão do mundo rails campus party 2011 - fabio akita
Uma visão do mundo rails   campus party 2011 - fabio akitaUma visão do mundo rails   campus party 2011 - fabio akita
Uma visão do mundo rails campus party 2011 - fabio akita
Campus Party Brasil
 
Ntp 2-cp2011
Ntp 2-cp2011Ntp 2-cp2011
Ntp 2-cp2011
Campus Party Brasil
 
Perspectives On Microsoft And Open Source Fy 10 Customer Presentation
Perspectives On Microsoft And Open Source   Fy 10 Customer PresentationPerspectives On Microsoft And Open Source   Fy 10 Customer Presentation
Perspectives On Microsoft And Open Source Fy 10 Customer Presentation
Campus Party Brasil
 
Human Capital Group Functions
Human Capital Group FunctionsHuman Capital Group Functions
Human Capital Group Functions
Adora Ikwuemesi, FIIM, GPHR, PRINCE2, ACIPM
 
Class Decoration Project
Class Decoration ProjectClass Decoration Project
Class Decoration Project
guest9b8474
 
Amd future of gp us - campus party
Amd   future of gp us - campus partyAmd   future of gp us - campus party
Amd future of gp us - campus party
Campus Party Brasil
 
The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...
The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...
The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...
Campus Party Brasil
 
Realidades aumentada e diminuída
Realidades aumentada e diminuídaRealidades aumentada e diminuída
Realidades aumentada e diminuída
Campus Party Brasil
 
Perspectives On Microsoft And Open Source F Y 10 Customer Presentation
Perspectives On  Microsoft And  Open  Source    F Y 10  Customer  PresentationPerspectives On  Microsoft And  Open  Source    F Y 10  Customer  Presentation
Perspectives On Microsoft And Open Source F Y 10 Customer Presentation
Campus Party Brasil
 
Sterling Company Profile
Sterling Company ProfileSterling Company Profile
Sterling Company Profile
Sterling Staffing Solutions
 
3.10
3.103.10
3.10c
3.10c3.10c
Orientação a Objetos na prática em php
Orientação a Objetos na prática em phpOrientação a Objetos na prática em php
Orientação a Objetos na prática em php
Campus Party Brasil
 
Apache OFBiz: Real-World Open Source Java Platform ERP
Apache OFBiz: Real-World Open Source Java Platform ERPApache OFBiz: Real-World Open Source Java Platform ERP
Apache OFBiz: Real-World Open Source Java Platform ERP
Campus Party Brasil
 

Destaque (14)

Uma visão do mundo rails campus party 2011 - fabio akita
Uma visão do mundo rails   campus party 2011 - fabio akitaUma visão do mundo rails   campus party 2011 - fabio akita
Uma visão do mundo rails campus party 2011 - fabio akita
 
Ntp 2-cp2011
Ntp 2-cp2011Ntp 2-cp2011
Ntp 2-cp2011
 
Perspectives On Microsoft And Open Source Fy 10 Customer Presentation
Perspectives On Microsoft And Open Source   Fy 10 Customer PresentationPerspectives On Microsoft And Open Source   Fy 10 Customer Presentation
Perspectives On Microsoft And Open Source Fy 10 Customer Presentation
 
Human Capital Group Functions
Human Capital Group FunctionsHuman Capital Group Functions
Human Capital Group Functions
 
Class Decoration Project
Class Decoration ProjectClass Decoration Project
Class Decoration Project
 
Amd future of gp us - campus party
Amd   future of gp us - campus partyAmd   future of gp us - campus party
Amd future of gp us - campus party
 
The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...
The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...
The VR Continuum: From CAVEs to Digital TV, How VR and AR will change everyda...
 
Realidades aumentada e diminuída
Realidades aumentada e diminuídaRealidades aumentada e diminuída
Realidades aumentada e diminuída
 
Perspectives On Microsoft And Open Source F Y 10 Customer Presentation
Perspectives On  Microsoft And  Open  Source    F Y 10  Customer  PresentationPerspectives On  Microsoft And  Open  Source    F Y 10  Customer  Presentation
Perspectives On Microsoft And Open Source F Y 10 Customer Presentation
 
Sterling Company Profile
Sterling Company ProfileSterling Company Profile
Sterling Company Profile
 
3.10
3.103.10
3.10
 
3.10c
3.10c3.10c
3.10c
 
Orientação a Objetos na prática em php
Orientação a Objetos na prática em phpOrientação a Objetos na prática em php
Orientação a Objetos na prática em php
 
Apache OFBiz: Real-World Open Source Java Platform ERP
Apache OFBiz: Real-World Open Source Java Platform ERPApache OFBiz: Real-World Open Source Java Platform ERP
Apache OFBiz: Real-World Open Source Java Platform ERP
 

Semelhante a Beleza

Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
Higor César
 
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
Gabriel Felipe Soares
 
O que devo procurar em um code review
O que devo procurar em um code review O que devo procurar em um code review
O que devo procurar em um code review
Rodrigo de Souza Castro
 
7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski
iMasters
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Developer Academy
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
FilipiAtaideArruda
 
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
tdc-globalcode
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
Gabriel Schade Cardoso
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
Paulo Henrique da Silva
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
Isaac de Souza
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014
Rodrigo Campos
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
Carlos Felippe Cardoso
 
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
Mauricio Andreazza
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
Hélio Medeiros
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Rodrigo Branas
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
Pedro Pereira Martins
 
P2_Aula1-convertido.pptx
P2_Aula1-convertido.pptxP2_Aula1-convertido.pptx
P2_Aula1-convertido.pptx
MarcondesTiburcio
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
Lucas Boeing Scarduelli
 
Programação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoProgramação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementado
Samuel David
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
Evelise Vazquez
 

Semelhante a Beleza (20)

Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
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
 
O que devo procurar em um code review
O que devo procurar em um code review O que devo procurar em um code review
O que devo procurar em um code review
 
7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski7Masters jQuery - jQuery além do código, com Leon Kulikowski
7Masters jQuery - jQuery além do código, com Leon Kulikowski
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
TDC2018SP | Trilha Arq .Net - Clean Architecture com .NET Core 2.0
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
XP Conf BR: eXtreme Programming para programadores. Aplicando XP em seu código!
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 
P2_Aula1-convertido.pptx
P2_Aula1-convertido.pptxP2_Aula1-convertido.pptx
P2_Aula1-convertido.pptx
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Programação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoProgramação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementado
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 

Mais de Campus Party Brasil

Wordpress
WordpressWordpress
Buracos negros
Buracos negrosBuracos negros
Buracos negros
Campus Party Brasil
 
Programação para Atari 2600
Programação para Atari 2600Programação para Atari 2600
Programação para Atari 2600
Campus Party Brasil
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
Campus Party Brasil
 
Técnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosTécnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivos
Campus Party Brasil
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
Campus Party Brasil
 
Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdades
Campus Party Brasil
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solar
Campus Party Brasil
 
Passeio virtual pelo LHC
Passeio virtual pelo LHCPasseio virtual pelo LHC
Passeio virtual pelo LHC
Campus Party Brasil
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custo
Campus Party Brasil
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Campus Party Brasil
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusiva
Campus Party Brasil
 
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXFazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Campus Party Brasil
 
Blue Via
Blue ViaBlue Via
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusiva
Campus Party Brasil
 
Gestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreGestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software Livre
Campus Party Brasil
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito Impresso
Campus Party Brasil
 
Vida de Programador
Vida de Programador Vida de Programador
Vida de Programador
Campus Party Brasil
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendencias
Campus Party Brasil
 
Desafio Robótica Livre
Desafio Robótica LivreDesafio Robótica Livre
Desafio Robótica Livre
Campus Party Brasil
 

Mais de Campus Party Brasil (20)

Wordpress
WordpressWordpress
Wordpress
 
Buracos negros
Buracos negrosBuracos negros
Buracos negros
 
Programação para Atari 2600
Programação para Atari 2600Programação para Atari 2600
Programação para Atari 2600
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Técnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosTécnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivos
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
 
Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdades
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solar
 
Passeio virtual pelo LHC
Passeio virtual pelo LHCPasseio virtual pelo LHC
Passeio virtual pelo LHC
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custo
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusiva
 
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXFazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectX
 
Blue Via
Blue ViaBlue Via
Blue Via
 
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusiva
 
Gestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreGestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software Livre
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito Impresso
 
Vida de Programador
Vida de Programador Vida de Programador
Vida de Programador
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendencias
 
Desafio Robótica Livre
Desafio Robótica LivreDesafio Robótica Livre
Desafio Robótica Livre
 

Beleza

  • 1. Beleza de Código Nelson Lago / Prof. Dr. Fabio Kon Centro de Competência em Software Livre IME-USP Campus Party - Janeiro de 2011
  • 2. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 3. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 4. Por que falar de beleza? • É comum abordar a gerência de projetos de software como outros processos ou sistemas de produção • Mas desenvolvimento de software tem um forte caráter de “artesanato” • Há um grande número de gerentes de software que jamais escreveram código • Será possível que exista um bom Chef de Cuisine que nunca cozinhou na vida?
  • 5. Por que falar de beleza? • Cientistas, engenheiros etc. muitas vezes tendem a superestimar o poder da ciência, da matemática e da engenharia • Mas será que a ciência, a matemática e a engenharia sozinhas oferecem tudo o que é necessário para explicar e vivenciar o universo? • E, em particular, o desenvolvimento de software?
  • 6. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 7. O que é beleza? • Segundo o dicionário Houaiss da língua portuguesa: • Caráter do ser ou coisa que desperta sentimento de êxtase, admiração ou prazer através dos sentidos • Característica daquilo que possui harmonia, proporção, simetria, imponência etc. • Qualidade do ser ou coisa que suscita a admiração e um sentimento de adesão por seu valor moral ou intelectual • Parece um bom objetivo para qualquer coisa que se faça na vida! • Trabalhar com isso parece ser bom!
  • 8. O que é beleza? • Várias formas na cultura ocidental: • pré-socráticos (pitágoras): beleza e matemática, proporção áurea, simetria • romantismo: fragmentação e irregularidade como belo, talvez pela alusão à harmonia ausente • modernismo: - “Less is more” (Mies van der Rohe) - “a perfeição é atingida não quando não há mais o que acrescentar, mas quando não há mais o que remover” (Antoine de Saint-Exupéry) • pós-modernismo: “Less is a bore” (Robert Venturi)
  • 9. O que é beleza? • As visões grega e moderna parecem uma boa base para pensar em beleza no contexto da ciência e tecnologia • Ciência: “Faça as coisas da maneira mais simples possível, mas não mais simples que isso” (atribuído a Einstein) • Tecnologia: “integridade conceitual: o arquiteto deve desenvolver uma ideia do que o sistema deve fazer e garantir que essa visão é compreendida pelo restante da equipe. Para garantir um sistema fácil de usar, pode-se deliberadamente oferecer menos funcionalidades do que seria possível” (Fred Brooks)
  • 10. O que é beleza? • Beleza é fundamental! • Código bonito: • Dá prazer ao leitor • Faz o escritor feliz • Torna o trabalho em equipe mais agradável • O que traz: • Menos bugs • Melhor manutenibilidade • Maior produtividade da equipe • Ou seja, qualidade
  • 11. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 12. What is Clean Code? “ I like my code to be elegant and efficient. The logic should be straighforward to make it hard for bugs to hide, the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy, and performance close to optimal so as not to tempt people to make Bjarne Stroustrup the code messy with unprincipled Inventor of C++ optimizations. Clean code does one thing well.”
  • 13. What is Clean Code? “ Clean code is simple and direct. Clean code reads like well- written prose. Clean code never obscures the designer's intent but rather is full of crisp [clearly defined] abstractions and straighforward lines of control.” Grady Booch Author of Object Oriented Analysis and Design with Applications
  • 14. What is Clean Code? “ Clean code can be read, and enhanced by a developer other than its original author. It has unit and acceptance tests. It has meaningful names. It provides one way rather than many ways for doing one thing. It has minimal dependencies, which are explicitly defined, and provides a clear and minimal Dave Thomas API. Code should be literate Founder of OTI, godfather of since depending on the language, the Eclipse Strategy not all necessary information can be expressed clearly in code alone.”
  • 15. What is Clean Code? “ I could list all of the qualities that I notice in clean code, but there is one overarching quality that leads to all of them. Clean code always looks it was written by someone who cares. There is nothing obvious that you can do to make it better. All of those things were thought about by the code's author, and if Michael Feathers you try to imagine improvements, Author of Working Effectively you're led back to where you are, With Legacy Code sitting in appreciation of the code someone left for you – code left by someone who cares deeply about the craft.”
  • 16. What is Clean Code? “ In recent years I begin, and nearly end, with Beck's rules of simple code. In priority order, simple code: • Runs all tests • Contains no duplication • Expresses all the design ideas that are in the system • Minimizes the number of entities such as classes, methods, Ron Jeffries functions, and the like.” Author of Extreme Programming Installed
  • 17. What is Clean Code? You know you are working on clean code when each routine you read turns out to be pretty much what you expected. You can call it beautiful code when the codes also makes it look like the language was made for the problem.” Ward Cunningham Inventor of Wiki, Fit and much more ”Godfather of all those who care about code”
  • 18. What is Clean Code? Without Simple Efficient obvious improvements Straightforward Expressive Contains no Turns out to be what duplications you expected Runs all tests Full of meaning Literal Reads well Beautiful: when the Minimal language was made Written by for the problem someone who cares
  • 19. O que é beleza no desenvolvimento de software? • Um exemplo bastante popular: a classe “Collection” do SmallTalk (citando Rebecca Wirfs- Brock): • Garante todas as funcionalidades básicas exigindo que as subclasses implementem três métodos: - add: anObject - remove: anObject ifAbsent: exceptionBlock - do: aBlock • Os métodos da classe abstrata “Collection” para adicionar e remover elementos, acumular diferentes resultados ao processar todos os elementos, checar se a classe está vazia etc. são todos implementados utilizando esses aspectos básicos ou através de outros procedimentos pré-definidos que dependem apenas dessas implementações; reúso belo e elegante!
  • 20. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 21. Aspectos específicos: nomes • Nomes expressivos são fundamentais! • Um programa é basicamente composto de palavras reservadas e nomes • Escolher bons nomes toma tempo; no entanto, isso acaba economizando mais tempo ainda • Os nomes devem ser expressivos e eliminar dúvidas • Exemplo: public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if(x[0] == 4) list1.add(x); return list1; }
  • 22. Aspectos específicos: nomes public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if(x[0] == 4) list1.add(x); return list1; } • Dúvidas!!! • O que esse método seleciona? • Quais tipos de coisa estão em theList? • Qual a relevância da posição zero? • O que significa “4”?
  • 23. Aspectos específicos: nomes public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if(x[0] == 4) list1.add(x); return list1; } • Que tal assim: public List<int[]> getFlaggedCells() { List<int[]> flaggedCells = new ArrayList<int[]>(); for (int[] cell : gameBoard) if(cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; }
  • 24. Aspectos específicos: nomes public List<int[]> getFlaggedCells() { List<int[]> flaggedCells = new ArrayList<int[]>(); for (int[] cell : gameBoard) if(cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; } • Ahá! • O que esse método seleciona? As células marcadas! • Quais tipos de coisa estão em theList? theList é um tabuleiro com células! • Qual a relevância da posição zero? É o status! • O que significa “4”? Significa “marcado”!
  • 25. Aspectos específicos: nomes public List<int[]> getFlaggedCells() { List<int[]> flaggedCells = new ArrayList<int[]>(); for (int[] cell : gameBoard) if(cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; } • Mas ainda dá pra melhorar! public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for (Cell cell : gameBoard) if(cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
  • 26. Aspectos específicos: nomes • Modificar o código precisa ser fácil, e portanto o código precisa ser fácil de entender • Use nomes legíveis - XYZControllerHandlingOfStrings != XYZControllerStorageOfStrings • Use nomes que possam ser usados em buscas • Use os padrões da linguagem (camelCase etc.) • Use nomes do domínio da solução - Padrões de projeto, algoritmos, termos matemáticos etc. • Use nomes do domínio do problema • Não confunda o leitor - Uma palavra para cada conceito (get, fetch, retrieve) - Evite piadinhas ou metáforas de significado obscuro
  • 27. Aspectos específicos: nomes • Falar é fácil, mas isso é importante MESMO • É melhor que os nomes sejam relativamente curtos, desde que sejam claros (economizar alguns toques no teclado não é uma boa razão para promover a obscuridade) • Se você encontrar um mau nome, mude-o imediatamente!
  • 28. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 29. Aspectos específicos: funções • Funções devem ser pequenas • Cada uma delas deve ser óbvia quanto ao que faz e simples de entender quanto ao como o faz • Funções devem evitar estruturas aninhadas • Blocos de if's/while's/else's devem ser diretos no que fazem (provavelmente, apenas chamar uma função) - Condicionais provavelmente devem ir para uma função separada
  • 30. Aspectos específicos: funções • Funções devem fazer uma e apenas uma coisa, e fazê-la corretamente • evita repetição de código em diferentes funções • Uma função que faz apenas uma coisa não pode ser dividida em seções • Se não é possível extrair uma sub-função de dentro dela cujo nome não seria o mesmo que o nome que ela já tem, ela provavelmente faz só uma coisa • Exemplo: public void pay() { for (Employee e : employees) { if (e.isPayday()) { Money pay = e.calculatePay(); e.deliverPay(pay); } } }
  • 31. Aspectos específicos: funções public void pay() { for (Employee e : employees) { if (e.isPayday()) { Money pay = e.calculatePay(); e.deliverPay(pay); } } } • Esta função faz mais que uma coisa! • Itera por todos os empregados • Checa para ver quais empregados precisam ser pagos • Paga os empregados
  • 32. Aspectos específicos: funções public void pay() { Apenas itera for (Employee e : employees) payIfNecessary(e); } private void payIfNecessary(Employee e) { Verifica se o if (e.isPayday()) funcionário precisa calculateAndDeliverPay(); ser pago } private void paga o empregado calculateAndDeliverPay(Employee e) { Money pay = e.calculatePay(); e.deliverPay(pay); } • Será um exagero?
  • 33. Aspectos específicos: funções • Um único nível de abstração • Todas as linhas de uma função devem operar no mesmo nível • Quando detalhes se misturam a conceitos mais abstratos, mais e mais detalhes tendem a se insinuar • É o primeiro passo rumo às funções gigantes • Exemplo: public void gameLoop() { advanceTimer(); moveMonsters(); movePlayers(); removeDeadBodies(); if (keyPressed) { if key.scancode == “X”; then... Hein?!?! } }
  • 34. Aspectos específicos: funções • O número de argumentos de uma função deve ser pequeno • Argumentos dificultam os testes • um grande número de argumentos sugere que a função faz mais que uma coisa • um grande número de argumentos sugere que a função é usada de maneiras muito díspares • Argumentos que na verdade são “flags” praticamente garantem que a função faz mais que uma coisa - rotaciona (int angulo, bool sentidoHorario) - rotacionaHorario (int angulo), rotacionaAntiHorario (int angulo) • Funções devem evitar efeitos colaterais • Uma função deve ter um efeito sobre um objeto OU devolver algo
  • 35. Visão geral • Por que falar de beleza? • O que é beleza? • O que é beleza no desenvolvimento de software? • Aspectos específicos: nomes • Aspectos específicos: funções • Aspectos específicos: comentários
  • 36. Aspectos específicos: comentários • Comentários são, no máximo, um mal necessário • O quase único uso dos comentários é compensar nossa incapacidade de expressão através do código • Comentários são mentirosos • Comentários nem sempre acompanham as mudanças no código • Mantê-los requer tempo; Na prática, mantê-los acaba sendo impossível • A verdade está em um único lugar: no código
  • 37. Aspectos específicos: comentários • Bons comentários: • Comentários sobre aspectos legais que influenciam o código • Alguns tipos de comentários informativos, como explicações sobre expressões regulares • Esclarecimentos sobre decisões tomadas em função não da implementação, mas do problema • Esclarecimentos sobre bibliotecas de terceiros que não são tão claras • Comentários que frisam a importância de um determinado elemento • Comentários tipo TODO e JavaDoc para APIs públicas
  • 38. Bibliografia • Fontes relevantes sobre o tema: • Robert C. Martin. Clean Code - A Handbook of Agile Software Craftsmanship. Prentice Hall. 2008. • Andy Oram and Greg Wilson. Beautiful Code. O'Reilly. 2007. • beaut.e(code) - exposição de arte por Bob Hanmer, Karen Hanmer e Andrea Polli. Algum material pode ser acessado em http://karenhanmer.com/gallery/? gallery=beautecode • Conversas e entrevistas • Estes slides foram baseados no trabalho de João Machini de Miranda - IME/USP
  • 39. Obrigado! Centro de Competência em Software Livre IME/USP Nosso sítio web está no endereço: http://ccsl.ime.usp.br