In Praise of Side Projects
Engineering Insights
Programming is my profession; it is also my hobby. Now that I’m retired, I still program, but I do so for pleasure rather than profit.
During my career as an engineer, I often worried whether my employers would tolerate me doing programming on my own time, and how far that tolerance went. It didn’t help that the contractual language of some of those early employment contracts were scarily possessive, claiming that any idea I came up with was automatically property of the corporation. I later learned that such contracts were illegal, at least in California, and that as long as I did work on my own time, with my own equipment and my own ideas, I didn’t have to worry about sharing ownership with that of my employer.
I recall having to submit, along with all of employment application, a list of all my “inventions” and personal projects so that there would be no confusion later about who owned what.
It would have been simpler if I could simply have restricted my programming efforts to work hours, and used the time away from work for other things. Unfortunately, I was never able to do that — the urge to express my creativity in code was too strong. In fact, the more frustrating the situation was at work, the stronger the impulse to relax by getting into the coding “flow” state and immerse my consciousness in a challenging problem.
Still, I worried about what my employer would think about what I was doing, if they had known. I figured that employers would be happier if I could keep my work life and my personal life cleanly separated.
But I realized recently that this is completely backwards. Employers shouldn’t treat programmers with personal projects as a risk or a danger. On the contrary, if an employer is wise, they should prefer programmers who have a rich history of personal projects.
Because personal projects is one of the ways that we become better programmers.
Someone recently said to me, “when a candidate comes to be claiming to have ten years of experience, I wonder — do they really have ten years of experience, or a single year of experience repeated ten times?” While every job involves learning new skills, the quality of that learning is not evenly distributed: some jobs don’t teach you a lot.
Side projects are different: often the goal of a particular personal project is chosen specifically because it stretches one’s limits. And many side projects are short duration, meaning that you can learn a lot and then move on to something else.
Side projects are also superior, in a lot of respects, to simply reading textbooks and newsletters — because often you don’t really understand something deeply until you’ve had a chance to work with it, to solve problems in that context. You’ll remember the lesson better because of the struggle.
One particularly valuable kind of side project is contributing to open source. This can benefit one’s career in subtle ways, in particular it can help build a reputation.
I was particularly lucky in this regard: at the time I joined Google in 2007, I had been very active on the Python developer mailing lists and had written a number of PEPs. Google hired me despite the fact that I didn’t have a CS degree (and in fact had never taken a college course in programming), and I suspected that my involvement with Python was one of the reasons (I had several other things going for me as well, including endorsements from a couple of high-profile Googlers).
And in fact, I later learned that my suspicions were correct. I found out, from talking to someone who worked in Google’s recruitment office, that Google monitors the mailing lists of prominent open source projects and maintains statistics on the people who regularly post on those boards. My first reaction was that this was slightly creepy, but I realized that this was all public information anyway, so there should be nothing to worry about.
I don’t know to what extent my posting on python-dev was a factor in getting hired, but I suspect it was not zero.
Over the years I’ve done many, many side-projects — my hard drive has dozens of folders: compilers, web sites, graphics demos, and musical experiments among others. The “last modified” date on many of these folders can be analyzed to provide a record of my changing interests over time. And each of these projects has taught me something.
My current side project involves working with Bevy, an open-source game engine written in Rust. And I’m learning a lot!