For a very long time I've been easy to hire and hard to keep. This was a deliberate thing. I chose it for particular reasons, to accomplish specific goals. It did that. But I've decided to change my system entirely, and become hard to hire, but easy to keep.
As a programmer, I've worked for around 30 different companies, almost always in a short-term capacity, as a consultant or a contractor. If you include my time as a graphic design freelancer and my work as an office temp during my late teens and early twenties - yes, I was working full-time and living in my own apartment at 19 - the number of companies is probably more like 60. There are disadvantages to this, which is why I'm changing my approach, but there are advantages as well.
The primary advantage for me was that short-term work always gives you periods of downtime in-between. I used this downtime to write screenplays and novels, to make music, to read very extensively on a very wide range of subjects, and so on and so forth. A secondary advantage is that practical immersion in a very large number of working environments over the course of several years gives you a very good feel for corporate culture. I can spot signs of trouble in a company the way old sea dogs can smell a storm in the air three days before it happens.
Greek sailor on Flickr
However, during the dot-com downturn, I had a lot more downtime. I had been doing some work I really didn't enjoy - maintaining legacy Perl for an investment bank. I was extremely bored there. I had contacted a recruiter to see if she could get me a better job, and she told me I should be grateful I had a job at all - 200,000 people had just been fired in the city of San Francisco alone. Faced with the realization that I would have to either stay with the job I had or be unemployed, I chose unemployment. I packed up my things and went far away.
A camper I used to live in; my dog and my dad's dog
I figured the downturn would blow over and I'd be able to find a new job easy enough. I was right; I just massively misjudged the scale of time on which this rhythm would operate. The downturn did blow over and finding jobs did become effortless again, but it didn't happen half as quick as I thought it would. So I had a lot more downtime than I had anticipated.
During this downtime, I was able to spend a lot more time on writing and art, although there were also significant downsides - I ate less food, bought less clothes, and owned less cool electronic toys. Eventually I came back to technology, partly because I enjoy it, and partly because I enjoy owning toys and eating food. But I definitely came back with a different perspective. Learning to draw is a good example.
I painted this in 2003 or 2004
Firstly, learning to draw changed my perspective on programming because learning to draw will change your perspective on anything. If we're talking about realistic drawing, depicting actual objects, the primary skill - really the only skill - is accurate, detailed observation. That's really all there is to it. When you draw, you make tons of observations, and you only keep the accurate ones. If you practice this mode of thinking, and then apply it to code, you're going to find your code getting more succinct - more powerful, and easier to understand.
Secondly, I took several art classes simultaneously for half a year, struggling with it, then locked myself in my place for a week over winter break with a copy of Drawing On The Right Side Of The Brain and nailed it. One lesson here is that Drawing On The Right Side Of The Brain is a hell of a book, but the most relevant lesson is that working hard at something for half a year and then obsessing over it for a week is probably a lot more productive than working a short-term job for half a year and then obsessing over something else for a week.
If you need a practical experience to cement this lesson for you, ask yourself what's more productive: a marathon coding session before you work for half a year on the problem? Or a marathon coding session after you work for half a year on the problem?
When I look back on that experience today, I realize, not only had I been shortchanging myself in my artistic interests, by sandwiching them in between short-term work, I had been shortchanging myself at work as well, because none of my marathon coding sessions ever took place after half a year's work on the problem. Actually, I say none - in fact, one company, my favorite job, I stuck around for about a year - a whole year - and only left after they managed to convince me to stay a few extra months. I left, get this madness, because I was bored. But during the time at that company, I wrote the code that I'm still proudest of, to this day. I spent a long time maintaining a legacy system, and then I managed to convince my primary customer to let me rewrite it, and the rewrite was such an improvement that people started calling me a Perl guru. (It was years before I encountered the work of real Perl gurus, so for a time I even believed it about myself, but that's another story.)
To produce genuinely excellent work requires consistent, dedicated effort over time. So my theory - that alternating short-term work with artistic "vacations" would give me the best of both worlds - actually just made me a jack of all trades and master of none.
Consequently, the job I want next is not some highly lucrative, short-term consulting, nor a permanent, full-time job. I want a permanent, part-time job as a senior Rubyist. Alternating between work and art was a mistake. I want to address my artistic interests in a consistent, dedicated way, and that includes programming.
I've been looking for this in a tentative, maybe-ish way for a while now, but I've only recently figured out why it really is a good idea. If anybody out there's been wondering, gosh, how do I hire somebody like Giles Bowkett? - now's your chance. Or more accurately, up until now, every moment was your chance, because I was easy to hire but hard to keep, but this period now might be your last chance for several years. If you're a programmer with other interests, like music, art, etc., maybe you should look for the same thing. One very excellent programmer I know gets "fuck programming" phases where all he wants to do is make drum & bass. Maybe he should. Interesting things happen when programmers make music.
Anyway, I'm not going to tell other people they should do what I want to do, especially when I haven't even proven that it's possible yet, but that's the job I want next, and I will say that I'm probably not the only programmer in the world who would enjoy that kind of thing. Why would an excellent programmer get "fuck programming" phases? It's not because they don't love programming. You really can't be an excellent programmer without loving it. It's because they love other things too, and it's good to do the things you love - all of them.
Update: I got an e-mail asking, "Why not just start your own business?" Other people have asked me that as well. So, I guess it's a FAQ. My answer, from the mail:
The thing is, I'm serving two masters either way. If I do programming and art (or actually acting), I've got to think about both programming and acting. If I start my own business, I've got to think about both programming and business. In either case I'm thinking about two things. I think I'll do better if I think about two things I'm interested in, rather than one thing I'm interested in and one thing I'm not interested in.
(I am actually interested in some aspects of business, but more the management stuff than the business stuff - i.e., more healthy development practices than accounting and planning and sales.)