作为IT业的一员,我们几乎每天都有大量的知识需要学习,有大量的技能等待我们去掌握。几乎从我决定“献身”程序员这一伟大事业之后,我就一直在考虑怎么提高自身的学习的能力(简称学习力),以下两张图作为我多年学习生涯得来的宝贵经验,拿出来和同学们分享。
如果你看到的第一张是埃及的金字塔,第二张是中国的太极图,说明我的图片没错:第一张代表“知识的金子塔结构”,第二张说明了“理论和实践的相生相克原理”。
一、知识的金字塔结构。我把我了解的软件知识分成了四个层次:思想,原理,技术和应用,他们之间的关系就像金字塔一样:
-
思想:目前我觉得能上思想的就两个:算法和面向对象。
- 原理:原理就有很多了,比如计算机组成原理,网络连接的原理,操作系统的文件访问原理,GC的运行原理等等。
- 技术:这个就数不过来了,比如Asp.net技术啦,Ajax,WPF……这些统统是技术。
- 应用:世界上所有机器上运行的代码,都算是应用。
思想到应用的划分没有高低贵贱,而只是抽象层次的不同。
学习的过程,就是通过某一个应用,了解它所使用的技术,进而掌握其中的原理,最后,领悟其中的思想。这大概也就对应了“了解”、“掌握”和“精通”这三个层次吧。所以学习力的高低,在于对高层次抽象的掌握能力。
举个例子:设计模式这最近几年很火,23个模式翻来覆去的有人在讲。我不知道有几个人认真看了,又有几个人能记得住,反正我比较懒,也比较笨。但是笨人有笨办法,面向对象就那么几个概念:“继承”、“派生”、“多态”,说的再具体一点,也就DIP,SRP这么几个原则,大体看看每个设计模式中运用了哪些概念和什么原则,下次在遇到类似的问题,估计就能把这个模式用出去。(PS:此处选择性的忽略了模式在沟通上的意义,呵呵)。
所以要提高学习力,咱们看书就地多看些有深度的书,什么“精通”啦、“速成”啦,就免了。孙子兵法、道德经之类的思想藏的太深,想用在代码里咱没那水平。像《敏捷软件开发 原则、模式与实践》,《深入浅出设计模式》之类的就刚刚好。
可是也千万别认为思想就比应用更重要,没有应用,要思想、原理、技术作甚?
二、理论和实践的相生相克原理。
说完抽象,再看看理论与实践的关系,老祖宗的太极图很形象的说明了这个问题,再看一下:白色代表理论,黑色代表实践:
- 白色走到头,和黑色接触的就更多:实践多了,更容易理解理论。
- 黑色走到头,和白色接触的也更多:理论的东西看多了,就可以更好的实践。
- 白色走到头,就会产生黑色:实践的东西多了,自然会有理论产生。
- 黑色走到头,就会产生白色:理论的东西多了,自然而然就会想去试试看。
所以我常用的方法是边看书,边写程序,看完书就试着把学到的东西用在项目里。感觉这样能把知识体系穿起来,容易记,不容易忘;写程序写多了就回过头来琢磨一下看看哪儿好哪儿不好,下次肯定会有进步。