A Programmer Metaphor: The Farmer and the Cowboy
In all the years that I have been working as a programmer, I've seen other programmers and the companies that hire them fall into two camps: farmers and cowboys.
In real life farmers keep a regular schedule (wake up early, milk the cows, etc), are suspicious of new things, keep a long term view, and understand the need for a plan and to work as a team.
Cowboys have an independent character, take risks, solve problems on the fly using whatever is available, look for the immediate solution (the calf is being attacked by a wolf, do something) and generally do things their own way.
Programmers may have a mix of these two somewhat disparate viewpoints but from my experience tend to orient themselves one way or the other. So what does this metaphor mean?
Before I continue let me say I don’t intend to look down on either type, sometimes the terms can be tied up with people’s negative stereotypes of the words (cowboys are crude, farmers are bumpkins). I could have used political terms like liberal and conservative, but those words are even less likely to be context-free!
Most of the jobs these days (especially in the corporate world) require teamwork, following methodologies, using predetermined standards and sticking to the plan. I remember an interview at an airline here where they bragged about how their architects never wrote code, the project leaders only designed api’s and the coders only filled them in. One job I had (frequently referenced in various posts) had a formal architecture review board, a detailed methodology (that did change almost every day) and endless schedule extensions. Only someone with a farmer mentality can survive in this kind of environment which expects you to work within the system (good or bad).
A cowboy programmer (again, get over the word) is not going to enjoy working in an environment where everything is pre-determined, pre-planned, team oriented and long term. Cowboys need to be creative and inventive and feel the thrills of coding without a net. As in real life, tying a cowboy to a farm is asking for trouble; likewise expecting a farmer to deal daily with whatever is over the next hill is not going to work.
A farmer is more likely to learn a set of technologies and use them well, undistracted from worrying about the next big thing. This is what most mature companies are looking for in a resume, 3-5 years doing the same thing (.Net, Java EE, etc) over and over. It makes sense if you are looking for someone to fit into a slot and deliver useful code in your fairly static environment.
Cowboys are more likely to be found (and desired) in smaller more dynamic companies, especially in start up environments where there is no status quo and invention is the reason for their existence. Here you want people who can try new things easily, are unlikely to be fazed by failure, and have a burning desire to figure out what’s next.
I can see that people are sometimes forced to work as farmers but come home to program as cowboys to stay sane; I’ve been there. There is no doubt in my mind however that I am a cowboy, which might explain my lack of excitement with the jobs available in the D-FW area in Texas I live in, which is prime farmer country (lots of big conservative companies). Looking at Silicon Valley (where I spent a year once) you can see a lot more cowboy opportunities.
So don’t be concerned if you identify with one or the other, both are necessary in the right places. I’ve known smart people in both worlds (and dumb ones for that matter) so it’s not like one is better or worse. The important thing is to find a place where you feel comfortable and contribute well. The important thing for an employer is to find the right kind of employee.
The important thing for me is to find a horse, giddy up and get coding.