When you are an active programmer, you have better days and worse days. On good days, you feel like you can knock off bugs like crazy, or crank out new functionality that works almost the first time. On bad days, you might get stuck on one mystifying problem, or maybe you're just drowning in figuring out what some ancient and complex pile of code does.
I think every programmer experiences that to some extent. When you have a good job to do, the good days outnumber the bad ones.
I'd like to talk about a longer term phenomenon: rust. Over a long career, their might be periods when you lose contact with the code. It will happen slowly. Maybe you become a team leader, and spend more time planning. Maybe you "move up" the technical ladder and become an architect.
But you find that your days are consumed not by emacs or xcode, but rather by system diagrams and PowerPoint presentations. You're not hashing out an API with your pals on the development team, you're in a conference call discussing product plans or the quarterly revenue targets. Slowly at first, then quickly, you begin to lose the feel of the codebase that you were so familiar with. You forget what it really costs in time and brainpower to implement an idea in code.
You feel guilty about it. You're explaining some new feature to a programmer who is actually going to do the work. You intellectually know what needs to be done, but you peek at the repository and it's like you've been dropped into a forest. It's a forest that you used to know, but now it seems like a hundred years have gone by and you're lost. You don't know where to begin.
This is rust. The gears and cogs that power your ability to turn ideas into software that seems tangible are stuck. They are frozen together with rust. They aren't gone. If you could just get them started, you know you could speed ahead, creating the structure and form of the app, the site, the service you have in your mind's eye.
But you can't get going. To get those gears moving, you need the full power of your concentration. You need to put oil and grease in those gears and push and pull and smack them with hammers. It will take weeks of hard work. If you go at it for a day, and some other task comes along, a conference call with a partner, or an all-day management meeting, forget it. That day's work is wasted, because the rust comes right back in. You're stuck just as much as when you started.
You start to worry that it's not just rust: that your internal logic factory is hopelessly outdated, broken, for good. While the rust gathered, other concepts have been adopted and everything seems strange. The fear is that your time is passed, you've slipped off the rails and you can't ever get back on.
But then you have to. You start a brand new project at work. Maybe you quit your job and join a new company. Maybe it's a startup and you focus on starting up that machine because there's nothing else to do, because no one is bothering you with other tasks. Maybe it's just a regular company, and you can get it going because no one expects you to know anything, so they don't distract you. But it happens: you break the rust away, and build up speed and you're flying along the tracks. It didn't take long, maybe 3 weeks. You can still code. You are happy.
Three times in 26 years I've been through this. Rusted, frozen, lost. And three times I've been able to start over and get rolling. It's 2015. I'm rusty. I'm stuck. I need to break those gears loose, just one more time. I know what to do. I'll do it.