Today I had a small moment to myself and read an article on overcoming coder's block by Logan Koester. I considered the article well written, a lot of his tips I do myself, or I should be doing them as I work from home as a Perl programmer. Below I have repeated some of his tips and have added my point of view as well.
Logan Koester recommends in his article:
Create a work environment with as much artificial light and as little clutter as possible.
His argument is that he gets lazy from sunlight. In my case I wouldn't take it that far but I agree that direct sunlight can cook me alive and can become a major distraction in itself. Back in the Netherlands when I had a window that got direct sunlight in the afternoon I often closed the heavy curtain and worked either by the light that managed to get through or artificial light.
The other thing Logan mentions I wholeheartedly agree on is to reduce clutter as much as possible. Some people claim that an empty desk equals an empty mind, but that's good. I need an empty mind to "download" my work environment. I don't need distraction. And if a messy desk equals creativity then the local garbage dump must be the place to hang out to get mind shattering ideas.
I prefer an empty desk, no, I need an empty desk. Where else can I put my notebook, and open the books I need to look up documentation? Currently over 60% of my desk is empty. With a total surface area of 87 by 192 cm that's a lot of space. I actually don't consider it an empty desk, but an organized desk. And what I need for my programming work is an organized mind.
Logan prefers to work full screen, kill all programs that have notifiers, and optionally autohide the taskbar. I don't like to work full screen. To me a major advantage of a graphical user interface (GUI) using windows is that I can drag around windows, and reorganize my workspace. I often let the editor I use (mostly TextPad and Exchanger XML Editor) only cover a part of the desktop so there is always space left, similar to how I use my real desktop.
But I agree, again, with Logan. Hence I don't have hardly any shortcuts on my desktop, but use the Quick launch toolbar. Also to avoid the cluttered start menu of Windows XP. Again it's organize your work environment.
Logan recommends to read relevant articles or book passages to assist your current project. I like to add to do this reading away from the computer. At least to me the computer is a major distraction factor. When away from the computer there is less distraction. Also it stops me from trying a few pieces of code out and, instead of reading, getting lost in a non- relevant side project.
Somewhat related to his advice is what I wrote a few months ago First hour after breakfast: Learning Python: to use the first hour after breakfast for one hour of study. It's amazing how much one can learn by reading a book or relevant article compared to idling the first hour of work away on a few websites.
Logan recommends that if a day goes so incredibly badly it just can't be saved to take a 20 minute power nap. After the nap act like it's morning and you just woke up.
This is quite similar to what I do now and then. When I feel tired, instead of keeping glaring at the screen I decide to take a short nap. When I am not too tired I don't need a wake-up call to limit this nap to 20 minutes. After it I often feel wonderfully refreshed. Moreover, things that were hard before the nap somehow fall into place after it.
When a day goes incredibly badly however, I often take a day off. I go out of the house. Sometimes I go together with Esme to a shopping mall, or we go together on a short walk nearby. Walking in a quiet environment, surrounded by trees (or cactuses) often helps to clear my mind, and unexpectedly come up with a much better solution compared to banging my head against a computer screen.
At the end of his article Logan gives a short list of things that distract him. My personal list would include the following:
I already managed to get phone and Skype of the list. The former by not having a landline and only handing my cell phone number out in very rare occasions. The latter by not running Skype.
Usenet is something that has been distracting me for over 12 years. But last year I decided to stop using Usenet at all. For a long time one of my excuses was that by answering questions I learned a lot myself. But that was a false excuse as I have learned from First hour after breakfast: Learning Python.
Email I have somewhat under control. I only start the email client I use (Mozilla Thunderbird) a few times a day to check email. After I have finished checking my email I close the application so it can't distract me with "You Got Spam".
As for Instant Messenger programs, I rarely use them nowadays for customers. And friends and family don't disturb me when I set my status to busy. In the past I had customers who managed to tempt me into adding them to messenger, but nowadays I only allow for this when it's necessary.
Logan links to an article written by Joel Spolsky, Where do These People Get Their (Unoriginal) Ideas?, which explains that
... if we interrupt a programmer, even for a minute, we're really blowing away 15 minutes of productivity
A statement I wholeheartedly agree with.