Home » I don’t program in my spare time. Does that make me a bad developer?

I don’t program in my spare time. Does that make me a bad developer?


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

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.

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.

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.

Related Solutions

Winsock programming connecting to a public ip

The issue is with your server. You are binding it to This means your server will only bind to the loopback interface, so only clients running on the same machine as the server will be able to connect to the server using this same interface. If you...

Pin-board effect with CSS [closed]

You can use JavaScript to accomplish this but it can't be done with CSS floats alone. A library like jQuery masonry will do it well. The reason? The specs on floats. In particular #5 which says, "The outer top of a floating box may not be higher than the outer...

Calculate the sum with minimum usage of numbers

Here's a hint: 23 : 11 + 11+ 1 ( 3 magic numbers) 120: 110+ 10 (2 magic numbers) The highest digit in the target number is the answer, since you need exactly k magic numbers (all having 1 in the relevant position) in order for the sum to contain the digit k. So...

Why not drop the “auto” keyword? [duplicate]

Your proposal would be rejected on the basis of backward compatibility alone. But let's say for the sake of argument that the standards committee like your idea. You don't take into account the numerous ways you can initialize a variable widget w; // (a) widget...

Recursive to iterative using a systematic method [closed]

So, to restate the question. We have a function f, in our case fac. def fac(n): if n==0: return 1 else: return n*fac(n-1) It is implemented recursively. We want to implement a function facOpt that does the same thing but iteratively. fac is written almost in...

How can I match values in one file to ranges from another?

if the data file sizes are not huge, there is a simpler way $ join input1 input2 | awk '$5<$4 && $3<$5 {print $2, $5-$3+1}' B100002 32 B100043 15 B123465 3 This Perl code seems to solve your problem It is a common idiom: to load the entire...

Javascript difference between “=” and “===” [duplicate]

You need to use == or === for equality checking. = is the assignment operator. You can read about assignment operators here on MDN. As a quick reference as you are learning JS: = assignment operator == equal to === equal value and equal type != not equal !==...

Compiler complains about misplaced else [closed]

Your compiler complains about an misplaced else because, well, there is an else without a preceding if: // ... for (j=1; j<n-i; j++) { if(a[j]<=a[j+1]) { // ... } // END OF IF } // END OF FOR else { continue; } // ... The else in your code does not follow...

Bootstrap – custom alerts with progress bar

/* !important are just used to overide the bootstrap css in the snippet */ .alertContainer { border-radius: 0 !important; border-width: 0 !important; padding: 0 !important; height: auto !important; position: absolute !important; bottom: 15px !important; left:...

How to Garbage Collect an external Javascript load?

Yes, s.onload = null is useful and will garbage collect! As of 2019, it is not possible to explicitly or programmatically trigger garbage collection in JavaScript. That means it collects when it wants. Although there is cases where setting to null may do a GC...

Math programming with python

At first, what you are looking for is the modulo operator and the function math.floor() Modulo from wikipedia: In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus). for example: 12%12=0...

Android slide over letters to create a word [closed]

Here some advice you can use: First for each cell you can create an object that represents the state of that cell: class Cell { char mChar; int row,column; boolean isSelected; } then you can create a 2D array of your cells Cell[][] mTable = ... For views you...

Sum two integers in Java

You reused the x and y variable names (hence the variable x is already defined in method main error), and forgot to assign the ints read from the Scanner to the x and y variables. Besides, there's no need to create two Scanner objects. public static void...