Take the 2-minute tour ×
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.

People advise me to "find a job doing something that you are good at", but the truth is that I don't believe I am good with anything other than just writing code. I don't think that I can design or structure a program though.

Don't get me wrong, I'm not the kind of programmer who can't write a fizz buzz program; I'm more like the kind of programmer who can't do much besides getting the job done. It's not that I have a "do the bare minimum" attitude; it's that I'm painfully aware of my limitations as a programmer.

For example, implementing a quick sort algorithm is something that I could do only by relying on rote memorization (that is, if I ever find the motivation to spend a good chunk of my day trying to commit the entire algorithm to memory and not just go like "umm, I see, that makes sense, I can see the logic...").

When it comes to structuring and designing an application I feel I'm just as helpless. Since I am unable to see the right answer at the start I just make a judgement call which nine times out of ten I later regret.

I still manage to obtain job promotions and praise from my coworkers, so others don't necessarily share my opinions. Objectively speaking though, I simply have neither the learning ability nor the sheer brain power to realistically aspire to be anything more than a 'slightly above average' programmer.

I wonder whether I actually have an ethical duty to make room for more talented people and find myself another kind of job, even if I'm fairly confident that I would not find another role I am better qualified for. My question then is "Do average programmers have a place on a team?"

share|improve this question
20  
Sounds to me like en.wikipedia.org/wiki/Impostor_syndrome. I would say that looking at the issue "objectively" would mean looking at what your coworkers and managers think about your work, not what you subjectively think about it yourself. –  Steven Burnap Jan 26 '13 at 4:43
46  
Buddy, your problem is not your relative ability to write code. You said it yourself: I am feeling somewhat depressed. Depression can be serious stuff, and you shouldn't expect (or be expected) to get through it by yourself. You should talk to a competent counsellor. Now. You're worth it. You can do this. Someone can help you. Just not someone here. –  Caleb Jan 26 '13 at 5:34
5  
Take a look at the Dunning–Kruger effect; it's part of the human nature to mis-judge your own abilities. –  Martijn Pieters Jan 26 '13 at 11:03
5  
Link to the Programmer Competency Matrix, assuming there's just one. As with lots of this kind of thing, it's basically a big list of what-I-think-you-need-to-be-good-at values by some person or group. The high end skills won't be needed by most people in most jobs, and some people may even learn the supposedly high end skills before the low end ones. Example - learning Prolog first means you know one language from one paradigm. Until you learn others, that's not advanced, it's just unusual. –  Steve314 Jan 28 '13 at 13:21
9  
If you can "get the job done", without others having to redo your work, then you are already far better than your average programmer. –  Dunk Jan 28 '13 at 21:28

6 Answers 6

up vote 28 down vote accepted

On the contrary, I think that the people who score highly on the programmer competency matrix (or any similar measure) have an ethical duty not to be elitist snobs.

Ted Neward wrote a fantastic blog post recently which I think is relevant here. Here's my favourite quote from it:

Not all of us writing code have to be artists. Frankly, in the world of painting, there are those who will spend hours and days and months, tiny brushes in hand, jars of pigment just one lumens different from one another, laboring over the finest details, creating just one piece... and then there are those who paint houses with paint-sprayers, out of cans of mass-produced "Cream Beige" found at your local Lowes. And you know what? We need both of them.

For what it's worth, only the former of those two characters would agonize over their own capabilities in the way that you have.

share|improve this answer
3  
That blog post is frickin' fantastic.. A really fresh perspective on this whole Programming thing I do to feed my fam. I forget that the business people could give a crap about how "clean" my code is.. if it works, they'll have me do more.. and to the OP, if you're coding each day and still showing up.. you've got what it takes.. which most don't.. –  hanzolo Jan 28 '13 at 19:40
    
@hanzolo I thought so too, shame it descended into a bit of a flame war. I suppose that's fairly typical of debates on the internet though! –  MattDavey Jan 28 '13 at 20:32

No.

Bad carpenters don't quit carpentering they just concede they're not the greatest carpenters who ever lived whilst proceeding to submissively punch out mundane everyday chairs that they come to do rather well by sheer repetition. There are lots of arses out there so we actually need mundane carpenters because the primadonna's all get bored with making cheap chairs and want to show off their talents via more impressive structures like -say- tables.

It's not a question of ethics, but rising to your best and being happy with being the best you can be.

share|improve this answer
    
I misinterpreted the word "arse" there for a moment. –  Joe Z. Feb 28 '13 at 3:50

I can really relate to this. I have felt like a mediocre programmer all my life and I have always looked at people who are better than me. And to be honest, a lot of programmers are better than me. But still, like you, I get praise for my work AND like you I make my clients and boss happy AND I even got promoted to senior software engineer so we must be doing SOMETHING right. Even though I am successful at work I still know there are even talented junior programmers who are better at abstracting problems and writing code to deal with those problems in a more elegant and abstract way. It is hugely important that we focus on what we CAN do and praise ourselves for that. And it is much more important to change the way we look at what we have achieved than to try and become a "good" programmer (or architect, or friend, or ice skater, or anything) for the rest of our lives.

There are some things that are just not within our reach. I could dream of being able to set up a hugely complex project with a zillion new technologies and a zillion complex and beautiful programming patterns in a day like my much praised colleague Mark can. But I can't. And I will keep focussing on what I can do and do that to the best of my ability and respect myself for that. And I think you should try to do the same. You could start by telling yourself that being a programmer and getting praised and paid for your work is quite an achievement to start with.

share|improve this answer

Reading through your post I kept thinking this person has what it really takes to be a great programmer.

You say you're painfully aware of your limitations.

The more able a person is in its field, the more humble and aware of their own limitations they usually are. Large part of mastering any craft is admitting how little you actually know - and work with that. It will also keep you hungry for improvement and not stagnating. Use it.

You start out wrong and regret it 9 times out of 10.

It's called getting to know the problem space. This is something that takes years and years of mastering (and to be truthful I don't know if you should ever master it - if you make the "right" call from the start - how do you know its the right one?). Getting a good solution in place usually takes a few failed attempts. There lots of current research on how we learn best through fist making mistakes. You just need to do it in a safe and allowing environment. Make sure you're in such an environment and you'll thrive.

You get things done.

This is pure gold, both from team members waiting for what your delivery to and for managers. You're remembering the most important point in any software project - if you don't deliver, no one gets paid.

This might be hard to turn on its head - but all the points you listed I see as signs of having progressed very far already.

share|improve this answer

You are under no ethical obligations to excel at your work, only to do what you think it is you're getting paid to do. You might be better off doing something else related to computers? SDET work is probably something you'd be super comfortable with, as by and large the best way to show brilliance as an SDET is to show why other people's code is flawed. This will give you insight into just how good you really are, and it will also take the burden of "Am I good enough" off of your shoulders.

As I read this, I wanted to make sure I was clear: Most coders are terrible. You're being far too hard on yourself and by working as an SDET you'll be slapped in the face with how more qualified you might be to do your job than you think. Trust me, it changed my life. ;)

share|improve this answer

I wonder whether I actually have an ethical duty to make room for more talented people and find myself another kind of job

No, you don't. If anything, you have an ethical duty to take care of yourself and your dependents. There's no shortage of jobs for talented developers, and there's no reason that you should put the interests of people that you probably don't even know ahead of your own.

Indeed, this very site is full of questions from employers about how to find qualified developers. Your employer may legitimately feel lucky to have you.

share|improve this answer
17  
+1, "you have an ethical duty to take care of yourself and your dependents" - All aboard the truth train! –  GrandmasterB Jan 26 '13 at 8:00
8  
+1. The OP also wrote "I'm more like the kind of programmer who can't do much besides getting the job done". At the end of the day, getting the job done is the only thing that matters. A ton of people can't seem to manage that. –  MrFox Jan 28 '13 at 19:44

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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