I remarked to Dennis [Ritchie] that easily half the code I was writing in Multics was error recovery code. He said, "We left all that stuff out [of Unix]. If there's an error, we have this routine called panic, and when it is called, the machine crashes, and you holler down the hall, 'Hey, reboot it.'" — Tom Van Vleck

The simple, elegant and versatile system must offer expedience where practical, but expedience can and will be sacrificed in favor of any of the above. It must be sacrificed whenever implementation simplicity is jeopardized. When expedience is compromised by a resulting complexity of user interface, it must present its complexity without unnecessary complication.

The simple, elegant and versatile system must offer expedience where practical, but expedience can and will be sacrificed in favor of any of the above. It must be sacrificed whenever implementation simplicity is jeopardized. When expedience is compromised by a resulting complexity of user interface, it must present its complexity without unnecessary complication.

Revision as of 23:10, 4 July 2012

Contents

Simple

Simplicity is the primary principle. All other principles must be sacrificed in favor of design simplicity. Implementation simplicity is more important than interface simplicity.

Elegant

combining simplicity, power, effectiveness, a quality of neatness and an ingenious grace of design

The French aviator, adventurer, and author Antoine de Saint-Exupéry gave us perhaps the best definition of engineering elegance when he said, “a designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”

It is slightly more important to be simple than elegant.

User-Centric

accommodating competent users by giving them complete choice, control and responsibility over the system

"One of my most productive days was throwing away 1000 lines of code."— Ken Thompson

Arch is founded upon sensible design and excellent documentation, necessarily implying a "do-it-yourself" approach. User-centric design is more important than versatility and expedience, yet less important than elegance and simplicity.

Versatile

capable of doing many things competently; having varied uses or many functions

A simple and elegant system often becomes versatile by nature, but must be designed as simple first and foremost. Versatility must be sacrificed in favor of simplicity. Also less important than user-centricity and elegance, but more important than expedience.

Expedient

easy, or quick; convenient

I remarked to Dennis [Ritchie] that easily half the code I was writing in Multics was error recovery code. He said, "We left all that stuff out [of Unix]. If there's an error, we have this routine called panic, and when it is called, the machine crashes, and you holler down the hall, 'Hey, reboot it.'" — Tom Van Vleck

The simple, elegant and versatile system must offer expedience where practical, but expedience can and will be sacrificed in favor of any of the above. It must be sacrificed whenever implementation simplicity is jeopardized. When expedience is compromised by a resulting complexity of user interface, it must present its complexity without unnecessary complication.