Programming always required to learn new concepts, paradigms, features and technologies and I always have been failed at first attempt to understand new concept what i encounter. I start to blame and humiliate myself without remember before how i understood new concept which i hadn't understand it before.

I can hardly stop to tell myself "why i cant understand ? Am i stupid or idiot ? Yes, i am stuppiiddddd!!!"

What your inner voice tells if you can not understand new concept after spend long time till been tired or hopeless ?

How do you handle your self-esteem in such situations ?

  • 1
    "Doo-doo head!", but then again I have a 2 year old. – dietbuddha Dec 24 '10 at 0:48
  • Maybe the time has not come yet. I'll try again later. (Learning fatigue) – rwong Dec 24 '10 at 8:03

11 Answers 11


Personally, everything is an analogy away. And if I don't understand something, it's probably because I haven't been shown the right concept to bridge me over to the Land of Understand. I usually keep scouring around for different tutorials and eventually one of them will take a different turn than the previous tutorials did that I didn't grok. Then I'll go back and read all of them and finally piece it together. And then rage why the other tutorials didn't present it the same way.


If you don't understand a problem, there is an easier problem that you don't understand.

Find that problem, and solve it. Then try your original problem again, and see if you are ready for it.

  • 8
    Yep, some frameworks I fail to grasp simply cause I haven't run into the problem yet it is attempting to solve. – Joppe Dec 23 '10 at 21:44
  • I think of learning new concepts as a sudoku puzzle. Sometimes you need a couple other concepts before you can figure out that one concept. – vedosity Dec 24 '10 at 1:37
  • 1
    "If you don't understand a problem, there is an easier problem that you don't understand." - I get what you meant, but technically you wrote an infinitely recursing statement :) – Bart van Heukelom Dec 24 '10 at 2:23
  • Hmm . . . I guess at some point you get to a problem that you simply don't realize that you understand . . . – Eric Wilson Dec 24 '10 at 3:04

This is more a question of psychology than programming. When Freud spoke of defense mechanisms, this is essentially what he was talking about: mechanisms that protect your self-image when it is threatened. Some of them are considered more mature and healthy than others.

Some of the defense mechanisms you want to avoid (and that come up frequently in my experience):

  • rationalization - "I can't understand this concept because it is just too complex."
  • idealization - "The people who came up with this concept are just so much smarter than me. I can't understand it no matter how hard I try."
  • projection - "The people who came up with this concept just don't know enough about the subject matter to make the concept any good."
  • reaction formation - "I'm just too smart for this."

Rationalization is one that I especially see a lot in programmers. We have a tendency to assume that not understanding something means that it is complex, which isn't necessarily true.

That said, here are some of the more healthy defense mechanisms that work for me:

  • altruism - Once you've mastered the concept, write a blog post about it to explain it to others or explain it to your team. Using your struggles to help others is a good self-image booster.
  • humor - Make jokes about your problems. This makes the concepts seem less threatening without avoiding them altogether.
  • identification - Find someone you think is really good at this and model your approach on theirs.
  • anticipation - Budget time to learn concepts in advance so that you don't have to rush yourself into understanding them.
  • sublimination - Channel your thoughts into more positive ones. Start exercising or pick up a new hobby.
  • thought suppression - Whenever you find yourself saying "I'm so stupid..." suppress that thought and move back to the subject at hand. This is surprisingly effective.

I remind myself of something my father had on his wall in college -- (as far as I can tell, he originated the quote...)

No concept is so difficult that it cannot be conquered by the repeated attacks of an ordinary mind.

This can be encouraging to those of us with ordinary minds.

  • Indeed. Ideas come from people so understanding just requires time and effort and nothing more. Somebody already said it better than me so I'll defer to him: youtube.com/watch?v=Cj4y0EUlU-Y&NR=1 – davidk01 Dec 24 '10 at 8:16
  • Oh, would that this were true! Perhaps, if you include the tools to lock down your previous understanding, so that you can make progress with each attack--otherwise, there are some dense fields it's very, very hard to make progress on. – Alex Feinman Dec 30 '10 at 14:15

If I don't understand something I find someone who does and tell them to explain it to me. Once it's been explained I cement my understanding by playing with the concept for a bit.

I almost never think I'm stupid just because I seen plenty of smart people miss completely obvious things.


That simply means you still don't have enough experience in that one specific area. As we acquire experience we start mapping concepts from other areas which helps us understand the new concepts faster. Don't beat yourself over it. Just keep pushing, ask a friend, etc... You're learning and that is a great.


I don't have to understand everything. I won't torture myself with stuff that doesn't match the way my mind works. For example, while I'm generally pretty good in maths, I'm rather incapable regarding the integral calculus. It's just not my thing, and most likely never will.

Obviously, this selective ignorance is only possible as long as I have still enough other means to solve my problems, i.e. do my work and pay the bills.


I think "Finally, programming is interesting again!" and search the Internet for tutorials. The last time that happened was when I stumbled upon monads. Many programmers hit a brick wall when they read about monads for the first time, because it is unlike every other concept you have encountered so far as a programmer, especially if you're new to functional programming.


There are lot of 3-letter techniques, which are big nothings. Some time ago, I was depressed, if I didn't understand a new one at first sight, but now I know, I was just confused, because the new stuff is just too simple and trivial, but I was anticipated something new and vibrant. Okay, it's only 99% of cases, for the rest 1% I'm trying to find a good article of it.

Example: when I was jumped into JS programming, it was complete dark for me, what does a JavaScript framework do. I have had a pre-conception, and it was good, but I needed a confirmation, and I wanted to understand it more deep. I've visited lot of framework's homepage, but the darkness didn't go away. After a week(!) of googling, I felt myself very dumb. I'm an ulrasenior, and I couldn't even found a f. document in a trendy programming topic! Then, I've found DomAssistant, which has excellent documentation. I've felt statisfaction just reading the first sentence.

The idea of DOMAssistant is to provide a simpler and more consistent way to script against the Document Object Model (DOM) in web browsers. The idea is that everything starts with the element(s) in question, selected through id or CSS selectors, and then perform various methods on it, such as adding or removing classes, events etc.

Example code:

$("#container input[type=text]");

$("#navigation a").addEvent("click", myFunc);


  1. Clear scope, definition 2. Precise examples! 3. On the opening page!!! And the light came to my mind.

So, if you can't understand, maybe only the documentation is poor.


Practice makes perfect. Read more, practice more until you understand. It's okay to take longer than others.


Even if you've never met someone smarter than you - and chances are you have - it's highly improbable that you're the smartest. And even if you're smartest, there's probably someone who has more luck than you and will stumble on correct combination of keywords which you have to type in Google to get to the right answer.

So, learn to live with your limited mental resources and remember that endurance and perseverance are generally more important than smarts and usually make all the difference.

Of course, sometimes all the perseverance in the world won't help you. There are some problems which simply require greater intelligence than you posses. There are also problems which nobody in all of the human history was able to solve because they require greater intelligence than anyone living or dead has ever had. And a lot of problems are probably unsolvable.

Remember that it's not about you and your ego, it's about solving a problem at hand. If you lack discipline to think about problem instead of you, get over yourself and train your mind to keep your emotions in check.

  • People don't just "get over themselves" like you say. Nor can you "train your mind to keep your emotions in check". I don't know if you realize this, but we're all human beings with imperfections as well as self-images that need to be maintained. Perhaps I'm misreading you, but I see this answer as basically saying "suck it up and deal with it", which isn't terribly constructive and ignores the realities of our needs as human beings. – Jason Baker Dec 24 '10 at 2:26
  • Jason, I belive you are missing my point. My point is that emotions are volatile and that you can either choose to focus on them or wait for them to pass. It's always your choice to either pursue frustration or focus on something more constructive, it just takes some practice and grokking that you're not the slave to your emotions. – Domchi Jan 15 '11 at 22:27

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