Just for Fun (Biography of Linus Torvalds) has this lucid insight into simple design...
"An ugly system is one in which there are special interfaces for everything you want to do. Unix is s the opposite. It gives you the building blocks that are sufficient for doing everything. That's what having a clean design is all about.
It's the same thing with languages. The English language has twenty-six letters and you can build up everything from these letters. Or you have the Chinese language, in which you have one letter for every single thing you can think of. In Chinese, you start of with complexity, and you can combine complexity in limited ways. That's more of the VMS approach, to have complex things that have interesting meanings but can't be used in any other way. It's also the Windows approach.
Unix, on the other hand, comes with a small-is-beautiful philosophy. It has a small set of simple basic building blocks that can be combined into something that allows for infinite complexity of expression.
This, by the way, is also how physics works. You try and find the fundamental rules that are supposed to be fairly simple. The complexity comes from the many incredible interactions you get from those simple rules, not from any inherent complexity of the rules themselves.
The simplicity of Unix did not just happen on its own. Unix, with its notion of simple building blocks, was painstakingly designed and written by Dennis Ritchie and Ken Thompson at AT&T's Bell Labs. And you should absolutely not dismiss simplicity for something easy. It takes design and good taste to be simple.
To go back to the example of human languages: Pictorial writing like Chinese characters and hieroglyphics tend to happen first, and be "simpler", whereas the building block approach requires far more abstract thinking. In the same way, you should not confuse the simplicity of Unix with a lack of sophistication - quite the reverse."
That should lend some perspective for KISS and YAGNI discussions.
"An ugly system is one in which there are special interfaces for everything you want to do. Unix is s the opposite. It gives you the building blocks that are sufficient for doing everything. That's what having a clean design is all about.
It's the same thing with languages. The English language has twenty-six letters and you can build up everything from these letters. Or you have the Chinese language, in which you have one letter for every single thing you can think of. In Chinese, you start of with complexity, and you can combine complexity in limited ways. That's more of the VMS approach, to have complex things that have interesting meanings but can't be used in any other way. It's also the Windows approach.
Unix, on the other hand, comes with a small-is-beautiful philosophy. It has a small set of simple basic building blocks that can be combined into something that allows for infinite complexity of expression.
This, by the way, is also how physics works. You try and find the fundamental rules that are supposed to be fairly simple. The complexity comes from the many incredible interactions you get from those simple rules, not from any inherent complexity of the rules themselves.
The simplicity of Unix did not just happen on its own. Unix, with its notion of simple building blocks, was painstakingly designed and written by Dennis Ritchie and Ken Thompson at AT&T's Bell Labs. And you should absolutely not dismiss simplicity for something easy. It takes design and good taste to be simple.
To go back to the example of human languages: Pictorial writing like Chinese characters and hieroglyphics tend to happen first, and be "simpler", whereas the building block approach requires far more abstract thinking. In the same way, you should not confuse the simplicity of Unix with a lack of sophistication - quite the reverse."
That should lend some perspective for KISS and YAGNI discussions.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.