Tuesday, October 30, 2007

I have been thinking about what it means to understand something. In computer science we tend to claim that we understand something, often in a way that is truly confusing. That is because often in CS one can can get by with little knowledge of something, without developing a truly deep understanding of the nature of what we are dealing with. This is probably true of real life as well and hence this blog entry.

I think it was several years into programming with C++, and other similar languages, when it struck me that I truly don't understand object orientation and OO programming. Knowing the syntax of the class construct or writing some programs that use classes does not mean that the program is written in an OO style. What my understanding lacked here was a good enough insight to use the philosophy of OO design to write my programs as communicating objects.

Sometimes, however, the level of non-understanding is much shallower than this. Very often we use a name or a pronoun as an explanation. I was reading Richard Feynman the other day, in one of this articles he talks about his childhood and his father:

He had taught me to notice things and one day when I was playing with what we call an express wagon, which is a little wagon which has a railing around it for children to play with that they can pull around. It had a ball in it -- I remember this -- it had a ball in it, and I pulled the wagon and I noticed something about the way the ball moved, so I went to my father and I said, "Say, Pop, I noticed something: When I pull the wagon the ball rolls to the back of the wagon, and when I'm pulling it along and I suddenly stop, the ball rolls to the front of the wagon," and I says, "why is that?" And he said, "That nobody knows," he said. "The general principle is that things that are moving try to keep on moving and things that are standing still tend to stand still unless you push on them hard." And he says, "This tendency is called inertia but nobody knows why it's true." Now that's a deep understanding -- he doesn't give me a name, he knew the difference between knowing the name of something and knowing something, which I learnt very early. ... So that's the way I was educated by my father, with those kinds of examples and discussions, no pressure, just lovely interesting discussions.

I myself had developed wariness of pronoun-explanations early on, and hence my mis-explanation-beasts wear a more convincing sheep-skin. I have been reading about type systems this weekend. A couple of brilliant talks given by Kyle Ross and Michael Adams got me seriously thinking about the magnitude of my ignorance. I had a working knowledge of type systems, I knew enough tricks to impress people at juggling tricks and mimicry with respect to types, but I never truly understood them. Today I was commenting to someone that my understanding of existential quantification is just a bunch of random properties about what it stands for.  I know how to look at existentials as abstract data type encodings or as modules or such - but all those explanations seem like different ways to looking at it without actually taking the bull-by-the-horns.

My understanding of existentials reminds me of an old story about blind men seeing and elephant. Back in India, I think everyone has heard this tale at some point or the other. In the US most people don't seem to get the reference to the blind men seeing the elephant. This is an interesting and fairly good allegory for explaining  a limited or half-baked understanding.

http://www.kheper.net/topics/blind_men_and_elephant/Buddhist.html

http://en.wikipedia.org/wiki/Blind_Men_and_an_Elephant :

In various versions of the tale, a group of blind men (or men in the dark) touch an elephant to learn what it is like. Each one touches a different part, but only one part, such as the side or the tusk. They then compare notes on what they felt, and learn they are in complete disagreement. The story is used to indicate that reality may be viewed differently depending upon one's perspective, showing how absolute truths may be relative; the deceptive world of half-truths.

Coming back to computer science, the other day I was talking to my advisor, Prof Amr Sabry. We were talking about macro systems and staged evaluation and such. I believe we were talking about the KFFD algorithm or so when the topic came up. We had some algorithm that sort of works but was cluttered with a lot of details. Sometimes I tend to be a little lax about how I look at things and say, "If I can implement it, I understand it". This seemed to be a good measure of the understanding - if I can build it myself from scratch, I "understand" it.

At this point he said "Let me show you the difference between understanding something and knowing it well enough to be able to implement it. Consider the following encoding:

encoding

Now suppose I tell you that my phone number is 855-3127, can you convert it into the encoding? Well, sure you can. Can you implement it? Yes you can. You can write a little table and look up the values and such. But do you understand it?"

"You understand stand it when you are able to see this."

This put me back on my toes with respect to what I think I understand. A bit of much needed sharpening of the old intellectual-honesty-knife.

Tuesday, October 30, 2007 1:50:07 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]  | 
Saturday, November 03, 2007 12:01:33 AM (Eastern Standard Time, UTC-05:00)
wow..... the phone no encoding was amazing..
Joseph
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, strike) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview