Live data from Hacker News

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

news.ycombinator.com

21–30 of 45 posts

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

#21
Sorry, there is no oracle that can tell you in absolute terms how good a programmer you are. The only thing you can do is pursue both a width and depth of knowledge in the field and get better. To improve: tackle various types of tasks both high and low level, try out different patterns and styles, and focus on improving important code qualities. The qualities I find important are bug count, code size, and ease of doing the right thing.

There is a meme floating around that says improving means the worst code you have seen is the code you wrote six months ago. Don't go down that route. It is a sign that you have stopped genuinely improving and started chasing fashions. You should be able to look at your old code and either call it good or identify room for improvement. You should also be able to tell it is getting better.

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

#22
post #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…

"You think your solution is clever? Wait 6 months and you think it stinks."

I can't even count the times I've put together a "clever" function only to find out that an optimized solution existed in a common library and I could have done the same thing in 1/20th of the code. Software development is humbling.

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

#23
post #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?…

Lets say someone is just starting their tennis training. They like the game, but they want to learn how to play well. Would you tell them that all that matters is whether they manage to beat their next opponent, and to focus on that?

Or might you say "Dont worry about whether you win or lose for a while, instead focus on improving your fundamental skills"?

The first strategy, where you only learn whatever you need to to achieve the next immediate goal, is a bit like greedy optimisation. Its got its merits; but its also got its flaws - for example, you could pick up bad habits that help you win your first few games, but then hinder your later development.

Most teaching of advanced topics, which typically happens at university, seem to focus on building a broad foundation of theory, and move on to applications later; the whole idea underpinning this is that we can learn more efficiently than by just having people focus on solving the next problem they have.

I would advocate planning ahead, to try and find efficient paths through the space of programmer knowledge. Hence I disagree with edw519's advice - if you are on a mission to improve your general programming, I think you are starting in the right place, by evaluating where you are, and trying to figure out whats most efficient to learn.

There is merit to grounding learning in solving real problems; but there's merit to trying to think ahead, and anticipate, too.

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

#24
post #11

Look at code that others have written and make sure you understand it. Once you have some basic proficiency, there is a tendency to do things the way you know how to do them. Looking at real code written by others can really open your eyes.

I never intended to, but this approach has helped me tremendously by accident.

First off, reading code is kinda boring, and if you don't know everything about a language, it can be easy to get stuck in a spot and not know where the code goes next. What I did was configure a debugger. I do Ruby, Objective-C and PHP work, and all three languages have excellent debugging support (rdebug, gdb and xdebug, respectfully). Configure your IDE/editor to hook into the debugger of choice for your language of choice, and for something as simple as figuring out what a variable holds without having to litter your code with errant puts/echo/printf statements, set a breakpoint and run your code. Step through the program one step at a time, and you'll easily see how your request to do X also makes your program do A, F, G, and Z through the framework or libraries you are using.

Plus, learning how to use a debugger will be a tremendous boon to your skillset.

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

#25
Here's one thing I've always found reassuring: When I look at code I wrote a year or two ago, I invariably find a lot of things I could have done better that I didn't know of back then. This generally tells me that I have improved and I am looking at the code with a greater set of evaluation tools and/or a better thought process.

Where I would get scared is if I looked at code that was 2 years old and I couldn't distinguish it from code I would write today. That to me would be a clear sign that I am not improving.

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

#26
The more I think about it, self evaluating is hard without a reference to "guide" you towards a particular domain. For example, aside from the foundations (name your variables properly, writing readable code), the rest starts going into too esoteric requirements (writing libraries that simplify an api?, author of a framework?). Some of these requirements are unjudgeable (I can author a framework to encode/decode ssl packets, but in itself it's a poor indication of my skill), now writing a framework that stands the test of time (is rarely revised) is a different measuring stick, but that can only be 'evaluated' by someone who understands what are the pitfalls of writing a framework (http://lcsd05.cs.tamu.edu/slides/keynote.pdf). And if you are in an area that writing frameworks is not desirable (a lot of security-centric projects are like that, you want to use trusted sources and not venture in writing your own thing), then that measure becomes irrelevant.

I think that there is only two ways to improve in our field.

- Write, write, and write code. The more complex the better. Two caveats:

Maintain what you write. One-off projects don't count, you gotta live with what you write, since that's forcing you to make it maintainable.

Write with people, if other people have to live with what you write, they will tell you if something stinks (of course this is assuming your teammates have a decent level of professionalism).

- Be mentored: Essentially someone who did the above, and then shows you how he suffered :)

Hope this helps.

Freddy (http://www.javapubhouse.com)

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

#27
post #17
post #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?…

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. I would add to this that it's important to learn how to build what must be built efficiently . If you create what appears to be an elegant piece of software on the surface but resembles a Rube Goldberg machine internally then it's going t…

The next step would then be to expand the functionality of whatever you built by making it do something it was not originally supposed to do. You should then discover the shortcommings of your original solution and from that learn how to work your way around it or that it might be necessary to rebuild it because you did a crap job the first time.

Rebuild stuff!

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

#28
post #8

I'm not sure if this helps you out or not, but I've found working through practice problems, such as Project Euler, to be helpful.

Project Euler is good fun and great for improving your algorithm design and understanding of basic programming constructs, but I think its a poor way to improve software engineering skills in general. Being able to write clever efficient algorithms is good but not nearly as critical as grasping important design patterns, OOP, methodologies like TDD, frameworks and databases you're using, etc.

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

#29
post #23
post #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?…

Lets say someone is just starting their tennis training. They like the game, but they want to learn how to play well. Would you tell them that all that matters is whether they manage to beat their next opponent, and to focus on that? Or might you say "Dont worry about whether you win or lose for a while, instead focus on improving your fundamental skills"? The first strategy, where you only learn whatever you need to…

I didn't know that by programming, I was playing tennis.

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

#30
post #23
post #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?…

Lets say someone is just starting their tennis training. They like the game, but they want to learn how to play well. Would you tell them that all that matters is whether they manage to beat their next opponent, and to focus on that? Or might you say "Dont worry about whether you win or lose for a while, instead focus on improving your fundamental skills"? The first strategy, where you only learn whatever you need to…

I agree somewhat, but would shorten that to: "pay attention to the whys when you learn the hows."
Post reply on HN