软件开发人员的能力模型
不知觉做软件开发已经有6年了,回看自己的经历,可以说是相当有成就感,6年中通过不断的学习的实践,从一个菜鸟成长为一名软件架构师,这个过程可以说充满乐趣。通过学习各种理论、技术、方法,并有在实践中应用,观察它们的效果,思考它们之间的关系,再把不同事物融合在一起,形成一个完整的能力体系,以此来挑战更艰巨的软件开发任务。
我现在是一个框架师,所以看问题喜欢从总体架构出发,所以我认为人的能力也有一个架构存在,每个的能力架构都不一样,有的人能力架构比较合理,有的人则不那么合理,合理的能力架构能让较少能力元素(知识、技能、方法等)发挥出较大的作用,不合理的能力架构会浪费人的能力,让所学无所用。
什么样的能力结构是比较合理的呢,这不是一个简单的问题,这里我根据自己的经验总结提出一个参考模型,这个参考模型采用我们常见的分层架构模式。我认为一个软件开发人员的能力大体应该分为四个层次:
最高层:过程控制和管理 |
第三层:方法、思想和理论 |
第二层:具体技术、语言和工具 |
最底层:基础原理、基础知识 |
层以层之间存在一定的关系,上一层必须以下一层为基础,而上一层又反过来影响下一层。最底层是基础原理和基本技术:包括计算机原理、电路、数据结构、数据库原理、编译原理、操作系统等。这些知识是很基础的有了一定的基础才能更好的学习其它能力
第二层是具体技术、语言和工具,包括各种编程语言、开发环境、数据库、开发框架等。每显然,一般情况下要学习第二层的内容必须要有以最底层的能力为基础,当然也有人没有任何基础就能学习第二层的能力,但是一般这样学习效果很差,知其然不知其所以然,遇到一些问题也会不知所措。另一方面第二层的学习又会反过来影响最底层的能力,它能巩固基础知识的学习,能暴露出你在基础方面的不足,还能驱动你对基础知识的学习。当我还是个程序员的时候,学习的内容主要集中在这两个层次。
第三层是方法、思想和理论,包括面向对象思想、设计原理、设计模式、需求工程、UML等,同样第三层的能力也要以第二层为基础,具个例子来说,要学习面向对象的设计方法首先要学会一门面向对象语言还要会使用case工具,同时第三层的能力又会反过来影响第二层,好的方法能更好的发挥你的技术,还可以弥补技术的不足,举几个例子来说,设计做的好是不是写起程序来很轻松,断言、单元测试这些方法能让代码的质量达到前所未有的高度。
最高层是过程控制和管理,这个层次的能力通常涉及时间跨度和团队协作,包括项目管理的能力,软件过程的控制能力、版本控制的能力、需求管理的能力等。同样这一层次的能力也要以第三层的能力为基础,举例来说,如果软件没有好的架构,那不管采用什么过程最终都会一团糟,而良好的设计能力,再加上迭代的开发过程、严格的版本控制,就一定能开发出优秀的软件。
通过这个模型我们不难看出,一个优秀的软件开发人员各个层次的能力应该是比较均衡的,并且这些能力不应该是独立,它们应该能组合在一起发挥出整体性的威力。
通过这个模型也可以指导我们的学习过程,一般地,我们应该先掌握下一层的能力再掌握上一层的能力,但又不能只停留在下一层。我见过不少大学生,刚开始工作就学习项目管理,还一些做项目N年的前辈,能够把类库倒背如流,还不知什么是UML、什么是内聚、藕合和粒度。我觉得这都不是好的现象,我认为能力的学习也应该采取迭代的方式,我们先要打基础,但也不需要打一个完美的基础,我认为打个三成就够了,然后就可以尝试学习上一层的的能力,可能你会掌握一成上层的能力,这时会发现基础还打的有问题,然后再带着你的问题来补基础。如此反复,当你上一层的能力也达到三成时,又可以尝试再上层的学习。这时就把上一层当成是基础再上一层当成是上层。如此反复直到你爽了为止,哈哈。