2007-02-13

何日开发软件如砌墙?

“什么时候能像砌墙一样开发软件就好了,把一块块砖头一样的东西堆起来,就成软件了......”

不止一次听人这么白日梦语。是啊,要是那样该多好啊,把像砖头一样的现成的各个软件模块粘和在一起就完成工作,然后就早早下班,或回家抱孩子或“采菊东篱下,悠然见南山”,神仙般的生活,简直和上帝一样,花六天时间就完成了创世工程,然后就功德圆满地退休了......

不对,如果那样的话,随便雇两个民工就能开发软件了,和用砖头砌墙一样,还有俺的事吗?和他们竞争这个可不占上风,人家成本低,身强力壮,还有丰富的砌墙经营。估计到时候不得不“采菊东篱下”,采菊这个活虽然挣的钱不如砌墙多,但不用太多力气,只是没工夫抬头“悠然见南山”了......  -_-!

软件开发真的能像砌墙一样吗?软件开发和砌墙有何不同?

仔细一想,其实拿砌墙和软件开发一块比较是不太合理的,地位不同。当然不是指社会地位的高低不同,而是指处于的工作环节地位不同。在稍微大一点的建筑工程中,砌墙其实只是建筑设计完成后的实施阶段,各种设计已经完成,已经拿到详细绘制的图纸,只需照着图纸做而已。而软件开发则包含了设计工作和实施工作,可以说软件开发人员相当于“建筑师+民工”。如此看来,软件开发和砌墙是否能一样就不是一个问题了,不修改问题本身这就根本不是一个真正的问题。

既然如此,换个问题:能否使软件开发和建筑开发一样呢?

使软件工程和建筑工程一样,在设计阶段把所有的设计工作都完成,得到一张或多张施工图纸,此后在工程使的指导下,雇一批民工,搬砖的搬砖,拌水泥的拌水泥,砌墙的砌墙......在算定的某一天,一栋大楼如期交付。对应到软件工程中可能就是软件设计师把所有的设计工作完成后,得到详细设计,然后雇一批会敲键盘的民工,噼哩啪啦地往电脑里敲字符,然后也是某一个算定的时刻,完整的软件光盘从光驱里吐出来......

可能吗?当然可能。就有人想这么干过。日本人就擅长此道,把软件设计做的详细到伪码级,交给程序员后,几乎不需要动什么脑筋,把伪码对应到具体的语言就行了,虽说这个对应的工作交给民工有点夸张了,但是交给从印度鼓吹出来的“软件蓝领”是没有问题的。因此,从这个过程来看,把编程和砌墙比较起来是半斤八两的。这样做的好处是编程过程是高度可控的,时间和花费都是可控的。

但是这样有效吗?怀疑之。虽然没有实践过这个方法。但我想至少在需求易变的项目中是不合适的,而软件开发的项目很少是能够做到需求不变的,不像结果是实体的建筑工程一样开工以后基本不能改动,这点上有根本的区别。也正是这点,给软件带来了巨大的优越性,同时也给软件工程带来了灾难与陷阱。同时也没有必要这么做,编写伪码和编写实际程序所需时间不会相差多少。况且,编程的程序员不甘于每天砌墙,而设计人员也不会满足于止步于伪码,让设计由代码动起来是一件快乐的事,怎能拱手让与他人呢?

此路不通,是否另有蹊径呢?砌墙用的是现成的砖头和预制的构件,软件开发是否能使用现成的“砖头”——模块或构件呢?

答案当然是肯定的,自从计算机诞生之日起,这种努力就没有停止过,并且硕果累累。从大的方面看,操作系统、数据库、应用服务器都是积累下来的软件构件,和新开发的软件砌在一起就构成了运行在二进制处理器上的计算机上面的软件系统。从小的方面看,不管是自己积累下来的软件通用模块或者日益丰富的开源构件,都是软件开发中的好砖头。善于应用这些砖头应该是软件民工的一项基本素质。

当然目前还远没有达到所有的软件开发工作就是用砖头砌墙的地步,但大体发展的方向是这样的。

如此一来,软件开发不还是有可能发展到和砌墙一样吗?

还是和上面一样的道理,如果不计把程序输入到电脑中的工作,软件开发不是实施,而是设计。重要的不是把砖头砌成墙,而是如何把这些砖头砌在一起,各个砖头如何有序摆放,摆放成什么样子等等,这些都是设计的工作。软件工程的实施我们可以认为仅仅是把设计开发完成的软件刻录到光盘上,进行包装等等。

软件的砖头越来越多,搭建软件的工作越来越容易,是否意味着需要的开发人员越来越少呢?

也是分两部分看。纯粹进行搭建工作的人应该会越来越少,但是会有更多的人被吸收到上层的设计中去。软件的需求目前是越来越多而不是越来越少,还远没有达到饱和。由于模块化导致软件构建的效率提高而空闲出的软件开发人员会设计更多好软件,刺激人们对软件的需求,激发出更多的需求,在满足这些需求的过程中又会形成更多的砖头......这是个良性循环。

不过,不要过早庆幸,如果想要被顺利吸收,需要接受变化并且努力学习,跟上潮流,否则还是得采菊去。当然,单个个体的遭遇是不会影响整体命运的。

砖头导致了搭建软件的工作越来越简单,比如有一天也许对着软件生成器大喊:“我需要能***,能****,能*****......的软件”就能开发出这样的软件。这样固然已经不错了。但是会不会有更省事的呢?我干嘛要告诉软件生成器我需要什么样的软件呢?他不能自己去想吗?或者让机器人找他提这些需求。

如果这一天真的达到了,那一定是机器人进行所有工作的时候。因为当我们连需求都不需提的时候,我们一定无需使用软件了,也就无需工作了。如果不是机器人统治了人类,那么就是人类实现了共产主义。到那时,完全解放了,完全不用操心由于软件开发砌墙化带来的失业威胁。那时候我们干什么去呢?

听马克思他老人家的安排吧:白天打猎,晚上讨论哲学,如果怀旧,就去砌砌墙......

没有评论: