Excerpted from an email by Jenn Vesperman to the newchix mailing list.
In response to an email talking about the difficulty of forming an initial program design:
This is the core of programming. THIS is programming, and THIS is what everything else is trying to teach - or trying to support. (note: secure programming, input checking, and all those things are support for the core program.)
Knuth's six volume series? All those many books? All the brilliant people creating methodologies?
They're trying to teach an art.
Programming is art. Engineering is art.
There is a TV series I try to catch called 'the elegant solution'. It's about civil engineering, and the most elegant, sexy solutions to various civil-engineering problems (at least in the opinion of the series director). Why would an engineer build a comms tower out of a thin mastlike structure and a bunch of guy ropes? Because he did. And once it was done, it was beautiful.
Finding out how to get from 'we have this' to 'we want that' is what they pay us for, people. They -don't- pay us to know this (though some managers would be shocked at that statement).
They pay us to sit there and squeeze the stress ball and stare into space and then suddenly turn to the keyboard and type like a madman. They pay us to work it out. Or - because it's fun, because we like making Open Source stuff, for whatever reason - we do it without pay.
And, unfortunately, we can't really teach it.
We can teach you the tools that we use to get there. We can teach you the techniques -we- found helpful to learn those moments. We can show you what we've done in the past, and tell you why we did it that way. We can even say 'the standard way to build a comms tower is to stack bricks on top of each other'.
But we can't give you 'the way to do it'. Because 'the way to do it' doesn't exist. They pay us to create ways. And creating ways is fun.