Anti-patterns

1,737 views
1,517 views

Published on

Anti-patterns in Tech/Software.

Talk done in Braga Geek Nights, March 2, 2010

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,737
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for 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

    ×