人月神话中的神话(二)
------从游击队向正规军的转变
正如《焦油坑》一章中所论述的那样,编程系统产品开发的工作量是独立程序工作量的9倍,其中相同功能的编程产品是经过测试程序的3倍,编程系统是程序的3倍工作量。说明了程序一旦规范化、系统化、产品化往往都需要付出更多的精力和人力。
其实这个过程,个人认为就是从游击队向正规军的转变。简陋车库中的两个程序员就是游击队队员,做什么都快,不需要职业化。那么正规军是如何做的呢?对于《亮剑》这部电视剧,大家应该都不陌生吧。解放战争后,上级领导认识到了规范性、理论性及继承性的重要性,强迫要求李云龙等参加几个月的军事理论学习、各种战术理论研究等,从更高的角度来看待战争。
其实这个过程就是一个职业化、系统化的过程,这正是游击队所不具备的。可以把我们读书的那段时间,看作是在游击队里面锻炼, 毕业进公司做产品,可以认为是完成了一次蜕变,开始向正规军转变。另外一个事例就是,大家都知道要成为一名职业化的经理人往往要比普通的经理人付出更多的时间和精力。
对于任何产品,产业化团队的生产率是:1000行/人年, 不知作者得出这组数据时,有没有算上其他的人员 。 对我们自己的产品进行了一下统计,全流程的生产率是1740行/人年 ,如果算上非开发人员,估计还是比较高。有一次,曾经和几个同事聊天,说一个程序员真正一生中也写不了多少代码,大部分时间都在做设计,讨论问题,写文档。如果用这个数据来衡量,似乎是对的。 可能部分 人开始有反对意见了,每个项目我都写了很多的代码,生产率很高呢,肯定高于此值 。 想到这种场景,不由想起了我才毕业的那会儿,往往都没有想清楚,就开始写代码,写着写着发现有一种更好的方案,然后开始删除已经完成的代码,或者基于完成的代码进行修改,确实整个过程写了很多的代码,但最终在统计生产率时不会统计曾经修改过的废代码。记得当时还犯的一个错误是,为了完成一个功能,没有设计的概念,用代码堆砌,写了很多无用的代码。我们项目中就有这样的一个员工,一个函数写了几千行(而我们编码的建议是一个函数长度200行左右),当我review这部分代码时,发现函数中大量雷同的代码。
这两种现象都可以认为是不专业化的表现。在开始编码前,想想前期的投入是否充分,设计是否合理,系统架构及各种实现方案是否可行,数据结构设计是否合理,算法采用的是否合理等等,还有评审是否都做到位了。
当把自己从一个游击队员变成一个预备级正规军后,在享受编程乐趣的同时,也要能忍受编程所带来的烦恼。
这就要需要我们有一定的忍受力及坚韧性,才有可能成为成为一名真正的正规军。
成为正规军后,
还要做一些富有挑战性的事情,争取成为一名老A。