Sunday, June 08, 2008

Why good is actually bad.

Basic notion has it that as we gain more experience, our peers or children gets to reap the benefits. Well, the problem is, that is where the problem lies. You see, human learns by experience, be it good or bad. When we made a mistake, some external signals, be it your teacher or your mum tells you not to do it again (Bad experience). When we did something right, you are rewarded or praised (Good experience). Call it reinforcement learning, call it supervised learning, the point is, if you did something wrong, if the signs that you did something wrong was hidden from you, you are learning to repeat your wrongdoing. You may not implied that, or want to, but believe it or not, you are (asking him to repeat the wrong doing). There is no such thing as, "You are doing it wrong, but I'll just let you go this time.". It makes absolutely no sense. If you look at this way, this is common sense. We may not like being scold or make mistakes, it's all aweful medicine, but sometimes the patient just needed it.

The scary thing is, that’s what we do every now and then. Let me tell of a fictional story to illustrate the problem. A software programmer discovered that with C++, it is difficult to write code that does not leak memory, he suggested the team to use Python instead, before the team has decide which language to use. All is good and well. Well, the problem is C++ is still prevalent. Many legacy systems are still written in C/C++. When one of the other programmers in the team was assigned to maintain legacy software written in C++, he might not perform. Why? He/She has never learned best practices of C++! And the sole reason of that is because he/she never gets to learn it anyway; every time the chances come one of the programmer in the team will recommend the team to use a more modern, safer language. So you see, the point is, if you are only told that it's a wrong way and you should not go there, you think that it has saves you whole lot of trouble, but the truly sad truth is, it does not mean that you have actually learn anything. You merely avoided the problem.

Now, some of you might argue that there is simply too much to learn, it is unfeasible to learn everything. While that is true, if that something to learn is something fundamental, it is a mistake not to go through the entire learning process. This is the case where shortcut is not a good idea. Like the famous saying goes, “If we do not learn from history, we are bound to repeat it”. And the only way to learn history is to be in history. Walk in their shoes. Doing what they are doing. Merely being told the mistakes of the past does nothing to prevent it from happening it again, since there may be new, unexplored alternative path that will ultimately lead to the same mistake. And the only way to prevent it from happening is to have greater understanding of the nature of the mistake, and learning how to prevent it from ever happening again.

Perhaps, this is why there has been talk that the quality of Computer Science graduates are dropping, due to the fact that Java was chosen as most CS first language, where as lower level languages like assembly and C/C++ should be taught first, because they not only taught the students about the language itself, but also the fundamentals of computer architecture itself, how things work in the low level and etc. You can read all about it in [Computer Science Education: Where Are the Software Engineers of Tomorrow?].

The truth is, it is extremely dangerous to say that all history is useless experience, though that is not to say that there is no such thing as useless experiences. If you studied machine learning, you will know that, a typical artificial neural network would become brain dead if it is only showed positive samples without any negative samples during the training phase. A human brain works almost in the same principle, since a human brain is really both a discriminative and a generative system. Throwing off the discriminative part of our brain and it is likely that we will never learn. Similarly, if a baby is only taught the right way of doing things, the baby will not have a clue of if what he is doing is right or wrong. In other words, his discriminative ability, his ability to discern what is right or wrong, what is good or bad is simply not there or severely random and thus flawed.

Even if there are times when we needed to choose which knowledge to gain, I shudder to think at the outcome of making the wrong judgement on which knowledge is useless, and which is not: Because depending on what the situation is, it's actually very hard for us to really know for sure. Like Steve Jobs said, it's impossible for us to connect to dots ahead of time. We can only do so, looking back.

This is all obvious and understandable. However, recently, it is increasingly becoming harder to made mistakes, as we are becoming more intolerant to mistakes, while technology is becoming more adept at hiding complexities that are deemed to cause human mistakes. In the office, you are not allowed to use tools that your project leader deemed is bad, you will be fired for making the wrong decisions; In the university, you can't opt for subjects that are deemed to be obsolete by some, you are forced to answer questions based on what is stated on the textbook instead of your own thinking, which ultimately affected our creativity as mentioned in this article; In the house, children are taught not to talk to strangers, just like what Bruce Scheneier in his article "The Kindness of Strangers". In almost every cases, one is simply not acceptable to be different from others, you have to be just like everyone else, even though everyone else could be wrong. We should be given guidance, yes, but more importantly, we should be given the chance to make mistakes! Not repeating the same mistakes should be everyone's responsibility. Not the enforcer. Ideally.

To summarize, discriminative capability is important for us to learn. It is extremely crucial that we are left to made mistakes so that we would not do it again. The experience of doing something wrong is much more important than the experience of doing something correctly. Now, if there is an alternative way for us to experience the whole crucial process of making mistakes without actually wasting any time for it and yet learn a good lesson out of it, I would really like to know about it.