In Code Complete , Steve McConnell states that programming is a 'wicked' problem. A 'wicked' problem is a problem you do not know the solution to until you've built it.
This reflects a very well known programming practice of:
coding a prototype so you understand the problem, its boundaries, and discover all the unknown little bumps you didn't know about before
then scrap it and code it properly..
Without the blueprint, the direction, to frame your solution you are just blindly cutting through the forest - it's only after you reached the other side that you realize how many bends you made.
So next time you can make it a nice clean path to the finish. Makes sense.
The solution depends on the problem and there are so many problems we haven't brought to the table yet.
Due to tradition, dogma, efficiency and profit.
By bringing programming to other contexts, by attempting to solve different problems, we can start to discover different solutions - and with it, different ways of thinking.