首先,关注原始出处。
算法书里常常直接把算法列出来,然后把直指目标的东西罗列出来,于是程序员们就迷失在了一大堆“定义”“定理”“引用”之中,这时候就需要一个“回溯”的过程,找出每一个步骤的由来,为何选择了这个定理而不是别的?
一言以蔽之,关注原始出处。
我们在日常生活里也一样需要关注出处,没有算法书参考,我们应该怎么做呢?
很简单,多问自己为什么。例如,为什么这样做是对的,而那样做是错的?为什么这种解决方法是最优的?还有更好的解决办法吗?怎么证明?每个问题就能将你的思维拉回到问题实质本身,从原点思考问题。
其次,关注推导思路而不是最终结果。
就学习编程而言,算法只是一堆离散的机械步骤,缺少背后的思想支撑,这些步骤就没有一个本质层面上的关联。但如果知道了算法是如何一步步推导出来的(尤其是那些有关本质的步骤),我们就一下子拥有了大量的记忆提取线索,对其中任何一步的回忆都能让我们自己动手解决剩下的内容。
这在其它领域的学习中同样适用,制造属于自己的记忆提取线索,对于融会贯通地掌握知识非常重要。当掌握了背后的思想,有时只需要记住一个算法,就能解决所有的问题。
最后,重在分析推理而不是联想。
联想是强大的思维捷径,在任何时候都会抢占大脑的工作记忆。比如程序员在被问到“如何寻找区间最大值”时,最先进入他意识的一定是学过的某个算法,或是某个迷惑性的技巧。一旦开始这样的联想,就很容易让思考停留在问题的表层。联想有时也让你距离问题本身越来越远,而其实可能不用绕这么多弯。