Updated 2006-01-20 23:12:56

Richard Suchenwirth 2006-01-08 - Yes, Virginia, there is intelligent design. And you can even do it yourself. Just think.

"Intelligent" is basically about understanding. "Design" as a noun is a scheme or plan to make something. For instance, software. Intelligent software design could involve the following aspects:

  • Understand the requirements. What exactly do you have (or want) to do? Define the target. If a given specification is unclear or incomplete, ask. Evolve it. Try to reduce complexity early.
  • Understand your tools. That may be the choice of programming language, extensions, but also the algorithms available. Personally, I'd like to do almost everything in Tcl, but I also know situations where C or awk just is the better tool. Also consider that you can just build a tool if you need, if it helps to reduce complexity (e.g. a package or just a proc that does one thing well). Evolve your toolbox.
  • Understand how to know you reached the requirements. One-word answer: test. Test early, test often. Design tests intelligently so you can be confident you've covered most possibilities. Add tests when you find out you haven't. Evolve your test suite, e.g. e.g.
  • Understand that targets may move. Changing requirements, hardware, software conditions may require someone to "maintain" your code. Be good to that someone (it might be yourself, years from now) - be clear, comment. Avoid repetitions. Help your code evolve.

With these things understood, go design. It's often good to use pencil and paper first - just draw a picture (e.g. a block diagram, or GUI sketch) of what you have in mind. This can be nicely done in a coffee break, when you're away from the computer. If you can, discuss it with the "customer", or peers. Get a clear picture.

Finally, go code. Implement your design. Test parts early, so that you later can rely on them. The design may still change (evolve = change to the better) at this point.

This may sound a bit like a silly cook-book. But it sums up many things that I've learnt over the years. And I'm still learning new things, on my life-long journey to that evolving pie in the sky: intelligent design.

(That the term is also being tossed around in religious debates, is regrettable. Both intelligent and design are well-defined, and should be taken at what they mean - not just narrowed down for dispute's sake.)

DRH I find that when practicing intelligent design that it is invaluable to leave behind a fossil record using a good SCM tool. - RLH Oy!!!

And then there's the related matter of creationism [1].

Hehe, I can't wait until the Genetic Algorithms or Genetic Programming folks find this page. TP

Arts and crafts of Tcl-Tk programming