什么是“三分法”?
从应用范围的角度,我把软件研发所需要的知识分成大类,或者我把它叫做“三分法”。
第一类知识是现代软件研发方法,包括面向对象分析、设计、编程,设计模式,重构,以及轻量级的敏捷的、迭代的现代开发过程。这些知识居于现代软件研发最基础最核心的位置。具有最大的应用范围。
第二类知识是平台知识,包括编程语言(如C++, C#, JAVA等),操作系统,以及一些通用的开发平台(如MFC, .Net, etc)。
第二类知识我统称为领域知识。比如TTS,视频编解码,网络传输协议等等一定领域的专门知识。
“三分法”有何意义?
作为专业的软件研发人员,面对领域众多的软件产品,面对日新月异的研发技术,一定或多或少地经历过如何安排自己的学习,如何提高自己的学习效率的痛苦。诚然,作为现代人,终身学习基本是一个人在生活上得以安身立命的基础。不过在工作、学习、生活中,如何更有效的安排学习内容,从而最大化自己的学习投入的回报,始终是让我们生活更容易的关键。
“三分法”的意义一:In long term,三分法使我更有效的安排学习,使我的学习投入产出比最大。
从我自身的研发经历中,我把软件研发知识根据其应用范围分为三大类。在任何时候,我始终尽量安排学习和关注最具应用性的知识。当然这基本也和人们常说的做最重要最紧急的事情是相通的。比如,在平时和工作不忙时,我尽量把大量时间分配到第一类和第二类知识的学习,这不光是我深深感受到了基础知识的力量,比如面向对象技术使我软件的分析、设计能力成倍提高,这也是源于我的工作的特点。我基本算是主要解决软件研发工程上的问题,如果了解需求,如何设计软件架构,如何设计类结构,如何控制软件研发的风险。这些是我的主要工作。相信也是绝大多数软件研发从业人员的主要工作。由于学术背景和行业特点,我研发的软件领域跨度极大,再加上有时候不得不换换工作,使第三类知识的深入细致的研究对我很难是个长期的追求。我不鄙视第三类知识,反倒觉得精专的领域知识是许多软件项目成败的关键。不过落实到个人,或者我所看到的绝大多数程序员的生活,第三类知识大都只能做到follow,很难有环境让你清心寡欲的在某个领域深入研究和创新。如此说来,对于90%的程序员,就应该把主要精力放在第一类和第二类知识的研究、学习和实践。让我们最漂亮的解决工程上的问题。其实从一个专门领域研究的突破到成熟的软件产品面世,我们程序员们需要做很多很重要的工作。不要因为自己没有专门领域研究的机会和能力,就觉得没什么好做的了。其实对于大型项目,往往工程化问题更关键。所以我乐于学习第一类知识,认真的研究第二类知识。
“三分法”的意义二: In short term,三分法让我面对眼前问题或者选择目标方向时,更有的放矢。
作为专业的软件研发人员,发现问题解决问题就是我们的日常工作。面对问题,我习惯从本源来考虑它,分析其产生的原因。看我需要哪类知识的提高才能解决问题。比如分析发现需要大量领域知识突破的,我们就要找专门的人来协助,或者采用外协的方法,尽量控制研发风险。另外在工作方向选择时,根据自身的技术积累和兴趣爱好,以及公司大环境,选择自己最能复用已有知识的方向,也是让自己工作更轻松,贡献最大的方法。