Thanks to John Gruber over at Daring Fireball for pointing me at an interesting and utterly apropos column by a Mr. Paul Graham entitled “Holding a Program in One’s Head”. I don’t know if it gives any sort of lay-accessibility to the programmer’s mindset, that zone that a year ago was so easy to slip into that I could get there and stay there while literally hours would pass unnoticed.
Mr. Graham’s entry, excerpted:
A good programmer working intensively on his own code can hold it in his mind the way a mathematician holds a problem he’s working on. Mathematicians don’t answer questions by working them out on paper the way schoolchildren are taught to. They do more in their heads: they try to understand a problem space well enough that they can walk around it the way you can walk around the memory of the house you grew up in. At its best programming is the same. You hold the whole program in your head, and you can manipulate it at will.
That’s particularly valuable at the start of a project, because initially the most important thing is to be able to change what you’re doing. Not just to solve the problem in a different way, but to change the problem you’re solving.
Your code is your understanding of the problem you’re exploring. So it’s only when you have your code in your head that you really understand the problem.
It’s not easy to get a program into your head. If you leave a project for a few months, it can take days to really understand it again when you return to it. Even when you’re actively working on a program it can take half an hour to load into your head when you start work each day. And that’s in the best case. Ordinary programmers working in typical office conditions never enter this mode. Or to put it more dramatically, ordinary programmers working in typical office conditions never really understand the problems they’re solving.
The stress is mine (no pun intended).
I miss that zone, like I miss San Francisco when I’m not here. Like I miss being in my parents’ home with my whole family around. It’s an intellectual homelessness.
The ability to mentally inhabit a place isn’t the end-all, be-all. Don’t get me wrong. Creative faculties are largely intact. Those are expressive, out-bound things. Spontaneous (or spurious) thoughts link themselves together like suds on a water surface; that happens all on its own: The mind’s capillary action.
No plates to keep spinning, no virtual reality need be elaborated. Just allowing the river (or even creek!) to flow echoes an escapism that pleases me. I do a lot of that, have done a lot of that in the last few months. So the writing or the drawing or even the jotting wicks me away in a happy direction.
I don’t have a point, really. Other than to point at someone who’s described the programming experience better than I’ve been able to do.