Anti-patterns
  Braga Geek Nights
  Luis Azevedo 2010




                       www.braceta.com
                  www.twitter.com/braceta
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ática, mau hábito ou má ideia.
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 anti-patterns
• Programming anti-patterns
• Methodological anti-patterns
• Configuration management anti-patterns
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 verdade permanece escondida e o
projecto mantem-se vivo até o Dia Zero quando surge
                    o “Big Bang”
Groupthink
Algo que um brainstorm não deve ser. Os membros do
grupo evitam lançar ideias fora da zona do conforto do
                        grupo.
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?).

               Yeah.. Java.. we know :S
God Object
Concentrar demasiadas funções numa determinada
                    classe.

 GodObject jesus =(GodObject)new JorgeJesus();
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?
Poltergeist
 Objectos que apenas servem para passar informação
para outros. Tipicamente também conhecido o Design
                  Pattern “Adaptor”.
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.
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ê, até que
             funcione. PHP anyone?
Tester Driven
 Development ou BDD
Requisitos e funcionalidade são especificados utilizando
           bug reports. Agile Programming?
Improbability factor
Assumir que que algo é improvavel que aconteça. Por
   exemplo, verificar se um malloc retorna NULL.

                  Lei de Murphy
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
               nefastas. Assembler, Perl?
Hardcode
Utilizar números ou literais de strings no meio de
   estruturas de código em vez de ficheiros de
                  configuração.
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.
               Humm Frames anyone?
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!
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? :)
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.
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!
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.
The End

           www.braceta.com
      www.twitter.com/braceta

Anti-patterns

  • 1.
    Anti-patterns BragaGeek Nights Luis Azevedo 2010 www.braceta.com www.twitter.com/braceta
  • 2.
    História O termo foi introduzido por Andrew Koening e inspirado no livro Design Patterns do Gang of Four’s
  • 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.
    Copy and paste programming Copiar e modificar código em vez de criar soluções genéricas.
  • 5.
  • 6.
  • 7.
  • 8.
  • 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.
  • 11.
    Analisys Paralisis Dedicar esforçodesproporcionado na analise de um projecto
  • 12.
    Design by committee Muitoscolaboradores num design mas sem visão unificada.
  • 13.
  • 14.
    Death march Todaa 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.
    Groupthink Algo que umbrainstorm não deve ser. Os membros do grupo evitam lançar ideias fora da zona do conforto do grupo.
  • 16.
    Smoke and mirrors (vaporware) Demonstrar o quão não implementadas as funcionalidades/funções irão aparecer
  • 17.
  • 18.
    Gas factory Um designdesnecessariamente complexo. KISS!
  • 19.
  • 20.
    BaseBean Herdar funcionalidade utilitáriade uma classe em vez de delegar ou utilizar composição (Roles, Traits?). Yeah.. Java.. we know :S
  • 21.
    God Object Concentrar demasiadasfunções numa determinada classe. GodObject jesus =(GodObject)new JorgeJesus();
  • 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.
    Poltergeist Objectos queapenas servem para passar informação para outros. Tipicamente também conhecido o Design Pattern “Adaptor”.
  • 24.
    Yo-Yo Problem Existe umahierarquia 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.
  • 26.
    Copy and paste programming Copiar e modificar código em vez de criar soluções genéricas.
  • 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.
    Tester Driven Developmentou BDD Requisitos e funcionalidade são especificados utilizando bug reports. Agile Programming?
  • 29.
    Improbability factor Assumir queque algo é improvavel que aconteça. Por exemplo, verificar se um malloc retorna NULL. Lei de Murphy
  • 30.
  • 31.
    Boat anchor Manter umaparte do sistema, embora já não tenha uso.
  • 32.
    Lava flow Mantercódigo não desejado (redundante ou de baixa qualidade) porque remover pode trazer consequências nefastas. Assembler, Perl?
  • 33.
    Hardcode Utilizar números ouliterais de strings no meio de estruturas de código em vez de ficheiros de configuração.
  • 34.
    Soft code Colocar lógicade negócio em ficheiros de configuração em vez do código fonte.
  • 35.
    Spaghetti code Código noqual a estrutura e fluxo é praticamente incompreensivel, tipicamente GOTO’s.
  • 36.
    Ravioli code Criado criadopor um conjunto de componentes soltos mas que a integração resultante é confusa. Humm Frames anyone?
  • 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.
    Lasagna Code Códigoem camadas (arquitecturas MVC, Three-tier) com interfaces definidas mas na qual o código de cada camada se mistura desorganizado. Rails? :)
  • 39.
    Big ball ofmud Um programa/sistema onde é impossível distinguir arquitectura. Um conjunto de interligação de componentes misturados em Spagetti, Lasagna e Raviolli Code.
  • 40.
    Duct Tape Componentes interligadospor 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.
    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.
    The End www.braceta.com www.twitter.com/braceta

Notas do Editor

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