在来到美国前的一年,我又读了一遍《射雕英雄传》。在第三遍读的时候,我对郭靖背九阴真经,而后在丐帮大会上看到北斗七星悟到北斗天罡阵法的片段念念不忘。如果当初不把九阴真经背下来的话,郭靖怎么又能感悟得了呢?
后来读王阳明全集,对于知行合一的大话和空话之前是听了一遍又一遍。“看似高深,也就那么一回事吧”。但有一天我突然意识到,知行合一并不是要同时发生,也不可能同时发生,像郭靖,他一样是做到了知行合一,只不过是先知而后行,然后做到了知行合一。
知行合一并没有告诉人们怎么去学习,只是告诉人们理论实践要相互强化,相互印证。但哪里是个开始呢?如果我今天要开始学习 design,那从理论开始呢还是实践开始呢?
其实这个问题不难,如果我们思考人类的优势,我们会发现,后一代人做的比前一代人多是因为我们都站在巨人的肩膀上。我们有千年传承下来的知识体系,不需要从零开始造轮子。学习一个东西的过程,应该从知道基本概念出发,然后动手实践强化概念。
我们其实也可以说先行后知是不得已的事情,先知后行才是学习的模式。
这里的想法可能让人疑惑。因为我们现在大多数人大多数时间都是在遵循先知后行的学习模式,貌似见效不高啊!的确大家都在用,但有多少人是真正有行动力的呢?缺少主动性的人在“知”这一阶段很容易就蒙混过去(“我来看看这个。嗯,不过就是这样”),到了“行”的时候,需要的时候拿不出来,碰到了困难就退却了(“尼玛,这个怎么破”)。
我只需要举一个例子就知道了。SICP 这本书,对于很大一部分人学CS的都耳熟能详(我指书名),大家都在博客里面吹牛逼这么书是多么让他们大看眼界毁三观。但实际上写过前三章练习题的人都算少,根本不用说做完全部五章。你看,大家读了前几章,刚知道一点点什么是抽象,就合上书了,觉得练习不需要做。真是这样吗?其实大家不做的原因不过是因为难罢了,因为前面几章简单的题大家都在做。这本书的习题也就只有第一章和第二章的简单。
想清楚了这点之后,我们就有了做事的原则。我们读文史哲,常常讲究背诵。背诵是一件很痛苦的事情,但中国的历史和文学,恐怕都只能是通过“常读诵习之”的方法来理解和感悟,从而获得“知”。CS的人找工作,常常谈到刷算法题(特别是 leetcode)。跟风刷leetcode是一件很冒险的事情。因为我们要“学习”算法,所以我们应该遵守先知后行的原则,更有意义的应该是找一本口碑好的算法书,看完一章之后,从头到尾刷一遍后面的练习题。学习 design,了解了原理之后要马上自己动手,光线,阴影,布局,自己需要亲自尝试才能为之后的知识打下基础。
英语学习则更体现出先知后行。我们在新闻报纸上看到生词,除了猜测它的意思之外,应该动手查阅词典了解意思,这个才是“知”的过程,如果一直放任不管,即使这个单词出现了几十次,恐怕也难得理解。
先知而后行常常都是一个让人痛苦的过程。在学习理论的过程中不知道怎么去实战,认为自己只知道理论的东西毫无意义。急于求成的人往往就直接开始动手,但往往重复造了轮子又浪费了时间,还说,这个自己要从头做才记得牢。但别忘了,人一旦不反复使用知识,哪怕是自己的发明,也会忘记得一干二净(还记得为什么大家编程要加注释吗?哪怕这些代码是自己的发明,遗忘它是必然的)。