SlideShare ist ein Scribd-Unternehmen logo
1 von 146
Downloaden Sie, um offline zu lesen
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        www.akitaonrails.com
           (Fabio Akita)
          goruco2008.confreaks.com/04_davis.html




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




Machucando Código
    por Diversão
      e Lucro
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


          Criando Expectativa

   • 142 slides em 30 minutos.
    • Isto será rápido.
   • Não é a forma como normalmente apresento.
    • É mais sobre melhorar você do que o código.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




  Uma
História
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                Código Legado

   • Qualquer código que você não escreveu é legado.
   • Toda empresa tem tonelada de legados.
      • Mesmo startups.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




 Ou:                         GoRuCo 2008
Machucando Código por Diversão e Lucro      Ryan Davis, Seattle.rb




                                    New Place, Inc.




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb



                                         @#$%!!!




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                                    K!
                                  AC
                               CR




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                                                      M!
                                                    A
                                               BL




                             GoRuCo 2008
Machucando Código por Diversão e Lucro        Ryan Davis, Seattle.rb




                                         BAM!!!

                                !
                              K
                           AC            SN
                         R                 ICK
                       C
                                              !




                             GoRuCo 2008
Machucando Código por Diversão e Lucro      Ryan Davis, Seattle.rb




                                         YAY!




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




Moral desta
 história?

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




   Pessoas vão te
    incriminar se
    machucá-las
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




    Código
     não.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Esta apresentação é
         um evento de “saída”
              para mim


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       Meu nome é Ryan, e…



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            …adoro machucar
               código…


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                …e estou Bem!



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


 Por que machucar código?

  • Machucar código é divertido!
  • Pode te tornar um programador e testador melhor.
  • Pode tornar o código mais limpo, claro e fácil de
      testar, escrever e manter ... até pode torná-lo mais
      rápido.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                   Sadismo Ruby:
                   nome
                   A tendência de derivar
                   prazer infringindo dor
                   ao software.
                   Esp. mal software.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            É apenas outra
          maneira de enxergar
          desenvolvimento de
               software

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       Eu dou risada toda vez
        que acho código que
            posso punir.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




               Código com
            complexidade que
            conheço, eu posso
                resolver.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            É sobre mudar sua
            perspectiva sobre
               código ruim.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




             Torne divertido
          descobrir e corrigir e
          fará isso mais vezes.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




      Sadismo Ruby vêm em
          várias formas:


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            Matar um bug
         escrevendo um teste.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




      Lendo código esperto
     demais e se coçar para
     quebrá-lo em pedaços.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




     Explodindo mal design,
     tornando-o mais rápido
       com menos código.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




          e muito, muito mais.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                    Um Exemplo
   • Um projeto rails de mídia social de 2 meses foi
       arrastado por 12 meses.


      • Ligando ActiveRecord a WebDAV. Emulando o
         banco de dados inteiro via propriedades
         WebDAV.
         Desnecessariamente complexo e lento!


   • Então, arranquei o WebDAV num fim de semana.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                            Antes:
             Terminado em 74.77783 segundos.
             622 testes, 2502 asserções




                          Depois:
            Terminado em 5.258559 segundos.
            330 testes, 961 asserções


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

   Tempo de Teste em 6 Meses



                            DAV



                                               Post DAV


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Por alguma Razão as
           pessoas amam
            complexidade.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




           Elas festejam nisso.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




          A comunidade Ruby
          não se parece única
             nesse sentido.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




               Eu não sou uma
               dessas pessoas.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       Mas, eu costumava ser
            uma delas.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                   Eu melhorei...



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       ...e você também pode
               melhorar.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro                                                          Ryan Davis, Seattle.rb


   Minha História de Programação
                        10


                         9


                         8


                         7


                         6
       Fu/Style Units




                                                                                                                  Ruby
                                                                                                                  Sadism/
                         5                                                                                        Asceticism

                                                                                  Perl/
                         4                                                                            Ruby
                                                                                  Python/
                                                      UNIX/                       etc
                                                      Smalltalk/
                         3
                                                      OO Epiphany

                                         Pascal
                         2

                                                                  C++
                         1 Logo
                                                  C
                               BASIC
                        0
                        1984      1986   1988     1990     1992     1994    1996        1998   2000     2002   2004        2007

                                                                           Year




                                                          GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




               Ascetismo Ruby:
               noun
               Caracterizado por ou
               sugerindo a prática de severa
               auto-disciplina &
               abstenção de todas as formas
               de indulgência.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                    Flageladores




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            Testar Antes é uma
              forma de auto-
                 disciplina.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       YAGNI é uma forma de
           abstenção.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro        Ryan Davis, Seattle.rb


                       Ascéticos:
              Vida Real™                       Ruby
          Evite possessões               Evite complexidade
              materiais.                        extra.

        Auto-disciplina para          Auto-disciplina para
           chegar à alta             melhor entender a si e
          espiritualidade.            a mente do código.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


         O que é indulgência?
   • Código desnecessariamente complexo e que tenta
      se esperto demais.


   • Código ou design que você não imediatamente
      precise. Os “e se”.


   • Débito Técnico.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                 Débito Técnico
   • Pular design é como pegar dinheiro emprestado.
   • Refatoramento é como o princípio de pagar de
       volta.


   • Juros são pagos com tempo gasto com
       complexidade.

           —Ward Cunningham–ComplexityAsDebt, c2.com
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


   80:20 ou Princípio de Pareto
 • Na maioria dos sistemas existe desequilíbrio entre
    produtores/consumidores, dinheiro/pessoas, etc.

    • 85+% da terra é ocupada por 5% das pessoas.
    • 80% do tempo é gasto com 20% do código.
 • Use essa tendência para focar esforços de forma
    eficiente e objetiva.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                  Sinal : Barulho
   • Normalmente relacionado a 80:20.
   • Foque no que é importante.
   • Minimize interrupções e tarefas irrelevantes para
       ter mais tarefas reais concluídas.

   • Como meu gerente favorito gosta de falar:
    • Grandes Crocodilos, Pequenos Crocodilos,
         Pântano.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


           Em outras palavras:
     “A obrigação do desenvolvedor é garantir que
      o código sendo escrito mostre da maneira
         mais clara sobre como a solução foi
       entendida no momento da sua escrita.”

                            –Ward Cunningham, c2.com

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                    Um Exemplo
 • test/unit & rspec são reis de testes/specs mas são
     realmente grandes.

 • O mspec de Brian Ford (do rubinius) é mais novo,
     pequeno, & compatível com rspec.

 • O bacon de Christian Neukirchen & test/spec são
     alternativas minimalistas de spec.

 • miniunit vai mais fundo: test+spec+mock < 1kloc.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro                                Ryan Davis, Seattle.rb

                                  lib                              test/spec

   15,000

                                                                                               12,862

   11,250



    7,500                                                                      7,785

                                                           6,476




    3,750
              3,571
                                           2,763
                          2,464



       0
                  test/unit                        mspec                               rspec


                                        GoRuCo 2008
Machucando Código por Diversão e Lucro                               Ryan Davis, Seattle.rb

                                  lib                             test/spec

   15,000



   11,250



    7,500



    3,750


                                                                                        1,115
                                                                              833
       0                                                    578
                                           395
                            310
              298
                    bacon                        miniunit                       test/spec


                                        GoRuCo 2008
Machucando Código por Diversão e Lucro                                Ryan Davis, Seattle.rb

                                   lib                             test/spec

    1,200
                                                                                         1,115




      900
                                                                               833




      600
                                                             578



                                            395
      300                    310
               298




       0
                     bacon                        miniunit                       test/spec


                                         GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        Acredito que sadismo
        e ascetismo Ruby são
          muito poderosos.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




   Mas chegar lá não é fácil.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Requer entender a si
           mesmo tão bem
         quanto se entende o
               código.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




              Desenvolvimento
                Orientado a
               Introspecção


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




     Como                 faço melhor?
     Como                 não vi aquele bug?
     Onde                 estou perdendo em clareza?
     Como                 posso usar melhor minhas
                          ferramentas?
     Onde                 desperdiço meu tempo?
     Como                 me foco melhor?
     Onde                 estou me segurando?
                          estou errado?



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Faça essas perguntas
          constantemente!


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-Melhoria:
                               Leia!
   • 1 livro nerd / mês = 12× média da indústria.
   • c2.com & outros wikis c/ pessoas espertas.
      • Fique tão próximo dos experts quanto posssível.
   • Alguns blogs espertos.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro      Ryan Davis, Seattle.rb


        Ignorância NÃO é boa
       “Pessoas que fazem coisas de mal jeito, [...]
       normalmente são altamente confiantes em
         suas habilidades, de fato, mais do que
          pessoas que fazem as coisas direito.”

                                         Erica Goode, NYT
                 reportando em Dr. David Dunning, Cornell

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-Melhoria:
                              Foco!
   • Fique longe de:
    • WTF, coding horror, forums idiotas.
    • Um bilhão de blogs em seu leitor de feed.
    • Toneladas de mailing lists super-ativas.
   • Trabalhe no que é realmente importante.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro                   Ryan Davis, Seattle.rb



                                Urgente                  Não Urgente
                                                                 Prevenção
                                     Pressão
                                                          Planejamento Pró-ativo
          Importante            Apagar Incêndios
                                                         Implementando Sistemas
                           Projetos orientados a datas
                                                          Prevenção de Cansaço



             Não                 Interrupções                      TV
                            Apagar alguns Incêndios             Youtube
          Importante         Maioria das Reuniões        Outras perdas de tempo




             –7 Habits of Highly Effective People–Covey

                              GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-Melhoria:
                            Cresça!
   • Aprenda uma nova linguagem por ano.
   • Aprenda suas ferramentas, a fundo. Agora mais a
       fundo.
   • Examine seus hábitos de desenvolvimento.
    • Codifique com outras pessoas.
   • Estude alguma coisa não orientada a código.
    • Pessoas de multi-disciplinares sempre são mais
         interessante e codificam melhor.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-Melhoria:
                           Empurre!

        Escreva mais código. Muito.

            Quantidade > Qualidade
               (algumas vezes)

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


             Desafio dos Potes

   • Um professor de potes disse à metade da classe
       que suas notas dependeriam de uma única peça
       que eles produziriam no final do curso.

   • Ele disse à outra metade que suas notas seriam
       baseadas no volume de todas as peças criadas.

   • Qual metade você acha que produziu melhores
       peças ao final?

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

       “A função da grande maioria dos trabalhos
       artísticos é simplesmente lhe ensinar como
         fazer a pequena fração de sua arte que
                       levanta vôo.

        Uma das lições básicas e difíceis que todo
        artista precisa aprender é que mesmo as
           peças fracassadas são essenciais.”

                     —Art & Fear—Bayles & Orland

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-melhoria:
                   Pressione, mais!
   • Seja competitivo. Competição é prática.
   • Desafie o Status Quo.
      • Eles estão quase sempre errados.
         • (Mesmo quando estão certos)
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


         Não seja uma ovelha!




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-melhoria:
                              Sinta!
   • Deixe as opiniões fluírem. Tenha opinião!
    • Mas não as deixe mandar em você.
   • zentest, flog, & heckledesenvolvimento. amor por
                            todos vieram do
     boas ferramentas de

   • vlad & image_science vieram do ódio de código
     impossivelmente complexo.
    • Eu gastei 10 hrs debugando UM problema de
       capistrano antes de escrever vlad.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-melhoria:
                          Feedback
• Use feedback:
   • Peça por ele.
   • Ouça ele.
   • Retroalimente o feedback.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb

                 Auto-melhoria:
                          Feedback
• Use feedback:
   • Peça por ele.
   • Ouça ele.
   • Retroalimente o feedback.
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


        Encontre seu balanço




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       Ferramentas
       que podem
          ajudar
                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                          autotest
   • Você provavelmente não tinha percebido que usar
       autotest é uma forma de sadismo e ascetismo
       ruby, não é?


   • Pobre cara do Doom ...


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                          autotest
   • Você provavelmente não tinha percebido que usar
       autotest é uma forma de sadismo e ascetismo
       ruby, não é?


   • Pobre cara do Doom ...


                             GoRuCo 2008
Machucando Código por Diversão e Lucro              Ryan Davis, Seattle.rb


                               Flog
                                         class Test


  • Relator de complexidade
                                           def blah           #   11.2 =
                                             a = eval quot;1+1quot;   #   1.2 + 6.0 +
                                             if a == 2 then   #   1.2 + 1.2 + 0.4 +
     baseado em métricas ABC.                  puts quot;yayquot;     #   1.2
                                             end


  • Nota Flog é correlato com
                                           end
                                         end

     complexidade de teste.              Test#blah: (11.2)
                                              6.0: eval


  • Quanto maior a nota flog,
                                              1.2: branch
                                              1.2: ==
                                              1.2: puts
     mais difícil de ter um teste             1.2: assignment

     completo (& bom).
                                              0.4: lit_fixnum




                             GoRuCo 2008
Machucando Código por Diversão e Lucro                          Ryan Davis, Seattle.rb


   Complexidade Desnecessária 1
    if MODELS.keys.inject(true) {|b, klass| b and
    klass.constantize.columns.map(&:name).include? association.options[:foreign_key]} then
      # ...
    end




                                                      main#none: (22.9)
         	 1	linha if(!)                                   7.0: to_proc_normal
                                                           3.3: assignment
                                                           3.1: branch
         	 132	caracteres                                  2.0: inject
                                                           1.8: constantize
                                                           1.8: association
         
 132
méd carac                                   1.6: columns
                                                           1.6: options
                                                           1.4: []
         	22.9	flog                                         1.4: block_pass
                                                           1.4: map
                                                           1.2: include?
                                                           1.2: keys




                                      GoRuCo 2008
Machucando Código por Diversão e Lucro                         Ryan Davis, Seattle.rb


   Complexidade Desnecessária 2
    fk = association.options[:foreign_key]
    if MODELS.keys.inject(true) {|b, klass| b and
    klass.constantize.columns.map(&:name).include? fk} then
      # ...
    end



                                                      main#none: (23.5)
         	 3	linhas                                        7.5: to_proc_normal
                                                           4.7: assignment
                                                           3.4: branch
         	 144	caracteres                                  2.2: inject
                                                           1.9: constantize
                                                           1.7: columns
         
 48
méd carac.                                   1.5: block_pass
                                                           1.5: map
                                                           1.5: association
         	23.5	flog                                         1.3: include?
                                                           1.3: keys
                                                           1.3: options
                                                           1.1: []




                                      GoRuCo 2008
Machucando Código por Diversão e Lucro                          Ryan Davis, Seattle.rb


   Complexidade Desnecessária 3
    fk = association.options[:foreign_key]
    columns = MODELS.keys.map { |key| key.constantize.columns.map(&:name) }
    if columns.inject(true) {|b, column| b and column.include? fk} then
      # ...
    end



                                                      main#none: (22.8)
         	 4	linhas                                        7.0: assignment
                                                           6.0: to_proc_normal
                                                           4.5: branch
         	 182	caracteres                                  2.3: map
                                                           2.2: inject
                                                           1.6: constantize
         
 45
méd caract                                   1.5: association
                                                           1.4: columns
                                                           1.3: include?
         	23.5	flog                                         1.3: options
                                                           1.3: keys
                                                           1.2: block_pass
                                                           1.1: []




                                      GoRuCo 2008
Machucando Código por Diversão e Lucro                          Ryan Davis, Seattle.rb


   Complexidade Desnecessária 4
    fk = association.options[:foreign_key]
    columns = MODELS.keys.map { |key| key.constantize.columns.map(&:name) }
    if columns.all? {|column| column.include? fk} then
      # ...
    end



                                                      main#none: (20.8)
         	 4	linhas                                        6.0: to_proc_normal
                                                           4.6: assignment
                                                           3.3: branch
         	 165	caracteres                                  2.3: map
                                                           1.6: constantize
                                                           1.5: association
         
 41
méd carac                                    1.4: columns
                                                           1.3: keys
                                                           1.3: options
         	20.8	flog                                         1.2: block_pass
                                                           1.2: include?
                                                           1.1: []
                                                           1.1: all?




                                      GoRuCo 2008
Machucando Código por Diversão e Lucro                          Ryan Davis, Seattle.rb


   Complexidade Desnecessária 5
    fk = association.options[:foreign_key]
    columns = MODELS.keys.map { |key| key.constantize.columns.map { |c| c.name } }
    if columns.all? {|column| column.include? fk} then
      # ...
    end



                                                      main#none: (15.9)
         	 4	linhas                                        5.9: assignment
                                                           4.5: branch
                                                           2.3: map
         	 172	caracteres                                  1.6: constantize
                                                           1.5: association
                                                           1.4: columns
         
 43
méd carac                                    1.3: name
                                                           1.3: options
                                                           1.3: keys
         	15.9	flog                                         1.2: include?
                                                           1.1: []
                                                           1.1: all?




                                      GoRuCo 2008
Machucando Código por Diversão e Lucro                          Ryan Davis, Seattle.rb


   Complexidade Desnecessária 5
    fk = association.options[:foreign_key]
    columns = MODELS.keys.map { |key| key.constantize.columns.map { |c| c.name } }
    if columns.all? {|column| column.include? fk} then
      # ...
    end



                                                      main#none: (15.9)
         	 4	linhas                                        5.9: assignment
                                                           4.5: branch
                                                           2.3: map
         	 172	caracteres                                  1.6: constantize
                                                           1.5: association
                                                           1.4: columns
         
 43
méd carac                                    1.3: name
                                                           1.3: options
                                                           1.3: keys
         	15.9	flog                                         1.2: include?
                                                           1.1: []
                                                           1.1: all?


 Muito mais limpo, claro e rápido

                                      GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                Ferramentas de
                  Cobertura
         São excelentes para mostrar buracos.




                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                         …mas…



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            De jeito nenhum
         significam qualidade
              dos testes.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




              quot;Temos 100% de
                 coberturaquot;


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                      … E daí?!?



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




          Você pode ter 100%
          de cobertura com 0
              asserções.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




           (ou, mais freqüente:
             más asserções)


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


              Exemplo absurdo
         class Vida
                                                     VIVA!
           def significado
             42                                     100% de
           end
                                                   cobertura!
         end

         class TestVida < Test::Unit::TestCase
           def test_significado
             real = Vida.new.significado
             esperado = 6 * 9
             assert_equal esperado, real
           end
         end


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




              O que 100% de
             cobertura significa
                  então?


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Cobertura é o Raio-X
         do mundo do código.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        Raios-X são ótimas
      ferramentas, mas não a
       use quando você está
            sangrando.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb


                            Heckle
   • Ferramenta mais sádica que escrevi.
   • Muda sua implementação (em
       tempo real) para verificar se seus
       testes são bons.


   • Se seus testes passam depois
       disso, você está perdendo casos.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       Para Repetir

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




      Divirta-se machucando
      código ruim e você terá
        menos deles com o
               tempo.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




       Pratique severa auto-
      disciplina & abstenção.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




          Evite complexidade.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                  Pratique
              Desenvolvimento
                Orientado à
               Introspecção.

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                    Conheça-te.
                    Melhora-te.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




           Use todas as
      ferramentas que puder.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        Mas use a ferramenta
        certa para o trabalho.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




            Tenha uma opinião
                    &
            Sinta seu código


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        Para Fechar

                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Frank Herbert estava
               errado


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




              Medo não é o
           assassino da mente


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Apatia é o assassino
              da mente


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




           Você precisa se
         importar pelo código


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                           Ame-o



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                      ou o Odeie



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        Qualquer um é melhor
           do que Apatia


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




           Preferível ao
       desenvolvedor que diz


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




      “Apenas sou pago para
         escrever código”


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




  Você vai acabar tendo que
    manter o código deles


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




    (porque eles vão embora)



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




     Odiando o código deles.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




O impacto deles no projeto.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




Na produtividade e moral da
          equipe.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




               Portanto, Ame o
                  código…


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                  …ou o Odeie.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




               Se você o amar:



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                      Cuide dele.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                 Faça o crescer.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Torne-o maravilhoso.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




               Se você o odiar:



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                  Machuque-o.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                  Despedace-o.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




                   Reescreva-o.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




        Seja apaixonado pelo
        que está trabalhando.


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




         Caso contrário você
        está morto por dentro


                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




 …assim como seu código.



                             GoRuCo 2008
Machucando Código por Diversão e Lucro     Ryan Davis, Seattle.rb




             Obrigado.

                             GoRuCo 2008

Weitere ähnliche Inhalte

Mehr von Fabio Akita

Elixir -Tolerância a Falhas para Adultos - GDG Campinas
Elixir  -Tolerância a Falhas para Adultos - GDG CampinasElixir  -Tolerância a Falhas para Adultos - GDG Campinas
Elixir -Tolerância a Falhas para Adultos - GDG CampinasFabio Akita
 
Desmistificando Mitos de Tech Startups - Intercon 2017
Desmistificando Mitos de Tech Startups - Intercon 2017Desmistificando Mitos de Tech Startups - Intercon 2017
Desmistificando Mitos de Tech Startups - Intercon 2017Fabio Akita
 
30 Days to Elixir and Crystal and Back to Ruby
30 Days to Elixir and Crystal and Back to Ruby30 Days to Elixir and Crystal and Back to Ruby
30 Days to Elixir and Crystal and Back to RubyFabio Akita
 
Uma Discussão sobre a Carreira de TI
Uma Discussão sobre a Carreira de TIUma Discussão sobre a Carreira de TI
Uma Discussão sobre a Carreira de TIFabio Akita
 
THE CONF - Opening Keynote
THE CONF - Opening KeynoteTHE CONF - Opening Keynote
THE CONF - Opening KeynoteFabio Akita
 
A Journey through New Languages - Rancho Dev 2017
A Journey through New Languages - Rancho Dev 2017A Journey through New Languages - Rancho Dev 2017
A Journey through New Languages - Rancho Dev 2017Fabio Akita
 
Desmistificando Mitos de Startups - Sebrae - AP
Desmistificando Mitos de Startups - Sebrae - APDesmistificando Mitos de Startups - Sebrae - AP
Desmistificando Mitos de Startups - Sebrae - APFabio Akita
 
A Journey through New Languages - Guru Sorocaba 2017
A Journey through New Languages - Guru Sorocaba 2017A Journey through New Languages - Guru Sorocaba 2017
A Journey through New Languages - Guru Sorocaba 2017Fabio Akita
 
A Journey through New Languages - Insiter 2017
A Journey through New Languages - Insiter 2017A Journey through New Languages - Insiter 2017
A Journey through New Languages - Insiter 2017Fabio Akita
 
A Journey through New Languages - Locaweb Tech Day
A Journey through New Languages - Locaweb Tech DayA Journey through New Languages - Locaweb Tech Day
A Journey through New Languages - Locaweb Tech DayFabio Akita
 
A Journey through new Languages - Intercon 2016
A Journey through new Languages - Intercon 2016A Journey through new Languages - Intercon 2016
A Journey through new Languages - Intercon 2016Fabio Akita
 
Premature Optimization 2.0 - Intercon 2016
Premature Optimization 2.0 - Intercon 2016Premature Optimization 2.0 - Intercon 2016
Premature Optimization 2.0 - Intercon 2016Fabio Akita
 
Conexão Kinghost - Otimização Prematura
Conexão Kinghost - Otimização PrematuraConexão Kinghost - Otimização Prematura
Conexão Kinghost - Otimização PrematuraFabio Akita
 
The Open Commerce Conference - Premature Optimisation: The Root of All Evil
The Open Commerce Conference - Premature Optimisation: The Root of All EvilThe Open Commerce Conference - Premature Optimisation: The Root of All Evil
The Open Commerce Conference - Premature Optimisation: The Root of All EvilFabio Akita
 
Premature optimisation: The Root of All Evil
Premature optimisation: The Root of All EvilPremature optimisation: The Root of All Evil
Premature optimisation: The Root of All EvilFabio Akita
 
Elixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
Elixir - Tolerância a Falhas para Adultos - Secot VIII SorocabaElixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
Elixir - Tolerância a Falhas para Adultos - Secot VIII SorocabaFabio Akita
 
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada SantistaElixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada SantistaFabio Akita
 
Evento Codeminer UFRN 2016
Evento Codeminer UFRN 2016Evento Codeminer UFRN 2016
Evento Codeminer UFRN 2016Fabio Akita
 
QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
QCON SP 2016 - Elixir: Tolerância a Falhas para AdultosQCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
QCON SP 2016 - Elixir: Tolerância a Falhas para AdultosFabio Akita
 
"Elixir of Life" - Dev In Santos
"Elixir of Life" - Dev In Santos"Elixir of Life" - Dev In Santos
"Elixir of Life" - Dev In SantosFabio Akita
 

Mehr von Fabio Akita (20)

Elixir -Tolerância a Falhas para Adultos - GDG Campinas
Elixir  -Tolerância a Falhas para Adultos - GDG CampinasElixir  -Tolerância a Falhas para Adultos - GDG Campinas
Elixir -Tolerância a Falhas para Adultos - GDG Campinas
 
Desmistificando Mitos de Tech Startups - Intercon 2017
Desmistificando Mitos de Tech Startups - Intercon 2017Desmistificando Mitos de Tech Startups - Intercon 2017
Desmistificando Mitos de Tech Startups - Intercon 2017
 
30 Days to Elixir and Crystal and Back to Ruby
30 Days to Elixir and Crystal and Back to Ruby30 Days to Elixir and Crystal and Back to Ruby
30 Days to Elixir and Crystal and Back to Ruby
 
Uma Discussão sobre a Carreira de TI
Uma Discussão sobre a Carreira de TIUma Discussão sobre a Carreira de TI
Uma Discussão sobre a Carreira de TI
 
THE CONF - Opening Keynote
THE CONF - Opening KeynoteTHE CONF - Opening Keynote
THE CONF - Opening Keynote
 
A Journey through New Languages - Rancho Dev 2017
A Journey through New Languages - Rancho Dev 2017A Journey through New Languages - Rancho Dev 2017
A Journey through New Languages - Rancho Dev 2017
 
Desmistificando Mitos de Startups - Sebrae - AP
Desmistificando Mitos de Startups - Sebrae - APDesmistificando Mitos de Startups - Sebrae - AP
Desmistificando Mitos de Startups - Sebrae - AP
 
A Journey through New Languages - Guru Sorocaba 2017
A Journey through New Languages - Guru Sorocaba 2017A Journey through New Languages - Guru Sorocaba 2017
A Journey through New Languages - Guru Sorocaba 2017
 
A Journey through New Languages - Insiter 2017
A Journey through New Languages - Insiter 2017A Journey through New Languages - Insiter 2017
A Journey through New Languages - Insiter 2017
 
A Journey through New Languages - Locaweb Tech Day
A Journey through New Languages - Locaweb Tech DayA Journey through New Languages - Locaweb Tech Day
A Journey through New Languages - Locaweb Tech Day
 
A Journey through new Languages - Intercon 2016
A Journey through new Languages - Intercon 2016A Journey through new Languages - Intercon 2016
A Journey through new Languages - Intercon 2016
 
Premature Optimization 2.0 - Intercon 2016
Premature Optimization 2.0 - Intercon 2016Premature Optimization 2.0 - Intercon 2016
Premature Optimization 2.0 - Intercon 2016
 
Conexão Kinghost - Otimização Prematura
Conexão Kinghost - Otimização PrematuraConexão Kinghost - Otimização Prematura
Conexão Kinghost - Otimização Prematura
 
The Open Commerce Conference - Premature Optimisation: The Root of All Evil
The Open Commerce Conference - Premature Optimisation: The Root of All EvilThe Open Commerce Conference - Premature Optimisation: The Root of All Evil
The Open Commerce Conference - Premature Optimisation: The Root of All Evil
 
Premature optimisation: The Root of All Evil
Premature optimisation: The Root of All EvilPremature optimisation: The Root of All Evil
Premature optimisation: The Root of All Evil
 
Elixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
Elixir - Tolerância a Falhas para Adultos - Secot VIII SorocabaElixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
Elixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
 
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada SantistaElixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
 
Evento Codeminer UFRN 2016
Evento Codeminer UFRN 2016Evento Codeminer UFRN 2016
Evento Codeminer UFRN 2016
 
QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
QCON SP 2016 - Elixir: Tolerância a Falhas para AdultosQCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
 
"Elixir of Life" - Dev In Santos
"Elixir of Life" - Dev In Santos"Elixir of Life" - Dev In Santos
"Elixir of Life" - Dev In Santos
 

Sadismo Ruby e como melhorar código legado

  • 1. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb www.akitaonrails.com (Fabio Akita) goruco2008.confreaks.com/04_davis.html GoRuCo 2008
  • 2. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Machucando Código por Diversão e Lucro GoRuCo 2008
  • 3. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Criando Expectativa • 142 slides em 30 minutos. • Isto será rápido. • Não é a forma como normalmente apresento. • É mais sobre melhorar você do que o código. GoRuCo 2008
  • 4. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Uma História GoRuCo 2008
  • 5. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 6. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Código Legado • Qualquer código que você não escreveu é legado. • Toda empresa tem tonelada de legados. • Mesmo startups. GoRuCo 2008
  • 7. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 8. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 9. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 10. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 11. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 12. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 13. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ou: GoRuCo 2008
  • 14. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb New Place, Inc. GoRuCo 2008
  • 15. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 16. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 17. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb GoRuCo 2008
  • 18. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb @#$%!!! GoRuCo 2008
  • 19. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb K! AC CR GoRuCo 2008
  • 20. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb M! A BL GoRuCo 2008
  • 21. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb BAM!!! ! K AC SN R ICK C ! GoRuCo 2008
  • 22. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb YAY! GoRuCo 2008
  • 23. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Moral desta história? GoRuCo 2008
  • 24. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Pessoas vão te incriminar se machucá-las GoRuCo 2008
  • 25. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Código não. GoRuCo 2008
  • 26. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Esta apresentação é um evento de “saída” para mim GoRuCo 2008
  • 27. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Meu nome é Ryan, e… GoRuCo 2008
  • 28. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb …adoro machucar código… GoRuCo 2008
  • 29. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb …e estou Bem! GoRuCo 2008
  • 30. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Por que machucar código? • Machucar código é divertido! • Pode te tornar um programador e testador melhor. • Pode tornar o código mais limpo, claro e fácil de testar, escrever e manter ... até pode torná-lo mais rápido. GoRuCo 2008
  • 31. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Sadismo Ruby: nome A tendência de derivar prazer infringindo dor ao software. Esp. mal software. GoRuCo 2008
  • 32. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb É apenas outra maneira de enxergar desenvolvimento de software GoRuCo 2008
  • 33. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Eu dou risada toda vez que acho código que posso punir. GoRuCo 2008
  • 34. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Código com complexidade que conheço, eu posso resolver. GoRuCo 2008
  • 35. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb É sobre mudar sua perspectiva sobre código ruim. GoRuCo 2008
  • 36. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Torne divertido descobrir e corrigir e fará isso mais vezes. GoRuCo 2008
  • 37. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Sadismo Ruby vêm em várias formas: GoRuCo 2008
  • 38. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Matar um bug escrevendo um teste. GoRuCo 2008
  • 39. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Lendo código esperto demais e se coçar para quebrá-lo em pedaços. GoRuCo 2008
  • 40. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Explodindo mal design, tornando-o mais rápido com menos código. GoRuCo 2008
  • 41. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb e muito, muito mais. GoRuCo 2008
  • 42. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Um Exemplo • Um projeto rails de mídia social de 2 meses foi arrastado por 12 meses. • Ligando ActiveRecord a WebDAV. Emulando o banco de dados inteiro via propriedades WebDAV. Desnecessariamente complexo e lento! • Então, arranquei o WebDAV num fim de semana. GoRuCo 2008
  • 43. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Antes: Terminado em 74.77783 segundos. 622 testes, 2502 asserções Depois: Terminado em 5.258559 segundos. 330 testes, 961 asserções GoRuCo 2008
  • 44. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Tempo de Teste em 6 Meses DAV Post DAV GoRuCo 2008
  • 45. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Por alguma Razão as pessoas amam complexidade. GoRuCo 2008
  • 46. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Elas festejam nisso. GoRuCo 2008
  • 47. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb A comunidade Ruby não se parece única nesse sentido. GoRuCo 2008
  • 48. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Eu não sou uma dessas pessoas. GoRuCo 2008
  • 49. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Mas, eu costumava ser uma delas. GoRuCo 2008
  • 50. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Eu melhorei... GoRuCo 2008
  • 51. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb ...e você também pode melhorar. GoRuCo 2008
  • 52. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Minha História de Programação 10 9 8 7 6 Fu/Style Units Ruby Sadism/ 5 Asceticism Perl/ 4 Ruby Python/ UNIX/ etc Smalltalk/ 3 OO Epiphany Pascal 2 C++ 1 Logo C BASIC 0 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2007 Year GoRuCo 2008
  • 53. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ascetismo Ruby: noun Caracterizado por ou sugerindo a prática de severa auto-disciplina & abstenção de todas as formas de indulgência. GoRuCo 2008
  • 54. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Flageladores GoRuCo 2008
  • 55. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Testar Antes é uma forma de auto- disciplina. GoRuCo 2008
  • 56. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb YAGNI é uma forma de abstenção. GoRuCo 2008
  • 57. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ascéticos: Vida Real™ Ruby Evite possessões Evite complexidade materiais. extra. Auto-disciplina para Auto-disciplina para chegar à alta melhor entender a si e espiritualidade. a mente do código. GoRuCo 2008
  • 58. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb O que é indulgência? • Código desnecessariamente complexo e que tenta se esperto demais. • Código ou design que você não imediatamente precise. Os “e se”. • Débito Técnico. GoRuCo 2008
  • 59. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Débito Técnico • Pular design é como pegar dinheiro emprestado. • Refatoramento é como o princípio de pagar de volta. • Juros são pagos com tempo gasto com complexidade. —Ward Cunningham–ComplexityAsDebt, c2.com GoRuCo 2008
  • 60. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb 80:20 ou Princípio de Pareto • Na maioria dos sistemas existe desequilíbrio entre produtores/consumidores, dinheiro/pessoas, etc. • 85+% da terra é ocupada por 5% das pessoas. • 80% do tempo é gasto com 20% do código. • Use essa tendência para focar esforços de forma eficiente e objetiva. GoRuCo 2008
  • 61. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Sinal : Barulho • Normalmente relacionado a 80:20. • Foque no que é importante. • Minimize interrupções e tarefas irrelevantes para ter mais tarefas reais concluídas. • Como meu gerente favorito gosta de falar: • Grandes Crocodilos, Pequenos Crocodilos, Pântano. GoRuCo 2008
  • 62. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Em outras palavras: “A obrigação do desenvolvedor é garantir que o código sendo escrito mostre da maneira mais clara sobre como a solução foi entendida no momento da sua escrita.” –Ward Cunningham, c2.com GoRuCo 2008
  • 63. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Um Exemplo • test/unit & rspec são reis de testes/specs mas são realmente grandes. • O mspec de Brian Ford (do rubinius) é mais novo, pequeno, & compatível com rspec. • O bacon de Christian Neukirchen & test/spec são alternativas minimalistas de spec. • miniunit vai mais fundo: test+spec+mock < 1kloc. GoRuCo 2008
  • 64. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb lib test/spec 15,000 12,862 11,250 7,500 7,785 6,476 3,750 3,571 2,763 2,464 0 test/unit mspec rspec GoRuCo 2008
  • 65. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb lib test/spec 15,000 11,250 7,500 3,750 1,115 833 0 578 395 310 298 bacon miniunit test/spec GoRuCo 2008
  • 66. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb lib test/spec 1,200 1,115 900 833 600 578 395 300 310 298 0 bacon miniunit test/spec GoRuCo 2008
  • 67. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Acredito que sadismo e ascetismo Ruby são muito poderosos. GoRuCo 2008
  • 68. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Mas chegar lá não é fácil. GoRuCo 2008
  • 69. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Requer entender a si mesmo tão bem quanto se entende o código. GoRuCo 2008
  • 70. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Desenvolvimento Orientado a Introspecção GoRuCo 2008
  • 71. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Como faço melhor? Como não vi aquele bug? Onde estou perdendo em clareza? Como posso usar melhor minhas ferramentas? Onde desperdiço meu tempo? Como me foco melhor? Onde estou me segurando? estou errado? GoRuCo 2008
  • 72. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Faça essas perguntas constantemente! GoRuCo 2008
  • 73. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-Melhoria: Leia! • 1 livro nerd / mês = 12× média da indústria. • c2.com & outros wikis c/ pessoas espertas. • Fique tão próximo dos experts quanto posssível. • Alguns blogs espertos. GoRuCo 2008
  • 74. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ignorância NÃO é boa “Pessoas que fazem coisas de mal jeito, [...] normalmente são altamente confiantes em suas habilidades, de fato, mais do que pessoas que fazem as coisas direito.” Erica Goode, NYT reportando em Dr. David Dunning, Cornell GoRuCo 2008
  • 75. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-Melhoria: Foco! • Fique longe de: • WTF, coding horror, forums idiotas. • Um bilhão de blogs em seu leitor de feed. • Toneladas de mailing lists super-ativas. • Trabalhe no que é realmente importante. GoRuCo 2008
  • 76. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Urgente Não Urgente Prevenção Pressão Planejamento Pró-ativo Importante Apagar Incêndios Implementando Sistemas Projetos orientados a datas Prevenção de Cansaço Não Interrupções TV Apagar alguns Incêndios Youtube Importante Maioria das Reuniões Outras perdas de tempo –7 Habits of Highly Effective People–Covey GoRuCo 2008
  • 77. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-Melhoria: Cresça! • Aprenda uma nova linguagem por ano. • Aprenda suas ferramentas, a fundo. Agora mais a fundo. • Examine seus hábitos de desenvolvimento. • Codifique com outras pessoas. • Estude alguma coisa não orientada a código. • Pessoas de multi-disciplinares sempre são mais interessante e codificam melhor. GoRuCo 2008
  • 78. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-Melhoria: Empurre! Escreva mais código. Muito. Quantidade > Qualidade (algumas vezes) GoRuCo 2008
  • 79. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Desafio dos Potes • Um professor de potes disse à metade da classe que suas notas dependeriam de uma única peça que eles produziriam no final do curso. • Ele disse à outra metade que suas notas seriam baseadas no volume de todas as peças criadas. • Qual metade você acha que produziu melhores peças ao final? GoRuCo 2008
  • 80. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb “A função da grande maioria dos trabalhos artísticos é simplesmente lhe ensinar como fazer a pequena fração de sua arte que levanta vôo. Uma das lições básicas e difíceis que todo artista precisa aprender é que mesmo as peças fracassadas são essenciais.” —Art & Fear—Bayles & Orland GoRuCo 2008
  • 81. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-melhoria: Pressione, mais! • Seja competitivo. Competição é prática. • Desafie o Status Quo. • Eles estão quase sempre errados. • (Mesmo quando estão certos) GoRuCo 2008
  • 82. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Não seja uma ovelha! GoRuCo 2008
  • 83. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-melhoria: Sinta! • Deixe as opiniões fluírem. Tenha opinião! • Mas não as deixe mandar em você. • zentest, flog, & heckledesenvolvimento. amor por todos vieram do boas ferramentas de • vlad & image_science vieram do ódio de código impossivelmente complexo. • Eu gastei 10 hrs debugando UM problema de capistrano antes de escrever vlad. GoRuCo 2008
  • 84. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-melhoria: Feedback • Use feedback: • Peça por ele. • Ouça ele. • Retroalimente o feedback. GoRuCo 2008
  • 85. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Auto-melhoria: Feedback • Use feedback: • Peça por ele. • Ouça ele. • Retroalimente o feedback. GoRuCo 2008
  • 86. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Encontre seu balanço GoRuCo 2008
  • 87. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ferramentas que podem ajudar GoRuCo 2008
  • 88. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb autotest • Você provavelmente não tinha percebido que usar autotest é uma forma de sadismo e ascetismo ruby, não é? • Pobre cara do Doom ... GoRuCo 2008
  • 89. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb autotest • Você provavelmente não tinha percebido que usar autotest é uma forma de sadismo e ascetismo ruby, não é? • Pobre cara do Doom ... GoRuCo 2008
  • 90. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Flog class Test • Relator de complexidade def blah # 11.2 = a = eval quot;1+1quot; # 1.2 + 6.0 + if a == 2 then # 1.2 + 1.2 + 0.4 + baseado em métricas ABC. puts quot;yayquot; # 1.2 end • Nota Flog é correlato com end end complexidade de teste. Test#blah: (11.2) 6.0: eval • Quanto maior a nota flog, 1.2: branch 1.2: == 1.2: puts mais difícil de ter um teste 1.2: assignment completo (& bom). 0.4: lit_fixnum GoRuCo 2008
  • 91. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Complexidade Desnecessária 1 if MODELS.keys.inject(true) {|b, klass| b and klass.constantize.columns.map(&:name).include? association.options[:foreign_key]} then # ... end main#none: (22.9) 1 linha if(!) 7.0: to_proc_normal 3.3: assignment 3.1: branch 132 caracteres 2.0: inject 1.8: constantize 1.8: association 132 méd carac 1.6: columns 1.6: options 1.4: [] 22.9 flog 1.4: block_pass 1.4: map 1.2: include? 1.2: keys GoRuCo 2008
  • 92. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Complexidade Desnecessária 2 fk = association.options[:foreign_key] if MODELS.keys.inject(true) {|b, klass| b and klass.constantize.columns.map(&:name).include? fk} then # ... end main#none: (23.5) 3 linhas 7.5: to_proc_normal 4.7: assignment 3.4: branch 144 caracteres 2.2: inject 1.9: constantize 1.7: columns 48 méd carac. 1.5: block_pass 1.5: map 1.5: association 23.5 flog 1.3: include? 1.3: keys 1.3: options 1.1: [] GoRuCo 2008
  • 93. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Complexidade Desnecessária 3 fk = association.options[:foreign_key] columns = MODELS.keys.map { |key| key.constantize.columns.map(&:name) } if columns.inject(true) {|b, column| b and column.include? fk} then # ... end main#none: (22.8) 4 linhas 7.0: assignment 6.0: to_proc_normal 4.5: branch 182 caracteres 2.3: map 2.2: inject 1.6: constantize 45 méd caract 1.5: association 1.4: columns 1.3: include? 23.5 flog 1.3: options 1.3: keys 1.2: block_pass 1.1: [] GoRuCo 2008
  • 94. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Complexidade Desnecessária 4 fk = association.options[:foreign_key] columns = MODELS.keys.map { |key| key.constantize.columns.map(&:name) } if columns.all? {|column| column.include? fk} then # ... end main#none: (20.8) 4 linhas 6.0: to_proc_normal 4.6: assignment 3.3: branch 165 caracteres 2.3: map 1.6: constantize 1.5: association 41 méd carac 1.4: columns 1.3: keys 1.3: options 20.8 flog 1.2: block_pass 1.2: include? 1.1: [] 1.1: all? GoRuCo 2008
  • 95. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Complexidade Desnecessária 5 fk = association.options[:foreign_key] columns = MODELS.keys.map { |key| key.constantize.columns.map { |c| c.name } } if columns.all? {|column| column.include? fk} then # ... end main#none: (15.9) 4 linhas 5.9: assignment 4.5: branch 2.3: map 172 caracteres 1.6: constantize 1.5: association 1.4: columns 43 méd carac 1.3: name 1.3: options 1.3: keys 15.9 flog 1.2: include? 1.1: [] 1.1: all? GoRuCo 2008
  • 96. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Complexidade Desnecessária 5 fk = association.options[:foreign_key] columns = MODELS.keys.map { |key| key.constantize.columns.map { |c| c.name } } if columns.all? {|column| column.include? fk} then # ... end main#none: (15.9) 4 linhas 5.9: assignment 4.5: branch 2.3: map 172 caracteres 1.6: constantize 1.5: association 1.4: columns 43 méd carac 1.3: name 1.3: options 1.3: keys 15.9 flog 1.2: include? 1.1: [] 1.1: all? Muito mais limpo, claro e rápido GoRuCo 2008
  • 97. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ferramentas de Cobertura São excelentes para mostrar buracos. GoRuCo 2008
  • 98. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb …mas… GoRuCo 2008
  • 99. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb De jeito nenhum significam qualidade dos testes. GoRuCo 2008
  • 100. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb quot;Temos 100% de coberturaquot; GoRuCo 2008
  • 101. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb … E daí?!? GoRuCo 2008
  • 102. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Você pode ter 100% de cobertura com 0 asserções. GoRuCo 2008
  • 103. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb (ou, mais freqüente: más asserções) GoRuCo 2008
  • 104. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Exemplo absurdo class Vida VIVA! def significado 42 100% de end cobertura! end class TestVida < Test::Unit::TestCase def test_significado real = Vida.new.significado esperado = 6 * 9 assert_equal esperado, real end end GoRuCo 2008
  • 105. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb O que 100% de cobertura significa então? GoRuCo 2008
  • 106. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Cobertura é o Raio-X do mundo do código. GoRuCo 2008
  • 107. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Raios-X são ótimas ferramentas, mas não a use quando você está sangrando. GoRuCo 2008
  • 108. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Heckle • Ferramenta mais sádica que escrevi. • Muda sua implementação (em tempo real) para verificar se seus testes são bons. • Se seus testes passam depois disso, você está perdendo casos. GoRuCo 2008
  • 109. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Para Repetir GoRuCo 2008
  • 110. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Divirta-se machucando código ruim e você terá menos deles com o tempo. GoRuCo 2008
  • 111. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Pratique severa auto- disciplina & abstenção. GoRuCo 2008
  • 112. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Evite complexidade. GoRuCo 2008
  • 113. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Pratique Desenvolvimento Orientado à Introspecção. GoRuCo 2008
  • 114. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Conheça-te. Melhora-te. GoRuCo 2008
  • 115. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Use todas as ferramentas que puder. GoRuCo 2008
  • 116. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Mas use a ferramenta certa para o trabalho. GoRuCo 2008
  • 117. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Tenha uma opinião & Sinta seu código GoRuCo 2008
  • 118. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Para Fechar GoRuCo 2008
  • 119. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Frank Herbert estava errado GoRuCo 2008
  • 120. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Medo não é o assassino da mente GoRuCo 2008
  • 121. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Apatia é o assassino da mente GoRuCo 2008
  • 122. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Você precisa se importar pelo código GoRuCo 2008
  • 123. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Ame-o GoRuCo 2008
  • 124. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb ou o Odeie GoRuCo 2008
  • 125. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Qualquer um é melhor do que Apatia GoRuCo 2008
  • 126. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Preferível ao desenvolvedor que diz GoRuCo 2008
  • 127. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb “Apenas sou pago para escrever código” GoRuCo 2008
  • 128. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Você vai acabar tendo que manter o código deles GoRuCo 2008
  • 129. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb (porque eles vão embora) GoRuCo 2008
  • 130. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Odiando o código deles. GoRuCo 2008
  • 131. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb O impacto deles no projeto. GoRuCo 2008
  • 132. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Na produtividade e moral da equipe. GoRuCo 2008
  • 133. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Portanto, Ame o código… GoRuCo 2008
  • 134. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb …ou o Odeie. GoRuCo 2008
  • 135. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Se você o amar: GoRuCo 2008
  • 136. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Cuide dele. GoRuCo 2008
  • 137. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Faça o crescer. GoRuCo 2008
  • 138. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Torne-o maravilhoso. GoRuCo 2008
  • 139. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Se você o odiar: GoRuCo 2008
  • 140. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Machuque-o. GoRuCo 2008
  • 141. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Despedace-o. GoRuCo 2008
  • 142. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Reescreva-o. GoRuCo 2008
  • 143. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Seja apaixonado pelo que está trabalhando. GoRuCo 2008
  • 144. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Caso contrário você está morto por dentro GoRuCo 2008
  • 145. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb …assim como seu código. GoRuCo 2008
  • 146. Machucando Código por Diversão e Lucro Ryan Davis, Seattle.rb Obrigado. GoRuCo 2008