Do as I say, not as I do. Trev's Blog

Thursday Jan 29, 2009

What makes a "software engineer" different from a regular "engineer"? Why were mechanical engineers in the Engineering College while I was at the College of Arts and Sciences? So there's the obvious differences: I do not have to obey the laws of physics in my work, and people usually will not die if I make a mistake (eluding to bridge builders and airplanes here). However, I would argue there is a distinct element of creative ability and clever design that goes into building good software -- so much so that I would dare call it an art. Not completely an art, but more of an art than a science. Yeah, I said it. Software engineering cannot be completely mastered by reading, listening, or even learning. The difference between the good and the great has its roots in your genetic makeup.  

Whether we're designing folding chairs or eBay itself, good design is an integrated, cognitive process. Ok I admit it, I've been reading books by Don Norman. There's a bunch of principles, you've heard of them: affordances, conceptual models, mappings, visibility, feedback, and others. These are some of the characteristic of a good design, but how can you truly create something that embodies these principles and is natural for a human being to use? In "The Design of Everyday Things", Norman says that it's about physics, and psychology. There is a natural way that people expect the world to behave. If you drop an egg, it will crack; if you drink too much.. well that's a little less deterministic, but you get the idea.

A good conceptual model is key to a good design. The classic example of a poor conceptual model is the temperature control in a refrigerator. There's only two things to do: adjust the temperature of the freezer compartment and adjust the temperature of the fresh food compartment. And there are two controls, one labeled "freezer" and one labeled "fresh food". Should be easy, right? Well, suppose your fresh food is just right, but you need to make your freezer colder. Give it a try.

The problem of course is that there are two conceptual models: yours and the designers, and that is a big problem. A deeper look into the mechanics of the fridge would show that instead of independent cooling units, there is in fact one thermostat and one supply of cold air, which merely gets split between the two compartments with a valve. That would've been nice to know, don't you think?

It goes deeper, too. All the way into the structure of your memory.

"Say aloud the numbers 1, 7, 4, 2, 8. Next, without looking back, repeat them. Try again if you must, perhaps closing your eyes. Have someone read a random sentence to you. What were the words? The memory of the just present is available immediately, clear and complete, without mental effort. What did you eat for dinner three days ago? Now the feeling is different. It takes time to recover the answer, which is neither as clear nor as complete a remembrance as that of the just present, and the recovery is likely to require considerable mental effort. Retrieval of the past differs from retrieval of the just present. More effort is required, less clarity results. Indeed, the 'past' need not be so long ago. Without looking back, what were those digits? For some people, this retrieval now takes time and effort."

Check this out:


SlideShare

Now, what makes this an art for software designers is that we don't have the luxury of physical elements with which to create a design; it's all visual. What's more, the view of the inertial "world", that is, what people expect to happen naturally, is always changing and in fact evolving at an increasing rate with computers. So while the traditional rules of good design still apply, they are just one shade of the ever-changing chameleon that is software design.

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed