share
Stack OverflowCoping with feelings of technical mediocrity
[+98] [29] Karim A.
[2010-05-27 20:09:15]
[ career-development experience self-evaluation ]
[ http://stackoverflow.com/questions/2924504] [DELETED]

As I've progressed as a programmer, I noticed more nuance and areas I could study in depth. In part, I've come to think of myself from, at one point, a "guru" to now much less, even mediocre or inadequate.

Is this normal, or is it a sign of a destructive excessive ambition?

Background

I started to program when I was still a kid, I had about 10 or 11 years. I really enjoy my work and never get bored from it. It's amazing how somebody could be paid for what he really likes to do and would be doing it anyway even for free.

When I first started to program, I was feeling proud of what I was doing, each application I built was for me a success and after 2-3 year I had a feeling that I'm a coding guru. It was a nice feeling. ;-)

But the more I was in the field and the more types of software I started to develop, I was starting to have a feeling that I'm completely wrong in thinking I'm a guru. I felt that I'm not even a mediocre developer. Each new field I start to work on is giving me this feeling. Like when I once developed a device driver for a client, I saw how much I need to learn about device drivers. When I developed a video filter for an application, I saw how much do I still need to learn about DirectShow, Color Spaces, and all the theory behind that.

The worst thing was when I started to learn algorithms. It was several years ago. I knew then the basic structures and algorithms like the sorting, some types of trees, some hashtables, strings, etc. and when I really wanted to learn a group of structures I learned about 5-6 new types and saw that in fact even this small group has several hundred subtypes of structures. It's depressing how little time people have in their lives to learn all this stuff.

I'm now a software developer with about 10 years of experience and I still feel that I'm not a proficient developer when I think about things that others do in the industry.

(3) This is pretty close to: stackoverflow.com/questions/184310/… - Chris Lively
(3) shh! don't tell them that you would do it for free! - Tesserex
(4) You should really check out this SO thread on "How Can I Know Whether I Am a Good Programmer?" stackoverflow.com/questions/52378/… - Pretzel
(38) You're developing device drivers and video filters...now I feel like I'm a much worse programmer than you... :( - Otaku
(3) tldr; but everyone goes through this stage (in every profession). Get over it and keep learning. - Frank Krueger
(9) I once heard of a study where researchers asked people with various amounts of experience in a field to rate the experience of others in the field from an example of their work. Experts tended to agree fairly closely on the ability of others, but typically under-estimated their own competence. Novices gave widely varying responses for the competence of others and tended to overestimate their own competence. - Dan Bryant
(2) This seems better suited for your blog or a site dedicated to discussion. (However, there is a concrete question in there: "why do experts under-estimate themselves?" or along those lines, but that would only be tangentially programming-related.) - community_owned
(2) @Dan Bryant, that is known as the Dunning-Kruger effect. en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect - Simucal
[+106] [2010-05-27 20:14:28] Longpoke [ACCEPTED]

alt text


(48) Those red and green slices are way too big. - fbrereto
(1) The same goes for the knowledge of humanity as a whole :) - BlueRaja - Danny Pflughoeft
(66) @fbrereto: They're sized to make it look more like pacman - Brendan Long
@Brendan Long: lulz - M28
(1) Rumsfeld much? :) - Yuval Adam
(19) There's also the things that you know but which you don't realize you know. That's larger than you might expect. - Donal Fellows
(14) @Brendan I was about to post something about Pacman eating a watermelon. But half the joke has already be used :-( - Wallacoloo
(2) @Donal Fellows: True, sometimes in any involved field such as programming or mathematics, concepts sneak into your head, and you keep seeing the term naming that concept used somewhere but not know what the name means, then one day you read up on it and it turns out it's what you knew the whole time. - Longpoke
There are things that your brain knows you know, but sometimes you forget them, until you really need them. - Secko
(2) This pie is win on 3 levels that I can see... 1. It's true 2. It looks like PacMan eating a watermelon (as Brendan and wallacoloo mentioned). 3. There are probably a lot more reasons why this pie is win, but I don't know that I don't know them - Dream Lane
(29) The whitespace represents things that the chart doesn't know that you don't know. - VirtuosiMedia
The green represents things you think you know but you actually don't. - serg
(2) There was a discussion on HN awhile back that talked along lines similar to this pie chart. It was argued that the role of a University education wasn't to so much as increase the things you know (it does a little), but instead to increase the amount of things you know you don't know. Things you don't know you don't know are dangerous. Things you know you don't know can be anticipated. - Simucal
This needs to be put in GraphJam. - Andrew Grimm
1
[+43] [2010-05-27 20:11:54] VirtuosiMedia

The fact that you're continually learning says a lot in your favor. Very few people, if any, can be masters of multiple domains. I think you're doing all right.


(9) +1. Agree completely. - community_owned
+1: OP is completely fine - we will always keep learning and can never ever know everything. - Callum Rogers
2
[+33] [2010-05-27 20:31:19] Eric Petroelje

In my experience, programmers (and many other professions) usually go through a few stages, roughly like this:

  1. You suck and you know it. You're just starting out and constantly stumbling over every little thing.

  2. You get past the first stage and start getting reasonably comfortable within the small world you've been working in. You start to think you're pretty good, but really you still pretty much suck. You just haven't been exposed to much outside your little world, so you don't realize all the important things you don't know. Many college graduates are like this, and some stay here through their whole career.

  3. You get exposed to new things - languages, technologies, complex systems, other programmers who are way better than you, etc. and realize once again that you suck. Every new system you encounter reminds you once again how much you suck. You look back at all the old programs you wrote and realize how much they suck (including that program you just wrote last week).

Unfortunately I don't think you ever really get past step 3. But if you've been there for a while, you're probably pretty good, even if you don't believe it yourself.


(33) Step 4 is where you think you suck, but you know for sure that those other guys over there suck even more. That's when you're an (honest) expert. - Donal Fellows
(1) Step 5 would be when you begin to be better, and then realize that you are better, but you still kind of suck. - Secko
(22) Step 6 is when you realize it's actually a 12 step program. - VirtuosiMedia
(1) @Donal. I completely agree and feel that Step 4 is the last stage of your programming abilities. What starts next is your "Advertising" abilities. Precisely, the ability to hide what you don't know and to gloriously present what you know. Comes around 12-15 yrs I guess. We all are with you Karim. Keep learning. - Rajarshi
(2) @Secko - I disagree. Step 5 is when you forget that you suck and get into management instead, when every decision made is obviously a golden nugget of wisdom... - Paddy
@Paddy Whatever, I don't care! - Secko
(2) @Paddy: That's a side-step. Doesn't count. ;) - Macke
@Eric I really feel like that. That I`m suck as a programmer. But continuous study makes a lot of difference. - RHaguiuda
3
[+24] [2010-05-27 20:48:40] Mark Peters

Your error is in thinking that there is such thing as a "guru developer." You don't hear about someone being an "expert doctor," you hear about them being an "expert gastoenterologist" or some other ridiculously specific title. Why are you setting a double standard for yourself? There is no such thing as a guru developer. Software development is far too broad of a discipline.

Software developers, just like doctors, start out by building a foundation of knowledge (usually through post-secondary education) and then specialize as they progress through their career. Switching specializations is an expensive thing that takes time. I don't expect my gastoenterologist to be a good cardiovascular surgeon, but I would expect him to be able to pick it up faster than me.


(2) Nice presentation. Liked that. - Rajarshi
(2) Well said. Completely hit the point home for me. - Jeriko
4
[+22] [2010-05-27 20:15:01] Dean J

It's not an uncommon feeling.

There's absolutely no possible way to be an expert in everything; you can't do deep operating systems work, deep networking, deep graphics, deep work in AI, and do it all well. It's much like we don't expect you to be a medical doctor, a world class lawyer, stunt helicopter pilot, mountain climber, and four star chef. You might be able to do one of those, even two, but no one expects that even from the best of the best.

Pick one area of development that you enjoy and that isn't going away any time soon. Focus on it, get good at it, and compare yourself against the people in that specialty, not against the entire field of developers.


(2) The thing you are best at is the thing that you are doing and not realizing you are good in. - Secko
(3) The most interesting man in the world could do all that. - Matthew Crumley
(2) I was originally thinking of referencing Buckaroo Banzai as a fictional character. How many astrophysicist neurosurgeons can lead a rockin' band? - Dean J
5
[+13] [2010-05-27 22:16:09] limc

As Donald Rumsfeld would say [1]:-

"... There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we know we don't know. But there are also unknown unknowns. There are things we don't know we don't know..."

If you read the "Pragmatic Thinking and Learning: Refactor Your Wetware", Andy Hunt discussed about the Dreyfus Model where experts always think they know the least and there are more to learn, whereas novices tend to think they know everything yet they know nothing.

You are certainly heading the right direction, so to speak. :)

[1] http://www.brainyquote.com/quotes/quotes/d/donaldrums148142.html

6
[+10] [2010-05-27 20:19:17] BlueRaja - Danny Pflughoeft

The best coders are the ones who realize how terrible they are [1].

(of course, that doesn't mean realizing you're terrible makes you good, but it's a good sign)

[1] http://www.codinghorror.com/blog/2004/08/why-im-the-best-programmer-in-the-world.html

7
[+8] [2010-05-27 22:34:47] JohnFx

I had the same feeling right at about 10 years into it too. I think it is just natural.

Here is the best therapy: The Daily WTF - Curious Perversions in Information Technology [1]

Read a few articles here and it will do wonders for your self-esteem.

[1] http://thedailywtf.com/Default.aspx

8
[+7] [2010-05-27 20:56:49] Tim Pietzcker

This is true for all professions. Look at medicine (I'm a doctor by training) - by now even the general family practitioners are subspecializing because there is much more knowledge than any one person can hold.

Read Unskilled and Unaware of it [1] and feel better about yourself. The fact that you are doubting is a good sign.

And, to quote from a different field:

"There are two kinds of geniuses: the 'ordinary' and the 'magicians'. An ordinary genius is a fellow whom you and I would be just as good as, if we were only many times better. There is no mystery as to how his mind works. Once we understand what they've done, we feel certain that we, too, could have done it. It is different with the magicians. Even after we understand what they have done it is completely dark. Richard Feynman is a magician of the highest calibre." - Mark Kac

Not everyone has to be a magician. But it's great to have them around and be inspired by them.

[1] http://gagne.homedns.org/~tgagne/contrib/unskilled.html

(5) Another quote: "We live on an island of knowledge surrounded by a sea of ignorance. As our island of knowledge grows, so does the shore of our ignorance. " (John A. Wheeler) - meriton
@mertion that's an awesome quote. - Jeriko
9
[+5] [2010-05-27 21:01:17] Pretzel

If you want a more concrete target to shoot for, check out The Programmer Competency Matrix [1] -- I've had this page bookmarked for a while now and come back to it every once in a while to see how I'm doing.

Naturally, as VirtuosiMedia and others have pointed out already, you cannot possibly be a master in all of these categories, but it should give you an idea of where you stand and what things you could brush up on or read more about.

[1] http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

10
[+5] [2010-05-27 22:39:29] Norman Ramsey

Is this normal what I'm experiencing.

Yes. Plato wrote about it at length :-)

You might also like to read about impostor syndrome [1]. Very common.

[1] http://en.wikipedia.org/wiki/Impostor_syndrome

11
[+4] [2010-05-27 20:19:53] Yuval Adam

I think the major point here is that you are just beginning to understand how many different programming domains actually exist. Yes! business programming is totally different than device driver programming.

I'm not arguing that a guru programmer won't be able to quickly dive into different domains easily. I am arguing that having that skillset is uncommon. It is perfectly normal for a good programmer to need some time to become fluent in a new domain.

Don't be confused with the mass amount of theoretical knowledge that is out there. A programmer must know the basics: hash tables, trees, lists, etc. But do you really think a "guru" programmer knows, off the top of his head, what the difference is between a k-dimensional tree and a BSP tree? I assure you no one knows that stuff, except in the academia (and I safely assume you are not in that set).

Bottom line, there are many different domains, and don't assume you can be good in all of them. If you have a good grasp of the basics and aren't afraid of confronting a new domain, even if it will take some time to comprehend - you have nothing to worry about.


(3) I'm in academia, and if I wanted to know the difference between those types of trees I'd just f'ing google it. The only two types of people who know and remember what the difference is are (a) people who use them a lot, and (b) people who rank well into the autistic spectrum. - Donal Fellows
12
[+4] [2010-05-27 20:17:18] Vivin Paliath

You are not alone in feeling this way! The positive thing is that you say that you are learning. One thing I've realized is that in software engineering, you never stop learning. You have to keep learning or risk becoming obsolete or behind the curve. This is fine by me because I absolutely love what I do and I love learning new things. I would say that you are doing ok and that you're on the right path!


13
[+3] [2010-05-27 20:18:53] klabranche

Sounds pretty normal to me. Your examples are quite diverse and that often means having to learn from the ground up a new technology/library/etc....

It's great to see you are really inward looking and judging yourself. This is a great sign that you want to be better and have the makings of someone who can be because you are willing to look at yourself and work to improve.

Mastery doesn't happen quickly. In fact, it can take a really long time. Check out this presentation [1] from Mary Poppendieck on the subject of mastery.

[1] http://www.infoq.com/presentations/poppendieck-deliberate-practice-in-software-development

14
[+3] [2010-05-27 20:41:38] MattB

This is so absolutely true. I've been programming since age 11, first in BASIC, then in Quick C, then VB, then some C++ in college. I thought I knew a lot until I began working with the web. It's a whole new ball game. It's kind of depressing in a sense. I personally tend to grossly undervalue my skills due to this paradigm.

It's also difficult as there's hundreds of ways of doing the same thing. There are areas of PHP I never touch and recently felt like a total idiot while taking a PHP test for an agency. I scored low even though I've been working in PHP for a decade. It's impossible to know everything, even about a single language!

I also tend to question the speed at which I complete projects. If I have so much experience, should I be working faster? But that's more of a quality control issue. Being meticulous is sometimes more desirable I think.


15
[+3] [2010-05-27 22:20:54] Jarrod Roberson

From the Tao te Ching #71

Not-knowing is true knowledge. Presuming to know is a disease. First realize that you are sick; then you can move toward health.

The Master is his own physician. He has healed himself of all knowing. Thus sh is truly whole.

and another interpretation

Who recognizes his limitations is healthy; Who ignores his limitations is sick. The sage recognizes this sickness as a limitation. And so becomes immune.


16
[+3] [2010-05-28 04:13:12] user347594

Nobody is perfect. Nobody can know it all. Everyday new tecnologies and developments are made. What you knew yesterday today maybe obsolete. It's hard to keep up. For what you say, you already know a lot of stuff. Cheer up. There's also life out there :-)


Don't lie to me! there is no life outside the internet! - Karim A.
Well, to be honest, that was rumoured... - user347594
17
[+2] [2010-06-13 21:13:06] drewk

Now it is time to go into management....

I say that in seriousness. Fighting soldiers are young and charge the hills; distinguished military leaders are older and wise and probably could not charge as hard. But they take care of the strategy -- which hills to charge.

Young engineers and programmers are newly minted with the latest technics and knowledge; older engineers can manage that youthful, perhaps misdirected, enthusiasm into a strategic direction.

Older gurus may not tweak the bits the way they used to, but the older gurus can get the youthful gurus to do that and keep them all going in a good direction.


18
[+2] [2010-06-20 07:38:06] Andrew Grimm

Not all feelings of inferiority are rational. For one extreme example, people with annorexia nervosa think that they're too fat even if they're dangerously thin.


19
[+2] [2010-05-27 22:59:50] ewernli

Go to 5 stages of programmer incompetence [1], make a self test and don't forget to take the poll.

  1. The Enthusiastic Newbie
  2. The Budding Genius
  3. The Abstraction Freak
  4. The Veteran
  5. The ‘Guru’

I would say you are either 4 or 5.

[1] http://coderoom.wordpress.com/2010/03/19/5-stages-of-programmer-incompetence/

20
[+2] [2010-05-27 23:09:15] Dynami Le Savard

When I was near completion of my bachelor's degree, I went to see a teacher with whom I was on good terms with to talk about maybe doing some post-graduate studies. We had a long chat about it and somewhere in there, he dropped this line that made me think about what you described:

There's a saying; When you finish your bachelor's, you think you know everything; When you finish your master's, you realize you know nothing; When you finish your doctorate, you realize nobody knows anything, including whether or not you needed to finish a doctorate to realize that.

I think it is a good thing that you can stand up and rightfully say that you lack knowledge, I mean, everybody lacks knowledge of some sort. It probably is what makes people who are capable of continuously try to surpass themselves and always learn more such rich individuals.

I don't think lack of knowledge makes you a bad programmer, it's all about being smart and motivated to learn what you lack.


21
[+2] [2010-05-27 23:22:34] Neil T.

First and foremost, thank you for asking this question. Like you, I've been asking myself some of the same questions about my abilities and skill levels, and really wondering if I will ever again feel like what I am doing is good enough.

Software developers are an interesting bunch, and it requires a very unique mindset to be good at what we do. It requires a never-ending desire to improve oneself and the world around them. It involves a constant search for the best way to solve a problem, and even when you do finally solve it, you'll look at it and try to figure out ways to improve it.

Picture Sisyphus spending every day rolling a huge boulder up a steep hill that is just a little too high to scale before he has to stop and rest for the night. Unfortunately for him, while he sleeps, the rock rolls back down to the bottom of the hill and the next day, he must start again from the beginning. Our "boulder" is technology...always advancing, always changing, always improving upon itself.

The simple fact that you question your abilities speaks more to your skill level than you realize. Satisfaction leads to complacency in this industry, which leads to the death of innovation. I've been doing this for 26 years, and doubting myself for almost as long. You have worked on projects that, on the outside, would completely intimidate me. I'm also confident that I've worked on projects that you would pass on without hesitation. But, in both cases, I'm sure that it would only take about fifteen minutes worth of conversation to change our minds, because we love the challenge of solving problems...especially those problems that not everyone can solve.

Take comfort in your self-doubt...it means you still love what you do.


22
[+2] [2010-05-27 21:20:55] Scorchio

I was feeling proud of what I was doing, each application I built was for me a success and after 2-3 year I had a feeling that I'm a coding guru.

Yeah I know this sensation, losing the "guru" image of myself just because I saw another requirements, another people, because people didn't like my work and so on.

But I have to tell you one thing.

You should be proud - not because you write the best device driver on Earth, one that's so elegant it should be taught and kept in museum.

You should be proud because you've faced that you're not that good. And kept going forward.

It's so terrible that a whole lot of people - including myself - feel that they're not good enough. Each of us has a completely different background so we should do our best to compensate ourself for that bad feeling of our ego.

Being humble is one sign of greatness. If you're humble and you know that it could be done better and try to do your best, asking other people if needed - then you're a professional. I'm not talking about a professional people here, but a professional human.


23
[+1] [2010-05-27 21:31:23] JB King

I don't think it is normal, but I do believe it is a good feeling to have. Having humility on the scale you describe is something I can understand and say that I have been there. I'd likely consider it a good sign of maturity that you accept your limitations.

My reason for thinking it isn't normal is that there seem to be a lot of bad programmers out there that I'm not sure they would share the same assessment as what you gave unless they are repeating those first few years you had. I can remember writing code back when I was about 8 years old with my Commodore 64 and feeling the power, ah what a feeling it was back then.


24
[+1] [2010-05-27 20:48:51] Daniel

Interesting question. I say it depends on what sort of environment you put yourself into. I mean if you're in an environment that doesn't allow you to grow or learn, then you'll feel worthless. I mean a good example of it would be when I was working at McD as a teen. I've been told repeatedly by my manager that she's going to go places and I got all the wrong attitudes in life and not a very good worker. I mean it felt horrible. Little did I know I graduated college, got a job, and now working. A few years ago, I spotted the same manager at Pizza Hut working under a manager. I suppose to her, going a long ways mean getting hired at Pizza Hut.

Anyway, the point is, that if the environment you're in isn't a good one, you shouldn't let it bring you down. Of course you won't be an expert at every single field you know, and you should never base how well you're doing off what someone else tells you because they probably don't do it as well.

So in all, don't mind what others say, and if you do well, then you're doing well.


25
[+1] [2010-05-27 20:30:44] Jørgen Fogh

The more you learn, the more you realize you don't know. Whenever you think you know everything about a subject, you're wrong. Even people with ph.d.s don't know everything about their specialty.

One of the worst developers I have known have all thought that they knew everything or at least "a lot" or "enough." Your question gives me the impression that you can't be that bad in practice, no matter how much or how little you might actually know. The attitude makes all the difference.


Change "og" into "or". Tak for det! - Secko
26
[+1] [2010-05-28 02:47:33] laurent

Not being a guru is not that bad... In most situations, it is more useful and you can do a better job if you know (or is willing to learn) more things decently than knowing one perfectly. Only a very few situations require the best knowledge of the world on the subject to do the job (even if the contractor thinks he needs the best man of the world, it is not true usually).

Anyways, as answered by a lot of people already, you can have a guru in some small specialization but I don't think it is possible to be a guru on everything in fields as wide as software. This is true also for medical, engineering, psychology or any of the big areas of knowledge.

No activity is as simple as it looks. I've worked a long time in industry and when you look at a guy feeding a CNC machine to produce a part, it looks very easy... try it... and you'll produce scrap parts without the experience he has. This to say that even if you are the guy who developped the process for the machine and you trained the guy on the process, you probably couldn't do his job with the same results. Everyone has his importance and there is no total guru and I think this is better this way!

You appear to have good experience in many areas of software already and every new challenge makes you earn a little more. I think this is a lot better than knowing perfectly how to code drivers or video filters only.


27
[+1] [2010-11-09 00:00:58] kymully

I think as programmers we should aim to see detail and overview simultaneously, not be blind to the trees because of the wood.

Thank you to everybody on this page, asker and answerers.

I felt pretty alone with this feeling over the last two weeks, but I'm going to turn things around now.


28
[+1] [2010-05-28 04:33:53] AngryWhenHungry

This isn't really an answer, but what you say reminds me of a Sanskrit verse:
(Read it out loud if you're at work :p )
Yadaa kinchignoham dwipa iva madaandaha samabhavam
Tadaa sarvagnyosmityabhadavaliptam mama manaha
Yadaa kinchit-kinchit budhajanasakaashaatavagatam
Tadaa jwara iva mado me vyapagataha

Rough translation:
When I knew a little, I was blinded in pride like a rogue elephant
At that time my mind thought I was omniscient
But little-by-little, when I started dealing with wise men
My intoxicating pride left me, making me feel better

BTW Karim, I'm not saying you were blinded in pride like a rogue elephant!


29