Anti patterns part 2

Return on Intelligence
Return on IntelligenceReturn on Intelligence
Anti-patterns part 2

Dmitriy Kochergin, Developer
Dnepropetrovsk, 2012


August 7, 2012   www.ExigenServices.com
Content


• Programming anti-patterns
• Methodological anti-patterns
• Configuration management anti-patterns




     2                                     2   www.ExigenServices.com
Part 1
    Programming anti-patterns




3                               3   www.ExigenServices.com
Accidental complexity

• Accidental complexity: Introducing unnecessary complexity
  into a solution
• While essential complexity is inherent and unavoidable,
  accidental complexity is caused by the approach chosen to
  solve the problem
   – essential complexity: we have a hard problem
   – accidental complexity: we have made a problem hard
   – KISS principle




      4                                               4   www.ExigenServices.com
Accidental complexity

• Solution:
   – Focus on the essential complexity
   – Avoid “tricky code”
   – After implementation check if your solution follow business problem




      5                                                 5     www.ExigenServices.com
Accidental complexity




6                   6   www.ExigenServices.com
Blind faith

• Blind faith (or blind programming): programmer develops a
  solution or fixes a computer bug and deploys it without
  testing
• The programmer has blind faith in his abilities
• Another form of blind faith is when a programmer calls a
  subroutine without checking the result (e.g. for null)




       7                                        7    www.ExigenServices.com
Boat anchor

• Boat anchor refers to an unused piece of code that is left in
  code, typically for the reason "In case we need it later”
• Problem:
   – hard to differentiate between obsolete code and working code
   – later it usually easier to rewrite method
   – uncommenting code can cause bugs
• Use VCS to get old version if needed




        8                                               8     www.ExigenServices.com
Cargo cult programming

• Cargo cult originally referred to aboriginal religions which
  grew up in the South Pacific after World War II
• Cargo cult programming: Using patterns, technologies,
  frameworks without understanding why




       9                                            9    www.ExigenServices.com
Cargo cult programming




10                   10   www.ExigenServices.com
Coding by exception

• Coding by exception: Adding new code to handle each special
  case when it appears
• Typically happens due to covering new requirements
• 'One-off' solutions decrease performance and maintainability


• Try to generalize the special case first
• Well designed software projects contain
  very few corner cases



         11                                       11    www.ExigenServices.com
Error hiding


• Error hiding: catching an error message before it can be shown
  to the user and either showing nothing or showing a
  meaningless message
• Cause: desire to hide complexity from the user
• Solution: Raise an exception to the user with simplified error
  message, and save the full error message to an error log
• User should understand what to do from error message,
  provide possible solutions



         12                                        12    www.ExigenServices.com
Hard coding

• Hard coding: storing configuration data in source code rather
  than configuration files
   –   configuration file path
   –   mail server name
   –   remote hosts
   –   … other system environment variables
• Program could work correctly only in certain environment (on
  developer machine)
• Every new environment (including build servers) should be tuned
  to comply with hardcoded (predefined) structure

           13                                      13    www.ExigenServices.com
Hard coding


• Solution:
   –   obtain data from external sources
   –   generate data
   –   take it from user input
   –   pass data through command line or system property




           14                                              14   www.ExigenServices.com
Soft coding


• Soft coding: storing business logic in external resources rather
  than in source code
• Example: storing business rules in DB
• Reason: fear that the code we write will have to be changed as a
  result of a business rule change
• Solution: avoid Hard Coding and Soft Coding




         15                                        15    www.ExigenServices.com
Magic numbers


• Magic numbers: Including unexplained numbers in algorithms

• Replace them with constants:
   • it is easier to read and understand
   • it is easier to alter the value of the number, as it is
     not duplicated
   • it helps detect typos




          16                                                   16   www.ExigenServices.com
Spaghetti code

• Spaghetti code: code that has a complex and tangled control
  structure, especially one using many GOTOs, exceptions, threads,
  or other "unstructured" branching constructs

• Now term is used to describe any
  code with tangled and twisted
  logic, lots of
  branching, polymorphic behavior
  etc




         17                                        17    www.ExigenServices.com
Spaghetti code




Un-structured code    Well-structured code
   is a liability      is an investment

   18                            18   www.ExigenServices.com
Spaghetti code

• Structured programming greatly decreased the
  incidence of spaghetti code: extensive use of
  subroutines, block structures and for and while loops

• Functions not more than 10-20 rows
• Use metrics to find spaghetti methods, e.g.
  cyclomatic complexity, method length.




         19                                     19   www.ExigenServices.com
Spaghetti code: Other related
                          terms

• Ravioli code: program structure is characterized by a number of
  small and (ideally) loosely-coupled components
• While generally desirable from a coupling and cohesion
  perspective, overzealous separation and encapsulation of code
  can bloat call stacks and make navigation through the code more
  difficult




         20                                       20    www.ExigenServices.com
Shotgun surgery


• Shotgun surgery: features are added to several
  places simultaneously, usually by copy-pasting
  with slight variations
• Solution: Aspect oriented programming (AOP)




        21                                         21   www.ExigenServices.com
Shot in the Dark


• Shot in the Dark: production (or test) environment poor track
  record leads to developers are guessing possible problems
• “We can’t reproduce the problem in QA but I think it is caused
  by feature “X””
• Solution: Measure, Don’t Guess
   – local bug reproducing
   – error stack trace
   – profiler




        22                                         22    www.ExigenServices.com
Incorrect exceptions usage

• Incorrect exceptions usage: normal program flow
  implemented using exceptions
   – exit from block using exception
   – similar to goto statement
• Using exceptions to control program flow adds ambiguity
• Solution: use exception only to inform program about
  errors. Checked – for recoverable errors, unchecked – for
  unrecoverable errors




        23                                        23    www.ExigenServices.com
Incorrect data

• Incorrect data: could cause errors anytime during program
  execution
• In contrast to program flow errors data errors are hardly
  exposed because data could be corrupted any stage earlier
• Solution:
   – check data as early as possible
   – check input data of methods (design by contract and firewalls)




        24                                                24     www.ExigenServices.com
Lava flow

• Lava flow: Retaining undesirable (redundant or low-quality)
  code because removing it is too expensive or has
  unpredictable consequences

• If you leave tricky code –
  describe your solution in
  javadoc or comments
• Write tests – then you will
  be confident in refactoring



      25                                        25    www.ExigenServices.com
Lava flow




26               26   www.ExigenServices.com
Other programming anti-
                         patterns

• Busy waiting: consuming CPU while waiting for something
  to happen, usually by repeated checking instead of
  messaging
• Negative cache is a cache that also stores "negative"
  responses (result indicating error).
   – e.g. when network was unavailable – cache error result, and
     return it even after network is back up.




      27                                               27     www.ExigenServices.com
Part 2
     Methodological anti-patterns




28                              28   www.ExigenServices.com
Copy and paste programming

• Copy-paste programming: describe highly repetitive code
  apparently produced by copy and paste operations

• Use extract method refactoring




        29                                      29    www.ExigenServices.com
Copy and paste programming

• Follow Don't Repeat Yourself (DRY) principle
   • modification of any element does not require a changes in
      other logically-unrelated elements




        30                                         30    www.ExigenServices.com
Golden hammer

• Golden hammer (Maslow's hammer, law of the
  instrument): assuming that a favorite solution is universally
  applicable
• “If all you have is a hammer, everything looks like a nail"
                                             Abraham Maslow, 1966




       31                                          31     www.ExigenServices.com
Golden hammer

• Solution:
   – look at the problem from different points of view
   – choose technology (concept, framework or tool) that better suits
     to solve the problem
   – previous means you have o know at least on more solution to
     problem (learn it if needed)
   – There are 191 fundamental software patterns (23 Gamma
     Patterns + 17 Buschmann Patterns + 72 Analysis Patterns + 38
     CORBA Design Patterns + 42 AntiPatterns)
   – [4] describes 140 antipatterns




       32                                               32     www.ExigenServices.com
Improbability factor

• Improbability factor: assuming that known error is improbable
  to occur
   – programmers are aware of the problem
   – they are not allowed to fix the problem
   – because the chances of the problem ever appearing are supposedly
     negligible compared to other problems that could be solved with the
     programmers' time and money




        33                                              33     www.ExigenServices.com
Improbability factor

• As a result, the problem may still occur and do heavy damage due
  to Murphy's law
• Murphy's law typically stated as:
"Anything that can go wrong, will go wrong”




      34                                        34    www.ExigenServices.com
Premature optimization


• Premature optimization: Coding early-on for perceived efficiency,
  sacrificing good design, maintainability, and sometimes even real-world
  efficiency
• "We should forget about small efficiencies, say about 97% of the time:
  premature optimization is the root of all evil"
                                                               Donald Knuth, 1974
• A simple and elegant design is often easier to optimize
• In practice, it is often necessary to keep performance goals in mind when
  first designing software, but the programmer balances the goals of design
  and optimization



         35                                               35       www.ExigenServices.com
Premature pessimization


• Premature pessimization: Coding early-on for good design, leaving
  performance intentionally low
    – multiple copying heavyweight container
    – recalculating rather than caching
    – etc
• Solution should be optimal (not optimized) for task




         36                                              36     www.ExigenServices.com
Programming by permutation

• Programming by permutation (or "programming by accident"):
  trying to find a solution by making small changes (permutations)
  to see if it works
• Programmer trying to guess:
   – calls and order of procedures
   – parameters' values
   – etc.
• Reason:
   – programmer does not fully understand the code or even don’t want to
     understand it
   – external module API is insufficiently documented

        37                                             37     www.ExigenServices.com
Programming by permutation


• Problems:
   – new bugs can be introduced, leading to a "solution" that is even less
     correct than the starting point
   – it’s usually impossible to tell whether the solution will work for all cases
   – programming by permutation gives little or no assurance about the
     quality of the code produced




        38                                                   38      www.ExigenServices.com
Reinventing the square wheel


• Reinventing the square wheel: Failing to adopt an existing,
  adequate solution and instead creating a custom solution
  (reinventing the wheel) which performs much worse than the
  existing one (a square wheel).
• Reason:
   – engineer doesn’t know the standard solution
   – engineer doesn’t like the standard solution
   – second-system effect




        39                                         39   www.ExigenServices.com
Reinventing the square wheel


• Problems:
   – anyone starting from scratch, ignoring
     the prior art, will naturally face same
     old problems again
   – wasted development time, delaying a
     task
   – developers will have to support their
     solution, fixing bugs and adding new
     features




        40                                     40   www.ExigenServices.com
Part 3
Configuration management anti-patterns




  41                           41   www.ExigenServices.com
Dependency hell

• Dependency hell (DLL hell, JAR hell): problems with versions of
  required products
• Problems:
   – many dependencies
       • high coupling
   – long chains of dependencies
   – conflicting dependencies
       • if different versions of lib
       cannot be simultaneously
       installed
   – circular dependencies
       • you can’t separate units
       by level of abstraction
         42                                       42    www.ExigenServices.com
Dependency hell


• Solutions:
   – version numbering (major and minor versions)
   – smart package management (e.g. in Linux)
       • repository-based package management systems
   – software appliances (encapsulate dependencies in a one unit)
   – portable applications




        43                                              43     www.ExigenServices.com
THANKS FOR COMING!!!

• My contacts:
   – e-mail: dmitriy.kochergin@exigenservices.com
   – Skype: dmitry.kochergin




          44                                        44   www.ExigenServices.com
Questions




     Questions?




45                   45   www.ExigenServices.com
Links

Nr.   Document                                 Author, Date, Location
[1]   Anti-patterns wiki                       •http://en.wikipedia.org/wiki/Anti-patterns
[2]   AnemicDomainModel                        •http://www.martinfowler.com/bliki/AnemicDomainModel.html
[3]   AntiPatterns                             •http://www.antipatterns.com/briefing/sld001.htm
[4]   AntiPatterns catalog                     •http://c2.com/cgi-bin/wiki?AntiPatternsCatalog
[5]   Supported by the Antipattern template    •http://c2.com/cgi-bin/wiki?AntiPatternTemplate
[6]   AntiPatterns: Refactoring Software,
      Architectures, and
      Projects in Crisis by William J. Brown
      et.al. (Wiley)
[7]   AntiPatterns                             •http://sourcemaking.com/antipatterns




                     46                                                                           46       www.ExigenServices.com
1 of 46

Recommended

Anti-Patterns part 1 by
Anti-Patterns part 1Anti-Patterns part 1
Anti-Patterns part 1Return on Intelligence
5.8K views64 slides
オブジェクト指向とは何ですか? by
オブジェクト指向とは何ですか?オブジェクト指向とは何ですか?
オブジェクト指向とは何ですか?sumim
2.2K views29 slides
CNIT 127 Ch 8: Windows overflows (Part 1) by
CNIT 127 Ch 8: Windows overflows (Part 1)CNIT 127 Ch 8: Windows overflows (Part 1)
CNIT 127 Ch 8: Windows overflows (Part 1)Sam Bowne
197 views44 slides
良いコードとは by
良いコードとは良いコードとは
良いコードとはNobuyuki Matsui
52.7K views28 slides
Dalvik仮想マシンのアーキテクチャ 改訂版 by
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Takuya Matsunaga
5.3K views20 slides
Metodologia smed by
Metodologia smedMetodologia smed
Metodologia smedSergio Otero
4.5K views28 slides

More Related Content

What's hot

Markku Partinen:Unen huomioiminen. thl_5.4.2019 by
Markku Partinen:Unen huomioiminen.  thl_5.4.2019Markku Partinen:Unen huomioiminen.  thl_5.4.2019
Markku Partinen:Unen huomioiminen. thl_5.4.2019THL
1.3K views43 slides
On to code review lessons learned at microsoft by
On to code review lessons learned at microsoftOn to code review lessons learned at microsoft
On to code review lessons learned at microsoftMichaela Greiler
3.2K views59 slides
Mapeo del valor by
Mapeo del valorMapeo del valor
Mapeo del valorJesus Sanchez
2.6K views18 slides
Paper sharing_Edge based intrusion detection for IOT devices by
Paper sharing_Edge based intrusion detection for IOT devicesPaper sharing_Edge based intrusion detection for IOT devices
Paper sharing_Edge based intrusion detection for IOT devicesYOU SHENG CHEN
112 views47 slides
Code igniter + ci phpunit-test by
Code igniter + ci phpunit-testCode igniter + ci phpunit-test
Code igniter + ci phpunit-testME iBotch
4.7K views64 slides
ハンドメイドNfcの作り方 by
ハンドメイドNfcの作り方ハンドメイドNfcの作り方
ハンドメイドNfcの作り方Yasuhiro Ohsaka
8.4K views2 slides

What's hot(20)

Markku Partinen:Unen huomioiminen. thl_5.4.2019 by THL
Markku Partinen:Unen huomioiminen.  thl_5.4.2019Markku Partinen:Unen huomioiminen.  thl_5.4.2019
Markku Partinen:Unen huomioiminen. thl_5.4.2019
THL1.3K views
On to code review lessons learned at microsoft by Michaela Greiler
On to code review lessons learned at microsoftOn to code review lessons learned at microsoft
On to code review lessons learned at microsoft
Michaela Greiler3.2K views
Paper sharing_Edge based intrusion detection for IOT devices by YOU SHENG CHEN
Paper sharing_Edge based intrusion detection for IOT devicesPaper sharing_Edge based intrusion detection for IOT devices
Paper sharing_Edge based intrusion detection for IOT devices
YOU SHENG CHEN112 views
Code igniter + ci phpunit-test by ME iBotch
Code igniter + ci phpunit-testCode igniter + ci phpunit-test
Code igniter + ci phpunit-test
ME iBotch4.7K views
ハンドメイドNfcの作り方 by Yasuhiro Ohsaka
ハンドメイドNfcの作り方ハンドメイドNfcの作り方
ハンドメイドNfcの作り方
Yasuhiro Ohsaka8.4K views
Reflection in Ruby by kim.mens
Reflection in RubyReflection in Ruby
Reflection in Ruby
kim.mens2.3K views
デザインパターン(初歩的な7パターン) by 和明 斎藤
デザインパターン(初歩的な7パターン)デザインパターン(初歩的な7パターン)
デザインパターン(初歩的な7パターン)
和明 斎藤2.6K views
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに- by mmitti
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
mmitti1.2K views
Agile Is the New Waterfall by Naresh Jain
Agile Is the New WaterfallAgile Is the New Waterfall
Agile Is the New Waterfall
Naresh Jain68.1K views
Equipos para el manejo de materiales by YeseniaChLopez
Equipos para el manejo de materialesEquipos para el manejo de materiales
Equipos para el manejo de materiales
YeseniaChLopez23.7K views
RaspberryPiとawsで取組んだ自作IoT by Saito5656
RaspberryPiとawsで取組んだ自作IoTRaspberryPiとawsで取組んだ自作IoT
RaspberryPiとawsで取組んだ自作IoT
Saito5656 830 views
Integrated Register Allocation introduction by Shiva Chen
Integrated Register Allocation introductionIntegrated Register Allocation introduction
Integrated Register Allocation introduction
Shiva Chen773 views
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용 by Jihyung Song
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
Jihyung Song2.1K views

Viewers also liked

Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012 by
Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012
Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012TEST Huddle
445 views28 slides
Java Pitfalls and Good-to-Knows by
Java Pitfalls and Good-to-KnowsJava Pitfalls and Good-to-Knows
Java Pitfalls and Good-to-KnowsMiquel Martin
5.9K views25 slides
Anti patterns part 1 by
Anti patterns part 1Anti patterns part 1
Anti patterns part 1Return on Intelligence
1.8K views64 slides
Exception handling in java by
Exception handling in javaException handling in java
Exception handling in javapriyankazope
1.4K views12 slides
Coding best practices_exception handling by
Coding best practices_exception handlingCoding best practices_exception handling
Coding best practices_exception handlingAbid Khan
409 views23 slides
null Bachaav Session | Secure Coding in Java by
null Bachaav Session | Secure Coding in Javanull Bachaav Session | Secure Coding in Java
null Bachaav Session | Secure Coding in Javan|u - The Open Security Community
2.4K views66 slides

Viewers also liked(10)

Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012 by TEST Huddle
Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012
Campbell & Readman - TDD It's Not Tester Driven Development - EuroSTAR 2012
TEST Huddle445 views
Java Pitfalls and Good-to-Knows by Miquel Martin
Java Pitfalls and Good-to-KnowsJava Pitfalls and Good-to-Knows
Java Pitfalls and Good-to-Knows
Miquel Martin5.9K views
Exception handling in java by priyankazope
Exception handling in javaException handling in java
Exception handling in java
priyankazope1.4K views
Coding best practices_exception handling by Abid Khan
Coding best practices_exception handlingCoding best practices_exception handling
Coding best practices_exception handling
Abid Khan409 views
OCA Java SE 8 Exam Chapter 6 Exceptions by İbrahim Kürce
OCA Java SE 8 Exam Chapter 6 ExceptionsOCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 Exceptions
İbrahim Kürce4.1K views
Applet programming in java by Vidya Bharti
Applet programming in javaApplet programming in java
Applet programming in java
Vidya Bharti242 views
Exception handling and logging best practices by Angelin R
Exception handling and logging best practicesException handling and logging best practices
Exception handling and logging best practices
Angelin R23.6K views

Similar to Anti patterns part 2

Anti patterns part 2 by
Anti patterns part 2Anti patterns part 2
Anti patterns part 2Return on Intelligence
710 views46 slides
10 Reasons You MUST Consider Pattern-Aware Programming by
10 Reasons You MUST Consider Pattern-Aware Programming10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware ProgrammingPostSharp Technologies
344 views37 slides
Slides for Houston iPhone Developers' Meetup (April 2012) by
Slides for Houston iPhone Developers' Meetup (April 2012)Slides for Houston iPhone Developers' Meetup (April 2012)
Slides for Houston iPhone Developers' Meetup (April 2012)lqi
396 views30 slides
How to really obfuscate your pdf malware by
How to really obfuscate   your pdf malwareHow to really obfuscate   your pdf malware
How to really obfuscate your pdf malwarezynamics GmbH
3.5K views52 slides
How to really obfuscate your pdf malware by
How to really obfuscate your pdf malwareHow to really obfuscate your pdf malware
How to really obfuscate your pdf malwarezynamics GmbH
1.6K views52 slides
Polyglot and Poly-paradigm Programming for Better Agility by
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
2.2K views90 slides

Similar to Anti patterns part 2(20)

Slides for Houston iPhone Developers' Meetup (April 2012) by lqi
Slides for Houston iPhone Developers' Meetup (April 2012)Slides for Houston iPhone Developers' Meetup (April 2012)
Slides for Houston iPhone Developers' Meetup (April 2012)
lqi396 views
How to really obfuscate your pdf malware by zynamics GmbH
How to really obfuscate   your pdf malwareHow to really obfuscate   your pdf malware
How to really obfuscate your pdf malware
zynamics GmbH3.5K views
How to really obfuscate your pdf malware by zynamics GmbH
How to really obfuscate your pdf malwareHow to really obfuscate your pdf malware
How to really obfuscate your pdf malware
zynamics GmbH1.6K views
Polyglot and Poly-paradigm Programming for Better Agility by elliando dias
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
elliando dias2.2K views
Talent42 2014 Sam Wholley - by Talent42
Talent42 2014 Sam Wholley - Talent42 2014 Sam Wholley -
Talent42 2014 Sam Wholley -
Talent424.8K views
Performance tuning Grails applications SpringOne 2GX 2014 by Lari Hotari
Performance tuning Grails applications SpringOne 2GX 2014Performance tuning Grails applications SpringOne 2GX 2014
Performance tuning Grails applications SpringOne 2GX 2014
Lari Hotari3.7K views
Get your Project back in Shape! by Joachim Tuchel
Get your Project back in Shape!Get your Project back in Shape!
Get your Project back in Shape!
Joachim Tuchel469 views
Использование AzureDevOps при разработке микросервисных приложений by Vitebsk Miniq
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
Vitebsk Miniq183 views
Surviving a Plane Crash, a NU.nl case-study by peter_ibuildings
Surviving a Plane Crash, a NU.nl case-studySurviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-study
peter_ibuildings937 views
How to write good quality code by Hayden Bleasel
How to write good quality codeHow to write good quality code
How to write good quality code
Hayden Bleasel882 views
Growing as a software craftsperson (part 1) From Pune Software Craftsmanship. by Dattatray Kale
Growing as a software craftsperson (part 1)  From Pune Software Craftsmanship.Growing as a software craftsperson (part 1)  From Pune Software Craftsmanship.
Growing as a software craftsperson (part 1) From Pune Software Craftsmanship.
Dattatray Kale47 views
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013 by Christopher Curtin
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Christopher Curtin8.7K views

More from Return on Intelligence

Profsoux2014 presentation by Pavelchuk by
Profsoux2014 presentation by PavelchukProfsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukReturn on Intelligence
780 views21 slides
Agile Project Grows by
Agile Project GrowsAgile Project Grows
Agile Project GrowsReturn on Intelligence
884 views27 slides
Types of testing and their classification by
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classificationReturn on Intelligence
12.8K views42 slides
Time Management by
Time ManagementTime Management
Time ManagementReturn on Intelligence
954 views37 slides
Service design principles and patterns by
Service design principles and patternsService design principles and patterns
Service design principles and patternsReturn on Intelligence
4.2K views56 slides
Differences between Testing in Waterfall and Agile by
Differences between Testing in Waterfall and AgileDifferences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileReturn on Intelligence
30.4K views21 slides

More from Return on Intelligence(20)

Организация внутренней системы обучения by Return on Intelligence
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обучения
Оценка задач выполняемых по итеративной разработке by Return on Intelligence
Оценка задач выполняемых по итеративной разработкеОценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработке

Recently uploaded

Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...ShapeBlue
48 views17 slides
Kyo - Functional Scala 2023.pdf by
Kyo - Functional Scala 2023.pdfKyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdfFlavio W. Brasil
434 views92 slides
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...ShapeBlue
34 views17 slides
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...ShapeBlue
63 views13 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
74 views18 slides
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueShapeBlue
96 views7 slides

Recently uploaded(20)

Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by ShapeBlue
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
ShapeBlue48 views
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by ShapeBlue
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
ShapeBlue34 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue63 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue74 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue96 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu141 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue46 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty46 views
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue145 views
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by ShapeBlue
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool
ShapeBlue40 views
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by ShapeBlue
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
ShapeBlue56 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray1080 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson133 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue46 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue91 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue82 views
Digital Personal Data Protection (DPDP) Practical Approach For CISOs by Priyanka Aash
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOs
Priyanka Aash81 views

Anti patterns part 2

  • 1. Anti-patterns part 2 Dmitriy Kochergin, Developer Dnepropetrovsk, 2012 August 7, 2012 www.ExigenServices.com
  • 2. Content • Programming anti-patterns • Methodological anti-patterns • Configuration management anti-patterns 2 2 www.ExigenServices.com
  • 3. Part 1 Programming anti-patterns 3 3 www.ExigenServices.com
  • 4. Accidental complexity • Accidental complexity: Introducing unnecessary complexity into a solution • While essential complexity is inherent and unavoidable, accidental complexity is caused by the approach chosen to solve the problem – essential complexity: we have a hard problem – accidental complexity: we have made a problem hard – KISS principle 4 4 www.ExigenServices.com
  • 5. Accidental complexity • Solution: – Focus on the essential complexity – Avoid “tricky code” – After implementation check if your solution follow business problem 5 5 www.ExigenServices.com
  • 6. Accidental complexity 6 6 www.ExigenServices.com
  • 7. Blind faith • Blind faith (or blind programming): programmer develops a solution or fixes a computer bug and deploys it without testing • The programmer has blind faith in his abilities • Another form of blind faith is when a programmer calls a subroutine without checking the result (e.g. for null) 7 7 www.ExigenServices.com
  • 8. Boat anchor • Boat anchor refers to an unused piece of code that is left in code, typically for the reason "In case we need it later” • Problem: – hard to differentiate between obsolete code and working code – later it usually easier to rewrite method – uncommenting code can cause bugs • Use VCS to get old version if needed 8 8 www.ExigenServices.com
  • 9. Cargo cult programming • Cargo cult originally referred to aboriginal religions which grew up in the South Pacific after World War II • Cargo cult programming: Using patterns, technologies, frameworks without understanding why 9 9 www.ExigenServices.com
  • 10. Cargo cult programming 10 10 www.ExigenServices.com
  • 11. Coding by exception • Coding by exception: Adding new code to handle each special case when it appears • Typically happens due to covering new requirements • 'One-off' solutions decrease performance and maintainability • Try to generalize the special case first • Well designed software projects contain very few corner cases 11 11 www.ExigenServices.com
  • 12. Error hiding • Error hiding: catching an error message before it can be shown to the user and either showing nothing or showing a meaningless message • Cause: desire to hide complexity from the user • Solution: Raise an exception to the user with simplified error message, and save the full error message to an error log • User should understand what to do from error message, provide possible solutions 12 12 www.ExigenServices.com
  • 13. Hard coding • Hard coding: storing configuration data in source code rather than configuration files – configuration file path – mail server name – remote hosts – … other system environment variables • Program could work correctly only in certain environment (on developer machine) • Every new environment (including build servers) should be tuned to comply with hardcoded (predefined) structure 13 13 www.ExigenServices.com
  • 14. Hard coding • Solution: – obtain data from external sources – generate data – take it from user input – pass data through command line or system property 14 14 www.ExigenServices.com
  • 15. Soft coding • Soft coding: storing business logic in external resources rather than in source code • Example: storing business rules in DB • Reason: fear that the code we write will have to be changed as a result of a business rule change • Solution: avoid Hard Coding and Soft Coding 15 15 www.ExigenServices.com
  • 16. Magic numbers • Magic numbers: Including unexplained numbers in algorithms • Replace them with constants: • it is easier to read and understand • it is easier to alter the value of the number, as it is not duplicated • it helps detect typos 16 16 www.ExigenServices.com
  • 17. Spaghetti code • Spaghetti code: code that has a complex and tangled control structure, especially one using many GOTOs, exceptions, threads, or other "unstructured" branching constructs • Now term is used to describe any code with tangled and twisted logic, lots of branching, polymorphic behavior etc 17 17 www.ExigenServices.com
  • 18. Spaghetti code Un-structured code Well-structured code is a liability is an investment 18 18 www.ExigenServices.com
  • 19. Spaghetti code • Structured programming greatly decreased the incidence of spaghetti code: extensive use of subroutines, block structures and for and while loops • Functions not more than 10-20 rows • Use metrics to find spaghetti methods, e.g. cyclomatic complexity, method length. 19 19 www.ExigenServices.com
  • 20. Spaghetti code: Other related terms • Ravioli code: program structure is characterized by a number of small and (ideally) loosely-coupled components • While generally desirable from a coupling and cohesion perspective, overzealous separation and encapsulation of code can bloat call stacks and make navigation through the code more difficult 20 20 www.ExigenServices.com
  • 21. Shotgun surgery • Shotgun surgery: features are added to several places simultaneously, usually by copy-pasting with slight variations • Solution: Aspect oriented programming (AOP) 21 21 www.ExigenServices.com
  • 22. Shot in the Dark • Shot in the Dark: production (or test) environment poor track record leads to developers are guessing possible problems • “We can’t reproduce the problem in QA but I think it is caused by feature “X”” • Solution: Measure, Don’t Guess – local bug reproducing – error stack trace – profiler 22 22 www.ExigenServices.com
  • 23. Incorrect exceptions usage • Incorrect exceptions usage: normal program flow implemented using exceptions – exit from block using exception – similar to goto statement • Using exceptions to control program flow adds ambiguity • Solution: use exception only to inform program about errors. Checked – for recoverable errors, unchecked – for unrecoverable errors 23 23 www.ExigenServices.com
  • 24. Incorrect data • Incorrect data: could cause errors anytime during program execution • In contrast to program flow errors data errors are hardly exposed because data could be corrupted any stage earlier • Solution: – check data as early as possible – check input data of methods (design by contract and firewalls) 24 24 www.ExigenServices.com
  • 25. Lava flow • Lava flow: Retaining undesirable (redundant or low-quality) code because removing it is too expensive or has unpredictable consequences • If you leave tricky code – describe your solution in javadoc or comments • Write tests – then you will be confident in refactoring 25 25 www.ExigenServices.com
  • 26. Lava flow 26 26 www.ExigenServices.com
  • 27. Other programming anti- patterns • Busy waiting: consuming CPU while waiting for something to happen, usually by repeated checking instead of messaging • Negative cache is a cache that also stores "negative" responses (result indicating error). – e.g. when network was unavailable – cache error result, and return it even after network is back up. 27 27 www.ExigenServices.com
  • 28. Part 2 Methodological anti-patterns 28 28 www.ExigenServices.com
  • 29. Copy and paste programming • Copy-paste programming: describe highly repetitive code apparently produced by copy and paste operations • Use extract method refactoring 29 29 www.ExigenServices.com
  • 30. Copy and paste programming • Follow Don't Repeat Yourself (DRY) principle • modification of any element does not require a changes in other logically-unrelated elements 30 30 www.ExigenServices.com
  • 31. Golden hammer • Golden hammer (Maslow's hammer, law of the instrument): assuming that a favorite solution is universally applicable • “If all you have is a hammer, everything looks like a nail" Abraham Maslow, 1966 31 31 www.ExigenServices.com
  • 32. Golden hammer • Solution: – look at the problem from different points of view – choose technology (concept, framework or tool) that better suits to solve the problem – previous means you have o know at least on more solution to problem (learn it if needed) – There are 191 fundamental software patterns (23 Gamma Patterns + 17 Buschmann Patterns + 72 Analysis Patterns + 38 CORBA Design Patterns + 42 AntiPatterns) – [4] describes 140 antipatterns 32 32 www.ExigenServices.com
  • 33. Improbability factor • Improbability factor: assuming that known error is improbable to occur – programmers are aware of the problem – they are not allowed to fix the problem – because the chances of the problem ever appearing are supposedly negligible compared to other problems that could be solved with the programmers' time and money 33 33 www.ExigenServices.com
  • 34. Improbability factor • As a result, the problem may still occur and do heavy damage due to Murphy's law • Murphy's law typically stated as: "Anything that can go wrong, will go wrong” 34 34 www.ExigenServices.com
  • 35. Premature optimization • Premature optimization: Coding early-on for perceived efficiency, sacrificing good design, maintainability, and sometimes even real-world efficiency • "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" Donald Knuth, 1974 • A simple and elegant design is often easier to optimize • In practice, it is often necessary to keep performance goals in mind when first designing software, but the programmer balances the goals of design and optimization 35 35 www.ExigenServices.com
  • 36. Premature pessimization • Premature pessimization: Coding early-on for good design, leaving performance intentionally low – multiple copying heavyweight container – recalculating rather than caching – etc • Solution should be optimal (not optimized) for task 36 36 www.ExigenServices.com
  • 37. Programming by permutation • Programming by permutation (or "programming by accident"): trying to find a solution by making small changes (permutations) to see if it works • Programmer trying to guess: – calls and order of procedures – parameters' values – etc. • Reason: – programmer does not fully understand the code or even don’t want to understand it – external module API is insufficiently documented 37 37 www.ExigenServices.com
  • 38. Programming by permutation • Problems: – new bugs can be introduced, leading to a "solution" that is even less correct than the starting point – it’s usually impossible to tell whether the solution will work for all cases – programming by permutation gives little or no assurance about the quality of the code produced 38 38 www.ExigenServices.com
  • 39. Reinventing the square wheel • Reinventing the square wheel: Failing to adopt an existing, adequate solution and instead creating a custom solution (reinventing the wheel) which performs much worse than the existing one (a square wheel). • Reason: – engineer doesn’t know the standard solution – engineer doesn’t like the standard solution – second-system effect 39 39 www.ExigenServices.com
  • 40. Reinventing the square wheel • Problems: – anyone starting from scratch, ignoring the prior art, will naturally face same old problems again – wasted development time, delaying a task – developers will have to support their solution, fixing bugs and adding new features 40 40 www.ExigenServices.com
  • 41. Part 3 Configuration management anti-patterns 41 41 www.ExigenServices.com
  • 42. Dependency hell • Dependency hell (DLL hell, JAR hell): problems with versions of required products • Problems: – many dependencies • high coupling – long chains of dependencies – conflicting dependencies • if different versions of lib cannot be simultaneously installed – circular dependencies • you can’t separate units by level of abstraction 42 42 www.ExigenServices.com
  • 43. Dependency hell • Solutions: – version numbering (major and minor versions) – smart package management (e.g. in Linux) • repository-based package management systems – software appliances (encapsulate dependencies in a one unit) – portable applications 43 43 www.ExigenServices.com
  • 44. THANKS FOR COMING!!! • My contacts: – e-mail: dmitriy.kochergin@exigenservices.com – Skype: dmitry.kochergin 44 44 www.ExigenServices.com
  • 45. Questions Questions? 45 45 www.ExigenServices.com
  • 46. Links Nr. Document Author, Date, Location [1] Anti-patterns wiki •http://en.wikipedia.org/wiki/Anti-patterns [2] AnemicDomainModel •http://www.martinfowler.com/bliki/AnemicDomainModel.html [3] AntiPatterns •http://www.antipatterns.com/briefing/sld001.htm [4] AntiPatterns catalog •http://c2.com/cgi-bin/wiki?AntiPatternsCatalog [5] Supported by the Antipattern template •http://c2.com/cgi-bin/wiki?AntiPatternTemplate [6] AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis by William J. Brown et.al. (Wiley) [7] AntiPatterns •http://sourcemaking.com/antipatterns 46 46 www.ExigenServices.com