In programming interviews, job candidates are sometimes asked what kinds of side projects they work on in their spare time. The supposed implication is that if you work on side projects in your free time then that’s good, and if you don’t that’s bad.
This idea has led to a somewhat lively debate: do you have to code in your free time in order to be a good programmer?
The popular answer is an emphatic no. You can put in a solid 8-hour workday, do a kick-ass job, and then go home and relax knowing you’re fully fulfilling all of their professional obligations. And actually, you might even be a better programmer because you’re not running yourself ragged and burning yourself out.
But actually, both this question and the standard answer are misguided. In fact, they are miss the point so thoroughly that they can’t even be called wrong. I’ll explain what I mean.
Drumming in your free time
Imagine I’m a professional drummer. I make my living by hiring out my drumming services at bar shows, weddings and parties. I’m a very competent drummer although maybe not a particularly exceptional one.
Imagine how funny it would be for me to go on an online forum and ask, Do I have to practice drumming in my free time in order to be a good drummer?
I can imagine a couple inevitable responses. First of all, who’s this imaginary authority who’s going around and handing down judgments about who’s a good drummer or not? And second, yes, of course you have to spend some time practicing if you want to get good, especially when you’re first starting out.
The question reveals a very confused way of looking at the whole situation.
The reality is that there’s an economic judgement call to be made. Either I can choose to practice in my free time or get better faster, or I can choose not to practice in my free time and improve much more slowly, or perhaps even get worse. Neither choice is right or wrong. Neither choice automatically makes me “good” or “bad”. It’s simply I personal choice that I have to make for myself. The question is whether I personally find the benefits of practicing the drums to be worth the cost of practicing the drums.
An important factor that will inform my decision is the objectives that I’m personally pursuing. Am I, for example, trying to be the best drummer in New York City? Or do I just want to have a little fun on the weekends? The question is the same for everyone but the answer is going to be much different depending on what you want and what you’re willing to do to get it.
The drumming analogy makes it obvious how silly it is to ask directly if you spend your free time practicing. Maybe the person asking is trying to probe for “passion” (yuck). But passion is a means to an end, not an end in itself. Instead of looking for passion, the evaluator should look for the fruits of passion, i.e. being a good drummer.
Back to programming
Do your career goals, in combination with your current skill level, justify the extra cost of programming in your free time? If so, then coding in your free time is a rational choice. And if you decide that there are no factors in your life that make you want to code in your free time, then that’s a perfectly valid choice as well. There’s no right or wrong answer. You don’t “have to” or not have to. Rather, it’s a choice for each person to make for themselves.
I don’t think the comparison with a drummer is good, because if you’re a professional drummer, you will probably play 12 hours tops per week in your shows. During the week, you would practice anyway, as it is part of the job. But would you practice more than 20 hours, would you learn and play other songs that you don’t play during your shows ?
So, the drummer analogy is not a great one, because when you are playing the drummers, you are in front of a crowd to show your skills. But programming is very different, you don’t have to sit in front of a crowd to show them how you code…
I do agree that the need to code outside of your work hours will be a choice that you make… Because if you are preparing for an interview where you will need to sit in front a computer and code for people to watch, then yes, you need to practice, you need to learn and understand better before the interview, but if it is “just” for work, not necessary.
Another thing is, if you are going to try something new, you should not do that on your production code, specially if it is changing a lot of things, on this case, you should create POCs to prove for yourself first, that what you want to do will work before you can present it to your manager. And on that case, if you don’t have “free time” during your work hours, you will need to do outside of work, so as you said, it also depends what you want to achieve on your career.
There are some developer that just want to code, and be a individual contributor, others want to learn more, apply new ideas, try new things, and both can be great on what they do, they just want different things on their lives.
I think the comparison is valid. if you want to be good at anything you’ve got to put in the extra time.