first, find a job you enjoy -- the tech job market is good enough now where you can afford to be selective (at least in the valley/other tech hubs) -- ideally, something that you would find exciting enough to do even if you weren't getting paid, as the cliche goes.
second, i think it's common for developers to get the equivalent of writers' block when the upcoming task is large and/or poorly defined. some things that have helped with this:
- tricking yourself to take on little pieces of the bigger project (google 'structured procrastination' and hamming's article on productivity); carving out explicit "next steps" (without dependencies) that you can start on now
- writing down a plan or specs to at least get things on paper/into your editor to bring clarity to a jumble of random thoughts
- reducing distractions; putting on headphones (esp. noise cancelling); stopping multitasking
http://www.joelonsoftware.com/articles/fog0000000022.html ; also, turning off AIM (or putting up an away message plus hide windows) and your mail client's new-email popup/toaster massively cuts down interruptions
- using rescuetime (to assess the damage and/or feel guilty about screwing around :)), noprocrast on news.yc or just making a commitment to yourself to wean yourself off of news/blog sugar
but ironically it's tempting to waste a lot of time "preparing" yourself to be really productive or trying to come up with the perfect system. i think there are natural ebbs and flows in levels of productivity; a lot of the battle is detecting when you're slumping and instead of beating yourself up, try to trick yourself into making that period as short as possible.
I think you are dead on; you need to find a job you enjoy. When I was a student I was lucky enough to do 6 co-op terms (internships).
During this time I learned that your actual productivity is not being measured. The majority of your performance is measured relative to other coworkers, and simply the perception on how smart and hard you work. On one co-op term, I was highly regarded, but only doing what I considered 2 hours of work per day. However, I was doing all they expected of me and continually asking for more work, so they thought I was fantastic. I was able to do this by working smarter, not harder. Another co-op term at a small company I was doing 6+ hours of work (again, from my perspective) and I did not get a good review at all. This was because I was doing about half the work of the other programmers there, who were very senior and experienced developers. Additionally, there were no opportunities to work smarter, I just had to churn out a lot of code in a very confined way.
So, I quickly learned that
a) your employer is judging your work on their perception of performance, not what you think
b) in order to excel, you need to be in a position to work smarter
All of this brings me to the conclusion that in order to succeed you need to be set up for success.
second, i think it's common for developers to get the equivalent of writers' block when the upcoming task is large and/or poorly defined. some things that have helped with this:
- tricking yourself to take on little pieces of the bigger project (google 'structured procrastination' and hamming's article on productivity); carving out explicit "next steps" (without dependencies) that you can start on now
- writing down a plan or specs to at least get things on paper/into your editor to bring clarity to a jumble of random thoughts
- reducing distractions; putting on headphones (esp. noise cancelling); stopping multitasking http://www.joelonsoftware.com/articles/fog0000000022.html ; also, turning off AIM (or putting up an away message plus hide windows) and your mail client's new-email popup/toaster massively cuts down interruptions
- using rescuetime (to assess the damage and/or feel guilty about screwing around :)), noprocrast on news.yc or just making a commitment to yourself to wean yourself off of news/blog sugar
lots of people have written about productivity; http://blog.pmarca.com/2007/06/the_pmarca_guid.html and http://www.paulgraham.com/hamming.html are good starting points.
but ironically it's tempting to waste a lot of time "preparing" yourself to be really productive or trying to come up with the perfect system. i think there are natural ebbs and flows in levels of productivity; a lot of the battle is detecting when you're slumping and instead of beating yourself up, try to trick yourself into making that period as short as possible.