Hey! My new website is Section 411. It's a lot like this site, except it's about 100% newer. Click here to check it out!

Learn the code. Love the code. Be the code.

Just another day at the office.

Just another day at the office.

When I was born, my Uncle Jim (who has since passed away), who was a newspaper columnist, wrote me a letter welcoming me to the world and introducing me to my family. It was a neat idea (and a tradition I plan to continue), and in the letter, he predicted that because of my genetic makeup, I’d be an All-American, All-Academic starting linebacker for the Ohio State Buckeyes.

My parents, who probably read the letter the night it was written as opposed to discovering it buried in family photos years later, probably read the letter and chuckled. Given the fact that my parents are both computer programmers, I can imagine one of them saying, “there’s no way that kid’s not a programmer.” (I’m not sure what this says about my sister, who will probably cure cancer one day but can’t defragment a hard drive to save her life.)

And if one of them said that, they were right. I’ve been fascinated with computers since I was in elementary school, launched my first website back when Albert Belle was slugging home runs for the Indians, started writing programs in middle school, wrote a full web app in high school, and never looked back.

Well, kind of. Because there was definitely a time over a period of the last few months and years where my computer science knowledge stagnated, where my interest in the field was at a low point, and where I just felt burnt out. But lately I’ve felt that drive again, that addiction to building awesome things that only software engineering can deliver.

The biggest thing I did is that I started learning again. One of the hazards of being in computer science is that since the field is advancing so quickly, you have to work your tail off to keep up-to-date. And sometimes, it’s nearly impossible, and that makes it discouraging. But you have to learn to live with the fact that you’ll never know everything, and the best thing you can do is always be learning. There’s a lot of ways to go about this, but here’s what I did:

  • Reading. I’ve started to make more of an effort to read technical blogs, blogs from my favorite open-source projects, etc. Blogs like Joel on Software and Coding Horror are cool too, because they make programming seem a lot more glamorous and impressive than it actually is. Even non-technical writing, like books on business or books about your favorite Jeopardy-playing computer count. Heck, I was even inspired by watching The Social Network.
  • Personal projects. I had some brainstorms for web apps, saw some neat things with new APIs online, and simply sat down and started working on them. There’s no better way to learn than by doing, and by the end of it (hopefully) you have something neat to show off to friends.
  • Stack Overflow. This is a relatively new thing for me, but I realized that sometimes, while I don’t have the time or energy to dive neck deep into a bunch of coding, answering questions on Stack Overflow makes you feel good for helping someone out, challenges you for a few minutes while you think through a solution, and maybe makes you rethink why a certain feature works the way it does. There are a lot of questions that are really easy to answer, but there are even more “advanced” questions. And while you might not know the answer, chances are, it will get answered at some point by someone who does.

Everyone learns differently, but I think I can speak for all computer scientists when I say learning new stuff is fun and empowering, and a vital part of keeping your job interesting.

I also started, for lack of a better phrase, developing socially. Since early 2008 I’ve kept all of my work (homework, fun projects, whatever) in private Subversion repositories on my server. Since I was often the only one developing in those repositories, I didn’t really need the merging, branching or other features that advanced version control provides, just updates and commits. When I started at LoudDoor, we used Subversion too.

But earlier this year, we switched to Kiln, a hosted version control system based on Mercurial by Fog Creek Software. Mercurial makes stuff like branching and merging easy and cheap, and commits no longer had to be written to the central repository each time you committed, but instead were written to your own personal repository and pushed up at your leisure.

A DAG of the project our team is working on

A DAG of the project our team is working on

And maybe it was the novelty of it all, or maybe it was the satisfaction of marking issues as resolved in Kiln’s companion product, FogBugz, or maybe it was just marveling at how cool the DAG looks when a lot of people are working on a project. But all of the sudden, commits felt like an accomplishment, like you were getting stuff done. And that’s a good feeling.

For my personal projects, I switched to BitBucket, which is a Mercurial version of GitHub, which made the phrase “social coding” famous. And the same effect occurred: I was enjoying working on stuff again. And more than that, I now have a little portfolio of personal projects that I can be proud of. I had a code site before, but it wasn’t very pretty so I didn’t really promote it; it was more there for my own use if I needed access to code snippets for whatever reason. But the one on Bitbucket looks nice, encourages contribution, and is much more engaging.

But let’s be honest: most of your development work comes at the office. And a big part of the reason for my rut was that I was doing the same types of projects, often juggling two or three in a day, that really weren’t much different from one another and yet were different enough that I couldn’t automate the whole process. This kind of work would just beat me down over the course of a week so that by the time the weekend rolled around, I was so sick of programming I didn’t want to be near a computer. I think my immediate boss (our CTO) knew this, but I brought it up to his boss, and once we hired another developer, I was able to move on to longer-term, more fulfilling projects. Sometimes problems are solved that easily; other times, if it doesn’t look like things are changing the way you want them to, it might be time for a change. (And I get the feeling that the new developer, or “Binary Star“, will eventually feel the same way I do and will want to move up; good developers like being challenged.)

And finally, I got away from the computer and out of the office and house. It may seem counter-intuitive that the way you get back into programming is by getting away from the computer every once in a while, but getting out of the house, getting some exercise, and doing things that aren’t computer programming help you approach programming with fresh eyes when you come back.

If you’re a burned-out programmer and you’re reading this, hopefully some of these options will help. And if not, one of two things are true: either you’ll come out of it in time, or you’re not in the right profession. I hope it’s not the latter, because as I’ve recently rediscovered, this profession is pretty awesome.

Post title is Rule #27 at LoudDoor LLC and should not be used without permission. Actually I’m just kidding, go for it if you want.

Originally posted on Cleveland, Curveballs and Common Sense on April 18, 2011 at 9:06 AM. Post text content © 2011 Jimmy Sawczuk. All rights reserved.