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