Live data from Hacker News

Ask HN: How can I self-evaluate my programming skills?

news.ycombinator.com

1–10 of 45 posts

Ask HN: How can I self-evaluate my programming skills?

#1
I set out on a mission to improve my programming skills in general, and my first step is to not only find out where I stand, but where I need to improve.

One thing I saw was the [Programmer Competency Matrix](http://www.starling-software.com/employment/programmer-competency-matrix.html) which looked like a really good idea to me, but a few things stuck out as awkward to me, or perhaps dated.

My question is: How should I be evaluating myself? How often? How should I decide what to work on? Does my ability relative to others matter, and if so, how do I know what it is?

---

For anyone interested, I [wrote down]( http://cowbelljs.blogspot.com/2012/01/programmer-competency-matrix.html) where I felt I was for each level, this is my present bench-marking approach.

Re: Ask HN: How can I self-evaluate my programming skills?

#3
Not sure if that approach is useful. Wouldn't it be better to build something and note where you struggle the most along the way?

I currently face a similar problem, as I want to pick up playing the guitar again. How to get into deliberate practice mode? I consider just going through a book step by step. On the other hand, as my real goal is songwriting, perhaps it would be better to just start writing songs and try to learn what I need along the way (presumably by copying elements from music I like, that is, trying to figure out how to achieve certain effects).

I have also considered to just check out random guitar lesson videos on you tube. Perhaps that way I could pick up new techniques and then see what I can create by employing them.

Re: Ask HN: How can I self-evaluate my programming skills?

#4
I'm surprised that you feel you were able to measure something accurately with that list. I feel like it's very vague, and I don't have a clue how good I actually am for many of the important things like "problem decomposition", "systems decomposition", "communication", "code readability", et al. I'm sure there are probably people who would consider themselves "level 3" that I would scoff at, and there are probably people who would consider themselves "level 3" who would scoff at me. Basically, "level 3" seems to span everything from Norvig and djb to someone who got a BS and just read Code Complete.

Anyway, it looks like you're good enough at stuff to be a good generalist, so you should probably just study and work on whatever you're interested in and improve naturally.

Re: Ask HN: How can I self-evaluate my programming skills?

#6
The funny thing is that it's nearly impossible to evaluate where you stand before you've reached the next level or even the level after that. You think your solution is clever? Wait 6 months and you think it stinks. You think you have a nice abstraction? Wait until you need to do something you didn't think of and you find it's useless/too complex/unnecessary and so on.

I find that the best way to evaluate yourself is to look at your code all the time and think critically. Be careful not to overdo it though, maybe take a closer look in between projects or in some interval is fine.

What should you work on? What do you find interesting? I think you're a lot better off working on something you find interesting than forcing you into something that you don't find thrilling. As always you should do stuff you're not comfortable with: do some low/high level stuff, try a new framework or do something you think is hard.

I wouldn't obsess too much on how good you are compared to others, there's always someone better, period.

Instead focus on your relative improvement. If you read your old code (which you should) you should think "this is awful, I could write something better" or at least "this is ok... but if I did it this way it would be much better".

And finally read code, read books about code, try to code with other people and try to make something useful.

Some book tips:

The Pragmatic Programmer: Read this!

Introduction to Algorithms: If you don't know algorithms, here's a nice book for it

Effective Java, Effective C++, More Effective C++: Just good practices

Re: Ask HN: How can I self-evaluate my programming skills?

#7
post #3

Not sure if that approach is useful. Wouldn't it be better to build something and note where you struggle the most along the way? I currently face a similar problem, as I want to pick up playing the guitar again. How to get into deliberate practice mode? I consider just going through a book step by step. On the other hand, as my real goal is songwriting, perhaps it would be better to just start writing songs and try…

> I currently face a similar problem, as I want to pick up playing the guitar again. How to get into deliberate practice mode?

OT: Try WildChords (http://www.ovelin.com/) :)

Re: Ask HN: How can I self-evaluate my programming skills?

#9
Start keeping journals.

When you start a new project, start a new journal. Record your thoughts. If you have to make a particularly hard decision, write out your thought process and what you ultimately decided.

Then review those journals every year or two. Ask yourself if you would have done anything different based on the experiences and knowledge you've accumulated.

Also, seek criticism. Learn from others. And read as much as you can! :)

I don't think there's any one litmus test that will give you a grade. It's a process of practiced introspection. Know thyself! :)

Re: Ask HN: How can I self-evaluate my programming skills?

#10
How should I be evaluating myself?

The only metric that matters is the delta between what you know and what you need to know to build what you have to build. How do you find out what this is? By building that which must be built. When you get stuck, you will have to find a way to get unstuck: by getting educated, by consulting others, by finding others' solutions, or just by old fashioned figuring it out.

How often?

Continuously.

How should I decide what to work on?

Work on what needs to be worked on, not what you need to get better at. Any other approach would be backwards.

By definition, the "Competency Matrix" you cite is a bad goal. Every entry has different level of importance for every person and every situation. By trying to aspire to this flawed ideal, you will be wasting time on things that aren't important and missing things that are.

(Aside: When I reviewed the Competency Matrix, I had to laugh. Many of the items were so important that you couldn't help getting better at them just by building lots of stuff. And many will never be important at all.)

The best way to get good at what you should be getting good at is to build what needs to be built. Then trust the process and yourself to fill in the gaps.

Does my ability relative to others matter?

No! There will always be many people better than you. There will always be many people worse than you. You will probably be the best at something (or some combination of skills). You will probably never get very good at something (or some combination of skills). And you know what? It doesn't matter!

All that matters is whether or not you can successfully build that which must be built. The ability to figure out what that is and how to do that is the most important skill of all.

Moral of the story: Go find out what people need. Then build it. The more you become concerned with their needs and the less about your own, the sooner you'll take care of both.

Post reply on HN