Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
When would someone be considered a bad programmer?

Is it possible for a programmer to recognise when he or she is not a good programmer?

Many code quality discussions centre on identifying how bad other coders are...I would like to know if anyone has recognised the possibility that they themselves might be bad programmers; that their programming quality may be insufficient.

share|improve this question
1  
I do fear from time to time that I'm a bad coder, but I realize that my time and experience are limited and that I strive to learn new things every day and become better and better. I have made plenty mistakes, as most have probably, but recognizing those and learning from it only makes me better now. Why do ask this question? Are you afraid you're a bad programmer? If so, why? – Pelshoff Aug 16 '11 at 18:04
1  
I'm not afraid no - at what I've done I've generally been pretty good. I am good to recognise my faults though and unfortunately I get the impression this is not common amongst people. While this is probably not representative in general, it seems to me more people ask "how can I tell people they are bad at something" than "how can I recognise when I am bad at something". There is some research to suggest people tend to overestimate their own skills - I think it's called the Dunning-Kruger effect. – temptar Aug 16 '11 at 18:09
9  
I know a lot of below-average drivers. But I only know one person who considers themselves to be a below-average driver. – David Schwartz Aug 16 '11 at 18:50
2  
What is the definition of a "bad" or "good" programmer? – McTrousers Aug 16 '11 at 20:36
2  
Aaronaught, I'd say that evaluating oneself as a programmer is significantly different than, for instance, evaluating oneself as an athlete. Therefore I feel that this question is neither a duplicate nor off topic. – Mitch Lindgren Aug 16 '11 at 21:44
show 3 more comments

marked as duplicate by Aaronaught, Tim Post, Mark Trapp Aug 16 '11 at 21:09

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

16 Answers

Not usually. Read Dunning and Kruger's paper, Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments.

Usually if you're able to recognize that there's a problem, there's hope.

share|improve this answer
1  
Hence the need for peer review. The only way to improve your skills is to surround yourself with people who are willing to tell your the truth. Like iron sharpens iron. . . – surfasb Aug 16 '11 at 20:31
show 2 more comments

There's a saying that goes,

"The best code I've ever written is the code I wrote today. Anything older than last week is garbage."

I think it's definitely possible for a person to take an objective look at one's code, see what's wrong with it, and do what it takes to get better. Through this reflection and continued education, even today's bad programmer could become next year's best.

There's another saying that goes something like:

"You are wisest once you realize that you don't know everything,"

and I think it also applies here.

share|improve this answer
2  
I think the second quote captures an attitude that truly separates the wiz-kids from those that we consider the gurus. – leo Aug 16 '11 at 18:17
show 5 more comments

No.

A programmer who realizes they are a bad programmer is not a bad programmer. It is precisely the point at which you realize you're a bad programmer that you are no longer a bad programmer. A person who realizes this is a person who is able to self improve and analyze their programming behaviors which makes them "bad", inherently raising the quality of produced code. The mark of a good programmer is not the quality of code they currently write, but the quality of code they strive for.

A bad programmer is one who codes away blissfully ignorant of the poor quality of code he is producing. All the while typically thinking he is the greatest thing since sliced bread.

Skill level is an entirely different beast and one which a good programmer should be able to identify himself at.

share|improve this answer
1  
Your argument is not quite there yet. While recognizing that you are a bad programmer is the first step on the way to becoming a good programmer, the following steps still need to be taken to become that. If you just recognize that you are a bad programmer and don't do anything about it, you are still a bad programmer, just one that is aware of it. – Marjan Venema Aug 16 '11 at 19:16
1  
@Marjan I would argue a programmer who is able to recognize poor quality code has already taken steps to become a better programmer. – Mike Cellini Aug 16 '11 at 19:28
1  
Just because you know you are bad at something, doesn't mean you are able to fix it. My handwriting is atrocious, despite many attempts to make it better. I knew a guy in highschool who was terrible at math. He worked hard, stayed after class with the teacher, and did more work than anyone else in the class, he still only got 60% in the class. Point is, recognizing you have a problem is one thing, being able to do something about it is completely different. I believe that there is a certain amount of natural skill in programming. Some people just don't have it. – Kibbee Aug 16 '11 at 19:34
1  
@Kibbee: exactly. Though I'd prefer someone who isn't able above someone who is able but just doesn't care and won't do anything about it... – Marjan Venema Aug 16 '11 at 19:40
show 3 more comments

Positive indicators:

  • Passionate about technology
  • Programs as a hobby
  • Will talk your ear off on a technical subject if encouraged
  • Significant (and often numerous) personal side-projects over the years
  • Learns new technologies on his/her own
  • Opinionated about which technologies are better for various usages
  • Very uncomfortable about the idea of working with a technology he doesn't believe to be "right"
  • Clearly smart, can have great conversations on a variety of topics
  • Started programming long before university/work
  • Has some hidden "icebergs," large personal projects under the CV radar
  • Knowledge of a large variety of unrelated technologies (may not be on CV)

Negative indicators:

  • Programming is a day job
  • Don't really want to "talk shop", even when encouraged to
  • Learns new technologies in company-sponsored courses
  • Happy to work with whatever technology you've picked, "all technologies are good."
  • Doesn't seem too smart
  • Started programming at university
  • All programming experience is on the CV
  • Focused mainly on one or two technology stacks (e.g. everything to do with developing a Java application), with no experience outside of it
share|improve this answer
1  
The "for various usages" parts makes it clear that this isn't fanboyism. – David Schwartz Aug 16 '11 at 18:49
4  
-1 for so biased towards personal projects in multiple bullets as the make-or-break of a good programmer – sdg Aug 16 '11 at 19:06
7  
Half of those negative indicators aren't negative indicators of anything. I don't (can't) talk work outside of work (although I might talk personal projects with fellow software developers, but not when I'm out socially), I'll learn new technologies in company-sponsored courses (as well as on my own), I'm happy to work in any technology as long as it can solve my problems, and all of my programming experience is on my CV (as it should be). I've been recognized at university, and now at my job, for being a quick thinking, proactive, highly dependable and knowledgeable software engineer. – Thomas Owens Aug 16 '11 at 19:08
2  
I am not sure I agree with this. This tells me whether someone is passionate about technology, says very little about whether they actually know what they are talking about or are any good at programming. A lot of output doesn't necessarily mean it's good output, after all. – temptar Aug 16 '11 at 19:12
3  
-1/2 for "Happy to work with whatever technology you've picked" being a negative factor. For me, if someone was happy to work with whatever technology I've picked, that would demonstrate that they are not dogmatic and know their stuff. -1/2 for "Programming is a day job" being a negative factor as well. Some of the best programmers I know consider this to be a day job, and go off and do music as a hobby, or are simply waiting for a job at a good law firm to open up. – CamelBlues Aug 16 '11 at 19:17
show 5 more comments

Personally, I'm a fan of WTFs per minute:

WTFs per minute comic

The serious part of my answer is that I think code reviews are a great way to evaluate your competency as a programmer, compared to your peers. Is it a completely objective standard? No, but I think it's the closest that you'll get, as long as you're working with some good developers who are thorough about code reviews and meticulous in their own practice of quality standards.

Basically, if you notice that your colleagues are consistently finding a large number of defects in your reviews, then you may need to take some time to evaluate what you're doing wrong and how you can improve. Of course, you should always be doing that self-evaluation anyway, but when your code reviews are full of problems it may be a sign that you're in need of some serious re-education.

More generally, while it's possible to evaluate one's own skill, it is not possible to do so in a vacuum. You need to look at other code and compare it to your own, get feedback from others, and compare your track record for product quality to industry standards.

All of that said, while I do think that it is possible to evaluate one's own skill with at least a modicum of objectivity and accuracy, not everyone has that capacity for introspection.

share|improve this answer
show 2 more comments

This is kind of a strange question - I like it. It's got a nice humany smell to it. :)

I would have to give this as an answer: If a person realizes that their coding skills aren't up to par, then they are probably not actually a bad programmer - just one who has less experience than others. The fact that this person has the self-introspection to question how good they are means they have the thought-processes to make a really good programmer.

That said, Wayne's answer is also interesting. I will comment on it specifically.

share|improve this answer

You're a bad coder when you take on tasks beyond your skills without letting others know the risks in time, accuracy and performance. If you don't know how to program, you're just not a programmer at all.

share|improve this answer

To the opposite side of your question:

In my experience, the guy that thinks he is the best programmer on the team is probably the worst programmer on the team.

share|improve this answer

Yes; in fact I know I'm a bad programmer. Not bad in that I don't understand the concepts or the work, but "bad" in the sense that I'm not motivated by low-level coding issues and do it out of necessity (i.e. a paycheck). I understand enough development to do an okay job at it, but my real passion is the high-level system design and overall problem solving, not coding data access layers or a loop or binding data to controls.

share|improve this answer
1  
Lack of interest in low-level details does not mean you are a bad programmer. It may even mean that your focus is on the work that provides the most value. – Sean McMillan Aug 16 '11 at 19:51
show 5 more comments

I know my quality is insufficient, I'm always stumbling upon more elegant methods of solving yesterdays problems, though I'm not sure that makes me bad programmer

share|improve this answer

I think that would be hard since people tend not to admit their own mistakes and put themselves and their work on pedestals. Frankly, this is why one should subject themselves to code reviews and the criticism that comes with it, since it's hard to judge yourself as harshly as someone else would.

As druttka mentioned, I would not like seeing code that I wrote years ago. I would hate myself.

share|improve this answer

Only 1 in 200 coders can solve FizzBuzz and I am the 1.

99% of all coworkers write goto epics worthy of TheDailyWTF, but I am in the 1%.

No one really understands the true meaning of the Agile Manifesto, except for me.

Unit testing is non-existent in nearly all code bases, but I shoot for 100% coverage. I'm humble though, so I'll admit I'm only at 99.999%

...

See the pattern?

If you listened to what most developers say, you would assume that all coders are either straight out of the Matrix or a monkey sitting at a keyboard. Despite all of the 1-to-10 productivity studies, most of us are really about a 5. When I say "most", I do not mean "everyone not reading this". I mean very precisely that if you are reading this then you are most likely an average programmer. This might be an ego boost to some of the less confident, or an ego hit to the more "self-assured", but there is really no way to get around the fact that the average programmer is...average.

share|improve this answer
show 2 more comments

Me? No. It's like, asking the only person in a village who runs, whether they are a fast runner.

Because I work in a vacuum, with no other programmers to critique my work, no mentors, no managers with coding experience, etc. I wish I could work with other programmers. I'm envious of those who do.

share|improve this answer

Yes, and I like these programmers. They are more apt to improve or change jobs.

I don't like the ones that don't recognize that they are. There are more of them around. I like even less the ones that are bad, but think they are great. There are even more of them.

No matter if I like it or not. I still try to help them. I also try to help them find a new career because I think it's important to enjoy what you are doing and to be good at what you are doing.

share|improve this answer

It depends...

For straight up pure coding skills, generally no. But the problem is that there are various different ways to be a "bad programmer", depending on context. Some of these can be harder to be self-aware of.

STRAIGHT UP "PURE CODING" SKILLS

This is actually the toughest to be self-aware of. Most of us like to think that we have "l33t coding skillz" and we don't want to admit otherwise.

Admittedly this is a bit abstract, and the difference between this and some aspects of the following are a bit arbitrary. But bear with me.

POOR "CONTEXTUAL" SKILLS

Wayne M's answer is an example of what I'm going to try to explain here. Basically, I think a lot of people who are seen as "bad programmers" in a certain light are not necessarily outright bad programmers as much as they are tested in a situation which isn't conducive to them being seen as "good" and productive. And visa versa - some relatively average programmers, when working a certain flow which is just perfect for them, can be seen as quite good and productive. It's a sliding scale.

A huge complicating factor are the degrees of "supporting skills" that people have. For example, I've worked with some very good programmers - who were great coders when taken in a vacuum, but had atrocious writing/documentation skills. This didn't matter much in the small, close-knit Agile group on that job, but it would be a killer on a huge Waterfall project - one which is highly depending on them commenting and documenting their work thoroughly. They were simply the sort of people who seemed to be born without the part of the brain to explain things well in writing. So in one job they were the team rockstar. But in a documentation-heavy Waterfall job, they might have been seen as outright "bad programmers".

Another common example is GUI design, visual creativity and usability. Some people are just terrible at it, even though they are great programmers on the back end. The problem is, someone who creates a horrible-looking UI isn't necessarily a "bad programmer" (ie. They might be great for a more backend and business logic job), but they can often come across this way when "tested" by an environment which is heavy on a certain skill application context.

CONCLUSION

I think it's hard to be aware of how good or bad you are on a very base, "pure coding skills" level, but easier to be aware of shortcomings in highly contextualized "supporting" and "soft" skills. The problem is that one can mask the other, and very few programmers are great all-round rockstars for every possible context and type of job.

Finally (this is similar to what Wayne M's answer talks about): One thing I admittedly have is a motivation problem. Basically I love programming on a very pure, abstract level, but then when I have to work for someone else and grind away at nitty gritty details of some boring business system I have no personal interest in, I easily lose patience and focus. Motivation plummets, work suffers. I'm sure it made me look like a "bad programmer" in the past, but it had nothing to do with straight up coding skills. Having intrinsic motivation is very important to some people, and others can just work on whatever random project you put them on. It doesn't necessarily reflect coding skills per se.

share|improve this answer

Every thing is relative..

To Properly gauge this one should compare his/her self to his/her Peers/Coworkers.

My rule of thumb to Jr Dev who I am mentoring is: If you think your are a good programmer BUT everyone around you is better than you, because they are all GREAT programmers. You need to do some self reflection.

Some people are better than other at self refection, It has nothing to so with programming.

If you think you are the best you are wrong. If you think your are Great you are most likely* wrong. If you think you are good, you most likely* are. The better you think your are the More likely* it is that your self assessment is wrong. If you think you suck you need a new profession.

If you Really are the best around.. You need to be in a larger group. Because your are not the best.

*I can't stress the word likely enough


One more point…

If you are indeed in the sacred top 5%. You a making are BIG career error. No one should be in the same position long enough to become the top 5%. Unless you truly love what you don't value career advancement, and want to do that for the rest of your life.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.