June 27th, 2008

Knowing Better

Posted by The Monkey in Technical

So I’ve been burrowing through the archives at Jeff Atwood’s Blog because much of what I happen to have read on there has been insightful and well written. I’ve been trying to get myself a context as a coder for some time now. I have a formal master’s level qualification in IS and five years industry experience, I’m usually regarded as an asset at least or at best someone who can “do the work in half the time with better results”. Yet whenever I’ve been looking at a coding position on the job market, particularly one that’s more explicitly “techie” I have never made the grade.

When someone who doesn’t “know any better” hires me I’m a gem, no one who does “know any better” will touch me with a bargepole. For years I’ve been puzzled by this and, as you can imagine, quite frustrated. When you know you’ve got a lot to offer but a third party indicator of dubious merit locks you out of the running it’s a bad place to be.

The entries Getting the Interview Phone Screen Right and Why Can’t Programmers.. Program? and their comment tracks got to the heart of these issues for me and I’m grateful to Atwood for making his blog such a discussion space if for nothing else.

The conclusion I came to, and I’m going to put it into an extremity so as to distinguish it from the “accepted wisdom” that seems to circulate in the market at large, is that not only is the infomation sphere growing at a rate beyond human comprehension but the world of people who maintain and add to it is changing so fast the participants have lost sight of the wood because of all the damn trees.

Way back when I graduated drama school I hadn’t used much more than a word processor my entire life. Oh, yes, I had managed to type LOAD “” on a Spectrum and a C64 to load games from tape decks. To me I was a drama enthusiast and writer who now had to carve out a niche for himself in the world. Quite by accident I got a job at a telecommunications company and within 6 months had a pretty sound grasp of the basic principles of digital telecommunications. There was a guy there, I believe his name was Phil, he was the head of IT support, a genuine programmer, who had a lot of time for me and let me beta test widgets he was writing for the use of the Customer Services personnel because as far as he was concerned I was the only one who wasn’t a muppet.

Over time it became apparent to me that I had some kind of aptitude for computers, one that had been hitherto untapped. I wasn’t a hobbyist programmer, that well had been poisoned for me by experiences at 6 years old with a Sinclair ZX81 (try explaining precise syntax to a 6 year old who always left his lunch on the kitchen counter due to his head being in the clouds). Over years of trying to become a better writer I had learned discipline and that discipline had made me more able to tackle computing problems.

So I went back to university and I studied and I did well and I graduated. Then I worked for 2 years at a law firm being an in house web monkey. Then I left to advance my career. What a shock I was in for.

To this day I am boggled by the kinds of things hardcore computer nerds ask in job interviews. Stuff that only a hardcore computer hobbyist nutjob would retain in their thinking space on a permanent basis. Not that I’m saying there’s anything wrong with being a hardcore computer hobbyist nutjob I’m a hardcore writing hobbyist nutjob after all and it doesn’t do me any harm. But the headspace that all the syntax lives in on a “off the top of your head” area of the brain is taken up in my brain by stuff like “the six basic plots” and “the hero’s journey” and “the classic five act drama”. These are things I choose to remember because I’m passionate about them. If someone were to pay me money to use that knowledge I would be one happy bunny but the job market in that sector is sketchy at best I need food on the table and bills paid so I can continue to do my hobby in my spare time for free.

So I did something which seems to be computer professional heresy. I did something I wasn’t that crazy about but which I had an aptitude for to earn some money. Shock! Horror! I am not as passionate about code as many people who work in IS. I can get excited over something (I wrote a routine that centres text on a ticket and inserts a carriage return and centres two lines if the text is too long… heady stuff!) but a lot of what goes on I know what I’m doing but I’m not that captivated in the detail. It’s a job, I do it for money, that’s it.

Apparently this is wrong. Who knew? Reading the comments on “Why can’t programmer’s program?” was enough to indicate that my attitude to coding and that of the majority of professionals in the business are poles apart. People hunkered down in a variety of languages and wrote the fizzbuzz test FOR FUN! No, not my cup of tea, write a screenplay for fun, yes, code for fun, a bit, hardly, not as such.

After reading through this comment track I found myself left with the following information: coders want everyone who works with code to be as passionate about them and that coders get things wrong and believe they’ve done them right (read the post and comments for the full gory story although it helps if you have a passing knowledge of IS design to “get” the unintended hilarity in the situation).

The fact is I’m not one of these people. I do it not because I particularly want to but because it’s better than a poke in the eye with a sharp stick and I can. So, you may wonder, particularly if you are a “proper” coder, how can I put myself forward as a candidate in the field of IS if you aren’t passionate about it? Well, if I was, say, talking about molecular biology then this would be a valid point. Only an insane idiot would put themselves forward for a science job if they weren’t a very good scientist, or were a pretty good scientist but found actual science to be rather dull. This is because science jobs aren’t in huge global demand and they don’t pay that well and you have to be super into it to do them. IS jobs, on the other hand, are in huge global demand, can pay extremely well and there’s so many of them now that maybe they could pass over not that keen to get to capable.

It stands to reason. Only a certain number of people in the world can be super passionate about any one thing. In the case of writing the number of people who are super passionate about it seems to be much higher than the number required (I simplify but you get the point). In the case of IS there are more people needed to do the jobs than there are people who dream in code. The tipping point on this only came about 15 years ago (yes, we can all blame Bill Gates again) but now there are far more systems in need of maintenance than there are deeply committed IS professionals to fix them.

Enter the competent but not that bothered guy.

It’s not working for me because being adequate isn’t cutting it. Everyone wants to only hire and work next to coding superheroes. Well, other passionate coders anyway. They all want to be into the profession together. The only measures of success, happiness and ability that count are the ones that can be parsed by a code compiler. If you didn’t dream about that tricky widget that is supposed to apply a fibonaccian search to an array of randomly arranged orders for Cliff’s Notes you can’t cut it. You need to do your code kata and hit the code dojo to work out your loops and XML parsers. Real men code in the morning, afternoon, evening and aaaaaaaaall through the night. Hoo Yeah!

Er.

Look, I’m honestly not saying there’s anything wrong with enthusiasm, especially on informational topics because that would be hypocritical.

What I’m saying is that one way is not the only way. In fact being a “will code for money” kind of coder I’ve noticed I have some advantages over the coding enthusiast, to wit:

1) I am better at scoping: Enthusiastic coders don’t really have any understanding of what it’s like when a jumble of variables and logical loops and stuff just causes a sinking feeling in their stomachs. Or if it does cause such a feeling then I would imagine that it’s more like like the one I would get at the thought of rewriting The Ruins into a half decent story. Basically, there’s a kind of “can do” attitude about taking the long way round with some hopeless case because the thought of beating it is too attractive.

It might take me less time to write a different story to The Ruins that accomplishes the same broad objectives but I would want to know if I could “beat” the original author and make a silk purse out of a sow’s ear. If I was being paid to write in a pressured environment my boss may not be happy that I am essentially taking the longer route for my own vanity but the advantage of being a coder is that your boss probably doesn’t know that.

2) I am great at Keeping It Simple: It occurred to me reading these comment tracks that my head was asploding long before the hardcore coders whilst reading through some of the raw source code. Not because I couldn’t follow it but more because I could feel myself edging closer to death as I parsed it in my head. I even do this with code I wrote a while back. In order to avoid brushes with the finger of mortality I tend to refactor my code to be easy to follow and my algorithms take into account a simple fact of life: hideous messes are made from tiny incremental accumulations of complexity. I am the king of not going through a snarl but around it. It takes some doing, on every project I have to eat, sleep and breathe the business I’m working for to find all the places where the complexity can be reduced and it helps a great deal when the unavoidable complexity eventually rears its head.

3) I write well commented code: Because no code is simple enough to exist in a vacuum. So if I suddenly send a bunch of data through a method I explain what the method will do to the data in brief to reduce scroll wheel abuse on the mouse. I explain all my bizarre programming choices. I comment to contextualise. I usually have to comment up my code whilst I’m refactoring because that’s the only time I start to think “what the hell was I doing when I wrote it like this?”

Now I’m absolutely not trying to suggest that my advantages make me better at everything than the extremely dedicated hardcore programmer. No. I’m merely saying that I’m better at what I’m better at than them. The fact is when I read The Noble Art of Maintenance Programming my heart sang. That’s it. That’s what I am. I am a maintenance programmer. Leave the lofty ideas and the big implementations to the superstars, I like to fix the untidy bits. If you think there’s not a 24/7 job for a maintenance programmer in any given IS organisation then you’re entirely wrong. There’s just so much code in the world now.

The bottom line is this. There’s so much code in this world that it can’t all be managed purely by superstars. IS already has a hidden underground of people who go round mopping up after the superstars. These people may only be programming because they can, not because they want to. They can’t be tested for like you can test for a superstar. They aren’t the most exciting people to recruit. But they’re necessary, they do the job the superstar is too busy being a superstar to do. They take on board minor development projects when requirements change. They fix bugs, sure, but they also expand systems and make them do more. They understand that any stable enterprise level environment is already filled with enough complexity. They don’t want to set the world on fire.

They just want to get paid and go home.

And that’s who I am. Hopefully one day I’ll get some recognition as that thing.

June 6th, 2008

Hurtling To A Stop

Posted by The Monkey in Technical

So I decided after a jolly session building my titchy forms app at work to bust out my Visual C# Express and spend some time beefing up the main form. This is like a brain holiday for a developer. Basically I was trying to free wheel as many bits and bobs on to the form as possible maybe as a prelude to some brainstorming.

One of the things foremost in my mind was building up a beefy menu and toolstrip for the app. I felt that I would find myself in a much better position if I had all these cool things to look at and wire up and make work. One of my primary motivators was that there is an awesome library of standard icons squirrelled away in the last release of proper Visual Studio. Once you’ve put your own “open”, “save” and “new” buttons on the toolstrip you really feel like you’ve got to get some work done.

So I go looking for my little library of images in C# Express and find that, well, it doesn’t exist, and not only that but no one else on the net seems to have felt the lack.

Maybe I am just being stupidly fussy but what’s the point in making these IDEs so user friendly and giving you this freedom to just throw things onto your form if when you come to put the bells and whistles on the accoutrements are just plain lacking?

I am actually now feeling so resentful towards the whole thing I’m just going to slope off and do something entirely different instead. I will put the image library on my key drive on Monday and next week the toolstrip and menubar will look as I wish. This is one of the things I hate about development, everything seems to be an uphill battle.