How do you cope with coders coma?
Language AgnosticLanguage Agnostic Problem Overview
As a programmer I sometimes find myself in the position of being dealt a task which is utterly tedious and downright boring. This is not surprising, it would be odd if all aspects of programming were fantastically challenging and fun, but that doesn't change the fact that I wish I could live without these types of assignments.
For the most part, I manage to just power through by simply finishing the task as quickly as possible, but other times it's just not that easy. I find myself doing anything but finishing the boring assignment, taking on multiple other assignments if I have to, just so I get a reason for not finishing. This is of course affecting my professional life, as I'm constantly jumping from challenge to challenge, leaving a trail of unfinished blah behind me.
How do you cope with coders coma? Are there any tips on how to be more productive when it comes to finishing boring stuff?
Language Agnostic Solutions
Solution 1 - Language Agnostic
I quite like Steve Pavlina's timeboxing method to get rid of tedious tasks. It applies whether you have boring code monkey work to be cracking on with or a pile of junk in the closet at home you need to sort through.
tl;dr of the link: Timeboxing means allocate a time slice, then work, cutting out what would put you behind. It is meant to get rid of the motivation for procrastination, by not making the tedious task take up more time than it is worth. Besides tedious tasks, timeboxing can be used to make a dent in something complicated enough that you don't know where to begin.
Solution 2 - Language Agnostic
One thing that I do when I know I'm putting off doing something (either by doing other tasks or just slacking in general) is to write down a schedule on a piece of paper for what I'm going to do for that day. It sounds stupid, but try it. Just write down what you're going to do and in what time range. The feeling of crossing an item out on your list is great, but the feeling of throwing out that entire list is even better.
Solution 3 - Language Agnostic
If the task is tedious because it is repetative, I write a program to do the task for me. ;-)
Solution 4 - Language Agnostic
Pass it on to one of the Interns
Solution 5 - Language Agnostic
I generally try to solve the problem in a new way. For example use something you've just learned. Obviously expects bug and longer development time, but at least it'll be still fun.
Or you can just hire some cheap programmers from the other end of the world to finish the job for you :)
Solution 6 - Language Agnostic
Amp...lots and lots of Amp....a good sugar buzz is all the motivation I need sometimes...
Solution 7 - Language Agnostic
Nobody mentioned the Pomodoro technique. Timebox 25 minutes where you want to be absolutely undisturbed, turn off email, phone, IM client, etc.
It's amazing how much you can actually get done when working only on one thing :)
More info on this page about the pomodoro technique
Solution 8 - Language Agnostic
There's no one simple way. The worst thing to do is to start multitasking to avoid tackling the boring stuff. The best way by far is to just do it as soon as possible and as quickly as possible, to get it over with. This becomes a problem if the task is pretty huge, say a weeks or even months worth of work, since it's really difficult to motivate yourself to work with tedious crap day-in, day-out.
Then again, it's all part of the job. You could as well be working at a Kwik-e-mart or sweeping floors somewhere. Tedious tasks need to get done too, unfortunately and there's no quick and easy way out of it.
Solution 9 - Language Agnostic
I usually offer one of my daily prayers (salat) and after that I said to myself, "You not going home until you Finish that, Whatever the task, or for however long you need to stay at office."
Solution 10 - Language Agnostic
A). Try and do something new as part of the boring task. That could be writing it in a new language or using a different framework technology. Recently I tried scratch-writing a Restful-MVC framework into .NET 2.0 for example.
B). Split my time 50/50 with an interesting project, always deferring the interesting stuff to the afternoon (better to coincide the stimulating work with that lethargic mid-afternoon brain-fail cycle)
C). If you really just have to get through it, treat yourself with things outside of work so you don't get too depressed. Junk food, sleep, xbox time, whatever. Hopefully your partner is accommodating :)
Solution 11 - Language Agnostic
Break the task into atomic pieces (as far as possible) and then follow ryeguy's advice of task lists. I like to use the 'Getting Things Done' approach (GTD), and just incorporate the pieces of that task into the rest of my work. Breaking it apart helps minimise the boredom and using a structured task methodology makes sure I still get it all done.
At the end of the crap task, reward yourself and use that as a driver for future tasks of the same ilk.
Solution 12 - Language Agnostic
When I get like this, I think of what http://en.wikipedia.org/wiki/Hillel_the_Elder">a Great man had to say: If not now, when? And I just do it. I find that waiting to get motivated to do things will get me nowhere. I also find that doing things, even when I don't want to, gets me motivated to keep going and to continue working on my project.
Solution 13 - Language Agnostic
- Break up the task into less-annoying chunks.
- Occupy your brain as much as possible: if the task only requires 20% of your intellect, you can probably listen to CNN radio (in some other language that you've studied, for instance) in the background. If it requires your full concentration, listen to whatever music you can without getting distracted.
- Avoid simple carbs (sugars especially). This is personal, but I find that they cause me to crash and need a nap. Which is good sometimes.
- Fight with your husband/wife/friends/etc. beforehand. This will make it very hard to focus and then boring tasks are a godsend.
- Many times, repetitive tasks are better coded than performed. I end up writing a huge amount of "code" in Excel/OpenOfficeSpreadsheetThinger (Excel writes Ruby, etc. perfectly :) and using global find and replace in Netbeans. This might take longer the first few times, but these are tools that you need to learn to use.
Solution 14 - Language Agnostic
If it applies and is possible, I try to explore a technology or methodology to peek my interests. However, this is not always possible.
I too have also found that breaking some huge, boring, or daunting task into smaller, easier to swallow tasks works best.
Solution 15 - Language Agnostic
I pour the green stuff from a glow stick into my Mountain Dew.
Solution 16 - Language Agnostic
I don't get coder's coma. I get mismanaged paralysis, where I do nothing because I'm afraid that any move is wrong.
Solution 17 - Language Agnostic
It may not be the answer people are looking for here, but I sometime write programs to automate these stuff!