Home > Real Life > Indulge me for a moment

Indulge me for a moment

Via Slashdot, an article was brought to my attention which asks the question: “How do you recognise a good programmer?”

This struck a bit of a nerve with me because I’ve never really been tested. I have a relatively high regard for my programming skills, but I’ve never actually had any of my code reviewed, nor had the merit of my ability land me a job. On the other hand, I got an “A” in each of my Computer Science classes in High School, and I’m already far ahead of the curve in my current class. But as I say, these things are hard to tell. Thusly did I press on, attempting to whittle from this article whether these criteria fit me.

#1 : Passion
I believe that good developers are always passionate about programming. Good developers would do some programming even if they weren’t being paid for it. Good programmers will have a tendency to talk your ear off about some technical detail of what they’re working on (but while clearly believing, sincerely, that what they’re talking about is really worth talking about). Can you get this guy to excitedly chat up a technology that he’s using, for a whole half hour, without losing steam? Then you might be onto a winner.

This is actually something of a two-pronged point. The first article is that a good programmer programs even if they’re not being paid for it. Given that I’ve only in the last few months begun to be paid for writing code, but I’ve been coding for some years (extra-curricularly), I think this is a slam-dunk. The 60 kilobyte folder titled “Python Stuff” with a few years of accumulated coding snippets on my computer agrees.

The notion of rambling on about a technology without losing steam is something I certainly can do — I caught myself doing it just this Sunday. But that is not merely restricted to technology. It is, however, something that comes very easily to me. Take that as you will.

#2 : Self-teaching and love of learning
If you’re thinking of hiring someone as a programmer, and he ever utters the words “I can work with that, just send me on a training course for a week and I’ll be good at it”, don’t hire that guy. A good programmer doesn’t need a training course to learn a new technology. In fact, the great programmer will be the one talking your ear off about a new technology that you haven’t even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if it’s a technology he doesn’t know how to use yet.

Given that my entire knowledge of my beloved Python programming language is self-taught, I can say this one fits quite ably as well. As my father pointed out yesterday, I did actually learn Python after being tipped off by him. He actually mentioned Python in connection with something Eric Raymond said, stating,

If you don’t know any computer languages, I recommend starting with Python. It is cleanly designed, well documented, and relatively kind to beginners. Despite being a good first language, it is not just a toy; it is very powerful and flexible and well suited for large projects.

Using free tutorials and, later, real dead-tree books, I took up the language with an internal zeal that surely qualifies. The love of learning was also manifest here, although it can also be seen in my far-reaching knowledge of all kinds of random stuff that I learned because doing so was, well, fun.

#3 : Intelligence
Good programmers aren’t dumb. Ever. In fact, good programmers are usually amongst the smartest people you know. Many of them will actually have pretty good social skills too. The cliché of the programmer who’s incapable of having a conversation is just that – a cliché. This doesn’t mean that they’ll all feel comfortable in every social context. But it does mean that if the context is comfortable and non-threatening enough, you’ll be able to have as great a conversation with them as you would with the most “socially enabled” people (perhaps better, since most good programmers I know like their conversation to revolve around actually useful topics, rather than just inane banter).

The emphasis here is mine, because I concur strongly with this. I have always struggled with this notion of small-talk, discussing things just to discuss them. I will always honor a good-natured inquiry into personal status, but any attempt to discuss ephemera like sports or — perish the thought — the weather will likely be met with terseness and laconicity.

The main thrust of this was, however, intelligence. Well, there’s not much I can say here that isn’t forth-right bragging. I got a 1460 on my SAT, for whatever that was worth. Above and beyond that, I can back this up only by offering to take the derivative of my word-per-minute, or prognosticating on the various ramifications of the EFF’s latest movement against the RIAA.

#4 : Hidden experience
I strongly believe that most good programmers will have a hidden iceberg or two like this that doesn’t appear on their CV or profile. Something they think isn’t really relevant, because it’s not “proper experience”, but which actually represents an awesome accomplishment. A good question to ask a potential “good programmer” in an interview would be “can you tell me about a personal project – even or especially one that’s completely irrelevant – that you did in your spare time, and that’s not on your CV?”

That folder of “Python Stuff” I mentioned earlier is probably the best indicator of this. Just browsing it, I find that I’ve got little code snippets for things like the Sieve of Eratosthenes, working with Mersenne primes, and a little program that asks “Does the verb phrase have its own subject?” If the user replies “yes”, the program responds “The word group is a clause, not a phrase.” and if the user replies “no”, then the program prints — I am not making this up — “bummer dude”.

I could also mention all the work I’ve done over at Project Euler, which ended up using some Python libraries that I had already coded up for just such an eventuality. My crowning achievement, though, is probably the program I wrote for the TI-83 that simplifies radicals. The trick is that, after I finished it, I realized it would be way more efficient using a list of primes instead of just iterating through each real number. So, naturally, I coded up a version of the Sieve for TI BASIC. The inter-operatory elegance present there is still impressive to me.

#5 : Variety of technologies
This one’s pretty simple. Because of the love of learning and toying with new technologies that comes with the package of being a “good programmer”, it’s inevitable that any “good programmer” over the age of 22 will be fluent in a dozen different technologies. They can’t help it. Learning a new technology is one of the most fun things a programmer with any passion can do. So they’ll do it all the time, and accumulate a portfolio of things they’ve “played around with”. They may not be experts at all of them, but all decent programmers will be fluent in a large inventory of unrelated technologies.

The fact that, on a daily basis, I go between working in Windows & Kubuntu Linux and coding in Java & Python, as well as my dabblings in HTML & CSS proves this point as best I can. This one is a little nebulous simply because knowing a little about a lot isn’t something you can easily distill. Sure, I can program a VCR or do some audio engineering, but I was only able to pull those out of the air by staring off in to space and trying to think of random things that I wouldn’t even put on a resume.

#6 : Formal qualifications
This is more a of non-indicator than a counter-indicator. The key point to outline here is that formal qualifications don’t mean squat when you’re trying to recognise a good programmer. Many good programmers will have a degree in Computer Science. Many won’t. If you’re hiring for a small business, or you need really smart developers for a crack team that will implement agile development in your enterprise, you should disregard most formal qualifications as noise. They really don’t tell you very much about whether the programmer is good. As a final note to this, in my experience most average or poor programmers start programming at university, for their Computer Science course. Most good programmers started programming long before, and the degree was just a natural continuation of their hobby. If your potential programmer didn’t do any programming before university, and all his experience starts when she got her first job, she’s probably not a good programmer.

There’s really not much to add to this, as the previous discussion has well established that this doesn’t really apply. I learned to program and used that to get my first technology job, not learned programming to keep my job. I have no illusions that what I learn in college will only be a portion of what I will need to know to write good software, but that’s why I plan to keep working and learning — in and out of the office.

So, I fit the bill, it seems. I’ve got a ton of writing about how I am a good programmer, and it seems right. That just leaves one thing left to do: put my money where my keyboard is and make some good code. At the risk of sounding like further procrastination, as soon as I get my laptop back from Gateway’s Repair Dungeon, I think I’ll start using it to put together Futility Forever, an updated version of Futility, the Space Invaders clone that can never be won. This ought to be good.

Ooh, and while I’m at it, I can tinker around with and learn Google Code

Categories: Real Life
  1. No comments yet.
  1. January 14, 2008 at 12:32 pm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: