From an outsider’s vantage, I can see why they’d think we like coding. We solve problems by coding, and we’re all happy and enthused while typing away or talking code. But they’re confusing the action and the intention. It’s not pulling the trigger that makes me happy, it’s hitting the target. The action approaches incidental.
Programmers desire to rewrite because they know that after starting with a clean sheet of paper and building it all again, at the end they’ll understand the whole. Programmers write code to learn. Software has this double-edged sword where you can’t just wave your hands instead of implementing a particular function. It all has to be crystal. Programmers know this. They know when they’re done, they’ll have a complete understanding. It’s a noble desire.
The second and final deep reason behind the desire to rewrite is elegance. Like rewrite-to-understand, this reason is also founded in understanding.
“More is not better (or worse) than less, just different.”
Each language is placed next to a programming paradigm it supports well.
Inspired by “Concepts, Techniques, and Models of Computer Programming.”
1. Knowledge: Clear the Fog
You don’t know the issues well enough to put together a sound plan, so…
Try to deliver something (almost anything); this tell you what the real issues are.
2. Knowledge: Early and Regular Delivery You don’t know what problems you will encounter during development, so…
Deliver something early – discover what you don’t know you don’t know.
Deliver regularly – improve each time.
3. Knowledge: Prototype
You don’t know how some design decision will work out, so…
Build an isolated solution – discover how it really works.
4. Knowledge: Microcosm
You have to create a real plan, but have never done this sort of project, so…
Run an 8-12 week instrumented pilot to get productivity and throughput data for your plan.
I only listed four of them. Go to the link for a full list.