20

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?"

gnat
  • 21,442
  • 29
  • 112
  • 288
John Smith
  • 989
  • 1
  • 8
  • 12
  • Matter of talent not education? What goals have you set for yourself? Why have you failed to meet them? You strike me as having a low opinion of programmers in general. Anybody with a pulse? I dont understand this post. – P.Brian.Mackey Jan 26 '13 at 04:27
  • 22
    Sounds to me like http://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. – Gort the Robot Jan 26 '13 at 04:43
  • 50
    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 05:34
  • 5
    Take a look at the [Dunning–Kruger effect](http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect); it's part of the human nature to mis-judge your own abilities. – Martijn Pieters Jan 26 '13 at 11:03
  • So long as both parties are acting in good-faith there is no ethical violations. There is demand for a wide spectrum of skills-sets and there are many highly valuable roles related to software that don't require a high programmer competency score. – Rob P. Jan 26 '13 at 12:20
  • 1
    You guy should read "The Algorithm Design Manual" and then all sorts of algorithms will be very clear to you. It's not a hard read, quite the contrary, but be prepared for some maths. – Falcon Jan 26 '13 at 14:24
  • 6
    Link to the [Programmer Competency Matrix](http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm), 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. –  Jan 28 '13 at 13:21
  • 11
    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
  • 1
    @StevenBurnap I can relate to the Imposter Syndrome. I feel inferior to others in my other field and that sooner or later someone will call me out. – maple_shaft Jan 29 '13 at 02:22
  • Rachel, I strongly suggest you re-read the edit I just made. I'm almost certain that it's true, based on your stackex links alone. Don't sell yourself short. – Nathan C. Tresch Jan 29 '13 at 06:22
  • 1
    You can implement fizz-buzz, get the job done, are aware of quick sort, algorithmic complexity and stability (and could memorise an implementation). And the latter few are probably tangental to most development positions. I'd say you're way ahead of the "average" professional developers out there. – Daniel B Jan 29 '13 at 06:56
  • 2
    The fact that you recognize your limitations is huge. Many people dont, and I find them to be the most dangerous to work with. A lot of the things you described can not be taught in school. Systems architecture in particular requires a lot of real world experience. You'll get better the more you do it. – ConditionRacer Jan 29 '13 at 18:36
  • You can do something I'm not good at. Strictly mundane implementation work 100% of the time without getting irritable. I wish there was one of you on every team. – Erik Reppen Jul 09 '13 at 13:30

6 Answers6

45

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.

Caleb
  • 38,959
  • 8
  • 94
  • 152
  • 19
    +1, *"you have an ethical duty to take care of yourself and your dependents"* - All aboard the truth train! – GrandmasterB Jan 26 '13 at 08:00
  • 11
    +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
31

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.

MattDavey
  • 7,096
  • 3
  • 31
  • 32
  • 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
7

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. ;)

Nathan C. Tresch
  • 514
  • 3
  • 13
3

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.

jonasl
  • 131
  • 2
1

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.

John Mee
  • 410
  • 2
  • 6
0

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.

Julius
  • 568
  • 1
  • 3
  • 7