Life as a Duct-Tape/Cowboy Programmeressays/life_as_a_programmer.pdfprocedures, and giving a fancy...

8
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

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!”