[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 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. ---- [DRH] I find that when practicing intelligent design that it is invaluable to leave behind a fossil record using a good [SCM] tool. ---- Hehe, I can't wait until the [Genetic Algorithms] or [Genetic Programming] folks find this page. [TP] ---- [Arts and crafts of Tcl-Tk programming]