User Tools

Site Tools


principles:keep_it_simple_stupid

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
principles:keep_it_simple_stupid [2015-07-29 15:58] – typo 195.138.130.6principles:keep_it_simple_stupid [2018-12-30 05:21] – [Evidence] fixing a few of the grammar mistakes 72.178.89.198
Line 17: Line 17:
 ===== Principle Statement ===== ===== Principle Statement =====
  
-A simple solution is better than a complex one---even if the solution looks stupid.+A simple solution is better than a complex oneeven if the solution looks stupid. 
  
  
Line 34: Line 34:
  
 The advantage of simplicity is even bigger when the person who maintains the software is not the one who once wrote it. The maintainer might also be less familiar with sophisticated programming language features. So simple and stupid programs are easier to maintain because the maintainer needs less time to understand them and is less likely to introduce further defects. The advantage of simplicity is even bigger when the person who maintains the software is not the one who once wrote it. The maintainer might also be less familiar with sophisticated programming language features. So simple and stupid programs are easier to maintain because the maintainer needs less time to understand them and is less likely to introduce further defects.
 +
 +One reason to create more complex code is to make it more flexible to accommodate further requirements. But one cannot know in what way to make it flexible or if that flexibility will be ever needed.
 +
 +"When you make your code more flexible or sophisticated than it needs to be, you over-engineer it. Some do this because they believe they know their system’s future requirements. They reason that it’s best to make a design more flexible or sophisticated today, so it can accommodate the needs of tomorrow. That sounds reasonable, if you happen to be a psychic." - Refactoring To Patterns - Joshua Kerievsky.
 +
 +Another reason to create more complex code is to make optimizations. An optimized code is a more complex code. Pareto principle applies also in code: a program spend most of the time in a small portion of the code, so it will be wise to concentrate the effort to optimize only that part of the code. Another best practice is the to follow the 
 +"Three rules of optimization": (1. Don't, 2. Don't... Yet, 3. Profile before optimizing), which make sense: to optimize only the code with performance problems. (First author: Michael A. Jackson)
  
  
Line 73: Line 80:
 The following hypotheses can be stated: The following hypotheses can be stated:
   - Simpler solutions are faster to implement.   - Simpler solutions are faster to implement.
-  - Simpler solutions yield less implementation faults (which reduces testing effort).+  - Simpler solutions yield fewer implementation faults (which reduces testing effort).
   - Simpler solutions are easier to maintain, i.e. detecting and correcting defects is more effective and efficient.   - Simpler solutions are easier to maintain, i.e. detecting and correcting defects is more effective and efficient.
-  - Simpler solutions yield more reliable software, i.e. less defects show up after releasing the software.+  - Simpler solutions yield more reliable software, i.e. fewer defects show up after releasing the software.
  
 All these hypotheses can be examined with respect to different complexity metrics. All these hypotheses can be examined with respect to different complexity metrics.
  
-Hypothesis 1 can be regarded true by definition. If the solution cannot be implemented fast, it is not simple. +Hypothesis 1 is true by definition. If the solution cannot be implemented quickly, it is not simple. 
  
 Though hypotheses 2 and 3 are not true by definition but they can be regarded intuitively clear. Nevertheless there is some research. In ((Virginia R. Gibson and James A. Senn: //[[http://dl.acm.org/citation.cfm?id=62073|System Structure and Software Maintenance Performance]]//)) a system was improved in two steps resulting in three variants of the same system. Several metrics show that the improvements reduced complexity. 36 programmers with varying experience conducted three different maintenance tasks and their performance was measured. The results indicate that the improvements also improved maintainability. Several other studies support the correlation between complexity and maintainability((Chris F. Kemerer: //[[http://link.springer.com/article/10.1007%2FBF02249043?LI=true|Software complexity and software maintenance: A survey of empirical research]]//)). Though hypotheses 2 and 3 are not true by definition but they can be regarded intuitively clear. Nevertheless there is some research. In ((Virginia R. Gibson and James A. Senn: //[[http://dl.acm.org/citation.cfm?id=62073|System Structure and Software Maintenance Performance]]//)) a system was improved in two steps resulting in three variants of the same system. Several metrics show that the improvements reduced complexity. 36 programmers with varying experience conducted three different maintenance tasks and their performance was measured. The results indicate that the improvements also improved maintainability. Several other studies support the correlation between complexity and maintainability((Chris F. Kemerer: //[[http://link.springer.com/article/10.1007%2FBF02249043?LI=true|Software complexity and software maintenance: A survey of empirical research]]//)).
principles/keep_it_simple_stupid.txt · Last modified: 2021-10-20 21:09 by christian