Cowboy Coders are programmers who write code according to their own rules. They may be very good at writing code, but it doesn't generally follow the standards, processes, policies, or anything else derived from the group. Cowboy Coders work well alone, or in the old-style CaveProgrammer
environment, but they rarely, if ever, work well in a team. Often times, they are a burr in the saddle that keeps the team from getting positive work done.
The above elicits mixed emotions. I have often been a CowboyCoder; in some circumstances I didn't have a choice (I was the *only* coder on the project); in others, it was inherent in the context : no team rules, standards, or processes, and a division of labor which put senior developers in charge of different projects, with little opportunity to elaborate such standards as a team. I didn't like having the pattern thrust upon me, and I'm pretty sure I'll do much better in a team.
s are identified more by their attitude than by their circumstances. CowboyCoder
s prefer -- nay, insist! -- to avoid standards, processes, and policies, and hate
working with others.
s work in packs as GuerillaCoder
s, self-supporting their behaviors. See RamboCoder
See also CowboyCoding
The Cowboy Way:
- The speed with which I can hack something together determines my worth
- People who need comments in order to understand my code are too dumb to be working with me
- People who ask me questions about my code are too dumb to understand it, and (therefore) are too dumb to be working with me
- Other people's code is just crappy, but mine is self-descriptive and beautiful
- Exploiting a compiler-dependent language feature to save a line of code is "elegant"
- Other people on my team cause all of the bugs; I'm the one that fixes them
- My code is never at fault, always perfect, and I don't make mistakes
- Since my code is never at fault, I don't need to test it thoroughly, if at all
- Since my code is always perfect, it never needs to be refactored no matter how long it's been in the codebase or how much has changed around it
- Since I never make mistakes, I can yell at anyone else who does
- Since my code is perfect, if the program crashes due to unexpected data, it's the user's fault for entering bad data.
- Since my code is perfect, if the program fails after a minor machine configuration change, it's the sysadmins fault for changing it.
- Since my code is perfect, if the program runs too slowly, it's the managements fault for not providing a faster machine.
I worked in a whole company of these people; some of whom really seem to think this way. They're nice people, don't get me wrong, but they just don't seem to think very much about the usability of their code. This problem is either caused or worsened by the ItAintBroke
attitude that our management fosters, combined with the distastefulness of working on the 10 year old code in our codebase. Maybe if they were in an environment where communication, collaboration, and refactoring was encouraged, they might change their tune.
[list appended to by other WikiZen
- counterpoint below ... -- gh
Alas, alack. To be free to roam on the plains again.
A good Cowboy knows how to handle his pony. And knows a few things about roundin' up cows too. A good Cowboy is skilled.
Sadly this excellent name for a coder with excellent qualities has fallen into poor use. It's been conflated with one who would be a HackishRogue?
. A KludgeCoder?
, a brain that instead of firing on all cylinders gets foggy and fuzzy (and mixes metaphors to boot). Nope, a good CowboyCoder
is easy in the saddle. Smoothly expressing clarity of thought.
Let's reclaim this hero of our frontier past! Long live us CowBoysAndGirls?
! Let's dust off our hats and sit tall in the saddle.
Giddyup oh silicon pony!
The term "Cowboy" is these days used more likely for the prototypical dumb american hick instead of any ideal type. It has been in that use for ages.
Someone who has no idea about manners or established science but stumbles around with common sense that works and is essential on the range but falls way too short when dealing with matters strange to him. Matters such as civilisation where justice no longer means every man for themself and may the fastest gun win.
They are usually mostly oblivious to that condition and insist on not learning anything that doesn't fit into their old thinking of "dats my saddle, dats my horse and that's where I shot the last injun came snoopin *spit*".
You still need to deal with the RuggedIndividualist?
issues of the Cowboy. He'd rather strike out on his own than change to fit the society around him.
Right you are. But lonely coyotes sometimes do croon together. Still the best cowboying I done did was with one or two others. I think marketing grabbed onto this and called such HotGroups?. If the work gets done in the order needed, what's so wrong with that? -- EzraEpstein
This is a bunch of baloney. Real agrarian livestock handlers work always in pairs or small teams, never alone. They only used tried and true methods, and they "feared God"; their term for risk management. -- PhlIp
Indeed. Most of the Western mythology deals with lawmen, outlaws, and "injuns", with six-shooters a-blazing; not folks whose profession it is to drive/herd cows. Cattle drives generally make for boring narratives--it's long, hard, dusty work; with nary a shot fired.
Not to spoil the effect of identifying heinous coder personality traits, but I've known a cowboy or two (heck, I've even been
a cowboy or two). The "cowboy" you describe would certainly never have made it on any of the ranches of my acquaintance.
These seem to describe the gunslinger or cardsharp. The cowboys of my personal acquaintance were more aligned with XP practices (simplest thing, pairs, etc.). I understand that it's a common (often non-USA) perception that the cowboy is "rude" but I'd have to say mine have all been courteous to a fault.
I suppose we're stuck with the term, since it enjoys popular use, but I would certainly be inclined to hire a programmer whose resume included "worked for 5 years as a cowboy." So, don't be offended, all you cowboys out there. You cast a long shadow, so you're gonna be mis-characterized. You're welcome at my place. -- GarryHamilton
Indeed, "Cowboy" as it's used here has nothing to do with Cowboy as it's used to describe actual, breathing cowboy-hat- and huge-buckle- and skin-tight-bluejean-wearing cowboys that populate, at least, my region of Texas. Those cowboys are stereotyped more by their practice of partying Saturday night and showing up at First Baptist Sunday morning (in case you don't know, most Baptists say drinking is wrong) than they are by their rugged individualism. Heh. And yes, they're polite, and generally very outgoing and jovial.
Much to Terry Redlin's dissappointment, the term Cowboy has probably lost its last bit of pop-culture nostalgia with Kid Rock's rap anthem [I wanna be a] "Cowboy". Kid Rock's individualistic lyrics ring closer to this CowboyCoder
. Cowboy 1 is not Cowboy 2 is not Cowboy 3. -- DeanGoodmanson
I've been tempted to cover a CowboyCoder
's desk in these on April Fool's day:
I have also found a sense of accomplishment (for the sake of it) in the cowboy programmer in me.
The cowboy gets his glory performing trickroping shows; he prides himself of doing tricks like few.
So...the cowboy programmer is for the glory moment, the ego-feeder flash that puts him above ignorant and poor sub-beings (in his view).
That is all that counts for him.
Quality, professionalism, accountability, communication, good design, etc., are bored things for him.
He is ever looking for the next opportunity to get his glory, no more.
For me eXtreme Programming values, principles and practices represent an anti-thesis of such a mindset