Programmer Competency (Part 3)
August 19, 2009 § Leave a comment
Alright, I know I’ve had a bunch of posts on this lately, but self-reflection isn’t usually a bad thing (unless it prevents you from getting anything done, anyway), it interests me, and I seem to have come across a lot of good articles on the subject recently, so we’ll carry on with the theme.
I find that one of the best benchmarks for measuring your competency is to look at people that having proven their competency already. In this article on stifflog.com, several notable developers, including Dave Thomas (I’ve posted links here and here to the pragmatic programmers magazine), Steve Yegge, who really impressed me with this lecture he did last year regarding dynamic languages , and Bjarne Stroustrup (if you don’t know who he is, just stop reading now), answered a series of ten questions, with some answers that you’d expect, and some that you wouldn’t.
I wasn’t surprised that most of these developers were largely self-taught. Most really great developers seem to have a natural talent for it that makes it easy for them to pick up technologies on their own. This more than anything else is the thing that I think separates great developers from merely good developers – the ability to quickly learn and apply new technologies. I’ve posted before about the lack of practical knowledge a college degree imparts on most developers.
Steve Yegge, in response to the question of “What is the most important skill for a programmer?” had this to say:
Written and verbal communication skills. You’ll never make it very far as a programmer in any field unless you can get your ideas across to people effectively. Programmers should read voraciously, practice writing, take writing courses, and even practice at public speaking.
This is something that is overlooked by so many developers, I think. The ability to speak well, to write well, to effectively communicate and express your ideas and opinions is something that is indispensable, or at least should be. Articles like this one that have to spell out how to communicate with developers are unfortunately necessary because so many developers don’t understand how to effectively communicate with the business, their customers, and their coworkers.
Steve Yegge (I’m quoting him a lot, but hey – he’s smart!), in response to the question of “What is your favorite programming language?” had this to say:
I don’t have a favorite; I think they all suck. I tend to prefer Java because it’s a strong, portable platform with good tools and good libraries. But the Java language will evolve or die; it’s not good enough as-is to hold the lead indefinitely.
I found this pretty interesting, too. It reminds me of this article on lbrandy.com in which Louis Brandy talks about the process of going from hating a language, to loving it, and back to hating it. I can certainly sympathize with this. Oftentimes, the “rightness” of a solution can be inferred from its elegance and beauty. It’s frustrating when you have a problem that is very difficult to elegantly solve with the language that you are using. In fact, a strong case can be made that even design patterns are nothing more than a failing of your language. Jeff Atwood has written about this before on codinghorror.com.
There’s lots more good stuff in that interview, I’d certainly recommend reading it.
I think that this hasemanonmobile.com post sums it up succinctly, though. Really, the only two things that you need to be a good developer are communication and adaptability.
With that, maybe I’ll stop with the programmer competency articles – for a while, anyway.