386

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!

Adam Lear
  • 32,069

29 Answers29

444

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:

enter image description here

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.

For Real Productivity, Less is Truly More

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:

  1. 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.

  2. Don't sit around waiting for opportunities to come to you. Chances are they never will.

Robert Harvey
  • 200,592
red-dirt
  • 3,648
150

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.

tshepang
  • 305
70

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:


Unreasonable

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.

Ryan Hayes
  • 20,109
57

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.

23

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?
BillThor
  • 6,310
15

Is it possible to become a good software developer without doing extra outside your job?

Definitely.

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.

13

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.
NPE
  • 302
9

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.

Ethel Evans
  • 5,309
7

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.

Havoc P
  • 918
5

If I spent time in the next six months developing a basic game in my spare time and you don't, and supposing all other things are equal (they never are), which of us would know more? Which of us would have more skills and experience?

This effect would be cumulative, as earlier off-hours knowledge would feed into new work and new off-hours knowledge.

And that's why people advise to program in their spare time, insofar as I can tell.

Paul Nathan
  • 8,560
  • 1
  • 34
  • 41
5

Between great and bad there are many levels in between. You can't become a great developer by doing it only 8 or so hours a day, possibly working on problems from a very limited field.

If your job is varied enough, you can become "decent" or "accomplished" or whatever adjective you prefer, but to be a great developer you'd have to be a bit mental, I'm afraid.

Another reason for doing hobby programming is that in a job you often have to adhere to suboptimal standards and make compromises in general and even when you do learn a new thing, you might not be allowed to use it.

And yet another, even more prosaic one is that whatever code you write at work is owned by your employer. You can't return to it and learn from your old mistakes years later, when you're working for someone else.

biziclop
  • 3,361
5

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.

4

You shouldnt look at it as "Does it make me a bad programmer" because like every skill more practise only makes one better.

So if you want to be better than you currently are and learn new technologies and domains that your work doesnt allow, that is where the extra effort and time spent comes in handy.

But extra time spending coding (just to prove to someone that you code extra) doesnt necessarily mean you become a good programmer unless you learn what you do and do something different or improve upon what you already know, rather than blindly cut/copy/paste and putting together hacks. Putting extra hours and doing the same thing over and over in no way do I think is going to help you improve.

Simon
  • 425
4

During the day your programming is short bets. There's money to be earned, you know exactly how much and what for, and you don't have a lot more to gain than a paycheck.

At night you're working on long bets - crazy ideas that will mainly not work at all. These are the projects that will catapult you out of the rank and file. This is how you become the inventor of PHP rather than the code monkey using it.

I interview lots of programmers, and whether they have done interesting oddball things outside of working hours is an instant green light. It's surprisingly rare.

Though I will say this: there was one time a guy who did a lot of cool stuff outside of working hours turned out to be a total dud of a hire. I'm still stumped by that guy.

lucas
  • 1
3

Being a good software developer in heart,depends really upon your heart. You can try to be a great musician and put a lot of time on music,but still that doesnt make you a good musician.You need to enjoy what you do in order to be good in that.Initially i was having the same questions you had, but now because of my likes i have started doing the extra things on software other than the normal work.It improved my performance in the normal work and also provied me with lot of time to involve in other activities not related to software. So the base line is enjoy what you do and you will eventually do what is required.

Siva
  • 121
3

The real question is what you are doing all day. The analogies to athletes and musicians are usually not applied correctly. Your day job is not practice, it's performance, unless you have the explicit ability to spend part of your work day in genuine "practice". How do you know? If you never have the time to do anything "right" or learn a new language/technology/framework/etc thoroughly, then you aren't practicing, you're performing. Professional athletes and musicians don't get better during the game or the concert, they get better during focused practice. So, if you're like most, the only time you have for genuine coding "practice" is outside work. That being said, it's only worthwhile if it's focused. If you hack all day and then hack all night, you just get tired, not better.

For example, you need to optimize a piece of code at work and you throw the usual profiling tools at it and speed it up maybe 50% and move on to the next task but you think there are other things you might do that would help even more but you don't have the time allowed to try them. If you take that piece of code home with you and spend a few extra hours really wringing it out, you are learning techniques that make you better the next time you optimize something. You aren't doing the same thing at home as at work.

Practice is about adding skills and honing skills and those activities are necessarily done in an artificial way (it's like isolating a muscle group in the gym, nobody does that in normal physical activity). Building apps at home is not automatically practice. The work at home should focus on the techniques and the process, not the end product. If an end product is what you need to be motivated, great. Just don't fall into the trap of developing it the same way you do at work.

The coding kata movement is an example of what practice is all about.

wai
  • 1
3

To answer your question: No, it doesn't make you a bad developer.

However, it might make your professional life down the road a bit harder. If you've got a job where you're constantly learning new technologies that will help you further your career path (whether that be promotions at your current job or new jobs at different companies), well then you're set.

But if you're currently working at a company where the technology used rarely changes, then in 2 or 5 o 10 years you might find it hard to get that next job. If you're coding at home with new technologies and have something to show for it (app, website, open source project, etc), then you'll find it much easier to get that next job.

Of course, you might be completely happy doing the exact same thing for the next 40 years, and as long as your company and the technologies continue to exist, then you're set!

1

There have been times in my life where I did a lot of coding outside of work, and times when I did none because I was working on other things. You should always be learning, but it does not mean you always have to learn about programming in your spare time. If you want to work on some other skill, be it carpentry, needlepoint, gardening etc in your spare time it will help you grow as a person.

Just don't fall into the trap of thinking you know all you need to know about programming so you can stop learning.

Zachary K
  • 10,413
1

This is indeed an interesting post. I have been developing software for the pas 10 years and love my job! I too have a lot of hobbies and try to manage them properly. But I do get a kick out of trying new things spending an hour or two in front of the pc before going to bed. In my case, I am addicted to studying and writing game code. I don't always have time playing games, but I love reading code about games. To be honest, i think the best code I've ever seen came from games and I apply these skills to my code at work. I constantly learn EVERY SINGLE DAY, so IMO, if you are a developer, you'll never reach your peak, there is ALWAYS a better way of doing something....

1

This is a great post.

I would say, no, it doesn't make you a bad programmer. If your reviews have been good and you complete your tasks well and on time then you are quite the opposite. In all honesty, I am envious of you that you get your fill of the code while at work.

The main reason I program in my spare time is that I don't really care for what I do at work and I use my spare time to do what I like. What I enjoy doing is video game programming. There isn't a valid games company to work for where I live (I have a family here now) so I help out with indie games on the side when I can. It's the only way to cure the itch. If I did what I loved all day then it would be highly likely that I wouldn't do it in my spare time.

Corv1nus
  • 933
1

My advice will be : Use your commute time to learn stuff, to keep you informed : read IT books, listen to Dev podcast, etc. Regarding your post-work activities : doesn't change anything. Otherwise, you'll become a boring person.

Rabskatran
  • 1,421
  • 1
  • 14
  • 20
1

It doesn't make you a bad developer, it might not even make you a kind of "ok" developer it just makes you what you are. I think though, that you'll find most people that are really excellent hackers tend to like to try to new things. At any given time I will be investigating many different languages, databases, web frameworks, robotics, etc. I have two little kids and a wife, mortgage, all that stuff - but I look forward to the times that I can get 2 or 3 hours to hack around with stuff. Sure, C# and .NET is all well and good for earning a paycheck and I actually do I enjoy my work, but messing around with Scala and Lift has been a real blast for me these past few months. There are developers who would classify themselves as "passionate" and those that are just "getting by". I tend to find that developers who constantly challenge themselves tend to advance more quickly than those that don't.

1

Does this mean I'm not a 'true' software developer at heart?

Absolutely not. It just means that you like doing things other than coding. There's nothing wrong with that, and it doesn't make you any better or worse than anyone else, developer or not.

Is it possible to become a good software developer without doing extra outside your job?

Of course. Some of that depends on what your work environment is like. If you've got a boring, soul-sucking, job that sucks up all your time and then some doing boring maintenance work, then being able to use work time to develop your skills will be very limited. If you have the kind of environment where you have some latitude to do what you want to explore and learn, then take advantage of that opportunity to develop new skills that also help your employer or co-workers out.

If you find something interesting that you want to learn more about and don't have the time or possibility to use it at work, then you have to weigh that against the other demands on your time, be they family, friends, or hobbies.

afrazier
  • 131
1

I've been in on a number of interviews to hire programmers recently. I've found that the candidates who most impress me, both as programmers and as people I wouldn't mind working with, are the ones who spend a significant amount of time on NON-programming pursuits (particularly music, but also pure mathematics, philosophy and literature). To be sure, most also do some hobby programming, but they have balancing interests as well.

PSU
  • 1,099
1

If have a job that provides you a completely engaging intellectual experience, chances are that's going to be your mental life -- outside work is for blowing off steam. If your job doesn't engage you, you're much more likely to find intellectual satisfaction after work hours. That's true in any business, not just coding.

Coding in an office saps your creativity, period. At least 8 hours per day, your mind is doing a continuous sprint on someone else's behalf. It's normal to come out of that and not want to get back on a computer. When I worked from an office, it was the same for me -- I'd get home and only want to cook, or go see a movie, hang with friends or just zone in front of the TV. Then from 2001-2004 or so, after the company I worked for tanked and I cracked up, I dropped out and drove a taxi and waited tables. That's when I really started coding in my off hours.

The truth is, I don't think anyone has more than 8 hours a day worth of high-quality coding time in them. A lot of coders only have 2-3, but they might be the most efficient people out there. It's just how you use it, how you spread it out.

strike
  • 1
1

Is it possible to become a good software developer without doing extra outside your job?

It's depends on the industry you're working in. Some are more competitive than others.

If you don't like to learn new stuff on your own, you're likely to stay at your current skill level. That's may be enough ... or not.

It is not about the time dedicated, it is about curiosity, and a thirst for knowledge and mastery. Obviously, it has nothing to do about staying up to date, it is about fundamental -often hard- stuff : compilers, monads, memory architectures, etc. Things that stretch and expand your brain.

Wanting to Code at home is just an important side effects. But don't underestimate it, without doing, learning is often shallow.

All the best dev I know have theses traits.

1

No, it doesn't make you any less of a programmer than anyone else. You're just more social. I'm envious to be honest.

You don't have to use all of your spare time to write code. My job is pretty simple: server management. I write a lot of code because I don't have to do a lot at work. That doesn't make me better or worse than anyone. If you're passionate about programming, why not do some freelance work? I often put up Craigslist ads for my services and make a good amount of money off of it. It's also a great learning experience since you'll be working with startups and sometimes even large websites. Hope this helps. :)

iamandrus
  • 101
0

I asked a similar question a couple of days a go. It seems that people seem that we are more passionate about our job if we devote not only all our day time to it, but also all time that we have available for our personal lives.

I do occasionally write some code on my spare time, but I do it for fun, not because I intend to gain some professional growth or recognition. I applaud the people who have the energy for it, but you are more like to burn out by working longer hours and on extra projects than to actually become more expert into anything.

At the end of the day, all that matters are your ability to learn new things (especially on the job), your ability to communicate well, and having good time management skills. That you turn you into a good professional.

Pablo
  • 401
0

Is it possible to become a good software developer without doing extra outside your job?

For me it's all about balance.

Although I love programing it is just one side of me, I have other interests. As I see this if I'm happy (doing other stuff I like doing) and I find my work interesting and fulfilling (which I do) than, on the long term, I'm on the way to become a better software developer.

P.S. I admit I haven't read all prior posts on this page.