Programming skill level .
-
Hi,
I had a conversation last night with a friend about ones professional skills and it pushed to search what people say about assessing ones programming skills .I stumbled upon this "link":http://www.procata.com/blog/archives/2005/05/10/expert-programmers/
It provides a scale of 5 levels:1.Beginner
- Little or no previous experience
- Doesn’t want to learn: wants to accomplish a goal
- No discretionary judgement
- Rigid adherence to rules
2.Advanced beginner
- Starts trying tasks on their own
- Has difficulty troubleshooting
- Wants information fast
- Can place some advice in context required
- Uses guidelines, but without holisitic understanding
3.Competent
- Develops conceptual models
- Troubleshoots on their own
- Seeks out expert advice
- Sees actions at least partially in terms of long-term plans and goals
4.Proficient
- Guided by maxims applied to the current situation
- Sees situations holistically
- Will self-correct based on previous performance
- Learns from the experience of others
- Frustrated by oversimplified information
5.Expert
- No longer relies on rules, guidelines, or maxims
- Works primarily from intuition
- Analytic approaches only used in novel situations or when problems occur
- When forced to follow set rules, performance is degraded
Good list to keep keep ourselves in check.
-
Interesting but somewhat what I would have expected.
I've been programming for 39 years, professionally. I'd say I'm still ALL of those depending upon the project, framework, compiler, technology, etc.
Our company rates us by years of experience. I've put in as said above almost 39 years professionally. I got rated "Expert" by our company however a guy that was hired about year before me who was only 30 years old got rated "master". No idea how he pulled that one off because he was really the cause of many of our system problems with his lousy architecture approach and his ridiculous ability to ignore what others were telling him until it was too late.
-
@SysTech I think what the message here is, that a lot of Newbies like myself aren't very confident about judging themselves as far as skills. Like I am asking myself (as a C++-Beginner) what kind of achievements I will have to able to present, that others will actually see me as a C++Developer. The deeper I dive into it the more I actually think this will never really happen as nowerdays there are almost always some kinds of frameworks involved which are far to specialized to call yourself "general C++ Developer".
Please share your opinion on this. -
@CyberWorker
I think the term "general C++ Developer" refers to so whos familiar with the general concepts of C++ and can use them to solve 'general' problems. You start a newbie and after an amount of struggling and wrestling time you become a general developer ,just like we have generalist doctors who can diagnose most diseases but send you to specialists when for example your teeth have serious problems to be studied by the dentist.
Past the general developer stage ,you start applying your development skills to a particular niche and there you need more than just programming skills you need to understand the science behind the field.For example multimedia programmers need good knowledge of audio and video signal processing to adequately use their programming skills to solve problems in that field ,the same applies to Image processing ,Graphics programmers and the list goes on,The point I am trying to make is ,don t be discouraged if you don t understand everything,you don't have to! Just pick your niche ,research and study as much as you can about it ,prove your worth and people will see your value through your work.
Another thing I should mention is that all this takes time ,I have read in some places that it takes 10000 hours working on something to be considered an expert at it .Patience is your friend here.I am not an expert myself at C++ ,I simply have been using it to build some stuff for a few years and the list of things I need to learn grows every day ,I kind of am glad I am not alone in this sea of wonders ;-)
-
In my experience there's little point to assigning "names" or "levels" to programmers. The field is just too vast to make it meaningful.
Also companies using these names don't help much either, as people unrelated to programming are often responsible for giving them. In my last job I was "C++ Developer", then "Network Engineering Specialist" and then "Software Engineer", which was utterly meaningless and unfitting but just happened to fall into some payroll department buckets.I also don't consider a 10-year user or 20-year user of X framework or library an expert automatically. Lines of code written with a lib are at best a very very crude approximation of ones exposure to said framework or library and say nothing about his skill level.
There's no way to compare a 20-year MFC programmer with a 3-year python scripter. None of them could switch instantly to technology he is unfamiliar with. As such, I think you can call a "C++ expert" someone like Scott Meyers, who's daily job is knowing ins and outs of the language, but it doesn't make him an "expert c++ developer" either, just a language lawyer of sort.In my experience "expert" or "specialist" are empty words, often overused and displaced. You can judge a skill of someone by discussing the scale and components of projects he worked on and reviewing his achievements (be it code or final product), not by a label he or someone attached to him.
-
@CyberWorker I agree with musimbate!
I wonder about your desire to be a "c++" developer. I mean what if the perfect job came along and it was in FORTRAN?
I personally like to think of myself as a "Developer" or better yet "a problem solver". On any given day I use:
C
C++
C#
Objective C
Delphi
Basic
and some assemblyIs there one I prefer? Of course, and that is the one that allows me to do what I need to do with the least amount of fight.
Are there some I'm more comfortable with? Yes. But given even a very short period of time I can get up to speed on just about any language.
Will my code match that of a known guru... heck no... but the most elegant solution is not always the best either. Generally so but I had an experience when I first started out where I worked very hard on a program to take some data off a very large stack of punch cards and write it to a file.
Trust me I failed this task three times before I finally succeeded. When I walked into my bosses office eager to show off my work he scratched his head and said, why didn't you simply do this... and proceeded to show me how I could have done a big chunk of my code in about 4 lines.
I was humbled and slouched off to try his routine. Yes it was pretty, very elegant and looked extremely cool. But frankly it ran slower than mine!
You know who won... we used his routine of course as I was a super junior beginner but it taught me that not all elegant code is actually the best way to solve the problem.
I work with a large team of C# developers and man-o-man some of these guys just have to see how much they can fit into a lambda to the point where you can't even understand what the thing is trying to do.
I have personally taken apart of few of these massive lambdas in our code and re-coded them to be more understandable and in at least two instances the code actually benchmarks a little faster after the change.
So become a "developer". Learn to solve problems. C++ is like a pen or a pencil. If it fits what you are doing, use it and learn it. Don't be afraid of other languages. C++ is great. Qt is great. But if someone says I need you to work in C# or even Delphi well each has its cool points too.
-
Thanks for so many nice thoughts on this.
The thing is, when I first started, my idea of a programmer was rather vague, basically I thought of it as someone who is "signed up" for one specific language and is then able to "speak" that language, in regards to the specific task of course.
What I've learned now is, that programming is all about the general skill of porblem-solving. that's basically it right? Of course there is general knowledge like RAM-handling, functions, objects etc. But once you got the idea, you can learn pretty much anything if you like.
I do understand that I'm not bound to C++ at all.
First I started to study physics actually, which is pretty much problem-solving too. Now I ended up doing the same with just a bit less maths :)@SysTech I am not afraid of other languages at all, I am more frightened when it comes to C++ itself with no Garbage-Handling etc. But I do see the advantage of mostly faster running apps, once proper programmed
@Chris-Kawa Yes, I get the idea. I think even for hiring companys it is not that easy to do a proper judgement of the skills of some applicants
@musimbate Yeah I am currently experiencing exactly that phenomenon. I thought I would spend the most time with actual programming. Fact is, I am slowly getting more and more knowledge about font-metrics, electronic/physics stuff (like the heating up of LEDs) and other things. Currently I am in a kind of apprenticeship. I guess I am just a bit scared to be "stamped" as C++ Developer, cause other things like webdevelopment interest me too..