I’m good at some things. I’m bad at some things.
I was looking through the *nix spellbook and – quite by accident – stumbled across the Programmer Competency Matrix. Again. I’ve seen it before on Hacker News (here, here, here, here, here and here, too), but today I actually took the time to read through the matrix and mentally quantify my abilities.
Because I like applying arbitrary opinions to my skill set and abilities.
Objectively, of course.
For a developer not formally educated in Computer Science, I did pretty okay. This comes largely, I suspect, from my dedication to constant learning and my passion for technology. And it’s not that this matrix identifies every single strength or weakness of a developer, but it’s an interesting identification mechanism nonetheless.
Recognizing where we’re weak will help us identify areas for improvement.
For example, according to the matrix my weakest area centers around algorithms. As an illustration, I understand the concepts behind Dynamic Programming, but I don’t yet possess the education to formalize the method. A degree is most assuredly in my future, and I’m excited to learn the math behind the science (among other things).
Early on, I wanted to dive right in to the experience of my chosen profession, gaining education while I worked. Dedicating myself to learning various technologies has always been an important aspect of my personality, but the decision to forego education for experience had far-reaching consequences. It was the right decision for me at the time, but I don’t necessarily recommend this path to everyone.
Indeed, after working in the industry for close to fifteen years and looking back on what I knew, what I thought I knew and what I learned I didn’t know, I can unabashedly state that – to be a truly competent programmer – a formal education isn’t strictly necessary, but it would be really, really helpful.
So here’s my wisdom: Irrespective of everything else, the one class I’d recommend every new developer take early in their career would be an Introduction to Algorithms course. Maybe even compiler theory. Even before looking at the matrix, I could have identified algorithms as the single biggest source of my programming weakness. Practical application of algorithms in my every day career has solidified my ability to use the appropriate algorithm for a given task, but it came at the cost: I had to work harder, not smarter in some cases. I had to read more books, more web pages than I may have needed otherwise.
Basically, I had to learn the hard way!
So don’t do it my way. Don’t learn the hard way. Education and experience go hand in hand, but make sure you do it in the right order.
And never be afraid to go back and learn!
Some people have 10 years of experience. Others have 1 year of experience 10 times.–