in reply to Planning your software before writing

You will want to read Code Complete by Steve McConnell.

One simple trick that this book taught me is to write a high-level, natural-language description of your task, comment it out, and write the code corresponding to each modular part of the description. This way, you even get comments for free.

Another good thing is to acquire a feeling for when top-down styles (structured programming, most OO stuff, flow-charts, etc.) and bottom-up styles (interactive environments, rapid prototyping, tool development) of programming are appropriate. Unfortunately, this is very hard. Since most of today's techniques are top-down style, I think it is good practice to learn a functional programming language (Scheme, Lisp, Haskell, etc.), since these tend to encourage bottom-up style.

Christian Lemburg
Brainbench MVP for Perl