I don't program in my spare time. Does that make me a bad developer?
A lot of blogs and advice on the web seem to suggest that in order to become a great developer, doing just your day job is not enough. For example, you should contribute to open source projects in your spare time, write smartphone apps, etc. In fact a lot of this advice seems to suggest that if you don't love programming enough to do it all day long then you're probably in the wrong career.
That doesn't ring true with me. I enjoy my work, but when I come home from the office I'm not in the mood to jump straight back onto the computer and start coding away until bedtime. I only have a certain number of hours free time each day, and I'd rather spend them on other hobbies, seeing friends or going outside than in front of the computer.
I do get a kick out of programming, and do hack around outside of work occasionally. I'm committed to my personal development and spend time reading tech blogs and books as a way to keep learning and becoming better. But that doesn't extend so far as to my wanting to use all my spare time for coding.
Does this mean I'm not a 'true' software developer at heart? Is it possible to become a good software developer without doing extra outside your job? I'd be very interested to hear what you think.
Update: thanks everyone for your comments & answers. A lot of good thoughts and advice!
I think that just makes you more normal, you probably have more connection with what us geeks call "real life". **Value that.**
@Orbling What's this "real life" you're talking about like? Is it similar to WoW? Does it run on a 64 bit OS?
@biziclop - Its like WOW with better graphics and game play that is a lot more tedious.
@ChaosPandion: Quests suck in r/l, long, dull, and the loot is definitely not epic.
@biziclop: Aye, though I've heard that actually makes them appear further away, increasingly so as you try to look.
For efficiency's sake, I recommend experimenting with new things and working on personal projects when you're supposed to be working. That way you still have your limited free time. :-)
Real Life is a cheap spinoff of Second Life, with a twist that you don't need to be in front of the computer to play.
It's more like The Sims, but you don't lose half your day using the restroom and showering.
@Brian And you also don't live in a house with no doors and set yourself on fire while making dinner. ... What? >.>
I sense a false dichotomy here when I read about spending all your spare time. Passionate, professional developers can work in their spare time within reason, without spending all of it.
Personally, if I didn't do it for work, I would do it as a hobby. However, since I it for work, I do other things for hobbies. Something to consider.
No, that makes you an average developer. If you do passionate coding in your spare time you become a good developer.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program." - Linus Torvalds
Figured it was worth saying - I don't always program in my spare time, because really, people need to have lives - but I love reading articles about programming, I hang out in developer environments (like SO), and I will often find myself reading about programming paradigms, design patterns, data structures, productivity blogs, etc...so although I'm not always __programming__, I'm almost always __learning__. I think that it's important to note that.
IMO this attitude comes from people that have horrible, soul sucking jobs, combined with piss-poor time management skills. If you're basically typing web forms all day, go out and get a more challenging job, or start your own.
Here's the thing. A concert musician (cellist/pianist/whatever), will practice at most 6 hours per day. Most only practice a few hours per day. at the highest levels
People say program more because you learn more, but that's a smokescreen. 8 hours per day is plenty.
Progress is NOT linear. It's logarithmic:
The only reason that a musician might practice longer than 3 hours, is that they need to squeeze out the extra 1% that those hours gives them. If you think that applies to you, re-solving a problem CS solved 2 decades ago, then you have a prima-donna complex to boot.
I've worked in pressure cooker companies before, and trust me, the actual amount of work that those guys get done isn't any better than a company like 37signals that places constraints on the amount of work: http://37signals.com/svn/posts/996-why-i-love-working-with-family-people
What ends up happening is that sure, you may be in front of a computer for 10-12 hours, and in the office for 2 more, but that doesn't include the 90 minute lunch you took, the 2 hours you spent browsing discussion forums, and the hour break you had to play one of the many games laid out in the office (foosball, pool, yada...).
Look back at that graph. Now back to me.
Your mind actually has the opportunity to expand much more if you engage it in some other activity: Learn to play an instrument. Learn a foreign language. Better yet get out and get some exercise, and connect with real live people.
On the logarithmic nature of productivity:
In the renowned 1993 study of young violinists, performance researcher Anders Ericsson found that the best ones all practiced the same way: in the morning, in three increments of no more than 90 minutes each, with a break between each one. Ericcson found the same pattern among other musicians, athletes, chess players and writers.
This is actually a well-known principle in the business world, I'm surprised more programmers haven't heard of it.
Update: More on the Ericsson study.
The whole notion of it taking 10,000 hours / 10 years to become proficient actually comes from the studies done by Ericsson, not from Malcom Gladwell.
As we all know, you can have 1 year of experience repeated 10 times... so just having your ass in the seat for 10 years doesn't qualify. What does qualify is what Ericsson calls deliberate practice.
He has found this principle to hold true in athletics, music, writing, chess, and mathematics. He further defines deliberate practice as being so effortful, that even at the highest levels you can only put forth about 4 hours per day. Otherwise you will suffer from overtraining or burnout. Again, he recognizes that there are diminishing returns for deliberate practice, up to about 4 hours.
On the subject of not having a good/challenging job:
Hogwash. Either get a better job, or here's an idea: Make your current job into something it's not, at least right now.
One of the best programmers I knew walked into a job as a maintenance programmer on a legacy system that consisted of dozens of programs and hundreds of thousands of lines of code. Most of which had been hacked on over the years so much that you would have to say there wasn't any coherent design to it anymore.
This was pretty much a go-nowhere, dead-end job. Management wanted you to keep your head down, and just fix the damn bugs. The good developers were working on the greenfield project. People either came here to sit out their remaining days until they retired, or gain a few years of experience before going on to new application development. Whereas most programmers would complain about the lack of career development, or the opportunity to learn new things, or not having exciting projects to work on, or more generally just bitching about no one enabling them, this guy simply sat down, and went about doing the work that needed to be done.
And over the course of 2 years, he had transformed that system from a buggy hell of spaghetti code to something that was a thing of beauty and functioned like a swiss watch. So complete was the transformation, that the VP of the division started paying more & more attention to the existing project, and started questioning the value of the greenfield project. Although he didn't have a title, the operations people went to him as the de-facto leader of the group. When I left, the VP was talking about creating a new role for him as a systems architect...
I'm not sure what happened to him after that, but he taught me a couple of very important lessons:
Your job is what you make it, and there's interesting problems to be solved everywhere. If you hate writing CRUD screens, solve the problem by automatically generating them.
Don't sit around waiting for opportunities to come to you. Chances are they never will.
**Commenters:** comments are meant for seeking clarification, not for extended discussion. If you have a solution, leave an answer. If your solution is already posted, please upvote it. If you'd like to discuss this question with others, please use chat. See the FAQ for more information.
This, and many other answers, put far too much emphasis on programming as "practicing". To continue on the musician comparison, believe it or not but they actually also play for pleasure. What interviewers looking for someone who programs in their spare time are looking for is not someone who feels the constant need to practice all the time. They're looking for someone who is passionate and really enjoys what they do. If you're passionate about your job, you often turn it into a hobby as well, and it's hard to get away from it. It's no different from picking up any other hobby.
The musician's example is not really good. When a musician reaches a high skill level, when he has learned all the theory, when he can compound songs with eyes closed, when he can play over 9000 instruments at the same time, he has nothing more to do. The programmer or computer engineer needs to learn about new technologies ALL the life. Always there's something new to learn. So, answering to the question, a guy that programs all the day and has no social life is far better than a guy that does not program in his spare time.
Another example is like once you know how to program in c, learning c++ won't be difficult. I remember I solved my roommate's programming questions using Scheme without knowing any Scheme. Learning Scheme wasn't hard for me at all because I know on high level, what a functional language was.
@Gabriel Applying programming skills is just part of your work. Another part must be refining existing skills and gaining new skills. If you don't leave time in your work for the learning and compensate by putting in too many extra work hours, you're falling into the productivity trap that el fuser mentions.
+1 for the spectacular anecdote. Sometimes we are so obsessed with solving intricate challenges that we often forget perseverance is the key to success.
As for the concert pianist analogy: that's not quite true. Some pianists work harder (V. Listisa, for example, claims 12-14h daily practice). Some, especially older virtuosos, hardly practice at all anymore (to be honest, technical proficiency is lost with age - Horowitz, perfectly accurate at 40 was missing quite a few notes when he was 80. They make up for it with original, mature interpretation, though - Horowitz was still universally regarded as one of the best by then). Don't really know about other instruments, piano actually *may* be unique with this respect, maybe on par with violin.
There is more hidden in this message.
Many enthusiastic programmers like to explore things, to experiment, to follow their ideas, that's how we learn and obtain our skills and vision.
Usually you don't get to follow your interests during work hours. You just do things you are told to do and that's it. Only few of us are lucky enough to do at work what we would do personally even if not paid.
Therefore if you're not doing anything extra, you're not developing to your potential. And that is exactly the problem.
wow that's a huge relief, as sometimes i feel that i'm interested in learning about other aspect of programming but the work just makes everything feels like a grind.
True. One thing to be aware of is any Invention Agreements you may have signed during intake. We didn't use those, but I had a verbal agreement with my programmers: if it's outside work hours and is not directly competing with the company, then have a good time. I didn't even mind if they used company equipment, although there was general agreement that it was "cleaner" to keep it at home.
It fine to follow your curiosity out of hours. That might be in how to deploy the next version of windows automagically throughout your whole company overnight (Mwah hah hah). Or it might be photography, or beer brewing, or rowing. Outside interests make you a more rounded person. It does not HAVE to be related to your day job.
-1 As others have noted in other answers and comments, this implies that you can't realistically get a good, fun and challenging job. In my personal experience this is not true. I have learnt a lot of new things in most of my jobs so far. IMHO it is a question of personal attitude at least as much as that of company culture.
If you like programming and don't enjoy your job, you should spend your free time looking for a better job.
+1 I think that's it. TBH even if your day job does satisfy you, chances are that the remit of what you are doing is limited, and no matter how cool your boss is, for good reason, he won't be happy about you spending a few weeks hacking through Michael Abrash's Black Book.
I think it is very poor if you can only do one kind of things on your life. I work eight hours a day, I program and design things, I learn about new technologies in my spare time BUT I also spent time with my son, with my wife, I play piano and give long walks... And I think I need this kind of parentheses to be good in my job.
It doesn't make you a bad developer, but unfortunately, you still have to compete with the ones who do.
Read this, from Seth Godin's Blog:
It's unreasonable to get out of bed on a snow day, when school has been cancelled, and turn the downtime into six hours of work on an extra credit physics lab.
It's unreasonable to launch a technology product that jumps the development curve by nine months, bringing the next generation out much earlier than more reasonable competitors.
It's unreasonable for a trucking company to answer the phone on the first ring.
It's unreasonable to start a new company without the reassurance venture money can bring.
It's unreasonable to expect a doctor's office to have a pleasant and helpful front desk staff.
It's unreasonable to walk away from a good gig in today's economy, even if you want to do something brave and original.
It's unreasonable for teachers to expect that we can enable disadvantaged inner city kids to do well in high school.
It's unreasonable to treat your colleagues and competitors with respect given the pressure you're under.
It's unreasonable to expect that anyone but a great woman, someone with both drive and advantages, could do anything important in a world where the deck is stacked against ordinary folks.
It's unreasonable to devote years of your life making a product that most people will never appreciate.
Fortunately, the world is filled with unreasonable people. Unfortunately, you need to compete with them.
Yeah, its also unreasonable to work 8 hours a day and then go home to work some more. Who are you working for? And why? You need to answer those questions (who's paying? why? to get what?) If you are mentally worn out by the end of a day the best thing you can do for yourself is - something else!
You make the assumption that developers are'nt challenged at work and don't enjoy their work. It's not true. **The people who only program at work don't program at home because they are fully satisfied already**
-1 because a) the quotes are not directly related to this question, b) IMO (most of) these things are not unreasonable at all. Lots of reasonable people can think long term as well as short term. OTOH most of us are experienced in inventing nice (and fake) rational explanations for our lazyness / incompetence / carelessness :-(
that list can be split in two: those that start with "it's unreasonable to ..." and those that add "... expect to...". IMO, it's totally unreasonable to expect such things, but it's totally reasonable (even in a selfish way) to __do__ the 'unreasonable' things
-1 It's unreasonable to call a lot of reasonable things unreasonable. It adds nothing to the question and just sounds ok, mostly like a lot of things Seth Godin writes.
"It's unreasonable to expect a doctor's office to have a pleasant and helpful front desk staff." No, it's not. What's unreasonable is doctors charging what they do and then subjecting us to rude office staff, long waits in their office waiting rooms, and being disrespectful personally.
Almost none of those items are unreasonable to expect. This is an absolutely ridiculous list and proves nothing.
@HLGEM - Unfortunately, there is a large group of people out there that WOULD say that this is unreasonable. I think it's pointing out that highly successful people go one step above and beyond others. It's saying that you don't HAVE to program in your spare time, and it doesn't make you bad if you don't program in your spare time, but is, in fact extra practice that can give you an edge above those that don't. If you don't think it's unreasonable to go that extra mile, then you're probably, even if slightly, positioned to be more successful than those who don't.
For the -1s, I think the point of the answer was that not programming in your spare time wont make you a bad developer, but that you will still have to compete with those that do, who will more likely be better developers because of it.
@Kaz: Exactly. I think some may have not read all the way down to the last line to get the point.
I don't need to compete with them. They don't want my job. And I don't want theirs if it requires I spend what free time I have still working. I learn on my job, and that's enough. When I stop learning, it's time for a new job. I'll take the ones slightly too boring for these "superstars".
To answer the question posed: Not programming in your spare time does not make you a bad developer, however, programming in your spare time can make you a better developer.
Programming in your spare time certainly won't hurt your skills, but you shouldn't feel obligated to do it. Programming seems to be a relatively unique field because for many people it is both their job and their hobby, so they enjoy programming in their spare time.
Programming isn't unique in having it as both a career and a hobby. A couple examples: I once knew several airline pilots have their own small planes which they fly for fun. I've known professional astronomers who stargaze on the side.
By "_relatively_ unique" I meant that it is one among few, but certainly not the only one. I know many more people who, while they might enjoy their job, wouldn't spend time doing when not getting paid. It is often difficult to get a job doing what you are passionate about.
1: Technology, languages, and techniques change so frequently and so rapidly. Programmers *must* spend some time off the clock honing their craft. // Related Question: Would you feel comfortable with a PCP who didn't read medical journals?
I think this answer sums up the situation best. But it entirely depends on one's situation. If your job fulfils all your programming needs, in terms of pushing yourself, keeping up to date with technology, etc, there is far less need to do work in your own time. However, if your job is fairly easy, using older technology, then some time should be spent improving your skills and knowledge in your own time.
@shortkaik "programming in your spare time can make you a better developer" - That's not always true. If you're challenged at your work, then if you're also programming at home, that will contribute to your exhaustion and burnout more than to your skills, also this can harm your productivity at work. On the other hand, if you're not satisfied with what your job gives you (and takes from you), additional coding after it may be a good decision.
No it doesn't make you a bad programmer. Depending on what you do it may make you a better programmer in the long run. Early in your career it may influence how fast you learn the variety of skills you need. However, you may be picking up skills and information that will help in the long term. Getting some exercise wouldn't hurt either.
There is a fair amount of research that shows performance peeks around a 40 work week. While we can be production for a period of time working longer hours, in the long run we loose efficiency. The research I have seen shows people working 80 weeks are about as productive as those working 40 hours a week.
There are a few things you can reflect on off (or on) hours that may help you perform better:
- What are you doing? Can you do it better? Do you need to be doing it?
- What are you learning? What do you need to learn?
- What problems are you running into? Who is best to resolve them? What can you do?
Programming as a hobby does not mean to work after hours on the biz job - this definitively does not scale. But programming a game on iPhone in ObjC as hobby can improve your skills and total productivity at work (if the work is e.g. writing financial apps in Java EE).
@Heiko True, but there are a lot of other skills other than programming that can make you a better programmer. A good developer has many skills besides programming.
Of course :) I was especially referring to the "max productivity at 40h" - which sounded like if you do 5h hobby programming, you can only do 35h at work. Which *I* don't think is right
@Heiko It the work is sufficiently different then you may be able to do both. My first couple of years after graduation, I regularly exceeded 40 hours a week, but applied a wide variety of skills. Learned a lot, and didn't appear to hit the performance wall. Thankfully, I had a friend who would drag me out of the office sometime in the evening. On another project I went home at 2PM when I realized I hadn't accomplished anything in since 10AM. Still billed the 4 hours.
Is it possible to become a good software developer without doing extra outside your job?
It may take longer than if you were to spend extra hours honing your skill. I've also found it difficult to put enough time into self-improvement if I'm employed full time and do little programming outside of work hours.
When I was younger, I put in much more time into learning than I do now. The concepts I use day to day are deeply ingrained at this point, and it seems easier to acquire additional knowledge with this experience under my belt.
"Good" programmers seem to put in the extra hours more because they are obsessive by nature, tend towards the anti-social end of the spectrum, and genuinely enjoy programming and the whole solve problems cycle.
In the big scheme of things it's all about finding the right balance in life.
What's important is whether you enjoy programming and whether you keep learning no matter what level you're at. Whether or not you program outside work does not automatically make you a "good" or "bad" programmer.
To give a personal perspective, I've been programming for about 25 years (first as a kid, then professionally). I absolutely love it.
However, I almost never program outside work. This has to do with several things:
- I am very lucky in that at work I get to do what I love, every day, all day long.
- Quite simply, there are other things in life and there are only so many hours in the day.
You can become a good programmer just coding during work, especially if you manage your career well. However, the greatest programmers code during their off-hours as well. Having said that, a person who picks good jobs with lots of learning opportunities, uses their time at work well, and so forth will be a better programmer than someone who codes at home because he can't find jobs that provide interesting challenges during the work day.
While coding at home is valuable, I would say that maximizing the value of your work environment (by learning from coworkers, picking good jobs, managing your career aggressively) is often even more valuable. The greatest programmers do both, plus have great attitudes toward learning and mentoring others.
The real issue is whether a new developer is coding enough (on challenging enough problems) to get through a few hundred thousand lines of practice code and become a decent programmer.
This can in theory be done at work, or on your own time, or both. Practice does have to be somewhat self-directed, so you can learn what you need to learn. That means work that's a little flexible.
Lots of times entry-level jobs are a bunch of bug fixing or other work that isn't going to teach you to be good. What you need to do is write a lot of code from scratch, and that code will probably be bad. It's hard for employers to pay for this. That's why people end up doing an open source project on the side or launching a startup or whatever.
When people say you have to program in your spare time, I think it really means that you have to power through years of meaningful practice early on. You have to do whatever it takes to get the practice and learn to write and maintain a large codebase from scratch. If nobody's paying you to write a probably-disastrous series of projects from scratch, then spare time is the only option.
If you already did the practice when younger and became a good programmer, I don't think you're going to lose the baseline skills if you keep it 9-to-5 later on. Later on it's more a matter of keeping up with new technology which isn't so time-consuming.
However, it's a rare entry-level job that would give you the quantity and quality of practice all by itself to become a good programmer in the first place. A new developer needs to take the initiative to learn, not just hang out in an entry-level job doing entry-level tasks.
It would be really tough to become a good programmer from scratch if you already had a family and were heavily emphasizing work-life balance. Just as it'd be really tough to become a doctor or become a virtuoso musician or anything else in that situation. There's a reason people tend to get through their thousands of hours of practice when they're younger rather than when they're older.
It takes 10,000 hours of effort to become an Expert in anything. [Michael Gladwell, "Outliers"]
So, doing extra work before you get to that level will speed you along the path to real Expert status.
Once you are past that level, then spending more time will have small / diminishing returns.