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

SQA - chapter 13 (Software Quality Infrastructure)
SQA - chapter 13 (Software Quality Infrastructure)SQA - chapter 13 (Software Quality Infrastructure)
SQA - chapter 13 (Software Quality Infrastructure)uma sree
 
Sami Zahran Quality Gates
Sami Zahran Quality GatesSami Zahran Quality Gates
Sami Zahran Quality GatesDr. Sami Zahran
 
MODELS USED IN SOFTWARE DEVELOPMENT
MODELS USED IN SOFTWARE DEVELOPMENTMODELS USED IN SOFTWARE DEVELOPMENT
MODELS USED IN SOFTWARE DEVELOPMENTPaYal Umraliya
 
The benefits of software reuse
The benefits of software reuseThe benefits of software reuse
The benefits of software reuseEntando
 
RMMM-Risk Management,Mitigation and Monitoring.
RMMM-Risk Management,Mitigation and Monitoring.RMMM-Risk Management,Mitigation and Monitoring.
RMMM-Risk Management,Mitigation and Monitoring.Aparna Nayak
 
AGILE Model (SDLC).pptx
AGILE Model (SDLC).pptxAGILE Model (SDLC).pptx
AGILE Model (SDLC).pptxMahithDias
 
Software reliability
Software reliabilitySoftware reliability
Software reliabilityAnand Kumar
 
Rational Unified Process
Rational Unified ProcessRational Unified Process
Rational Unified ProcessKumar
 
Component based development | what, why and how
Component based development | what, why and howComponent based development | what, why and how
Component based development | what, why and howRakesh Kumar Jha
 
An Introduction to MISRA C:2012
An Introduction to MISRA C:2012An Introduction to MISRA C:2012
An Introduction to MISRA C:2012PRQA
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integrationdrluckyspin
 
INTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERINGINTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERINGPreeti Mishra
 
Chapter 15 software product metrics
Chapter 15 software product metricsChapter 15 software product metrics
Chapter 15 software product metricsSHREEHARI WADAWADAGI
 
Software quality assurance
Software quality assuranceSoftware quality assurance
Software quality assuranceAman Adhikari
 
Software Quality Attributes
Software Quality AttributesSoftware Quality Attributes
Software Quality AttributesHayim Makabee
 

What's hot (20)

SQA - chapter 13 (Software Quality Infrastructure)
SQA - chapter 13 (Software Quality Infrastructure)SQA - chapter 13 (Software Quality Infrastructure)
SQA - chapter 13 (Software Quality Infrastructure)
 
Sami Zahran Quality Gates
Sami Zahran Quality GatesSami Zahran Quality Gates
Sami Zahran Quality Gates
 
Software engineering-quiz
Software engineering-quizSoftware engineering-quiz
Software engineering-quiz
 
MODELS USED IN SOFTWARE DEVELOPMENT
MODELS USED IN SOFTWARE DEVELOPMENTMODELS USED IN SOFTWARE DEVELOPMENT
MODELS USED IN SOFTWARE DEVELOPMENT
 
The benefits of software reuse
The benefits of software reuseThe benefits of software reuse
The benefits of software reuse
 
RMMM-Risk Management,Mitigation and Monitoring.
RMMM-Risk Management,Mitigation and Monitoring.RMMM-Risk Management,Mitigation and Monitoring.
RMMM-Risk Management,Mitigation and Monitoring.
 
AGILE Model (SDLC).pptx
AGILE Model (SDLC).pptxAGILE Model (SDLC).pptx
AGILE Model (SDLC).pptx
 
Software reliability
Software reliabilitySoftware reliability
Software reliability
 
V model
V modelV model
V model
 
Rational Unified Process
Rational Unified ProcessRational Unified Process
Rational Unified Process
 
Component based development | what, why and how
Component based development | what, why and howComponent based development | what, why and how
Component based development | what, why and how
 
An Introduction to MISRA C:2012
An Introduction to MISRA C:2012An Introduction to MISRA C:2012
An Introduction to MISRA C:2012
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
INTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERINGINTRODUCTION TO SOFTWARE ENGINEERING
INTRODUCTION TO SOFTWARE ENGINEERING
 
Chapter 15 software product metrics
Chapter 15 software product metricsChapter 15 software product metrics
Chapter 15 software product metrics
 
Software quality assurance
Software quality assuranceSoftware quality assurance
Software quality assurance
 
Software Quality Attributes
Software Quality AttributesSoftware Quality Attributes
Software Quality Attributes
 
Software Quality Metrics
Software Quality MetricsSoftware Quality Metrics
Software Quality Metrics
 
Static Testing
Static TestingStatic Testing
Static Testing
 
CMMi
CMMiCMMi
CMMi
 

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

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 

Recently uploaded (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

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