- From: Tim Berners-Lee <timbl@w3.org>
- Date: Tue, 20 Dec 2005 13:22:32 -0500
- To: noah_mendelsohn@us.ibm.com
- Cc: www-tag@w3.org
Noah, Looks good, in general -- Thank you for doing it. I had thought Roy had said a Principle was a reasonable epithet here - but I may remember wrongly. The PLP bit was added to the Principles DesignIssues note at revision 1.10, in January 2002. I'm not sure whether it was taken from a previous location. I'd like to change the wording of the bit about RDF to not talk about RDF in the HTML file but compare and HTML file with an RDF file. The business of mixing them is a distraction. As regards SQL and truing completeness, I had assumed that it wasn't but then I seem to remember being told it was. Tim Annotations for Principles.html *************** 1.10 (timbl 12-Jan-02): <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 1.10 (timbl 12-Jan-02): "http://www.w3.org/TR/html4/ loose.dtd"> 1.1 (timbl 09-Sep-99): <html> 1.1 (timbl 09-Sep-99): <head> 1.10 (timbl 12-Jan-02): <meta http-equiv="Content-Type" content="text/html"> 1.1 (timbl 09-Sep-99): <title>-- Axioms of Web architecture</title> 1.9 (timbl 08-Jan-01): <link rel="Stylesheet" href="di.css"> 1.1 (timbl 09-Sep-99): </head> 1.1 (timbl 09-Sep-99): 1.10 (timbl 12-Jan-02): <body bgcolor="#ddffdd" text="#000000" lang="en"> 1.1 (timbl 09-Sep-99): <address> 1.1 (timbl 09-Sep-99): Tim Berners-Lee <br> 1.10 (timbl 12-Jan-02): Date: 1998, last change: $Date: 2001/01/08 19:23:50 $ <br> 1.10 (timbl 12-Jan-02): Status: personal view only. Editing status: first draft. 1.1 (timbl 09-Sep-99): </address> 1.1 (timbl 09-Sep-99): 1.1 (timbl 09-Sep-99): <p><a href="./">Up to Design Issues</a></p> 1.1 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p></p> 1.2 (timbl 09-Sep-99): <hr> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <h1>Principles of Design</h1> 1.2 (timbl 09-Sep-99): 1.8 (timbl 09-Sep-99): <p>Again and again we fall back on the folklore of the principles of good 1.2 (timbl 09-Sep-99): design. Sometimes I need a URI for them so this is started as collection of 1.8 (timbl 09-Sep-99): them. I have written about some in many places. Principles such as 1.10 (timbl 12-Jan-02): <b>simplicity</b> and <b>modularity</b> are the stuff of software 1.10 (timbl 12-Jan-02): engineering; <b>decentralization</ b> and <b>tolerance</b> are the life and 1.10 (timbl 12-Jan-02): breath of Internet. Brian Carpenter has enumerated some principles of design 1.10 (timbl 12-Jan-02): of the Net [<a href="Architecture.html#carpenter">carpenter</a>]. The third 1.10 (timbl 12-Jan-02): pair of ideas I have found commonly useful for the Web. I mentioned them in a 1.10 (timbl 12-Jan-02): keynote at WWW7 and the note on <a href="Evolution.html">Evolvability</a>.</p> 1.5 (timbl 09-Sep-99): 1.10 (timbl 12-Jan-02): <p>This is largely "motherhood and apple pie" but it still needs a home.</p> 1.2 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <h2><a name="KISS">Simplicity</a></ h2> 1.2 (timbl 09-Sep-99): 1.7 (timbl 09-Sep-99): <blockquote> 1.7 (timbl 09-Sep-99): <p>"Keep it simple, stupid!"</p> 1.7 (timbl 09-Sep-99): </blockquote> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p>Simplicity is easily to quote but often ignored in strange ways. Perhaps 1.2 (timbl 09-Sep-99): this is because it is the eye of the beholder.</p> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p>A language which uses fewer basic elements to achieve the same power is 1.2 (timbl 09-Sep-99): simpler.</p> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p>Sometimes simplicity is confused with 'easy to understand". For example, a 1.2 (timbl 09-Sep-99): two-line solution which uses recursion is a pretty simple, even though some 1.2 (timbl 09-Sep-99): people might find it easier to work though a 10-line solution which avoids 1.2 (timbl 09-Sep-99): recursion.</p> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p>In XML, "Processing Instructions", those things which start with "<?" 1.2 (timbl 09-Sep-99): are <strong>not</strong> simple. They look simple, just an extra sort of 1.2 (timbl 09-Sep-99): thing in the language, but the complicate what was a very clean design of 1.2 (timbl 09-Sep-99): elements and attributes, and a complication in the underlying syntax is has 1.2 (timbl 09-Sep-99): great effect. All specifications which refer to XML processing will have to 1.2 (timbl 09-Sep-99): figure out what to do about processing instructions as well as elements.</p> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <h2><a name="Modular">Modular Design</a></h2> 1.2 (timbl 09-Sep-99): 1.10 (timbl 12-Jan-02): <p>When you design a system, or a language, then if the features can be 1.10 (timbl 12-Jan-02): broken into relatively loosely bound groups of relatively closely bound 1.10 (timbl 12-Jan-02): features, then that division is a good thing to be made a part of the design. 1.10 (timbl 12-Jan-02): This is just good engineering. It means that when you want to change the 1.10 (timbl 12-Jan-02): system, you can with luck in the future change only one part, which will only 1.10 (timbl 12-Jan-02): require you to understand (and test) that part. This will allow other people 1.10 (timbl 12-Jan-02): to independently change other parts at the same time. This is just classic 1.10 (timbl 12-Jan-02): good software design and books have been written about it. The corollary, 1.10 (timbl 12-Jan-02): the TOII is less frequently met.</p> 1.3 (timbl 09-Sep-99): 1.3 (timbl 09-Sep-99): <p>Modular design hinges on the simplicity and abstract nature of the 1.3 (timbl 09-Sep-99): interface definition between the modules. A design in which the insides of 1.3 (timbl 09-Sep-99): each module need to know all about each other is not a modular design but an 1.3 (timbl 09-Sep-99): arbitrary partitioning of the bits.</p> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <h2 id="Tolerance">Tolerance</h2> 1.2 (timbl 09-Sep-99): 1.7 (timbl 09-Sep-99): <blockquote> 1.7 (timbl 09-Sep-99): <p>"Be liberal in what you require but conservative in what you do"</p> 1.7 (timbl 09-Sep-99): </blockquote> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p>This is the expression of a principle which applies pretty well in life, 1.2 (timbl 09-Sep-99): (it is a typical UU tenet), and is commonly employed in design across the 1.2 (timbl 09-Sep-99): Internet.</p> 1.2 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <p>Write HTML 4.0-strict. Accept HTML-4.0-Transitional (a superset of 1.4 (timbl 09-Sep-99): strict).</p> 1.3 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <p>This principle can be contentious. When browsers are lax about what they 1.4 (timbl 09-Sep-99): expect, the system works better but also it encourages laxness on the part of 1.4 (timbl 09-Sep-99): web page writers. The principle of tolerance does not blunt the need for a 1.4 (timbl 09-Sep-99): perfectly clear protocol specification which draws a precise distinction 1.4 (timbl 09-Sep-99): between a conformance and non- conformance. The principle of tolerance is no 1.5 (timbl 09-Sep-99): excuse for a product which contravenes a standard.</p> 1.4 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <p></p> 1.2 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <h2 id="Decentrali">Decentralization</h2> 1.2 (timbl 09-Sep-99): 1.3 (timbl 09-Sep-99): <p>This is a principle of the design of distributed systems, including 1.10 (timbl 12-Jan-02): societies. It points out that any single common point which is involved in 1.10 (timbl 12-Jan-02): any operation trends to limit the way the system scales, and produce a single 1.3 (timbl 09-Sep-99): point of complete failure.</p> 1.3 (timbl 09-Sep-99): 1.3 (timbl 09-Sep-99): <p>Centralization in social systems can apply to concepts, too. For example, 1.3 (timbl 09-Sep-99): if we make a knowledge representation system which requires anyone who uses 1.5 (timbl 09-Sep-99): the concept of "automobile" to use the term 1.3 (timbl 09-Sep-99): "http://www.kr.org/stds/industry/ automobile" then we restrict the set of uses 1.3 (timbl 09-Sep-99): of the system to those for whom this particular formulation of what an 1.3 (timbl 09-Sep-99): automobile is works. The Semantic Web must avoid such conceptual bottlenecks 1.10 (timbl 12-Jan-02): just as the Internet avoids such network bottlenecks.</p> 1.2 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <h2><a name="TOII">Test of Independent Invention</a></h2> 1.8 (timbl 09-Sep-99): 1.8 (timbl 09-Sep-99): <blockquote> 1.8 (timbl 09-Sep-99): <p>If someone else had already invented your system, would theirs work with 1.8 (timbl 09-Sep-99): yours?</p> 1.8 (timbl 09-Sep-99): </blockquote> 1.3 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <p>Does this system have to be the only one of its kind? This simple thought 1.4 (timbl 09-Sep-99): test is described in more detail in "<a 1.4 (timbl 09-Sep-99): href="Evolution.html#TOII">Evolution</a>" in these Design Issues. It is 1.4 (timbl 09-Sep-99): modularity inside-out: designing a system not to be modular in itself, but to 1.4 (timbl 09-Sep-99): be a part of an as-yet unspecified larger system. A critical property here is 1.10 (timbl 12-Jan-02): that the system tries to do one thing well, and leaves other things to other 1.4 (timbl 09-Sep-99): modules. It also has to avoid conceptual or other centralization, as no two 1.5 (timbl 09-Sep-99): modules can claim the need to be the unique center of a larger system.</p> 1.4 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <h2><a name="PLP">Principle of Least Power</a></h2> 1.4 (timbl 09-Sep-99): 1.10 (timbl 12-Jan-02): <p>In choosing computer languages, there are classes of program which range 1.10 (timbl 12-Jan-02): from the plainly descriptive (such as Dublin Core metadata, or the content of 1.4 (timbl 09-Sep-99): most databases, or HTML) though logical languages of limited power (such as 1.10 (timbl 12-Jan-02): access control lists, or <em>conneg</em> content negotiation) which include 1.10 (timbl 12-Jan-02): limited propositional logic, though declarative languages which verge on the 1.10 (timbl 12-Jan-02): Turing Complete (PDF) through those which are in fact Turing Complete though 1.10 (timbl 12-Jan-02): one is led not to use them that way (XSLT, SQL) to those which are 1.10 (timbl 12-Jan-02): unashamedly procedural (Java, C).</p> 1.10 (timbl 12-Jan-02): 1.10 (timbl 12-Jan-02): <p>The choice of language is a common design choice. The low power end of 1.10 (timbl 12-Jan-02): the scale is typically simpler to design, implement and use, but the high 1.10 (timbl 12-Jan-02): power end of the scale has all the attraction of being an open-ended hook 1.10 (timbl 12-Jan-02): into which anything can be placed: a door to uses bounded only by the 1.10 (timbl 12-Jan-02): imagination of the programmer.</p> 1.10 (timbl 12-Jan-02): 1.10 (timbl 12-Jan-02): <p>Computer Science in the 1960s to 80s spent a lot of effort making 1.10 (timbl 12-Jan-02): languages which were as powerful as possible. Nowadays we have to appreciate 1.10 (timbl 12-Jan-02): the reasons for picking not the most powerful solution but the least 1.10 (timbl 12-Jan-02): powerful. The reason for this is that the less powerful the language, the 1.10 (timbl 12-Jan-02): more you can do with the data stored in that language. If you write it in a 1.10 (timbl 12-Jan-02): simple declarative from, anyone can write a program to analyze it in many 1.10 (timbl 12-Jan-02): ways. The Semantic Web is an attempt, largely, to map large quantities of 1.10 (timbl 12-Jan-02): existing data onto a common language so that the data can be analyzed in ways 1.10 (timbl 12-Jan-02): never dreamed of by its creators. If, for example, a web page with weather 1.10 (timbl 12-Jan-02): data has RDF describing that data, a user can retrieve it as a table, perhaps 1.10 (timbl 12-Jan-02): average it, plot it, deduce things from it in combination with other 1.10 (timbl 12-Jan-02): information. At the other end of the scale is the weather information 1.10 (timbl 12-Jan-02): portrayed by the cunning Java applet. While this might allow a very cool user 1.10 (timbl 12-Jan-02): interface, it cannot be analyzed at all. The search engine finding the page 1.10 (timbl 12-Jan-02): will have no idea of what the data is or what it is about. This the only way 1.10 (timbl 12-Jan-02): to find out what a Java applet means is to set it running in front of a 1.10 (timbl 12-Jan-02): person.</p> 1.4 (timbl 09-Sep-99): 1.4 (timbl 09-Sep-99): <p>I hope that is a good enough explanation of this principle. There are 1.4 (timbl 09-Sep-99): millions of examples of the choice. I chose HTML not to be a programming 1.4 (timbl 09-Sep-99): language because I wanted different programs to do different things with it: 1.4 (timbl 09-Sep-99): present it differently, extract tables of contents, index it, and so on.</p> 1.1 (timbl 09-Sep-99): 1.1 (timbl 09-Sep-99): <p></p> 1.1 (timbl 09-Sep-99): 1.5 (timbl 09-Sep-99): <p></p> 1.5 (timbl 09-Sep-99): <hr> 1.5 (timbl 09-Sep-99): 1.5 (timbl 09-Sep-99): <h2><a name="References">References</a></h2> 1.5 (timbl 09-Sep-99): 1.5 (timbl 09-Sep-99): <p><a href="ftp://ftp.isi.edu/in- notes/rfc1958.txt" name="carpenter">B. 1.5 (timbl 09-Sep-99): Carpenter, Editor: "Architectural Principles of the Internet"</a> Internet 1.5 (timbl 09-Sep-99): Architecture Board, June 1996, RFC1958</p> 1.5 (timbl 09-Sep-99): 1.5 (timbl 09-Sep-99): <p></p> 1.1 (timbl 09-Sep-99): 1.2 (timbl 09-Sep-99): <p></p> 1.1 (timbl 09-Sep-99): 1.1 (timbl 09-Sep-99): <p></p> 1.1 (timbl 09-Sep-99): <hr> 1.1 (timbl 09-Sep-99): 1.1 (timbl 09-Sep-99): <p><a href="Overview.html">Up to Design Issues</a></p> 1.1 (timbl 09-Sep-99): 1.1 (timbl 09-Sep-99): <p><a href="../People/Berners- Lee">Tim BL</a></p> 1.1 (timbl 09-Sep-99): </body> 1.1 (timbl 09-Sep-99): </html>
Received on Tuesday, 20 December 2005 18:23:43 UTC