SlideShare a Scribd company logo
1 of 39
A NTI -P ATTERNS
Patterns are ever ywhere
There are GOOD patterns
There are BAD patterns
Bad Patterns
Bad patterns
seriously harm you and others
          around you
I see BAD
       PATTERNS!




COLE
Programming
  Methodological
  Organizational
       Design
A NTI -P ATTERNS
   AntiPatterns
    AntiPatterns
Programming
AntiPatterns


          Methodological
          Organizational
               Design
        A NTI -P ATTERNS
           AntiPatterns
           AntiPatterns
Programming         Methodological
AntiPatterns         AntiPatterns


          Organizational
               Design
        A NTI -P ATTERNS
           AntiPatterns
           AntiPatterns
Programming          Methodological
AntiPatterns          AntiPatterns


           Organizational
         A NTI -P ATTERNS
            AntiPatterns



  Design
AntiPatterns
Programming          Methodological
AntiPatterns          AntiPatterns



         A NTI -P ATTERNS


  Design             Organizational
AntiPatterns          AntiPatterns
Organizational
      Design
    AntiPatterns
Methodological
    AntiPatterns
Programming
 AntiPatterns
AntiPatterns
BLIND FAITH


  Introducing
  unnecessary
complexity into a
    solution
                     Lack of checking of
                    (a) the correctness of
                      a bug fix or (b) the
                    result of a subroutine


 ACCIDENTAL
 COMPLEXITY
CARGO CULT
PROGRAMMING

                       Incomprehensible
                           structure ,
                       especially because
                       of misuse of code
                           structures
  Using patterns and
   methods without
  understanding why

                          SPAGHETTI
                            CODE
SOFT CODE


    Embedding
assumptions about
the environment of
  a system in its      Storing business
                     logic in configuration
                        files rather than
                          source code


  HARD CODE
LAVA FLOW



                        Retaining a part of
Retaining undesirable    a system that no
 (redundant or low-     longer has any use
quality) code because
  removing it is too
   expensive or has
    unpredictable


                              BOAT
                             ANCHOR
MAGIC
                 STRINGS

  Including
unexplained
numbers in
 algorithms
                Including literal
              strings in code, for
               comparisons, as
                event types etc.


 MAGIC
NUMBERS
SINGLE FUNCTION
   EXIT POINT


    	 public Foo merge (Foo a, Foo b) {
	       Foo result;
	       if (a != null) {
	         if (b != null) {
	           // complicated merge code goes here.
	         } else {
	           result = a;
	         }
	       } else {
	         result = b;
	       }
	       return result;
	     }
GUARD CLAUSE


    	 public Foo merge (Foo a, Foo b) {
	       Foo result;
	       if (a != null) {
	         if (b != null) {
	           // complicated merge code goes here.   	   public Foo merge (Foo a, Foo b) {
	         } else {                                 	     if (a == null) return b;
	           result = a;                            	     if (b == null) return a;
	         }                                        	       // complicated merge code goes here.
	       } else {                                   	     }
	         result = b;
	       }
	       return result;
	     }
ARROW
ANTI-PATTERN

if
     if
       if
          if
        do something
      endif
    endif
  endif
endif
int foo(void)
	     {
	   	     char *p = NULL;
	   	     char *q = NULL;
                                   	   int     foo(void)
	   	     int ret = SUCCESS;
                                   	     {
                                   	   	       char *p = malloc(SIZEOF_P);
	   	    p = malloc(SIZEOF_P);
                                   	   	       char *q = malloc(SIZEOF_Q);
	   	    if(p)
                                   	   	       int ret = p && q ? SUCCESS : FAIL;
	   	    {
	   	      q = malloc(SIZEOF_Q);
                                   	   	       if (ret == SUCCESS)
	   	      if(q)
                                   	   	       {
	   	      {
                                   	   	       /* do something */
	   	    	    /* do something */
                                   	   	       }
	   	    	     free(q);
                                   	   	       free(p);
	   	      }
                                   	   	       free(q);
	   	      else
	   	    	    ret = FAIL;
                                   	   	       return ret;
                                   	       }
	   	        free(p);
	   	    }
	   	    else
	   	      ret = FAIL;

	   	    return ret;
	    }
LOOP-SWITCH
                                    SEQUENCE


// parse a key, a value, then three parameters
String key = null;
String value = null;
List<String> params = new LinkedList<String>();   // parse a key and value
                                                  String key = stream.parse();
for (int i = 0; i < 5; i++) {                     String value = stream.parse();
  switch (i) {
      case 0:                                     // parse 3 parameters
          key = stream.parse();                   List<String> params =
          break;                                                  new LinkedList<String>();
      case 1:
          value = stream.parse();                 for (int i = 0; i < 3; i++) {
          break;                                    params.add(stream.parse());
      default:                                    }
          params.add(stream.parse());
          break;
  }
}
Organizational
      Design
    AntiPatterns
Methodological
    AntiPatterns
Programming
 AntiPatterns
AntiPatterns
Organizational
      Design
    AntiPatterns
Methodological
   AntiPatterns
 AntiPatterns
COPY AND PASTE
           PROGRAMMING

TESTER DRIVEN
DEVELOPMENT

           SOMEONE ELSE’S
              EXAMPLE

 PROGRAMMING BY
   PERMUTATION
Organizational
      Design
    AntiPatterns
Methodological
   AntiPatterns
 AntiPatterns
Organizational
  Design
 AntiPatterns
AntiPatterns
CIRCULAR
  DEPENDENCY

GOD OBJECT

             SEQUENTIAL
              COUPLING

      BASE BEAN
ABSTRACTION
  INVERSION


     INNER-PLATFORM
         EFFECT

N-FRAME

   RACE HAZARD
ARCHITECTURE BY
  IMPLICATION
Organizational
  Design
 AntiPatterns
AntiPatterns
Organizational
 AntiPatterns
DESIGN BY
COMMITTEE
ABSTRACTIONIST VS.
            IMPLEMENTATIONIST




“Experts report that only 1 in 5 software developers is able to define good abstractions”
The point isn't as much to say
 "don't do this" as it is to say
   "you probably don't even
realize that you're doing this,
     but it doesn't work..”
WE’VE SEEN

26    ANTI-PATTERNS


 4
OF   DIFFERENT TYPES
PROJECT MANAGEMENT ANTI-PATTERNS


ANALYSIS ANTI-PATTERNS


CONFIGURATION MANAGEMENT ANTI-PATTERNS


SOCIAL ANTI-PATTERNS
http://sourcemaking.com/antipatterns/


http://www.c2.com/cgi/wiki?AntiPatterns


http://en.wikipedia.org/wiki/Anti-pattern

More Related Content

What's hot

Quality Built In @ Spotify
Quality Built In @ SpotifyQuality Built In @ Spotify
Quality Built In @ SpotifyAndrii Dzynia
 
DevSecOps Training Bootcamp - A Practical DevSecOps Course
DevSecOps Training Bootcamp - A Practical DevSecOps CourseDevSecOps Training Bootcamp - A Practical DevSecOps Course
DevSecOps Training Bootcamp - A Practical DevSecOps CourseTonex
 
Agile Testing – embedding testing into agile software development lifecycle
Agile Testing – embedding testing into agile software development lifecycle Agile Testing – embedding testing into agile software development lifecycle
Agile Testing – embedding testing into agile software development lifecycle Kari Kakkonen
 
Continuous Inspection of Code Quality: SonarQube
Continuous Inspection of Code Quality: SonarQubeContinuous Inspection of Code Quality: SonarQube
Continuous Inspection of Code Quality: SonarQubeEmre Dündar
 
Security as Code: A DevSecOps Approach
Security as Code: A DevSecOps ApproachSecurity as Code: A DevSecOps Approach
Security as Code: A DevSecOps ApproachVMware Tanzu
 
THE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider Security
THE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider SecurityTHE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider Security
THE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider SecurityDevOpsDays Tel Aviv
 
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...Alberto Brandolini
 
Видове софтуерни тестове
Видове софтуерни тестовеВидове софтуерни тестове
Видове софтуерни тестовеKalin Vasilev
 
Infrastructure as Code - Getting Started, Concepts & Tools
Infrastructure as Code - Getting Started, Concepts & ToolsInfrastructure as Code - Getting Started, Concepts & Tools
Infrastructure as Code - Getting Started, Concepts & ToolsLior Kamrat
 
DevOps to DevSecOps Journey..
DevOps to DevSecOps Journey..DevOps to DevSecOps Journey..
DevOps to DevSecOps Journey..Siddharth Joshi
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitationKrzysztof Kotowicz
 
Micro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - PlansoftMicro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - PlansoftMiki Lombardi
 
Incidents - The Shorter, the Better with the Quality Engineering Discipline
Incidents - The Shorter, the Better with the Quality Engineering DisciplineIncidents - The Shorter, the Better with the Quality Engineering Discipline
Incidents - The Shorter, the Better with the Quality Engineering DisciplineAntoine Craske
 
CI/CD Best Practices for Your DevOps Journey
CI/CD Best  Practices for Your DevOps JourneyCI/CD Best  Practices for Your DevOps Journey
CI/CD Best Practices for Your DevOps JourneyDevOps.com
 

What's hot (20)

Quality Built In @ Spotify
Quality Built In @ SpotifyQuality Built In @ Spotify
Quality Built In @ Spotify
 
DevSecOps Training Bootcamp - A Practical DevSecOps Course
DevSecOps Training Bootcamp - A Practical DevSecOps CourseDevSecOps Training Bootcamp - A Practical DevSecOps Course
DevSecOps Training Bootcamp - A Practical DevSecOps Course
 
Agile Testing – embedding testing into agile software development lifecycle
Agile Testing – embedding testing into agile software development lifecycle Agile Testing – embedding testing into agile software development lifecycle
Agile Testing – embedding testing into agile software development lifecycle
 
Continuous Inspection of Code Quality: SonarQube
Continuous Inspection of Code Quality: SonarQubeContinuous Inspection of Code Quality: SonarQube
Continuous Inspection of Code Quality: SonarQube
 
Security as Code: A DevSecOps Approach
Security as Code: A DevSecOps ApproachSecurity as Code: A DevSecOps Approach
Security as Code: A DevSecOps Approach
 
THE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider Security
THE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider SecurityTHE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider Security
THE THREE DISCIPLINES OF CI/CD SECURITY, DANIEL KRIVELEVICH, Cider Security
 
Event storming
Event storming Event storming
Event storming
 
xUnit
xUnitxUnit
xUnit
 
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
 
Видове софтуерни тестове
Видове софтуерни тестовеВидове софтуерни тестове
Видове софтуерни тестове
 
DevSecOps
DevSecOpsDevSecOps
DevSecOps
 
Infrastructure as Code - Getting Started, Concepts & Tools
Infrastructure as Code - Getting Started, Concepts & ToolsInfrastructure as Code - Getting Started, Concepts & Tools
Infrastructure as Code - Getting Started, Concepts & Tools
 
DevOps to DevSecOps Journey..
DevOps to DevSecOps Journey..DevOps to DevSecOps Journey..
DevOps to DevSecOps Journey..
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
The Journey to DevSecOps
The Journey to DevSecOpsThe Journey to DevSecOps
The Journey to DevSecOps
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitation
 
Adult Manifesto
Adult ManifestoAdult Manifesto
Adult Manifesto
 
Micro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - PlansoftMicro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - Plansoft
 
Incidents - The Shorter, the Better with the Quality Engineering Discipline
Incidents - The Shorter, the Better with the Quality Engineering DisciplineIncidents - The Shorter, the Better with the Quality Engineering Discipline
Incidents - The Shorter, the Better with the Quality Engineering Discipline
 
CI/CD Best Practices for Your DevOps Journey
CI/CD Best  Practices for Your DevOps JourneyCI/CD Best  Practices for Your DevOps Journey
CI/CD Best Practices for Your DevOps Journey
 

Viewers also liked

Software Architecture Anti-Patterns
Software Architecture Anti-PatternsSoftware Architecture Anti-Patterns
Software Architecture Anti-PatternsEduards Sizovs
 
Accidental complexity
Accidental complexityAccidental complexity
Accidental complexityOmer Shapira
 
eMee at HR Tech Europe, 26 March, London
eMee at HR Tech Europe, 26 March, LondoneMee at HR Tech Europe, 26 March, London
eMee at HR Tech Europe, 26 March, LondonSiddhesh Bhobe
 
Software Accessibility Siddhesh
Software Accessibility SiddheshSoftware Accessibility Siddhesh
Software Accessibility SiddheshSiddhesh Bhobe
 
Software Architecture Erosion and Modernization
Software Architecture Erosion and ModernizationSoftware Architecture Erosion and Modernization
Software Architecture Erosion and Modernizationbmerkle
 
Lead Allocation System's Attribute Driven Design (ADD)
Lead Allocation System's Attribute Driven Design (ADD)Lead Allocation System's Attribute Driven Design (ADD)
Lead Allocation System's Attribute Driven Design (ADD)Amin Bandeali
 
Introduction to AntiPatterns & CodeSmells
Introduction to AntiPatterns & CodeSmellsIntroduction to AntiPatterns & CodeSmells
Introduction to AntiPatterns & CodeSmellsClaudio Bernasconi
 
Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...Ganesh Samarthyam
 
Anti Patterns Siddhesh Lecture2 Of3
Anti Patterns Siddhesh Lecture2 Of3Anti Patterns Siddhesh Lecture2 Of3
Anti Patterns Siddhesh Lecture2 Of3Siddhesh Bhobe
 
Anti Patterns Siddhesh Lecture1 Of3
Anti Patterns Siddhesh Lecture1 Of3Anti Patterns Siddhesh Lecture1 Of3
Anti Patterns Siddhesh Lecture1 Of3Siddhesh Bhobe
 
Anti Patterns Siddhesh Lecture3 Of3
Anti Patterns Siddhesh Lecture3 Of3Anti Patterns Siddhesh Lecture3 Of3
Anti Patterns Siddhesh Lecture3 Of3Siddhesh Bhobe
 
Lead Allocation System - Attribute Driven Design (ADD)
Lead Allocation System - Attribute Driven Design (ADD)Lead Allocation System - Attribute Driven Design (ADD)
Lead Allocation System - Attribute Driven Design (ADD)Amin Bandeali
 
Industry expectations from new recruits
Industry expectations from new recruitsIndustry expectations from new recruits
Industry expectations from new recruitsSiddhesh Bhobe
 
The eMee Value Proposition
The eMee Value PropositionThe eMee Value Proposition
The eMee Value PropositionSiddhesh Bhobe
 
Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...
Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...
Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...Jonathan Cutrell
 
Software Design - Architectural Kata
Software Design - Architectural KataSoftware Design - Architectural Kata
Software Design - Architectural KataDeniz Yavaş
 
Api anti patterns
Api anti patternsApi anti patterns
Api anti patternsMike Pearce
 
Designing and documenting software architecture unit 5
Designing and documenting software architecture unit 5Designing and documenting software architecture unit 5
Designing and documenting software architecture unit 5Sudarshan Dhondaley
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterGanesh Samarthyam
 

Viewers also liked (20)

Software Architecture Anti-Patterns
Software Architecture Anti-PatternsSoftware Architecture Anti-Patterns
Software Architecture Anti-Patterns
 
Anti patterns part 1
Anti patterns part 1Anti patterns part 1
Anti patterns part 1
 
Accidental complexity
Accidental complexityAccidental complexity
Accidental complexity
 
eMee at HR Tech Europe, 26 March, London
eMee at HR Tech Europe, 26 March, LondoneMee at HR Tech Europe, 26 March, London
eMee at HR Tech Europe, 26 March, London
 
Software Accessibility Siddhesh
Software Accessibility SiddheshSoftware Accessibility Siddhesh
Software Accessibility Siddhesh
 
Software Architecture Erosion and Modernization
Software Architecture Erosion and ModernizationSoftware Architecture Erosion and Modernization
Software Architecture Erosion and Modernization
 
Lead Allocation System's Attribute Driven Design (ADD)
Lead Allocation System's Attribute Driven Design (ADD)Lead Allocation System's Attribute Driven Design (ADD)
Lead Allocation System's Attribute Driven Design (ADD)
 
Introduction to AntiPatterns & CodeSmells
Introduction to AntiPatterns & CodeSmellsIntroduction to AntiPatterns & CodeSmells
Introduction to AntiPatterns & CodeSmells
 
Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...
 
Anti Patterns Siddhesh Lecture2 Of3
Anti Patterns Siddhesh Lecture2 Of3Anti Patterns Siddhesh Lecture2 Of3
Anti Patterns Siddhesh Lecture2 Of3
 
Anti Patterns Siddhesh Lecture1 Of3
Anti Patterns Siddhesh Lecture1 Of3Anti Patterns Siddhesh Lecture1 Of3
Anti Patterns Siddhesh Lecture1 Of3
 
Anti Patterns Siddhesh Lecture3 Of3
Anti Patterns Siddhesh Lecture3 Of3Anti Patterns Siddhesh Lecture3 Of3
Anti Patterns Siddhesh Lecture3 Of3
 
Lead Allocation System - Attribute Driven Design (ADD)
Lead Allocation System - Attribute Driven Design (ADD)Lead Allocation System - Attribute Driven Design (ADD)
Lead Allocation System - Attribute Driven Design (ADD)
 
Industry expectations from new recruits
Industry expectations from new recruitsIndustry expectations from new recruits
Industry expectations from new recruits
 
The eMee Value Proposition
The eMee Value PropositionThe eMee Value Proposition
The eMee Value Proposition
 
Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...
Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...
Attribute Driven Styles: The Good, the Bad, and the Unknown (SassConf 2015 Di...
 
Software Design - Architectural Kata
Software Design - Architectural KataSoftware Design - Architectural Kata
Software Design - Architectural Kata
 
Api anti patterns
Api anti patternsApi anti patterns
Api anti patterns
 
Designing and documenting software architecture unit 5
Designing and documenting software architecture unit 5Designing and documenting software architecture unit 5
Designing and documenting software architecture unit 5
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - Poster
 

Similar to Anti Patterns

Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Ismar Silveira
 
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummarySystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummaryAmal Khailtash
 
Yapcasia2011 - Hello Embed Perl
Yapcasia2011 - Hello Embed PerlYapcasia2011 - Hello Embed Perl
Yapcasia2011 - Hello Embed PerlHideaki Ohno
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mark Needham
 
Arduino for Beginners
Arduino for BeginnersArduino for Beginners
Arduino for BeginnersSarwan Singh
 
Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»SpbDotNet Community
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondMario Fusco
 
Orthogonal Functional Architecture
Orthogonal Functional ArchitectureOrthogonal Functional Architecture
Orthogonal Functional ArchitectureJohn De Goes
 
Arduino section programming slides
Arduino section programming slidesArduino section programming slides
Arduino section programming slidesvivek k
 
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system Tarin Gamberini
 
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and SparkCrystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and SparkJivan Nepali
 
Incredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and GeneratorsIncredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and Generatorsdantleech
 
Java 8 - Lambdas and much more
Java 8 - Lambdas and much moreJava 8 - Lambdas and much more
Java 8 - Lambdas and much moreAlin Pandichi
 
MeCC: Memory Comparison-based Code Clone Detector
MeCC: Memory Comparison-based Code Clone DetectorMeCC: Memory Comparison-based Code Clone Detector
MeCC: Memory Comparison-based Code Clone Detector영범 정
 
MeCC: Memory Comparison based Clone Detector
MeCC: Memory Comparison based Clone DetectorMeCC: Memory Comparison based Clone Detector
MeCC: Memory Comparison based Clone DetectorSung Kim
 
Arduino sectionprogramming slides
Arduino sectionprogramming slidesArduino sectionprogramming slides
Arduino sectionprogramming slidesJorge Joens
 
Effective C#
Effective C#Effective C#
Effective C#lantoli
 

Similar to Anti Patterns (20)

Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4
 
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummarySystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features Summary
 
Yapcasia2011 - Hello Embed Perl
Yapcasia2011 - Hello Embed PerlYapcasia2011 - Hello Embed Perl
Yapcasia2011 - Hello Embed Perl
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#
 
Arduino for Beginners
Arduino for BeginnersArduino for Beginners
Arduino for Beginners
 
Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyond
 
Orthogonal Functional Architecture
Orthogonal Functional ArchitectureOrthogonal Functional Architecture
Orthogonal Functional Architecture
 
Arduino section programming slides
Arduino section programming slidesArduino section programming slides
Arduino section programming slides
 
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
 
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and SparkCrystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
Crystal Ball Event Prediction and Log Analysis with Hadoop MapReduce and Spark
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
Incredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and GeneratorsIncredible Machine with Pipelines and Generators
Incredible Machine with Pipelines and Generators
 
Java 8 - Lambdas and much more
Java 8 - Lambdas and much moreJava 8 - Lambdas and much more
Java 8 - Lambdas and much more
 
Short intro to ECMAScript
Short intro to ECMAScriptShort intro to ECMAScript
Short intro to ECMAScript
 
MeCC: Memory Comparison-based Code Clone Detector
MeCC: Memory Comparison-based Code Clone DetectorMeCC: Memory Comparison-based Code Clone Detector
MeCC: Memory Comparison-based Code Clone Detector
 
MeCC: Memory Comparison based Clone Detector
MeCC: Memory Comparison based Clone DetectorMeCC: Memory Comparison based Clone Detector
MeCC: Memory Comparison based Clone Detector
 
Arduino sectionprogramming slides
Arduino sectionprogramming slidesArduino sectionprogramming slides
Arduino sectionprogramming slides
 
Effective C#
Effective C#Effective C#
Effective C#
 
Effective Object Oriented Design in Cpp
Effective Object Oriented Design in CppEffective Object Oriented Design in Cpp
Effective Object Oriented Design in Cpp
 

Recently uploaded

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 

Recently uploaded (20)

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 

Anti Patterns

  • 1. A NTI -P ATTERNS
  • 3. There are GOOD patterns
  • 4. There are BAD patterns
  • 6. Bad patterns seriously harm you and others around you
  • 7. I see BAD PATTERNS! COLE
  • 8. Programming Methodological Organizational Design A NTI -P ATTERNS AntiPatterns AntiPatterns
  • 9. Programming AntiPatterns Methodological Organizational Design A NTI -P ATTERNS AntiPatterns AntiPatterns
  • 10. Programming Methodological AntiPatterns AntiPatterns Organizational Design A NTI -P ATTERNS AntiPatterns AntiPatterns
  • 11. Programming Methodological AntiPatterns AntiPatterns Organizational A NTI -P ATTERNS AntiPatterns Design AntiPatterns
  • 12. Programming Methodological AntiPatterns AntiPatterns A NTI -P ATTERNS Design Organizational AntiPatterns AntiPatterns
  • 13. Organizational Design AntiPatterns Methodological AntiPatterns Programming AntiPatterns AntiPatterns
  • 14. BLIND FAITH Introducing unnecessary complexity into a solution Lack of checking of (a) the correctness of a bug fix or (b) the result of a subroutine ACCIDENTAL COMPLEXITY
  • 15. CARGO CULT PROGRAMMING Incomprehensible structure , especially because of misuse of code structures Using patterns and methods without understanding why SPAGHETTI CODE
  • 16. SOFT CODE Embedding assumptions about the environment of a system in its Storing business logic in configuration files rather than source code HARD CODE
  • 17. LAVA FLOW Retaining a part of Retaining undesirable a system that no (redundant or low- longer has any use quality) code because removing it is too expensive or has unpredictable BOAT ANCHOR
  • 18. MAGIC STRINGS Including unexplained numbers in algorithms Including literal strings in code, for comparisons, as event types etc. MAGIC NUMBERS
  • 19. SINGLE FUNCTION EXIT POINT public Foo merge (Foo a, Foo b) { Foo result; if (a != null) { if (b != null) { // complicated merge code goes here. } else { result = a; } } else { result = b; } return result; }
  • 20. GUARD CLAUSE public Foo merge (Foo a, Foo b) { Foo result; if (a != null) { if (b != null) { // complicated merge code goes here. public Foo merge (Foo a, Foo b) { } else { if (a == null) return b; result = a; if (b == null) return a; } // complicated merge code goes here. } else { } result = b; } return result; }
  • 21. ARROW ANTI-PATTERN if if if if do something endif endif endif endif
  • 22. int foo(void) { char *p = NULL; char *q = NULL; int foo(void) int ret = SUCCESS; { char *p = malloc(SIZEOF_P); p = malloc(SIZEOF_P); char *q = malloc(SIZEOF_Q); if(p) int ret = p && q ? SUCCESS : FAIL; { q = malloc(SIZEOF_Q); if (ret == SUCCESS) if(q) { { /* do something */ /* do something */ } free(q); free(p); } free(q); else ret = FAIL; return ret; } free(p); } else ret = FAIL; return ret; }
  • 23. LOOP-SWITCH SEQUENCE // parse a key, a value, then three parameters String key = null; String value = null; List<String> params = new LinkedList<String>(); // parse a key and value String key = stream.parse(); for (int i = 0; i < 5; i++) { String value = stream.parse(); switch (i) { case 0: // parse 3 parameters key = stream.parse(); List<String> params = break; new LinkedList<String>(); case 1: value = stream.parse(); for (int i = 0; i < 3; i++) { break; params.add(stream.parse()); default: } params.add(stream.parse()); break; } }
  • 24. Organizational Design AntiPatterns Methodological AntiPatterns Programming AntiPatterns AntiPatterns
  • 25. Organizational Design AntiPatterns Methodological AntiPatterns AntiPatterns
  • 26. COPY AND PASTE PROGRAMMING TESTER DRIVEN DEVELOPMENT SOMEONE ELSE’S EXAMPLE PROGRAMMING BY PERMUTATION
  • 27. Organizational Design AntiPatterns Methodological AntiPatterns AntiPatterns
  • 28. Organizational Design AntiPatterns AntiPatterns
  • 29. CIRCULAR DEPENDENCY GOD OBJECT SEQUENTIAL COUPLING BASE BEAN
  • 30. ABSTRACTION INVERSION INNER-PLATFORM EFFECT N-FRAME RACE HAZARD
  • 31. ARCHITECTURE BY IMPLICATION
  • 32. Organizational Design AntiPatterns AntiPatterns
  • 35. ABSTRACTIONIST VS. IMPLEMENTATIONIST “Experts report that only 1 in 5 software developers is able to define good abstractions”
  • 36. The point isn't as much to say "don't do this" as it is to say "you probably don't even realize that you're doing this, but it doesn't work..”
  • 37. WE’VE SEEN 26 ANTI-PATTERNS 4 OF DIFFERENT TYPES
  • 38. PROJECT MANAGEMENT ANTI-PATTERNS ANALYSIS ANTI-PATTERNS CONFIGURATION MANAGEMENT ANTI-PATTERNS SOCIAL ANTI-PATTERNS

Editor's Notes