This week, I discovered--rediscovered?--something I love about programming and broke through something that had been frustrating me for a while.
The energy I get from sharing what I know with people--giving presentations, writing articles, talking to people in small groups and one on one--coupled with a slight imposter syndrome--difficult to avoid when working with such experienced people!--had left me wondering if developing software was still in my future. I've been good at it before, but I was wondering if it was the kind of competence that had taken me far but which could keep me from doing something that would bring in even more of my passions.
One of the things I loved about programming was working with people directly. When I maintained an open source personal information manager named Planner, I enjoyed helping people who were passionate about becoming more productive. I wasn't sure if I could get that kind of experience in commercial software development, where there might be layers of analysis and design between me and actual users, and where we typically work on larger projects than the highly personalized customizations I helped other Planner users make. In the seven months I'd been with the company, I hadn't really been on any projects that made me feel good about programming.
I was feeling pretty blah about coding. I could do it, but I wasn't feeling that spark. I figured that it might be just be the relationship of skill to joy. I remember coming across something like this graph when I was reading about the role of deliberate practice in developing expertise.
When you start learning something, you enjoy it because you're learning a lot. Then you hit the plateau of mediocrity. No matter how much you practice, it seems as if you're making very slow progress. This lasts until you become good enough to stop thinking about doing things and start enjoying yourself while you do them. Deliberate practice gets you through that plateau of mediocrity. It's not very fun, but if you can trudge through that plateau, you can break through to new heights.
Actually, the skill/joy curve looks more like this:
... because there's always more to discover. (And that's a good thing!)
Researchers found that this holds true whether you're talking about tennis, chess, music, or anything else in life. I was feeling it with my work. I'd gotten good enough at presenting to have fun doing it (although it still makes me nervous), but I was stuck in the plateau of mediocrity when it came to programming. I was frustrated because I couldn't get a sense of my progress.
But this week, I immersed myself in Drupal code, learning enough of it to rewrite some code to follow the Drupal way of doing things--and I felt a shift in the way I wrote the code. I love picking up the idioms of a language or a programming platform, just as I enjoyed learning enough Japanese to understand the juggling unicyclists at Ueno Park. There's something magical about feeling your brain start flowing along different paths. Picking up programmatic idioms, learning more about other people's code and ways of thinking--that's what turns the isolated activity of programming into a social activity for me. I'm not just writing code. I'm listening to and talking with the other programmers who had touched that code before. I'm learning the lingo. I'm grokking it.
I'm looking forward to doing more work in this area. I'm still very far from a Drupal whiz (that's probably a number of other joy/skill cycles away), but it'll be fun getting there. =)