A ''liberating constraint'' is what it sounds like--a rule or principle set in place which restricts one's freedom in one sense (or dimension), where the restriction allows greater freedom in another direction. If the ability to do B is conditioned on A being true; it may be difficult or impossible to do B (at a minimum, it must be ascertained that A is indeed true). If, however, a rule ''guarantees'' that A is true; then you are free to do B at your pleasure. Of course, it may often be useful if A is indeed false; and the cost of forgoing B is frequently an acceptable price to pay. Some consider this BondageAndDiscipline; others consider this enabling and enlightening. A few examples in ComputerScience (the author does not necessarily agree with all of these): * The RelationalModel. Advocates of such claim that the restrictions imposed by the model (no "pointers", all relations between data expressed as explicit relations, etc.) allow efficient AdHocQueryies and intelligent, machine-driven optimizations. Others claim that the RelationalModel is too restrictive, and not appropriate in many cases (pointers are OK, even if that results in something resembling a NetworkDatabase). * FunctionalProgrammingLanguage''''''s, especially those without SideEffect''''''s. Advocates claim that the absence of SideEffect''''''s allows ReferentialTransparency (that part shouldn't be controversial), and that ReferentialTransparency opens up a whole new world of opportunity to the programmer (LazyEvaluation becomes much more tractable to reason about; compilers have more freedom to optimize code, etc.) * ObjectCapabilityModel. One drops ambient authority, but in turn makes it very safe to hook and run arbitrary code from remote resources - something almost unthinkable in open distributed systems. * Many HighLevelLanguage''''''s in general. An oft-repeated claim is that HLLs ought to be AsFastAsCee, as the high-level specification affords a SufficientlySmartCompiler more optimization opportunities. Others retort that this hasn't been repeatedly demonstrated in practice (at least not for a wide variety of practical problems). * The packaging/organziation scheme used by Java (packages must be placed in a directory hierarchy which mirrors the package structure). Some Java fans love this; others hate it. * A single-column primary key in all database tables. (This may include usage of surrogate keys.) * No detectable type-flags and no language-supported "nulls" in variables (see ColdFusionLanguageTypeSystem) * Toss 100% matching of socks. Buy mostly very dark colors and accept 80% matches, and morning rush-hour life will be easier. ---- OffTopic comment: this sounds like a pattern I've noticed in politics too. Conservatives want to restrict our use of drugs in order to liberate (improve) our health and safety; liberals want to restrict our use of guns and weapons to improve our health and safety. Free speech is restricted in that you can't get 10 people to yell FIRE in a theatre, and in some countries you cannot use hate speech or sell Mein Kampf books (some argue we should remove these restrictions to be truly free). ---- See also PrincipleOfLeastPower, GrandParadigmUnification, WaterbedTheory