devel-rules.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Mon, 22 Feb 2016 13:34:55 +0200
changeset 1911 870693ce6ff0
child 1912 8b81a8f0f692
permissions -rw-r--r--
Fix my RST article style by 'check-format-policy' target.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1911
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
.. -*- coding: utf-8; -*-
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
.. include:: HEADER.rst
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
============================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
 Software development rules
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
============================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
.. contents::
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
   :local:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
General discussion
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
==================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
  http://en.wikipedia.org/wiki/List_of_software_development_philosophies
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
  http://en.wikipedia.org/wiki/List_of_eponymous_laws
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
Principle of good enough (POGE)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
===============================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
It favours quick-and-simple (but potentially extensible) designs over
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
elaborate systems designed by committees.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
Once the quick-and-simple design is deployed, it can then evolve as needed,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
driven by user requirements.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
This kind of design is not appropriate in systems where it is not possible to
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
evolve the system over time, or where the full functionality is required from
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
the start.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
  http://en.wikipedia.org/wiki/Principle_of_good_enough
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
No Silver Bullet
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
There is no single development, in either technology or management technique,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
which by itself promises even one order of magnitude improvement within a
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
decade in productivity, in reliability, in simplicity.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
  http://en.wikipedia.org/wiki/No_Silver_Bullet
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
Rule of thumb
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
=============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
A rule of thumb is a principle that postulate in some case use simple
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
procedure wich produce approximate result instead use complex but exact
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
produce.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
  http://en.wikipedia.org/wiki/Rule_of_thumb
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
The Zero One or Infinity
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    58
========================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
The Zero One or Infinity (ZOI) rule is a rule of thumb in software design. It
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
suggests that arbitrary limits on the number of instances of a particular
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    62
entity should not be allowed. Specifically, that an entity should either be
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    63
forbidden entirely, one should be allowed, or any number (presumably, to the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    64
limit of available storage) of them should be allowed. It should not be the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    65
software that puts a hard limit on the number of instances of the entity.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    67
  http://en.wikipedia.org/wiki/Zero_One_Infinity
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    68
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    69
80-20 rule (pareto principle)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
=============================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    71
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    72
This rule postulate that roughly 80% of the effects come from 20% of the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
causes.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    74
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
This rule applied to optimisation (most time spent by program only by little
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    76
piece of code), functionality (80% of users use only 20% of program
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    77
functionality); bugs (fixing the top 20% of most reported bugs solve 80% of
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    78
the error and crashes).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    79
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    80
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    81
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    82
  http://en.wikipedia.org/wiki/80:20_rule
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    83
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    84
1% rule
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    85
=======
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    86
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    87
The 1% rule states that the number of people who create content on the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    88
internet represents approximately 1% (or less) of the people actually viewing
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    89
that content.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    90
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    91
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    93
  http://en.wikipedia.org/wiki/1%25_rule_%28Internet_culture%29
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    94
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    95
Parkinson's Law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    96
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    97
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    98
Work expands so as to fill the time available for its completion.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    99
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   100
Data expands to fill the space available for storage.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   101
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   102
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   103
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   104
  http://en.wikipedia.org/wiki/Parkinson%27s_law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   105
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   106
Ninety-ninety rule
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   107
==================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   108
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   109
The first 90% of the code accounts for the first 10% of the development time.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   110
The remaining 10% of the code accounts for the other 90% of the development
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   111
time.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   112
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   113
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   114
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   115
  http://en.wikipedia.org/wiki/Ninety-ninety_rule
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   116
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   117
Wirth's law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   118
===========
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   119
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   120
Software is getting slower more rapidly than hardware becomes faster.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   121
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   122
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   123
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   124
  http://en.wikipedia.org/wiki/Wirth%27s_law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   125
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   126
Student syndrome
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   127
================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   128
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   129
Student syndrome refers to the phenomenon that many people will start to fully
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   130
apply themselves to a task just at the last possible moment before a deadline.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   131
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   132
The student syndrome is a form of procrastination ().
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   133
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   134
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   135
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   136
  http://en.wikipedia.org/wiki/Student_syndrome
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   137
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   138
Conway's Law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   139
============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   140
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   141
...organizations which design systems ... are constrained to produce designs
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   142
which are copies of the communication structures of these organizations.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   143
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   144
Example: Consider a two-person team of software engineers, A and B. Say A
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   145
designs and codes a software class X. Later, the team discovers that class X
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   146
needs some new features. If A adds the features, A is likely to simply expand X
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   147
to include the new features. If B adds the new features, B may be afraid of
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   148
breaking X, and so instead will create a new derived class X2 that inherits X's
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   149
features, and puts the new features in X2. So the final design is a reflection
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   150
of who implemented the functionality.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   151
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   152
A real life example: NASA's Mars Climate Orbiter crashed because one team used
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   153
United States customary units (e.g., inches, feet and pounds) while the other
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   154
used metric units for a key spacecraft operation.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   155
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   156
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   157
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   158
  http://en.wikipedia.org/wiki/Conway%27s_Law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   159
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   160
Brooks's law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   161
============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   162
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   163
It takes some time for the people added to a project to become productive.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   164
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   165
Communication overheads increase as the number of people increases.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   166
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   167
Adding manpower to a late software project makes it later.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   168
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   169
See:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   170
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   171
  http://en.wikipedia.org/wiki/Brooks%27_law
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   172
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   173
Code bloat
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   174
==========
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   175
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   176
Code bloat is the production of code that is perceived as unnecessarily long,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   177
slow, or otherwise wasteful of resources. Code bloat generally refers to
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   178
source code size but sometimes is used to refer to the generated code size or
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   179
even the binary file size.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   180
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   181
  http://en.wikipedia.org/wiki/Code_bloat
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   182
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   183
Software bloat
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   184
==============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   185
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   186
Software bloat is a term used to describe the tendency of newer computer
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   187
programs to have a larger installation footprint, or have many unnecessary
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   188
features that are not used by end users, or just generally use more system
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   189
resources than necessary, while offering little or no benefit to its users.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   190
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   191
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   192
Comparison of Microsoft Windows minimum hardware requirements (for 32-bit
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   193
versions):
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   194
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   195
Windows version     Processor   Memory  Hard disk
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   196
Windows 95[4]        25 MHz      4 MB    ~50 MB
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   197
Windows 98[5]        66 MHz     16 MB   ~200 MB
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   198
Windows 2000[6]     133 MHz     32 MB    650 MB
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   199
Windows XP[7]       233 MHz     64 MB    1.5 GB
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   200
Windows Vista[8]    800 MHz    512 MB     15 GB
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   201
Windows 7[9]          1 GHz      1 GB     16 GB
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   202
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   203
.. epigraph::
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   204
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   205
  Every program attempts to expand until it can read mail. Those programs which
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   206
  cannot so expand are replaced by ones which can.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   207
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   208
  -- Jamie Zawinski
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   209
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   210
Second-system effect
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   211
====================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   212
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   213
In computing, the second-system effect or sometimes the second-system syndrome
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   214
refers to the tendency, when following on from a relatively small, elegant,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   215
and successful system, to design the successor as an elephantine,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   216
feature-laden monstrosity. The term was first used by Fred Brooks in his
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   217
classic The Mythical Man-Month.[1] It described the jump from a set of simple
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   218
operating systems on the IBM 700/7000 series to OS/360 on the 360 series.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   219
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   220
Inner-platform effect
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   221
=====================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   222
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   223
The inner-platform effect is the tendency of software architects to create a
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   224
system so customizable as to become a replica, and often a poor replica, of
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   225
the software development platform they are using.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   226
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   227
XXX read more http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   228
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   229
  http://en.wikipedia.org/wiki/Inner-platform_effect
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   230
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   231
Feature creep
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   232
=============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   233
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   234
Feature creep is the proliferation of features in a product such as computer
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   235
software. Extra features go beyond the basic function of the product and so
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   236
can result in baroque over-complication, or "featuritis", rather than simple,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   237
elegant design.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   238
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   239
  http://en.wikipedia.org/wiki/Feature_creep
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   240
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   241
Bullet-point engineering
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   242
========================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   243
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   244
Bullet-point engineering is a software design anti-pattern where developers
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   245
use the features of competing software packages as checklists of features to
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   246
implement in their own product. These features are often implemented poorly
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   247
and haphazardly, without any real design, merely so they can be added to a
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   248
bulleted list of features in marketing material. Bullet point engineering
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   249
often leads to feature creep and software bloat but may also simply result in
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   250
a poorly designed imitative product.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   251
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   252
  http://en.wikipedia.org/wiki/Bullet-point_engineering
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   253
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   254
KISS
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   255
====
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   256
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   257
Keep it simple and stupid, or keep it simple, stupid!
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   258
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   259
Instruction creep and function creep, two instances of creeping featuritis,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   260
are examples of failure to follow the KISS principle in software development.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   261
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   262
  http://en.wikipedia.org/wiki/KISS_principle
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   263
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   264
Minimalism
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   265
==========
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   266
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   267
In computing, minimalism refers to the application of minimalist philosophies
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   268
and principles in hardware and software design and usage.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   269
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   270
  http://en.wikipedia.org/wiki/Minimalism_%28computing%29
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   271
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   272
Unix philosophy
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   273
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   274
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   275
.. epigraph::
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   276
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   277
  "Do one thing and do it well."
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   278
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   279
  -- Doug McIlroy
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   280
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   281
.. epigraph::
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   282
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   283
   "Write programs that do one thing and do it well. Write programs to work
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   284
   together. Write programs to handle text streams, because that is a universal
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   285
   interface."
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   286
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   287
  -- Doug McIlroy
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   288
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   289
.. epigraph::
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   290
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   291
   #. You cannot tell where a program is going to spend its time. Bottlenecks
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   292
      occur in surprising places, so do not try to second guess and put in a speed
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   293
      hack until you've proven that's where the bottleneck is.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   294
   #. Measure. Do not tune for speed until your performance analysis tool tells
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   295
      you which part of the code overwhelms the rest.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   296
   #. Fancy algorithms tend to run more slowly on small data sets than simple
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   297
      algorithms. They tend to have a large constant factor in O(n) analysis, and
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   298
      n is usually small. So don't get fancy unless Rule 2 indicates that n is big
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   299
      enough.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   300
   #. Simplify your algorithms and data structures wherever it makes sense because
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   301
      fancy algorithms are more difficult to implement without defects. The data
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   302
      structures in most programs can be built from array lists, linked lists,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   303
      hash tables, and binary trees.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   304
   #. Data dominates. If you have chosen the right data structures and organized
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   305
      things well, the algorithms will almost always be self-evident. Data
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   306
      structures, not algorithms, are central to programming.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   307
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   308
   -- Pike: Notes on Programming in C.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   309
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   310
.. epigraph::
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   311
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   312
   1. Small is beautiful.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   313
   2. Make each program do one thing well.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   314
   3. Build a prototype as soon as possible.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   315
   4. Choose portability over efficiency.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   316
   5. Store data in flat text files.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   317
   6. Use software leverage to your advantage.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   318
   7. Use shell scripts to increase leverage and portability.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   319
   8. Avoid captive user interfaces.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   320
   9. Make every program a filter.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   321
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   322
   -- Mike Gancarz: The UNIX Philosophy
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   323
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   324
With this not all agree:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   325
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   326
 1. Allow the user to tailor the environment.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   327
 2. Make operating system kernels small and lightweight.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   328
 3. Use lowercase and keep it short.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   329
 4. Save trees.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   330
 5. Silence is golden.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   331
 6. Think parallel.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   332
 7. The sum of the parts is greater than the whole.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   333
 8. Look for the 90-percent solution.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   334
 9. Worse is better.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   335
 10. Think hierarchically.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   336
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   337
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   338
** Misc.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   339
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   340
"Unix is simple. It just takes a genius to understand its simplicity."
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   341
                              -– Dennis Ritchie
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   342
"Unix never says 'please'."
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   343
                              -– Rob Pike
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   344
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   345
  http://en.wikipedia.org/wiki/Unix_philosophy
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   346
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   347
Worse is better
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   348
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   349
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   350
In the "Worse is better" design style, simplicity of both the interface and
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   351
the implementation is more important than any other attribute of the system —
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   352
including correctness, consistency and completeness.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   353
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   354
Simplicity
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   355
  The design must be simple, both in implementation and interface. It is
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   356
  more important for the implementation to be simpler than the interface.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   357
  Simplicity is the most important consideration in a design.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   358
Correctness
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   359
  The design must be correct in all observable aspects. It is slightly better
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   360
  to be simple than correct.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   361
Consistency
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   362
  The design must not be overly inconsistent. Consistency can be sacrificed
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   363
  for simplicity in some cases, but it is better to drop those parts of the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   364
  design that deal with less common circumstances than to introduce either
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   365
  implementational complexity or inconsistency.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   366
Completeness
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   367
  The design must cover as many important situations as is practical. All
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   368
  reasonably expected cases should be covered. Completeness can be sacrificed
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   369
  in favor of any other quality. In fact, completeness must be sacrificed
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   370
  whenever implementation simplicity is jeopardized. Consistency can be
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   371
  sacrificed to achieve completeness if simplicity is retained; especially
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   372
  worthless is consistency of interface.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   373
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   374
  http://dreamsongs.com/WIB.html
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   375
                Lisp: Good News, Bad News, How to Win Big
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   376
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   377
The right thing
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   378
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   379
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   380
The MIT approach (known as "The right thing"):
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   381
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   382
Simplicity
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   383
  The design must be simple, both in implementation and interface. It is
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   384
  more important for the interface to be simpler than the implementation.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   385
Correctness
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   386
  The design must be correct in all observable aspects. Incorrectness is
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   387
  simply not allowed.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   388
Consistency
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   389
  The design must be consistent. A design is allowed to be slightly less
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   390
  simple and less complete to avoid inconsistency. Consistency is as important
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   391
  as correctness.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   392
Completeness
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   393
  The design must cover as many important situations as is practical. All
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   394
  reasonably expected cases must be covered. Simplicity is not allowed to
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   395
  overly reduce completeness.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   396
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   397
  http://dreamsongs.com/WIB.html
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   398
                Lisp: Good News, Bad News, How to Win Big
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   399
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   400
YAGNI
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   401
=====
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   402
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   403
"You aren't gonna need it" (or YAGNI for short) is the principle in extreme
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   404
programming that programmers should not add functionality until it is
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   405
necessary.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   406
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   407
  http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   408
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   409
DRY (DIE)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   410
=========
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   411
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   412
Don't Repeat Yourself (DRY) or Duplication is Evil (DIE).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   413
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   414
 * VCS allow multiple and diverging copies ("branches").
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   415
 * Source code generation.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   416
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   417
  http://en.wikipedia.org/wiki/Don%27t_repeat_yourself
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   418
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   419
Do it yourself (DIY)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   420
====================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   421
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   422
Do it yourself (or DIY) is a term used to describe building, modifying, or
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   423
repairing of something without the aid of experts or professionals.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   424
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   425
when tasklist longer then people life mutch easy use already written libraries
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   426
then wrote own.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   427
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   428
  http://en.wikipedia.org/wiki/Do_it_yourself
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   429
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   430
Once and Only Once (OAOO)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   431
=========================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   432
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   433
MoSCoW Method
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   434
=============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   435
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   436
The capital letters in MoSCoW stand for:
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   437
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   438
 * M - MUST have this (included in the current delivery timebox in order
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   439
   for it to be a success).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   440
 * S - SHOULD have this if at all possible (critical to the success of the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   441
   project, but are not necessary for delivery in the current delivery
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   442
   timebox).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   443
 * C - COULD have this if it does not affect anything else (nice to have).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   444
 * W - WON'T have this time but WOULD like in the future.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   445
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   446
  http://en.wikipedia.org/wiki/MoSCoW_Method
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   447
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   448
Separation of concerns
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   449
======================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   450
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   451
In computer science, separation of concerns (SoC) is the process of separating
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   452
a computer program into distinct features that overlap in functionality as
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   453
little as possible. A concern is any piece of interest or focus in a program.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   454
Typically, concerns are synonymous with features or behaviors. Progress
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   455
towards SoC is traditionally achieved through modularity of programming and
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   456
encapsulation (or "transparency" of operation), with the help of information
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   457
hiding. Layered designs in information systems are also often based on
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   458
separation of concerns (e.g., presentation layer, business logic layer, data
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   459
access layer, database layer).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   460
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   461
HyperText Markup Language (HTML) and cascading style sheets (CSS) are
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   462
languages intended to separate style from content.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   463
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   464
  http://en.wikipedia.org/wiki/Separation_of_concerns
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   465
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   466
Modular design
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   467
==============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   468
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   469
In systems engineering, modular design — or "modularity in design" — is an
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   470
approach that subdivides a system into smaller parts (modules) that can be
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   471
independently created and then used in different systems to drive multiple
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   472
functionalities.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   473
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   474
  http://en.wikipedia.org/wiki/Modular_design
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   475
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   476
Occam's razor
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   477
=============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   478
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   479
"entia non sunt multiplicanda praeter necessitatem"
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   480
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   481
Entities must not be multiplied beyond necessity.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   482
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   483
Code and fix
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   484
============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   485
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   486
Programmers immediately begin producing code. Bugs must be fixed before the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   487
product can be shipped.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   488
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   489
  http://en.wikipedia.org/wiki/Code_and_fix
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   490
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   491
Cowboy coding
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   492
=============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   493
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   494
Cowboy coding is a term used to describe software development where the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   495
developers have autonomy over the development process. This includes control
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   496
of the project's schedule, algorithms, tools, and coding style.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   497
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   498
A cowboy coder can be a lone developer or part of a group of developers with
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   499
either no external management or management that controls only non-development
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   500
aspects of the project, such as its nature, scope, and feature set (the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   501
"what", but not the "how").
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   502
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   503
  http://en.wikipedia.org/wiki/Cowboy_coding
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   504
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   505
Extreme Programming
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   506
===================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   507
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   508
  http://en.wikipedia.org/wiki/Extreme_Programming
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   509
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   510
Hollywood Principle
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   511
===================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   512
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   513
In computer programming, the Hollywood Principle is stated as "don't call us,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   514
we'll call you." It has applications in software engineering; see also
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   515
implicit invocation for a related architectural principle.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   516
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   517
  http://en.wikipedia.org/wiki/Hollywood_Principle
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   518
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   519
Inversion of control
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   520
====================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   521
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   522
Inversion of control, or IoC, is an abstract principle describing an aspect of
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   523
some software architecture designs in which the flow of control of a system is
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   524
inverted in comparison to procedural programming.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   525
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   526
  http://en.wikipedia.org/wiki/Inversion_of_control
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   527
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   528
Literate programming
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   529
====================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   530
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   531
  http://en.wikipedia.org/wiki/Literate_Programming
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   532
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   533
Model-driven architecture
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   534
=========================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   535
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   536
  http://en.wikipedia.org/wiki/Model-driven_architecture
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   537
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   538
Quick-and-dirty
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   539
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   540
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   541
Quick-and-dirty is a term used in reference to anything that is an easy way to
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   542
implement a workaround or "kludge." Its usage is popular among programmers,
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   543
who use it to describe a crude solution or programming implementation that is
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   544
imperfect, inelegant, or otherwise inadequate, but which solves or masks the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   545
problem at hand, and is generally faster and easier to put in place than a
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   546
proper solution.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   547
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   548
  http://en.wikipedia.org/wiki/Quick-and-dirty
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   549
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   550
Release early, release often
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   551
============================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   552
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   553
Release early, release often (sometimes abbreviated RERO) is a software
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   554
development philosophy that emphasizes the importance of early and frequent
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   555
releases in creating a tight feedback loop between developers and testers or
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   556
users.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   557
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   558
  http://en.wikipedia.org/wiki/Release_early,_release_often
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   559
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   560
Test-driven development
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   561
=======================
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   562
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   563
Test-driven development (TDD) is a software development technique that relies
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   564
on the repetition of a very short development cycle: First the developer
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   565
writes a failing automated test case that defines a desired improvement or new
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   566
function, then produces code to pass that test and finally refactors the new
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   567
code to acceptable standards.
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   568
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   569
  http://en.wikipedia.org/wiki/Test-driven_development
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   570
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   571
Unified Process
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   572
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   573
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   574
The Unified Software Development Process or Unified Process is a popular
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   575
iterative and incremental software development process framework. The
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   576
best-known and extensively documented refinement of the Unified Process is the
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   577
Rational Unified Process (RUP).
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   578
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   579
  http://en.wikipedia.org/wiki/Unified_Process
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   580
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   581
Waterfall model
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   582
===============
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   583
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   584
   1. Requirements specification
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   585
   2. Design
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   586
   3. Construction (AKA implementation or coding)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   587
   4. Integration
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   588
   5. Testing and debugging (AKA Validation)
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   589
   6. Installation
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   590
   7. Maintenance
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   591
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   592
  http://en.wikipedia.org/wiki/Waterfall_model
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   593
870693ce6ff0 Fix my RST article style by 'check-format-policy' target.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   594
* Do it yourself.