我不知道你是否写过代码,并以此为乐。将程序员简单地定义为技术工人
是有欠考虑的。你是否以为你的程序员不需要创造力,只需要往模子里灌
代码并且掌握好时间和分寸就能造出好产品?你的分析员果然能在分析阶
段将整个项目细化到入口参数、出口参数、函数使用的具体算法都一一说
清?设计一个高效的、精巧的算法是否是一种艺术化过程?这种过程是否
可以不由程序员完成?你是否认为完成同样的功能用100k代码与50k代码对
与你没有任何区别?你是否认为程序员一天的工作只是他在这8小时内的成
果,而与他下班后的思维没有任何关系?
程序员的大量流动是因为程序员的盲目吗?我看不是,正是因为在国内有
这样一种现象,管理者没有软件概念,但是喜欢瞎指挥,他们从书本上找
到一些概念,不去理解,然后12345,一条条对着做,他们不考虑程序员的
创造性,不需要程序员的创造性,只要程序员跟着他们的口令,一步一个
动作,然后,做出来的东西上不了台面,进不了第二代,抹杀了程序员的
积极性,毁了程序员的荣誉感。以工作为快乐,并以把工作做好为最大快
乐的程序员自然要流动,去寻找自己的快乐。
软件的发展确实需要工业化过程,在分析、设计、开发过程中有详细的规划
和文档是十分必要的,但这并不否定需要程序员的创造力。分析和设计过程
很重要,但并不是要求得到一个程序代码流程图,分析是要能尽可能全面地
去描述现实世界,得到一个模型,可以通过这个模型去和用户交流,并且程
序员也可很好地理解这个模型。当模型确定后,以怎样的方式实现这个模型
应交给成熟的程序员去完成,高级程序员可以将一些小模块拆出来交给低级
程序员完成,但此时的低级程序员是在学习阶段,他的学习时间由他的学习
能力所决定,当达到一定水平时,高级程序员应放手让他去完成一些更具挑
战性的任务,这样,整个开发队伍就是充满活力的,不断进步的队伍,而不
是呆板的,等级森严的。整个开发过程是需要有文档记录的,如果发生重要
的人员变动时,文档是保证,但新加入的程序员能力应不低于他所替代的人
员(或低于但需要学习一段时间),他根据已有的功能模型和开发文档应能
很快开始工作,但是,对同样一个功能,这两人的实现方法可能是完全不一
样的,从中可看出他们的能力区别。
如果一件好的软件被实现出来了,我门可以称他为艺术作品,当他被复制后
做为产品销售并产生利润,我们称他为工业产品,这并不矛盾。
(100k行代码程序能算中等项目吗?也许还算不上,但若7倍于他的文档将有
1万页,真是不少。)