SITE HIT COUNT: 247,765
• This page was last updated on Tue, Nov.26.2013 @03:20 PM •
Life AS — a Cowboy ProgrammerRead PDF Version
ON Wednesday, September 23rd 2009 or thereabouts, ace programmer Joel Spolsky yet again published one of his trade-mark blog articles and he (or some kind of a robotized, software-abstracted, version-controlled clone of him) immediately alerted me of the new blog entry via my e-mail box. The piece subsequently became a subject of very
interesting heated debates in programming circles around world; precipitating the spawning of dozens, perhaps scores, of new flame war threads all over. In the article which was titled "The Duct Tape Programmer", Joel Spolsky tells us in the first few paragraphs why he loves duct-tape programmers:
Here is why I like duct tape programmers. Sometimes, you're on a team, and you're busy banging out the code, and somebody comes up to your desk, coffee mug in hand, and starts rattling on about how if you use multi-threaded COM apartments, your app will be 34% sparklier, and it's not even that hard, because he's written a bunch of templates, and all you have to do is multiply-inherit from 17 of his templates, each taking an average of 4 arguments, and you barely even have to write the body of the function. It's just a gigantic list of multiple-inheritance from different classes and hey, presto, multi-apartment threaded COM. And your eyes are swimming, and you have no friggin' idea what this frigtard is talking about, but he just won't go away, and even if he does go away, he's just going back into his office to write more of his clever classes constructed entirely from multiple inheritance from templates, without a single implementation body at all, and it's going to crash like crazy and you're going to get paged at night to come in and try to figure it out because he'll be at some goddamn "Design Patterns" meetup.Download or Open PDF Version »
And the duct-tape programmer is not afraid to say, "multiple inheritance sucks. Stop it. Just stop."
And now I come into the picture. I am a programmer. A cowboy programmer. Maybe a duct-tape programmer, too. I have been one since 2003 I think; though the floundering journey actually began way back in 1999 at Kwara State Polytechnic, Ilorin, Nigeria.
To be a programmer (just a programmer), you could simply read a few HTML tutorials online, become conversant with creating a few static pages with lots of annoying scrolling marquees, distracting flash animations and photos of yourself fondling (or being fondled by) your girlfriend/boyfriend at an all-night
party debauchery somewhere in Sin City.
As an average programmer, most of your skills involve knowing how to copy codes from other people's stuff and pasting it into your own GUI development IDE and then changing the appearances of some objects, changing the names of a few variables or procedures, and giving a fancy name to the entire application or whatever it is that you are trying to clone. Occasionally, you could have some "cool" Java scripts displaying irritating copyright alerts every time viewers of your blase HTML pages right-click on the page in an attempt to view your precious source codes! If you are a bit (just a little bit) creative than the average copy-and-paste programmer however, you could go on yet to show how uncommonly good a dumb programmer you are by adding a "brilliant" clock or calendar applet, which unsolicitously advertises the system time or date somewhere on the left or right pane of your page, wasting some 40% or so of precious screen real estate.
Truly, you can consider yourself a "programmer" if you are among the plenty of people who consider copy-paste in visual studio to be "code reuse". And no, you wouldn't be laughed at because we know you have never been shown what OO or even really decent procedural code looks like. We won't giggle at all, since we know that you are a quick-witted, uncommonly brilliant, self-taught
That is just about what it takes for you to be able to wave a coloured CV and brag that you are a "great" programmer these days. Very frequently, too, you discover that you could have an edge and stand out from the swirling mass of programming mediocrity by getting a professional certification in .NET or ORACLE or indeed any of the reigning fads that catches your or your prospective employer's fancy.Download or Open PDF Version »
I am a programmer. And a good one at that? I'm sorry I can't tell. Great? Ahem..., I truly don't know. Certified? I'd rather murder an infant in its cradle than nurse any desire for certification! My take on this is that programmers who know their onions don't need to cover their walls with certificates, plaques and awards to validate their competence or professionalism.
I write code. And I write code because I can. And as you might as well have heard elsewhere: those who can write code, write; while those who can't, get
certification professional certification (presumably, so as to cover up their incompetence).
I think I am a duct-tape programmer. I don't know if that makes me a good programmer; but it does make me realize that to be a successful programmer (I mean not a good one, I mean not a great one, I mean not a professional one, I mean not whatever-other-qualifier one but a successful one), you have to know your onions. And knowing your onions as a duct-tape programmer means that you have to be able and willing at all times to take whatever you have, wherever you are, and do everything that needs doing to deliver high-quality and functionally precise code at all times. Compromises or excuses are for losers (read: "certified professionals"), not for duct-tape programmers. This is your ruling rule of engagement.
And now Joel must come to my aid once again:
Jamie Zawinski is what I would call a duct-tape programmer. And I say that with a great deal of respect. He is the kind of programmer who is hard at work building the future, and making useful things so that people can do stuff. He is the guy you want on your team building go-carts, because he has two favorite tools: duct tape and WD-40. And he will wield them elegantly even as your go-cart is careening down the hill at a mile a minute. This will happen while other programmers are still at the starting line arguing over whether to use titanium or some kind of space-age composite material that Boeing is using in the 787 Dreamliner.
As a duct-tape programmer, it doesn't matter so much what tools you are using to build your codes. Much less what new frameworks or paradigms the Big Boys are busy hyping and promoting in the clueless media and at global talkshops and conferences. You don't catch cold if Microsoft decides to retire support for VB6 when you have just started getting to terms with VB5 only last week (after so many years with, say, flat-file PASCAL or formidable FORTRAN-77 or verbose COBOL); neither does it matter to you much if Sun decides that their flagship Java coffee will henceforth be served with some beany Beans or glassy Fish rather than with creamy Milk (all are protein-rich anyway, and the only thing that really matters to you is chewing enough protein-rich stuff that will help you build tough programming thews and sinews).
I am a duct-tape programmer surely not to the great skill levels of the Joel Spolskys and the Jamie Zawinskis; but I am a duct-tape programmer in the sense that when I want to write an OS and the only tool I've got is that bad, old rusty QBasic, I don't howl like a dog or grunt like a pig or give up faith and curse Bill Gates and die. Instead, I just write my OS with my lame and creaky and weak QBasic and I write it so well. Yes, I have once written an OS that was wacky and sneaky and brute, but it really ran and flew like an eagle with one broken wing. Not only that, I wrote it so well that I won a national award for it!
PS: Never mind if you've never heard about my OS. It was never meant to be a commercial product in the first place, so I never shipped it (at 50%-good as Joel & Co would advise) hence it never hit the markets with a Big Bang! But you can read about the story of my award-winning OS here.
Believe me, any duct-tape programmer who knows his or her onions good enough can turn insipid water into vintage wine. You only need to know the right incantations, and not bother so much about "the right language!" Agreed, it is good and cool to have good (and cool and powerful and modern and bloated and hyped) development tools to work with, but that is hardly a primary requirement for any duct-tape programmer who knows his or her onions.Download or Open PDF Version »
And then there is the cowboy side of being a programmer, too! Cowboys have an independent (and sometimes reckless) character, they are lonesome, they take risks, they solve problems on-the-fly using whatever is available, they are heroic and generally do things their own way.
A cowboy programmer is a someone who is a talented and resourceful programmer; knows that s/he is a talented and resourceful programmer; and will try to let everyone around him/her know that s/he is a talented and resourceful programmer. S/he prefers to (or actually has no choice but to) work in isolation; sets his or her own rules and schedules; creates ad-hoc solutions to problems based on his or her personal experience and knowledge base; and will not hesitate to dive straight into a problem without following a formal approach. A cowboy programmer will gallop off on his/her own on the spur of the moment and s/he will deftly "shoot from the hip" whenever the situation demands!
A cowboy programmer will generally not enjoy working in an overly formalized environment where everything is pre-determined, pre-planned, team-oriented and long-term. Process can (and sure does) hold them back. Part of being a cowboy programmer is having the freedom to ride out there in the wide open spaces, anyway you want, as long as the job gets done, and done quickly + correctly. If you stick a cowboy in a suit, in an office, with rules and procedures, he is not going to like it. In like manner, a cowboy programmer never lets bureaucracy, especially in the form of incompetent, pointy-haired bosses who stand in the way! Cowboy programmers need to be creative and inventive and feel the thrills of coding without any safety nets. They love to live dangerously under the pressure of (frequently impossible) milestones and schedules; they can surf the bleeding edge of technology and they are mavericks, too.
To the cowboy programmer, speed is life; hence the ability to put together enormous amounts of code to actually do something is a greatly prized skill. You may do yourself a lot of good, however, if you do not expect to find such code to be easily maintainable, learnable or standard-compliant. The solution works, it works correctly, and your sharp-shooting cowboy programmer spewed it out fast! That is what matters.
Not having much time for family, and accepting any challenge because that is the job, is what breeds machismo for the cowboy programmer. Of course, a cowboy programmer's machismo has little to do with physical exploits. Rather, it is a question of great programming feats accomplished over long hours under great stress.
Cowboy programming has a lot of negative connotations to it, too. Among others, a cowboy programmer is someone who "knows it all" in a supercilious sort of way; someone who is prone to always tell you "the answer is threading, now what is the question?" (you can substitute any number of keywords for "threading"). A bad cowboy programmer would lock himself or herself away for days and will produce a mess of buggy and unreadable code.
But there are good, and even great, cowboy programmers. A good cowboy programmer can quickly analyse a problem and create an appropriate solution without going through the steps of a formal methodology. S/he would not compromise quality for ego; s/he always likes to tackle challenging tasks and provide useful solutions or products. A good cowboy programmer would always want to objectively understand why things work and why they fail; and s/he would not hesitate to join a good team to work on a project or grapple with one alone for as long as it takes.
Download or Open PDF Version »
And now I'm back into the picture. I am a programmer. In many ways a cowboy programmer and in many ways a duct-tape programmer, too. I aspire to succeed excellently at my calling, and there are attitudes I had come to understand as crucial for anyone who wishes to succeed as a non-trivial duct-tape/cowboy programmer. To be a successful duct-tape/cowboy programmer, your primary "secret weapon" is that you habitually write high-quality code. And you habitually write high-quality code. Compulsive diligence will almost be enough. But not quite. You have to have an insatiable appetite for always seeing everything in your life (but not necessarily in your girlfriend's/boyfriend's life) as another prime construct waiting to be modeled into high-quality code that works!
You need to be an avowed code smith: an adept artificer of
initially leaky encapsulated abstractions; a visionary designer of extensible classes; a resourceful crafter of polymorphic interfaces for those classes and their hidden implementations.
Being a successful duct-tape/cowboy programmer requires you to have a continuous streak of ingenuity: you have to love fabricating and spewing out code from the guts of your polymathic competence pool all the time. It requires you to have a penchant for gluttony: you have to love chewing code, not minding whether it involves bitter Java, crunchy HTML-cum-CSS, doughy C#, splashy Visual Basic or tantalizing PHP. And it requires you to also have some really grand delusions of invincibility about yourself: you have to love doing things as if you are in absolute command and control, and it is impossible to fail.
In short, you must believe that what you are doing is the single most important thing in the world. And you must hold on to this illusion even when you know it is not true. This puts you roughly in the same stead as John Steinbeck's description of a (great) writer.Download or Open PDF Version »
Extreme mental exertion is a constant experience too, almost a given. Over time, you'll see yourself scrutinizing, dry-running and interpreting tens of thousands (perhaps millions) of lines of codes written by others who are above or at par with you. You must also not under-estimate those who are apparently "apprentices" directly or indirectly under you. You must always be ready to read and get addle-pated by their codes, too. You read everything with grinding envy or with weary disdain.
You love most those who are succinct, expressive and modular with their codes. These are the sort of guys that would, while you sleep, toil all night to ensure that your servers never suffer any Stack OverFlow when their codes run on your infrastructure. On the other hand, you save the most loathing for those who conceal ineptitude with long-winded logic, convoluted spaghetti code blocks, arcane function names and no clear sense of organized structure, hierarchy or scope. These sort of programmers occupy the deepest pits of hell in the realm of Coding Horror even before they die!
But you must regularly chew an assortment of other peoples' good, bad or poisonous codes anyway even as you chew yours; and your mental exertion hasn't even began yet.Download or Open PDF Version »
Eventually though, you would come to a point when you would have reason to believe that you've finally got the hang of what those codes are all about. Then you could give your brain a break by firing on your computer(s) to let them help you do the final code inspections and validations. And while the machines are coming up, you could light up that marijuana pot given to you as a parthian shot by your Rasta friend from Jamaica while you were finishing school. Once the computers come up, you could start smoke-testing the codes (the ones you write and the ones written by others) with the help of an appropriate compiler or a good debugger. You smoke-test the codes while you smoke your Jamaican weed; and you could also strip off completely and dance naked with the gods of mental torture when you start stress-testing those codes.
One, two or three nights through will be almost enough to give you the hang of it all; but the hang-over
might will definitely leave you dazed for months to come. Probably for the rest of your career as a duct-tape/cowboy programmer.
And there is upward of an 80% possibility that you could actually become a saint of sorts along the line. Not in the sense of the 8th, 12th, 15th, or umpteenth centuries when people who gave up their wealth, comfort, families, friends and businesses and retired into hermitic seclusions were regarded as holy monks or saints. That is not exactly your own sort of sainthood as a duct-tape/cowboy programmer.
To become an apotheosized duct-tape/cowboy programmer means that you must be ready to save your soul for the more bizarre experience of transmogrifying your life from that of a normal human to that of a junk-food-eating, bleary-eyed, girlfriendless/boyfriendless, slouch-shouldered loner. I had been without a normal girlfriend for ages and I don't seem to need any. But not in the usual social sense (mind you, I am not anaphroditous).
For the most part since 2003 or earlier, I have been living off fast junk foods and sugarful fizzy
drinks poisons; and I can't tell how many polythene-bag loads of those sh*t things I have been consuming... [But hey, I am digressing!]
I was talking about the price you pay for your social life as a duct-tape/cowboy programmer striving for success: junk-food-eating, bleary-eyed, girlfriendless/boyfriendless, slouch-shouldered loner. In particular, the girlfriendless/boyfriendless aspect could be very interesting. Your life is not completely devoid of them as such. They actually come and go; and it can be fun to have them I think -- if only for the purpose of
stress management sensual gratifications. At first they really love you for your rather queer lifestyle, for your rather unconventional but almost pluperfect problem solving skills money-spinning ideas. Then the capitalist in them manifests like a deceptive GUI skin and they quickly want to entrench themselves in your life as sole administrator not of your unforgiving aches and pains but of your hard-earned coins.
But you don't just play ball and they quickly become cold, naggy and disagreeable. Why? Because rather than buy them an expensive dress or take them out to dinners/parties/holidays at the most expensive spots on the planet, you'd rather happily "waste" your fortunes on such timeless tomes as The Pragmatic Programmer: From Journeyman to Master (Andrew Hunt and David Thomas, 1999) or Extreme Programming Explained: Embrace Change (Kent Beck, 2000) or Steve McConnell's incomparable Code Complete (2004). Realizing that you are not going to easily allow them reap where they have not sown, they zoom out and vanish from your life almost as suddenly as they crashed in, presumably in search of partners who are not as monomaniacal about programming and who would love to spend generously on/for them.
It's a "pleasant agony" kind of fun being a programmer. Being a duct-tape/cowboy programmer, that is. It is intensely educational and personally gratifying, the headaches and sacrifices not withstanding. And to succeed at it requires discipline and a compulsive kind of unrelenting passion, diligence, stick-to-it-iveness... you know, an uncompromising attitude of rest-if-you-must-but-don't-quit. Of course, these are attributes that help you become a successful programmer. They don't necessarily guarantee your success. Not so fast!
As a duct-tape/cowboy programmer, you must necessarily learn to be a serial programmer, perhaps with the same (or preferably, a higher) degree of passion as a psychopathic serial killer. As a duct-tape/cowboy programmer, you could be reasonable or logical and you could be unreasonable and illogical; but it is almost a given that you will constantly live with the delusion of your greatness. You will, even against all reason and evidence, always want to believe that the world would experience a catastrophic loss if you do not complete your codes. This grand, Leonardian delusion not withstanding however, it is better for you to simply create codes that work and work efficiently all the time. It is also necessary for you to live purposely having done so; with or without an unhelpful boyfriend, girlfriend or whatever fed-up friend you choose to have or not to have.
What matters to you all the time as a duct-tape/cowboy programmer is just you and your schizophrenically skewed life. What matters to you minute-by-minute, hour-by-hour, day-by-day and night-by-night as a duct-tape/cowboy programmer is just your penniless, goodsleepless, goodfoodless, goodbathless, girlfriendless, boyfriendless, partyless, dishwasherless, dateless, timeless... zerorized black hole of a life!
Enjoy More By Going To My »Essays Home Page«