哥是搞建筑的,主要负责水电的设计,最近与哥讨论关于工作中的异同,猛然发现建筑和软件有着无数的共同之处,后来上网查了下才知道原来软件从建筑中吸取了好多的经验,以下是网上找到的一篇文章,写的不错:
建筑工程与软件工程的异同
建筑是一个古老的行业,从金字塔开始,已经有了几千年历史;软件则是一个新的行业,软件工程不过40年历史。但软件业从建筑业中吸取了很多营养,例如模式。笔者同时拥有建筑和软件两个行业的工作经验,对两个行业进行了简单的比较,请各位指正。
建筑 软件
步骤 成果 担当 监理 步骤 成果 担当 QA
总体设计 建筑效果图 用户/建筑师 总体规划 总体设计书 用户/构架师
勘察设计 地质勘察报告 勘察工程师 模块设计 调研报告 系统分析员
设计图纸 (结构、水电等) 相应专业工程师 模块设计书 各模块 系统分析员
主体施工 建筑物主体 主体施工队 编码 执行代码详细设计书 程序员 测试员
装修 最终完工建筑物 装修施工队 包装 最终软件产品 美工、文档、包装、印刷者
在建筑施工的过程中,施工队包括工人、技术员、检验员,相当于软件开发过程中的程序员、主程序员、测试员。监理则相当于QA。
建筑设计的不同专业需要互相配合,如水电管线设计必须配合结构设计,打洞容纳水管时必须避开承重梁柱。但设计时不可能将所有细节问题全部考虑清楚,例如水管穿孔原设计直径10cm,本可以避开承重梁柱,但施工时使用了不同品牌的水管,水管外径变大导致穿孔直径必须扩大为15cm,就可能与梁柱冲突。其它一些问题,如电梯的供电线路应该与电话机房的供电线路分开以避免干扰等,完全依赖相关规范和设计者的经验。在建筑施工的过程中,经常会发现此类细节问题需要调整,在施工现场灵活处理,并将修改标注在设计图纸上。最后建筑的图纸以施工修改后的图纸为准。
施工中遇到细节问题的多少,体现了设计水平的高低;遇到问题能否迅速处理,体现了施工水平的高低。实际施工队进场前,技术员都要先审核设计图纸,尽量预先发现并解决此类细节问题。
建筑施工的过程中,设计方案的调整较少。这首先因为设计人员明白设计方案的缺陷将导致巨大经济损失甚至事故,对设计方案的审核比较重视,从而保证了质量;另一方面业主也知道调整方案将导致成本增加,一般不会轻易调整。
软件开发过程中的成本增加比较隐蔽,常常被忽视。分析员、程序员出于善意和自信,往往低估变化导致的工作量,贸然同意用户的修改要求,同时提出要求的用户往往没有增加费用的权限,实际上并未支付任何费用。不成熟的用户、不成熟的软件开发人员,导致项目的变动失控。
但是软件,尤其是管理软件,总是处于不断的变化中。目前常用的对策有二:一是记录好文档,二是多次迭代,随时给用户一个可用的版本,从而让用户可以尽早发现问题,好象业主会经常到工地观察实际进度一样。
建筑业与其它行业一样,任何新材料、新技术的采用,必然是预先经过多次试验,证明其可靠性,才能实际运用。而软件项目中,未经验证直接使用新技术的例子比比皆是。