Principle Of Least Power

The PrincipleOfLeastPower is the notion that a subsystem/language/etc. which is designed for a certain task (as opposed to being a general purpose system/language) should have sufficient capability to do that task, and no more.

Advantages of the PrincipleOfLeastPower include:


Just like hand-coded time/space optimizations, applying PrincipleOfLeastPower tends to take additional effort and affects flexibility and extensibility. As it is an optimization problem, one might be well served by the RulesOfOptimization: OptimizeLater - it is better to use too much power and get a working, elegant solution to start, and it helps you learn exactly how much power is required. Then aim at the 'bottlenecks': apply PrincipleOfLeastPower only where the greatest reductions can be usefully achieved.

As a language design principle, of course, one is limited by issues of compatibility with the code people write while you're deciding how little power you can get away with, so perhaps some BigDesignUpFront is called for, or at least limiting distribution.

Examples of the PrincipleOfLeastPower include:

Successful counterexamples (to show that sometimes extra power is a GoodThing to have - at least sometimes):

TimBernersLee wrote an article called "PrinciplesOfDesign?" ( which describes the PrincipleOfLeastPower.

A similar principle is described in ConceptsTechniquesAndModelsOfComputerProgramming (p323; this is the Mozart/Oz book -- highly recommended), under the name "Principle of Least Expressiveness": "When programming a component, the right computation model for the component is the least expressive model that results in a natural program."

Also, PrincipleOfLeastPower implemented via permissions can prevent a bug from going out of control.

And if implemented with ObjectCapabilityModel, it can do so without a centralized trust authority, in a composable manner, and without the expensive proofs and challenges of identity required to establish permissions.

See ProductivityRant, LittleLanguage, IssuesForLanguageDesigners (adds to the above discussion)

See ModelsOfComputation, TuringTrap, TuringTarpit, PrincipleOfLeastAuthority

View edit of November 12, 2014 or FindPage with title or text search