Understanding and knowledge are '''completely different things'''. [moved from AdvancedConcepts] I'm having a hard time reconciling this with your comments above (and the thesis of this page, for that matter). Understanding for its own sake is a fine, laudable goal. But if you want real understanding, you're going to have to put in the time and effort to learn the beginning, intermediate, ''and'' advanced concepts. An educational TV special won't cut it, nor will a popular book on the subject. You don't necessarily have to learn the basics first, though it's probably easier (but less interesting) to do so. And you certainly don't have to learn them at a university. But if you really want to ''understand'' object-orientation (as opposed to ''using'' it), you'll want to learn about (for the SmallTalk definition) message sends, actors, continuations, prototypes, PolymorphicInlineCaches, biological chemical messengers (hormones and neurotransmitters), and probably several concepts that I don't know myself. For the C++/Java sense, you need to learn about function pointers, vtables, indirection, polymorphism, and the implicit "this" parameter. And to understand why SmallTalk uses SmallTalk-style object-orientation and C++ uses C++-style and Java uses Java-style, you need to learn all that, and CLOS, and BetaLanguage, and the histories of all the languages involved. -- JonathanTang You've fallen into the trap of conflating knowledge with understanding. (Incidentally, polymorphic inline caches have next to nothing to do with OO since they're an optimization detail. Admittedly, an OO-specific optimization detail.) "real" understanding is a bogus concept. It's a euphemism used to dismiss "mere" understanding in favour of expert ''knowledge''. In actuality, understanding has nothing to do with knowledge. A person can have vast stores of knowledge yet understand none of it. Conversely, a person can have deep understanding of a field yet know almost none of it. I've personally met people with vastly more knowledge than I possess in a given field that also had far less understanding than I do of it. In fact, that's the general case since most people don't have my analytical skills and you can forget about matching my synthetic abilities. * The conflation is deliberate. I included PICs because you can't really ''understand'' interfaces until you understand the implementations behind them. You can use them fine, but I wouldn't call that understanding. Same goes for vtables and function pointers, both of which are optimization details. And I don't just mean efficiency concerns, though that's a very real issue often overlooked by designers. Implementations often point the way to a synthesis of two very disparate concepts. For example, SchemeLanguage came about because GuySteele looked at the implementation of continuations and of actors in his interpreter and realized that they were exactly the same code. (Yes, I realize that there are subtle differences involving security, but you wouldn't be in a position to know that until they'd been unified so you could compare and contrast the differences.) ** To understand OO you need a concept of polymorphism. You only need a concept of inlining if you want to understand how an OO language can be fast. Polymorphic inline caches are just a combination of the two, one that deepens ''their'' understanding, as opposed to an independent concept. In fact, PICs are neither a necessary concept, nor a helpful one even to how Smalltalk works behind the scenes! For that, you need very different concepts like VMs, object vs immediate pointers, and so on. ** And the idea that you can't understand an interface without knowing how it's implemented just proves that you don't understand OO, which is based on the negation of your claim, thereby nullifying the value of your opinion on the subject. This by the way is one of those cases where had you reflexively criticized yourself, you would have realized that you'd utterly dynamited your own position. * It's also true that understanding is relative, and so I'm perhaps in error in saying "really understand". In the grand scheme of things, humans are amazingly stupid, and it's a miracle we've managed to avoid blowing ourselves up. But there are levels of understanding, and to reach the next one, you need a jolt to shake you out of the complacency of understanding. Knowledge, particularly knowledge that contradicts your existing worldview, is usually the best way to achieve this. "real" (as in final, ultimate) understanding is probably unattainable, but that's not a good reason not to strive for it. -- jt * You know, until I explained it you didn't know what understanding was. So you're not in a position to tell me what's necessary to gain superior understanding. The knowledge necessary to incite someone out of their worldview may be as small as that others disagree, indicating that their worldview is incomplete. * What YOU should understand is that "jolt" and "complacency" are emotional words that convey a certain disdain for understanding. And in reality, a jolt can just as easily lead someone to ''lesser'' understanding as to ''deeper'' or ''different'' understanding. Worship of knowledge is a fool's game, which you're trying to buy your way back into. Most people go through life with no understanding of what they're doing or what they know. They expect that by amassing sufficient knowledge, they will magically gain understanding from it. After enough years go by where they amass yet more useless knowledge, they eventually lose track of the fact that they understand none of it. Or at best, understand it only in an extremely shallow, completely self-referential, manner. Knowledge and understanding are fundamentally different. * Knowledge is a necessary, but not sufficient, condition for understanding. It's really easy to say "Oh, I understand this, I can synthesize it all" - I've done it tons of times in my own studies. And probably 90% of the time, I'm really wrong and there's some additional knowledge I don't have that blows my synthesis to hell. Problem is, I don't ''know'' that I don't have this knowledge, so I go along in my merry FalseUnderstanding. I'm lucky; I'm JustaStudent, and when I do this people just smile and nod and think "Oh, he'll learn." If I tried it as a grown adult, everybody would (rightfully) think me a CrackPot. -- jt * You can stop the snide remarks since I doubt you have any significant synthetic abilities. In which case you'd be talking about something you don't know anything about. Knowledge comes in basic, intermediate and advanced values. So do skills. That shouldn't be surprising since knowledge is just a type of special skill; the ability to recall some particular arbitrary fact. Understanding is completely different and does not come in three levels. Complexity has no meaning in the process of understanding, the process of ''assimilating'' a concept. Concepts come in one of two varieties, ''fundamental'' and ''advanced''. A fundamental concept is one that is easily stated because it is abstract. An advanced concept is one that is easily understood because it is concrete. When learning mathematics, you start with the advanced concepts such as association, commutation, and tables for the integers under multiplication. Then you work your way down until you get to fundamental concepts like the axioms of group theory and ring theory. Eventually, you get to the most fundamental concepts, those of mathematical logic, concepts like 'axiom', 'symbol' and 'theory'. The same applies for every other field, if you're actually expected to understand it. There are far more differences between understanding and knowledge. Knowledge is static and amassed only with the greatest of difficulty through arduous experience. Understanding is dynamic and comes to you with a suddent flash. Knowledge is monotonic, so that the more you work in a field, the more you know in it. Understanding is unpredictable, so that working in a field can confuse you and destroy all your understanding of it. And finally, knowledge is objective while understanding is personal. These are all reasons why understanding is precious to me, while expertise is so valued by the notoriously risk-averse elites. It's possible to gain vast understanding very quickly. Far, far quicker than a university education would ever permit. This is because university programs focus almost exclusively on knowledge at the expense of understanding. This is reflected in academic books. For instance, NoamChomsky's books are dense with knowledge, but the understanding that can be gained in all of them wouldn't fit in a single light book if stated plainly. Skimming them will likely gain you as much understanding as plowing through them. Nearly all academic books fit that pattern. IvanIllich's fit a different pattern in that his books repeat the same understanding in subtly different ways. Then there are extremes like AndrewTanenbaum's Operating Systems Concepts which contains exactly zero understanding of its subject matter (Unix), never mind its putative subject matter (OSes in general). -- rk Very true. Mostly this is because understanding, as you say, is personal, while knowledge is objective. Thus it's possible to write a textbook that'll impart vast knowledge and no understanding (Operating Systems Concepts is a good example) to a large number of readers, while it's very difficult to write a textbook that'll impart vast understanding and only the knowledge that's necessary (StructureAndInterpretationOfComputerPrograms is the best example I can think of). Usually understanding comes becomes a certain little bit of knowledge has pushed you over the CriticalMass necessary to make that final leap. You learn by amassing knowledge that forces you to challenge your worldview and come to a new synthesis. -- jt Yes, this is more or less the case. However, there is wide variability in people's attitudes to contrary knowledge, both in their acceptance of it once encountered and in their actions prior to encountering it. Some people don't need to be "forced" to challenge their own worldview and synthesize a new one. In fact, forcing someone to engage in a purely voluntary and externally invisible activity simply doesn't work. People are either willing to gain deeper or different understanding, or they are not. And browbeating isn't the kind of thing that makes people willing to do anything. The relation between knowledge and understanding is a tricky one since you can understand a fact and know a concept or pattern. I haven't even given any explanation of what understanding is here. Understanding a concept is a matter of relating it to other concepts. I find that the best way to understand something is to explore its boundaries. Books that survey a field and contrast different interpretations of it tend to work well. ProgrammingLanguageConceptsAndParadigms would be my example of a book that conveys great understanding. -- rk ''I'd say you understand neither knowledge nor understanding until you figure out how to make a computer do both. ---- See also NeverMakeKnowledgePrerequisiteToUnderstanding, TeachAdvancedConcepts