一,什么是软件开发
人类是集体动物,我们所从事的任何活动都是基于群体的。如果脱离了这个群体一
切活动将毫无意义。就像每到春天,我爸要下水稻的种子,等到水稻长成苗后将其移植
到面积更大的犁好的田地里。再过几个月,等到秋天的时候,也就是收获的季节。我们
全家都活动起来,把沉甸甸的稻谷收割进来。在这整个过程中,我们都是集体活动,当
然有些事情并不是每个人都能做,比如犁地我就不会,但我会插秧,我会割稻子,我还
会踩打稻机,还有我会放牛^_^。所以我们家也有明确的分工,老爸犁地,我放牛,老
妈插秧,当然我和我弟也要插秧,我们都得割稻子,老爸还要踩打谷机,我和我弟换着
踩……
种地是一种很典型的集体活动,有职责,有分工,有投入,有产出。
对于软件开发,从客观上来说,与种地没什么两样,都是集体活动。软件开发的投
入的是老板的金钱,各种管理者的协调,开发者的脑细胞和所有人的时间。而软件开发
的产出只有0/1的串--一些只能有计算机能正确和高效地理解的文字组织。种地的目
的是为了生存,而软件开发只不过是换了一种求生存的形式,就是为了満足用户需求,
以此来换取购买生存用品的金钱。
与以上沾满铜臭味或赤裸裸的理解相比,我更喜欢站在一个艺术家的角度来理解软
件开发。主观上来讲,我觉得在软件开发的这个集体活动中,开发者是艺术家,而管理
开发者的人是管理着一群艺术家的艺术家。
对于开发者来说,他只知道式样书,开发文档,用户需求(当然是开发者所理解的
用户需求,与实际用户需求可能会有些偏差,这也是无法避免的)。他还必须知道函数
调用接口,系统调用接口,而他最终完成的作品却是需要进行加工后机器才能理解的代
码。代码是对用户需求或开发者的灵感及内心世界的一种描述,就像并不是每个人都能
理解大画家的画一样,一般人并不能理解它,只有经过特殊学习的人才能理解它。而要
完完全全,真真正正地理解一份代码并不是一种容易的事。大部分开发者宁愿把已有的
一份代码扔进垃圾桶,自己从前开始做起,也不愿意挖空心思去理解别人写的代码。他
们会呕心沥血地雕琢着每一行代码,就像艺术家在玩弄着他的画笔,投入,认真且富有
创造力。
有时候,个性与集体个性难免会发生冲突,特别是在程序员与管理者之间。而每个
程序员之间的创造力有着很大的差别。软件开发的集体个性是顺从,顺从于用户需求,
顺从于解决方案,顺从于领导安排,顺从于编码规范,顺从于编译器,顺从于机器的理
解等等。而事实上,程序员并不是机器,他们无法做到没有个性,而且我也反对抹杀程
序员的个性。如果所有程序员都只是简单地执行顺从这条指令,我想也就是程序员消失
的那一天了。我始终人为,人的能量是无限的,如果有一种人能将其激发出来,而这种
人就是管理着这群艺术家的艺术家们。
对于管理者来说,他要理解每一个程序员的个性,并能够很好地利用这种个性。这
是一种利用的艺术。他们就像是操盘手,他们可以滑动手里的滑铁,决定着如可推进软
件开发的整个进程。他们的选择同时决定着程序员的选择,因为每一个程序也是一个操
盘手,在他们的心里也有一个滑铁,他们有权决定把生产效率和创造力滑向强还是弱。
所以管理者这位艺术家的选择就像下面这个简单的方块图:
快速 便宜 优质
□ □ 速溶柠檬茶
□ □ 昂贵的赛车
□ □ 强壮的海龟
如果管理者希望快速地开发出一个软件,当然质量上是无法得到保证的。而如果你
能投入更多的钱和人力,速度和质量都有可能得到保证,不过这样的代码是昂贵的。当
然,他们可以谨慎地迈出每一步,不过这种速度就像是强壮的海龟,我想用户可并不喜
欢。
不管开发者与管理者如何去理解软件开发,而这个集体活动的实质内容都是一样的
,需求,设计,编程,测试等等。做为开发者我不愿去理解这些工程学方面的词汇,总
觉得它们是如此的拗口,苍白无力……
阅读(1748) | 评论(0) | 转发(0) |