Life as a Duct-Tape/Cowboy Programmeressays/life_as_a_programmer.pdfprocedures, and giving a fancy...
Transcript of Life as a Duct-Tape/Cowboy Programmeressays/life_as_a_programmer.pdfprocedures, and giving a fancy...
Life as a 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!”
http://www.auwalgene.com
M-Auwal Gene III @Hanwa, Zaria – Nigeria
Friday, April 30, 2010
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 2
Life as a Duct-Tape/Cowboy Programmer • Written on Friday, April 30, 2010 at Hanwa, Zaria - Nigeria •
n 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"
[http://www.joelonsoftware.com/items/2009/09/23.html] , 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.
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 a 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 blasé 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
O
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 3
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 programmer accounting or economics
graduate whose training must have included "Teach Yourself HTML/JavaScript in 21
Days" or maybe a few weekend computer appreciation classes at the local community
college. (And despite your "training", we can see that you probably think that javascript
is a real programming language and you still struggle with HTML.)
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.
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
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 4
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 at http://www.auwalgene.com/memoirs/2004
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.
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.
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 5
A cowboy programmer is 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 Texas cowboy (or
a Fulani/Bororo 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
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 6
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.
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 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.
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
systems never suffer any Stack OverFlow [http://www.stackoverflow.com] when you run
their codes. 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
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 7
programmers occupy the deepest pits of hell in the realm of Coding Horror
[http://www.codinghorror.com] 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.
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
(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
M-Auwal Gene III (2010): Life as a Duct-Tape/Cowboy Programmer
Downloaded from M-Auwal Gene III’s Website: http://www.auwalgene.com/programming/programmer.html 8
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!
“black holes are where God divided by zero!”