自顶向下和自底向上, 往往被人们用来描述软件开发的不同思路,但是我觉得它们同样可以用来表示不同的学习思路和方向。
先来说说自顶向下:
所谓自顶向下,就是根据自身职业规划(某一阶段目标),并针对该目标的实现,理清需要得知识储备,并勾勒出知识点之间的联系,简而言之即知识体系。
自顶向下的知识体系是宏观指导,它具有重要性:
- 大方向上不会跑偏,对各种新技术有更好的取舍标准,不至于茫然而恐慌,也不会随意跟风。
- 能够提升新知识的获取速度,因为你总是发散的思考问题,更容易产生联系。
- 能够提高问题解决能力。不知你有没有发现,请教那些经验丰富的同事的时候,他们经常很快就会定位到问题所在, 即使 google 也会比你更快搜索出结果。同样面对的是新问题,为什么他们就比你快,不知道你思考过没有。其中的奥妙我认为还是在于知识体系, 因为同事关注的不是问题表象,而是产生问题的上下文,再根据具体问题,就能很快检索出关键词。 一切的根源原来在于同事拥有比你更完善和健全的知识体系!
写到这里,我停下了很久,为的就是规划和整理自己的知识脉络(我将另起博客讨论这个问题)。
自低向上:
如果我们将个人发展比喻成一棵不断成长的树,那么自顶向下的知识体系就好比树径,枝干;树光有躯干是不行的, 因为你还要有叶子(需要光合作用),此时自底向上的学习就好比一片片枝头的树叶,足够的树叶才能为躯干的生长提供充足的能量。
所以,自底向上的学习也是极其重要的,它是知识体系落地实施的坚实基础,如果没有它,知识体系就是空洞的,夸夸其谈。
作为一名 Ruby 开发者,开发新功能对你来说是容易的,因为你不需要了解太多底层技术实现,社区中总能找到对应的封装; 你只需要看看某个 gem 的文档就能快速搞定工作。
但是这样对于个人发展而言,真的好吗?如果你仅仅只是会用 gem(工具), 而不是了解背后的依赖的基础知识和原理,你的水平只是停留在使用工具层面。
你会为工具变化太快而烦恼,因为工具都是为某一特定需求的具体实现, 需求和实现都是在不断变化的,它只是一些花哨的招式而已。
自底向上的学习,恰恰可以解决这些问题,因为它学习和补充的是更底层的知识, 它们是经典而久经考验的,也不常常变化,它更像内功心法,当你真正领悟的时候, 根本不会在乎工具的一招一式,使用任何工具实现都能轻松驾驭。
当写到这里的时候,我已经开始将我经常用到的 gem 找出来,反复阅读和推敲其源码。
总结:
自顶向下和自底向上是两个不同纬度的学习方法,自顶向下是自底向上的宏观指导,自底向上是自顶向下的坚实基础,它们互相联系,缺一不可。