Anti-patterns
  Braga Geek Nights
  Luis Azevedo 2010




                       www.braceta.com
                  www.twi...
História
   O termo foi introduzido por Andrew Koening e
inspirado no livro Design Patterns do Gang of Four’s
Definição
   Um padrão que se repete (social, processual,
programaticamente, etc.) que tipicamente é uma má
         prátic...
Copy and paste
        programming
Copiar e modificar código em vez de criar soluções
                   genéricas.
Antipattern
Antipattern?
Antipattern
Design pattern?
Categorias
• Organizational anti-patterns
• Project management anti-patterns
• Analysis anti-patterns
• Software design an...
Organizational
Analisys Paralisis
Dedicar esforço desproporcionado na analise de um
                    projecto
Design by committee
Muitos colaboradores num design mas sem visão
                  unificada.
Project management
Death march
 Toda a gente sabe que o project irá ser um desastre,
                  excepto o CEO.

   No entanto a verdad...
Groupthink
Algo que um brainstorm não deve ser. Os membros do
grupo evitam lançar ideias fora da zona do conforto do
     ...
Smoke and mirrors
  (vaporware)
Demonstrar o quão não implementadas as
  funcionalidades/funções irão aparecer
Software Design
Gas factory
Um design desnecessariamente complexo. KISS!
Object Oriented
 Programming
BaseBean
Herdar funcionalidade utilitária de uma classe em vez
 de delegar ou utilizar composição (Roles, Traits?).

     ...
God Object
Concentrar demasiadas funções numa determinada
                    classe.

 GodObject jesus =(GodObject)new Jo...
Object Orgy
   Não existir possibilidade de impedir acesso aos
internals de um objecto. Normalmente associado ao
     Perl...
Poltergeist
 Objectos que apenas servem para passar informação
para outros. Tipicamente também conhecido o Design
        ...
Yo-Yo Problem
Existe uma hierarquia complexa de classes que obriga o
olhar para “cima” e para “baixo” para perceber o fluxo...
Methodological
Copy and paste
        programming
Copiar e modificar código em vez de criar soluções
                   genéricas.
Programming by
        permutation
 Ou “Programação por Acidente”. Tentar modificar o
código sem perceber muito bem o porqu...
Tester Driven
 Development ou BDD
Requisitos e funcionalidade são especificados utilizando
           bug reports. Agile Pr...
Improbability factor
Assumir que que algo é improvavel que aconteça. Por
   exemplo, verificar se um malloc retorna NULL.

...
Programming
Boat anchor
Manter uma parte do sistema, embora já não tenha uso.
Lava flow
 Manter código não desejado (redundante ou de baixa
qualidade) porque remover pode trazer consequências
         ...
Hardcode
Utilizar números ou literais de strings no meio de
   estruturas de código em vez de ficheiros de
                ...
Soft code
Colocar lógica de negócio em ficheiros de configuração
                em vez do código fonte.
Spaghetti code
Código no qual a estrutura e fluxo é praticamente
     incompreensivel, tipicamente GOTO’s.
Ravioli code
Criado criado por um conjunto de componentes soltos
      mas que a integração resultante é confusa.
        ...
Spaghetti with
           meatballs
   Parecido com o Raviolli code, mas para alem da
integração dos componentes ser confu...
Lasagna Code
 Código em camadas (arquitecturas MVC, Three-tier)
com interfaces definidas mas na qual o código de cada
     ...
Big ball of mud
  Um programa/sistema onde é impossível distinguir
    arquitectura. Um conjunto de interligação de
compon...
Duct Tape
Componentes interligados por forma a que o minimo
  de interligação aconteça, mas sem o minimo de
              ...
Job Keeper
  Um “Big ball of mud” escrito como segurança do
             emprego do colaborador.

Este alegadamente conseg...
The End

           www.braceta.com
      www.twitter.com/braceta
Próximos SlideShares
Carregando em…5
×

Anti-patterns

1.764 visualizações

Publicada em

Anti-patterns in Tech/Software.

Talk done in Braga Geek Nights, March 2, 2010

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.764
No SlideShare
0
A partir de incorporações
0
Número de incorporações
12
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

  • Andrew Koening, Investigador da A&T
  • Tipicamente tem nomes engraçados







































  • Anti-patterns

    1. 1. Anti-patterns Braga Geek Nights Luis Azevedo 2010 www.braceta.com www.twitter.com/braceta
    2. 2. História O termo foi introduzido por Andrew Koening e inspirado no livro Design Patterns do Gang of Four’s
    3. 3. Definição Um padrão que se repete (social, processual, programaticamente, etc.) que tipicamente é uma má prática, mau hábito ou má ideia.
    4. 4. Copy and paste programming Copiar e modificar código em vez de criar soluções genéricas.
    5. 5. Antipattern
    6. 6. Antipattern?
    7. 7. Antipattern
    8. 8. Design pattern?
    9. 9. Categorias • Organizational anti-patterns • Project management anti-patterns • Analysis anti-patterns • Software design anti-patterns • Programming anti-patterns • Methodological anti-patterns • Configuration management anti-patterns
    10. 10. Organizational
    11. 11. Analisys Paralisis Dedicar esforço desproporcionado na analise de um projecto
    12. 12. Design by committee Muitos colaboradores num design mas sem visão unificada.
    13. 13. Project management
    14. 14. Death march Toda a gente sabe que o project irá ser um desastre, excepto o CEO. No entanto a verdade permanece escondida e o projecto mantem-se vivo até o Dia Zero quando surge o “Big Bang”
    15. 15. Groupthink Algo que um brainstorm não deve ser. Os membros do grupo evitam lançar ideias fora da zona do conforto do grupo.
    16. 16. Smoke and mirrors (vaporware) Demonstrar o quão não implementadas as funcionalidades/funções irão aparecer
    17. 17. Software Design
    18. 18. Gas factory Um design desnecessariamente complexo. KISS!
    19. 19. Object Oriented Programming
    20. 20. BaseBean Herdar funcionalidade utilitária de uma classe em vez de delegar ou utilizar composição (Roles, Traits?). Yeah.. Java.. we know :S
    21. 21. God Object Concentrar demasiadas funções numa determinada classe. GodObject jesus =(GodObject)new JorgeJesus();
    22. 22. Object Orgy Não existir possibilidade de impedir acesso aos internals de um objecto. Normalmente associado ao Perl (por programadores não informados). Inside-Out Objects?
    23. 23. Poltergeist Objectos que apenas servem para passar informação para outros. Tipicamente também conhecido o Design Pattern “Adaptor”.
    24. 24. Yo-Yo Problem Existe uma hierarquia complexa de classes que obriga o olhar para “cima” e para “baixo” para perceber o fluxo de informação. Java? Resolve-se com delegação ou composição de classes.
    25. 25. Methodological
    26. 26. Copy and paste programming Copiar e modificar código em vez de criar soluções genéricas.
    27. 27. Programming by permutation Ou “Programação por Acidente”. Tentar modificar o código sem perceber muito bem o porquê, até que funcione. PHP anyone?
    28. 28. Tester Driven Development ou BDD Requisitos e funcionalidade são especificados utilizando bug reports. Agile Programming?
    29. 29. Improbability factor Assumir que que algo é improvavel que aconteça. Por exemplo, verificar se um malloc retorna NULL. Lei de Murphy
    30. 30. Programming
    31. 31. Boat anchor Manter uma parte do sistema, embora já não tenha uso.
    32. 32. Lava flow Manter código não desejado (redundante ou de baixa qualidade) porque remover pode trazer consequências nefastas. Assembler, Perl?
    33. 33. Hardcode Utilizar números ou literais de strings no meio de estruturas de código em vez de ficheiros de configuração.
    34. 34. Soft code Colocar lógica de negócio em ficheiros de configuração em vez do código fonte.
    35. 35. Spaghetti code Código no qual a estrutura e fluxo é praticamente incompreensivel, tipicamente GOTO’s.
    36. 36. Ravioli code Criado criado por um conjunto de componentes soltos mas que a integração resultante é confusa. Humm Frames anyone?
    37. 37. Spaghetti with meatballs Parecido com o Raviolli code, mas para alem da integração dos componentes ser confusa, os próprios componentes também o são!
    38. 38. Lasagna Code Código em camadas (arquitecturas MVC, Three-tier) com interfaces definidas mas na qual o código de cada camada se mistura desorganizado. Rails? :)
    39. 39. Big ball of mud Um programa/sistema onde é impossível distinguir arquitectura. Um conjunto de interligação de componentes misturados em Spagetti, Lasagna e Raviolli Code.
    40. 40. Duct Tape Componentes interligados por forma a que o minimo de interligação aconteça, mas sem o minimo de estrutura. Programa em C, que chama um script Perl, que gera um Bash, que compila um code generator em Java, que gera um programa em PHP para imprimir o número 42!
    41. 41. Job Keeper Um “Big ball of mud” escrito como segurança do emprego do colaborador. Este alegadamente consegue corrigir qualquer bug do programa utilizando “Duct Tape” anti-pattern.
    42. 42. The End www.braceta.com www.twitter.com/braceta

    ×