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 [L1 ].
Hehe, I can't wait until the Genetic Algorithms or Genetic Programming folks find this page. TP
Arts and crafts of Tcl-Tk programming