Chung's Notebook

Frustration on programming

Posted at — Mar 10, 2021

Suppose there are two people, A and B.

A known nothing about algorithm.

B mastered the book Introduction to Algorithms. He didn’t read the book, but he could solve every single problem in the book easily within 10 minutes.

A wanted to learned hard from the book. He reads every sentence, paragraph, chapter thoroughly, absorbed every single bit of information from the book, learned everything he could learn. He couldn’t solve all the problems in the book on his own, but he tried his very best to understand the solutions, learned a lot from them.

After this process, A became much more skilled on algorithms. Question: is A now at the same level with B?

Probably not. Although A learned a lot from the book, he only learned the knowledge. A couldprobably solve all the problems in the book, but that’s only because he met the problems in the past. Give some variations of the problems in the book to both A and B, B would still have solved them much more easily than A.

Algorithm, or most stuff we need as a programmer, e.g. technical design, architecture, optimization, debugging, etc, are all skills, which is a mixture of knowledge and art. The frustration comes from the fact that we don’t know how to fill the gap between knowledge and skill.

What should A do after reading and learning the whole book? He must continue working, maybe working harder, for further improvements, but the problem is that it is hard to tell if one is going to the right direction. Only time can tell, and when it tells, it could be already too late.

A few years from now, when I graduated from school, I felt that I have learned a lot of knowledge, but not the corresbonding amount of skills. I thought it was a problem of experience, and I was young, I have time to accumulate experience and become a master, step by step.

A few years passed, now I learned something, I have better understanding on some categories, but the overall improvements are hard to tell. Even worse, when I go through problems on Leetcode, I found that I can’t solve some of the problems I used to solve. My code are not as clean and efficient as the code I wrote when I graduate. I’ve certainly lost something, but I don’t know if I’ve gotten something.

We know the rule of 10000 hours. I was (and I think I still am) passionated on programming, I’ve gone through the 10000 hours. And it seems that another 10000 hours doesn’t work, it could even lead me stepping backwards. What should be the next step after that?

Maybe this is what talent means: the ability to go for the right direction without any difficulties. One still needs to work hard for a better skill, but the only thing he needs to do is to work hard. Or maybe it is just an example of the survivorship bias, only those who luckily went through the right path are considered talented. It seems there is no way for one to go through a step by step, certain, deterministic process for getting better, no matter how hard one is willing to work.

Not everyone can become a master. A conclusion which is so simple, and so frustrating.