principles:murphy_s_law
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:murphy_s_law [2021-09-02 10:43] – old revision restored (2021-05-11 22:12) 65.21.179.175 | principles:murphy_s_law [2021-09-02 14:01] – old revision restored (2021-09-02 10:22) 65.21.179.175 | ||
---|---|---|---|
Line 71: | Line 71: | ||
* [[Easy to Use and Hard to Misuse]] (EUHM): Because of ML an interface should be crafted so it is easy to use and hard to misuse. EUHM is the application of ML to interfaces. | * [[Easy to Use and Hard to Misuse]] (EUHM): Because of ML an interface should be crafted so it is easy to use and hard to misuse. EUHM is the application of ML to interfaces. | ||
* [[Uniformity Principle]] (UP): A typical source of mistakes are differences. If similar things work similarly, they are more understandable. But if there are subtle differences in how things work, it is likely that someone will make the mistake to mix this up. | * [[Uniformity Principle]] (UP): A typical source of mistakes are differences. If similar things work similarly, they are more understandable. But if there are subtle differences in how things work, it is likely that someone will make the mistake to mix this up. | ||
- | * [[Invariant Avoidance Principle]] (IAP): Invariants are statements that have t be true in order to keep a module in a consistent state. ML states that eventually an invariant will be broken resulting in a hard to detect defect. IAP states that invariants should therefore be avoided. So IAP is the application of ML to invariants. | + | |
==== Contrary Principles ==== | ==== Contrary Principles ==== | ||
Line 78: | Line 78: | ||
==== Complementary Principles ==== | ==== Complementary Principles ==== | ||
- | * **[[Fail Fast]] (FF)**: Sometimes it is impossible to actually prevent an error. In such a case it is advisable to fail fast so the error is recognized early. | + | * **[[Fail Fast]] (FF)**: Sometimes it is impossible to actually prevent an error. In such a case it is advisable to fail fast to the mistake |
Line 146: | Line 146: | ||
Note that the typecast is rather a symptom than the actual problem here. The problem is, that the '' | Note that the typecast is rather a symptom than the actual problem here. The problem is, that the '' | ||
- | ==== Example 3: Date, Mutability/ | ||
- | |||
- | In Java the classes [[http:// | ||
- | |||
- | <code java> | ||
- | Date date1 = new Date(2013, 01, 16); | ||
- | Date date2 = date1; | ||
- | System.out.println(date1); | ||
- | System.out.println(date2); | ||
- | date1.setMonth(2); | ||
- | System.out.println(date1); | ||
- | System.out.println(date2); | ||
- | </ | ||
- | |||
- | Furthermore as can be seen in the code above, the month value counterintuitively is zero-based, which results in 1 meaning February. This obviously is another source for mistakes. | ||
- | |||
- | Because of these and several other flaws in the design of the Java date API, most of the methods in '' | ||
===== Description Status ===== | ===== Description Status ===== |
principles/murphy_s_law.txt · Last modified: 2021-10-20 21:18 by christian