Wow, the timing here seems auspicious. Lately I've been thinking about the limitations that being human puts on a programmer. We work very hard (and should) to reduce cognitive load on ourselves through good development tools that act as crutches for memory---REPL's and good debuggers allow us to try something and see what happens, as opposed to simulating a multivariate operation in our heads. Intellisense and easil…
Your comment reminds me of the Charles Petzold essay on getting away from the IDE, which is summarized fairly nicely in this Coding Horror post: http://www.codinghorror.com/blog/2005/10/the-cognitive-style... Personally, I think that attaining the state of flow is what makes programming enjoyable, and I haven't experienced it in many years. There are just too many APIs, too much poor documentation, too many bugs, and…
I cope by taking every chance I get in my day job to experience these short bursts of pure creation. Do I need an interesting algorithm implemented? I'll hand code it myself rather than spend an hour or so trying to find and shoehorn the "standard" implementation into my application. I love the rare occasions where I notice a, dare I say, "clever" solution* to a problem. Coming up with and implementing these cases are a joy. I admit this isn't always the best way to solve a problem from a "software engineering" standpoint. But it keeps me in the game.
*Not clever as in obscure, WTF worthy; but clever as in elegant and expressive, albeit perhaps inaccessible to less skilled coders.