User Tools

Site Tools


principles:easy_to_use_and_hard_to_misuse

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:easy_to_use_and_hard_to_misuse [2020-10-12 12:39] – old revision restored (2013-02-06 21:58) 159.69.186.191principles:easy_to_use_and_hard_to_misuse [2021-10-13 08:19] – old revision restored (2021-09-02 12:26) 194.209.25.108
Line 11: Line 11:
 ===== Principle Statement ===== ===== Principle Statement =====
  
 +A module shall be easy to use and hard to misuse.
  
 ===== Description ===== ===== Description =====
Line 19: Line 20:
  
 ===== Strategies ===== ===== Strategies =====
 +
 +This is a very general principle so there is a large variety of possible strategies to adhere more to this principle largely depending on the given design problem:
 +
 +  * Make use of static typing, so the compiler will report faults
 +  * Make the interface simple, so there will be fewer usage defects (see [[Keep It Simple Stupid|KISS]])
 +  * Use the same mechanisms wherever reasonably possible (see [[Uniformity Principle|UP]])
 +  * Use consistent naming and models throughout the design (see [[Uniformity Principle|UP]] and [[Model Principle|MP]])
 +  * Avoid Preconditions (see [[Invariant Avoidance Principle]])
 +  * ...
 +
 +
 +===== Caveats =====
 +
 +See section [[#contrary principles]].
  
  
Line 41: Line 56:
 ==== Specializations ==== ==== Specializations ====
  
-  * [[Principle of Least Surprise]] (PLS): +  * [[Principle of Least Surprise]] (PLS): A module is easy to use if there is no surprise in how it works.
  
 ==== Contrary Principles ==== ==== Contrary Principles ====
Line 49: Line 64:
 ==== Complementary Principles ==== ==== Complementary Principles ====
  
-  * [[Model Principle]] +  * [[Model Principle]] (MP): An interface that is crafted according to the model is easier to use than one that is not. 
-  * [[Uniformity Principle]] +  * [[Invariant Avoidance Principle]] (IAP): One reason for a possible misuse of a module is an invariant. For example there might be a method which takes a list and an index where the index has to be within the bounds of the list. Each of these invariants imposes further possibilities for misuse of the module. So it is better to avoid them
-  * [[Fail Fast]] (FF):  +  * [[Information Hiding/Encapsulation]] (IH/E): A module should be properly encapsulated in order to make it easy to use and hard to misuse.
-  * [[Invariants Avoidance Principle]] (IAP): One reason for a possible misuse of a module is an invariant. For example there might be a method which takes a list and an index where the index has to be within the bounds of the list. Each of these invariants imposes further possibilities for misuse of the module. So it is better to avoid them.+
  
 ==== Principle Collections ==== ==== Principle Collections ====
Line 71: Line 85:
   * [[http://programmer.97things.oreilly.com/wiki/index.php/Make_Interfaces_Easy_to_Use_Correctly_and_Hard_to_Use_Incorrectly|97things: Make Interfaces Easy to Use Correctly and Hard to Use Incorrectly]]   * [[http://programmer.97things.oreilly.com/wiki/index.php/Make_Interfaces_Easy_to_Use_Correctly_and_Hard_to_Use_Incorrectly|97things: Make Interfaces Easy to Use Correctly and Hard to Use Incorrectly]]
   * [[http://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html|How Do I Make This Hard to Misuse?]]   * [[http://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html|How Do I Make This Hard to Misuse?]]
 +
principles/easy_to_use_and_hard_to_misuse.txt · Last modified: 2021-10-18 21:29 by christian