|
|
|
Sponsored Link •
|
|
Advertisement
|
Also, to me simplicity is its own virtue. Many people don't really understand that. If you make something big and complex, it will be hard to use and understand. If it has a large surface area, many methods and classes, the interactions of those things will continuously lure people even if you think they shouldn't. People will wonder, "If I make this method call, how will that affect this other thing?" Those two things may seem obviously unrelated to the designer, but users come up with all sorts of weird models about how things work together. That is partly because people tend to make those weird models, but they may also have an experience of calling some method that seemed completely unrelated to something else and having a result they didn't expect.
Users don't care about what the designer does. They care about what they do. If every time you drove a car, you had to learn the meaning of 100 knobs, the whole system wouldn't work. Simplicity comes from tuning down the tasks required to drive the car into a certain set of understood paradigms and tools. Yes, there are many people who would love to pull up the hood and start tinkering with things. You can let them, as long as that is all under the hood.
There is nothing wrong with having all those knobs. I mentioned the complexity of Swing before, that
JButton has more than 200 methods even though most of the time people
care about maybe five of them. My solution would be to design the system so that it had a
getKnobs() method. JButton would have 10 methods,
including getKnobs(). It would return a ButtonKnobs
object, which lets you play with all the little ditties if needed. Then
JButton's surface area to a newcomer would be nine methods plus a way
to get under the hood.
Simplicity has real value on its own that makes the system more usable. It's the difference between reading a 100-page manual and reading a 500-page manual. It is more than five times the size.
Bill Venners: I think of simplicity as a virtue because the client for whom I am designing is a human being, and simplicity helps human beings. I see simplicity as a virtue in the context of the client. What exactly do you mean when you say simplicity is its own virtue?
Ken Arnold: Some people view simplicity -- and again, I mean the external simplicity, the user's view -- as something that happens if their system is internally simple. I am saying you should strive for external simplicity on its own.
Just like you should strive for efficiency or clarity, you should strive for simplicity.
And returning to taste, striving for simplicity requires that you make choices. You have to
say to the user, "You know, frankly, you think you want to do this, but you really don't.
And if you really do need to do it, come back and beat me up. Show me why, and we'll
do it later." To achieve simplicity, you sometimes have to say, "You think you want this,
but you're not quite right." That is arrogance, the arrogance of taste.
Have something tasteful to say yourself? Discuss this article in the Cool Stuff Forum topic, Taste and Aesthetics
Resources
Frank Sommers interview with Jim Waldo, in which Waldo mentions taste, is at :
http://www.artima.com/intv/waldo.html
Ken Arnold mentioned the complexity of Swing in Part I of this interview:
http://www.artima.com/intv/perfect.html
The Design of Everyday Things, by Donald A Norman, the book that
Ken Arnold said he suggests to people interested in books on
object design, is at Amazon.com at:
http://www.amazon.com/exec/obidos/ASIN/0385267746/
The Jini Community, the central site for signers of the Jini Sun Community Source License to interact:
http://www.jini.org
Download JavaSpaces from:
http://java.sun.com/products/javaspaces/
Design objects for people, not for computers:
http://www.artima.com/apidesign/object.html
Make
Room for JavaSpaces, Part I - An introduction to JavaSpaces, a simple and powerful distributed programming tool:
http://www.artima.com/jini/jiniology/js1.html
Make
Room for JavaSpaces, Part II - Build a compute server with JavaSpaces, Jini's coordination service:
http://www.artima.com/jini/jiniology/js2.html
Make
Room for JavaSpaces, Part III - Coordinate your Jini applications with JavaSpaces:
http://www.artima.com/jini/jiniology/js3.html
Make
Room for JavaSpaces, Part IV - Explore Jini transactions with JavaSpaces:
http://www.artima.com/jini/jiniology/js4.html
Make
Room for JavaSpaces, Part V - Make your compute server robust and scalable with Jini and JavaSpaces:
http://www.artima.com/jini/jiniology/js5.html
Make
Room for JavaSpaces, Part VI - Build and use distributed data structures in your JavaSpaces programs:
http://www.artima.com/jini/jiniology/js6.html
|
Sponsored Links
|