To Program is to Understand. ---- Kristen Nyggard
学习新技术,可以提高一个人的学习能力和适应能力,对于IT人的重要性是不言而喻的。那么,你是否掌握了一套适合于自己的学习方法呢? 人总是太容易冲动,听说一样新技术,然后找来一本书,就刷刷地敲键盘学起来了。是否存在更敏捷的学习新技术的方法呢?只要勤于思考和探索,总会找到的。
学习一样新技术,首先必须充分了解它的价值。它用来做什么? 最有价值最精髓的是哪部分? 有什么样的应用前景和适用范围? 你是否有这样的使用需求?有必要的话,还可以探索它的来源。 通常这些信息从网上就可以获得。 切忌连基本概况都不了解就直接下手去学。即使周围的人都赞好,也有必要先做个大致的调研,权且称之为“技术评估阶段”。
其次,要理解其基本机制或所依赖的模型。 它依赖于什么模型或理论基础? 有哪些命令、工具或技术提供支持 ? 比如, MAVEN 依赖于 POM, SVN 构建于客户端服务器模型; 这些也可以从网上获得大致了解。
接着, 必须想清楚学哪些部分,以及怎么学。 有些新技术是随着时间不断发展的,于是形成了丰富多样的特性。作为初学者,最忌的就是贪多求全,巴不得所有东西都学到手。其实不然。可以按照“核心 -> 常用 -> 其它”的阶段来逐步攻克该技术。
★ 核心: 最擅长最精髓的部分, 具有不可替换性;
★ 常用: 为了扩展其用途,必须使之适应常用任务,部分可替换性;
★ 其它: 其它特性,可替换性强。
比如,当前流行的Spring 框架,就提供了大量的特性。其核心是依赖注入和控制反转特性、AOP功能。首先要掌握这些核心特性;其次, 适用于常用任务的部分,比如与数据库交互,与其它工具的集成,web MVC, 事务管理等特性;其它的,比如 JMX, JMS, 任务调度等特性,在工作需要的时候再去学习。 学习新技术跟构建软件有相同的特性。一开始不需要构建全部的特性,只需要构建最核心最常用的部分;其次,要注重可扩展性。 这个可扩展性就是人的学习能力。
怎么学也是非常重要的。制订一个可行的计划, 根据实际情况坚持学习与应用, 没有什么捷径可走。行动是最重要的。
如何学习其精髓?采用逐步深入的方式。先学会其使用,在使用的过程中体会这些功能的需求和思想; 其次,钻研源代码是最好的探知内部机制的方法,在钻研的过程中结合文档说明,可以加快这一进程。最后, 还要善于总结和回顾。
To Program is to understand. 最初在《The C++ Programming Language》序上见到这句话,只觉新奇, 现在觉得尤其深刻。软件开发活动,归根结底,考验的就是一个人的理解能力和领悟能力。 是否能够理解客户和领导的意图,同伴的想法和建议? 是否明白自己所要做的产品和正在做的事情? 是否能够驾驭复杂的概念和系统?对于新技术的学习,如果一个人不能理解事物背后的概念,那么,他即使懂得一些新技术的知识技能,也难以深入地掌握和应用。
要想真正驾驭软件开发活动,先过“理解”关。这也就是前一篇文章中谈及的“加强心智训练”的目的所在(实际上,身体锻炼、加强交流、扩大见识、了解计算机都非常有助于增强自己的理解力)。不要让自己仅限于操作性的技能。