你知道那棵杨树底下有什么吗
当下时代,各种时髦技术层出不穷,尤其是IT行业,引领各种技术前沿,各种华丽的软件技术则是日新月异,让人无暇迎接,对于新入行的学徒而言更是如此。引用别人的一句话:用有穷的精力,去迎接无穷的变化,何苦呢 ! 你会发现永远都被牵着鼻子走,而且永远慢半拍,所以在面对这些层出不穷的技术的过程中,千万不要被蒙蔽双眼,从这些技术入手,多关心背后不变的东西。
人在智力方面与其他动物的不同点在于,人有归纳和演绎的能力。从孩提时代开始,人在智力上的锻炼首先体现在归纳上,我们观察万事万物,得到一些基本的规律,有了这些规律,就能反向去演绎没有观察到的事物。我们能观察到的毕竟只是世界的极小极小的一部分,我们也不可能去追求全面的观察,毕竟那是无穷无尽的。如同以往的瀑布模型,试图预先把所有的需求细节都观察清楚,然后再动手设计编码一样不可行,细节(现象)总是一个无穷无尽的集合,永远也不可能全部观察清楚,这就是瀑布模型之所以不可行的根本原因。
软件开发领域更是如此,只是起始的观察粒度比小孩的观察粒度更加抽象了而已,各种技术就是对应的是现象,而背后不变的规律就是原理,当掌握了原理,再去学习技术,和新手去学习一门技术,过程是不一样的,前者是在演绎,而后者是归纳,演绎比归纳相对要轻松的多,这就是为什么两个人同时学一门新技术,掌握的速度和深度可能有天壤之别的原因。
到这里,有人会问,那既然这样,我们直接去学习背后的原理,而不是这些具体的技术,不是更好嘛?这同样也不可行,不从具体的技术入手,规律性的内容过于抽象,根本无法理解。所以我们需要大量的观察练习,练习的过程,基本都是依葫芦画瓢,这是在增强对现象的观察,这都需要基于具体的技术,经过大量的这种重复性的练习,就会具备掌握背后原理的基础能力。但是这并不意味着具有这个基础能力,就会自然地掌握不变的规律。依靠自身从现象总结出规律,需要很大的偶然性,牛顿从苹果掉地上发现了万有引力,而其他人并没有,不管牛顿具有多么高的天赋,这来他来说也只是一个偶然。所以希望得到提升的一个可靠的办法就是看书学习,这里有前人的珍贵的灵感发现。我见识过已过不惑之年的程序员,知识面却狭窄的可怕,只了解自己一直在使用的那些具体的语言工具,对那一小部分倒是很熟练,但是这很可怕的,具体的技术是非常容易过时淘汰的,越是具体越是明显,所以不要停留在动手练习上,一定要记得读书。
从具体的现象(对应各种技术)入手,但是不要停留的观察上,一定要用好归纳的能力,掌握各种千姿百态的时髦技术背后不变的规律,掌握了规律,学习时下各种时髦技术,就是演绎,这时候你会很轻松惬意,而不是被动地跟随技术潮流。
有一个小女孩指着远处一棵问妈妈:你知道那棵杨树底下有什么吗?妈妈:我不知道。小女孩:我知道,下面住着一群小蚂蚁。小女孩很得意于她的观察,妈妈也鼓励了小女孩。这位妈妈清楚,小女孩正好处于努力观察世界的阶段,观察到的所有现象,都将成为她将来学习更多知识的素材。
回到软件开发的领域,这种现象也很普遍,只是没有如此和谐,小女孩会以此为据点来炫耀,妈妈会直接拿起鞭子教训。软件领域,参与者都已是 思维完整的成人,没有人有对待小孩的耐心和责任。温伯格先生有一句话:专业程序员最反感的事情就是一个刚毕业的学生跟他大谈软件工程。这绝对有道理,但是我反过来思考一下,觉得这是每个有进取心的学生都会干的(至少表明他对知识的渴求与荣耀),如果没有这番炫耀的激情,反而没有什么前途。就目前而言,所观察到的这些现象确实就是学生掌握的软件工程的所有内容,这没有什么值得可批判的。