Wednesday, March 02, 2005

What is software design?

Exerpt: "The following essays by Jack W. Reeves offer three perspectives on a single theme, namely that programming is fundamentally a design activity and that the only final and true representation of "the design" is the source code itself. This simple assertion gives rise to a rich discussion—one which Reeves explores fully in these three essays."

Good set of articles - all three. The first one was published over a decade ago when the hot new language was C++. The second one was published last month.

I can see where the author is coming from. For the most part I agree with his point that you can't have a clear separation between designing software and actually implementing it. It has to be an iterative process. Yes you do need to think about the design of the product. But there are SO many things that just don't come into play until you actually start implementing it. This is true even in the "proper" engineering disciplines. So many unforseen events can occur.

From what little experience I have had with the small projects I've worked on, I've experienced it. During the design phase, you're generally supposed to think of everything. But it doesn't work out that way. You need the implementation to back you up and to weed out potentialities you hadn't thought of. As he says, even builders create prototypes and test them out before starting on the real thing. With software, since it's so easy to replicate, you don't *really* need the prototype. You can start on the real thing, little by little.

His other point is that code is documentation. There has to be something said for self-documenting code. The intent of code is precise. The same can't be said of languages like English. There can be so many ways to interpret it. With code, there is only one meaning. Don't get me wrong, I think proper documentation is essential. And things like javadoc where your documentation is so close to the code has been pretty revolutionary. But there are still times where javadoc doesn't tell you what's going on *exactly*. Take one look at the implementation and it makes sense.

No comments: