I seem to remember reading somewhere some list of 4 "levels" of understanding multithreading. This may have been in a formal publication, or it may have been in an extremely informal context (even like in a Stack Overflow question, for example). Unfortunately I don't remember who referred to them or precisely what they were.

I seem to recall that they were roughly like:

  1. Total ignorance
  2. Awareness mixed with incompetence
  3. Relative competence mixed with fear
  4. True understanding

My intention is to refer to these levels in a blog post I'm writing, with a reference; but I can't for the life of me remember where I first encountered this list. Brief Google searches have proved unfruitful.

  • 1
    Whatever you are remembering must be completely arbitrary so your examples would probably work just as well. Feb 3, 2011 at 21:46
  • You mean: The people that think they know, those that know they don't now and those that are unaware, but nobody truly knows if they know. Feb 4, 2011 at 0:32
  • 1
    And at 5. Knowing what priority inversion is and how to prevent it. Feb 4, 2011 at 1:58
  • 3
    This question appears to be off-topic because it is about understanding general topics rather than the software development life cycle and computing concepts.
    – user40980
    Sep 12, 2013 at 14:08

3 Answers 3


Do you mean the "Four stages of competence"?

  1. Unconscious incompetence
    The individual does not understand or know how to do something and does not necessarily recognize the deficit. They may deny the usefulness of the skill. The individual must recognise their own incompetence, and the value of the new skill, before moving on to the next stage. The length of time an individual spends in this stage depends on the strength of the stimulus to learn.

  2. Conscious incompetence
    Though the individual does not understand or know how to do something, he or she does recognize the deficit, as well as the value of a new skill in addressing the deficit. The making of mistakes can be integral to the learning process at this stage.

  3. Conscious competence
    The individual understands or knows how to do something. However, demonstrating the skill or knowledge requires concentration. It may be broken down into steps, and there is heavy conscious involvement in executing the new skill.

  4. Unconscious competence
    The individual has had so much practice with a skill that it has become "second nature" and can be performed easily. As a result, the skill can be performed while executing another task. The individual may be able to teach it to others, depending upon how and when it was learned.

  • Haha, I think so! What I must be remembering is someone referring to these stages and applying them to the topic of multithreading. Good call.
    – Dan Tao
    Feb 3, 2011 at 21:49

I like the Dreyfus Model better. While the Four stages of competence addresses the total lack of knowledge (which the Dreyfus model doesn't address), there is a huge jump from stage 3 Conscious Competence, and stage 4 Unconscious Competence that the Dreyfus model does address in the step from Competent to Proficient to Expert.

  • That is indeed a nice model. I'm accepting JB King's answer just because I'm relatively certain he correctly identified the concept I was referring to (or anyway, the concept underlying that concept).
    – Dan Tao
    Feb 3, 2011 at 21:58

Peter Van Roy specifies a hierarchy of competence specific to multithreading. Roughly, the stages are:

  1. single-threaded
  2. deterministic concurrency without the possibility of race conditions
  3. asynchronous message passing
  4. global mutable state

Convergence in Language Design: A Case of Lightning Striking Four Times in the Same Place

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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