Holding it all in your head

Something I've noticed when working on larger programming projects is that my ability to add new code depends on what stage of the project I'm at. Early on, the code comes out fast. However, as time goes on and the project gets bigger, I find that it takes me up to an hour to "load the program into my head" before I can begin to add new features.

Good code is read most often by the writer, not by the computer. So if you keep your codebase concise and simple, you win twice: 1) it takes less time to read and understand and 2) it's easier to modify. Perhaps that's why experienced software engineers advise you to pick a boring stack, particularly for projects you're starting on your own.

Certainly for me, the excitement of a new language or library often drives my initial interest in a project. It turns out this is stupid. Very soon afterward, I find myself blocked in an ever continual parade of stack overflow posts and difficult to comprehend bugs. For a while I thought I was learning by going through this process. I usually wasn't, because the new library did something I already knew how to do, just in a more fashionable way.

Does this principle apply to anything else? Yes, it does - it applies to pretty much all of my creative endeavors, including writing. If I try to write in a sophisticated, "wise" way, I find that it takes me a lot longer to load the dialogue into my head, improve it, and finalize it. The only reason this blog is beginning to gain momentum now is because I gave up on trying to write that way.

Here's the scary thing. My writing is not just easier, it's better than it was before. By using my natural voice and not coming off so stilted, I can approach topics and think more deeply through problems; I no longer have to think in a foreign language, so my focus is on the topic at hand rather than the words I'm using.

In any case, if you've been tracking the projects I'm working on, you should expect the number of interesting libraries I use to go down. Sorry, the goal for me is a piece of software that accomplishes a goal, not source code that adheres most to the fashion of the day. And you can expect that I'll be more productive as a consequence.