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?”
13
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.
1
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.
2
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. 😉
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.
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.
1
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.