刚看了熊的一篇《做软件堪比搞装修》,感觉这个比喻的确很不错,现在中国的软件业与装修业的确是很大的相似之处,特别是在混乱程度上极为相似。
但是拿软件与建筑相比也绝不是没有理由的。且不说GoF的设计模式源自于建筑师C.Alexander的理论,在整个软件开发的过程,也是与建筑设计的过程极为相似——注意,是建筑设计,而不是建筑过程。刚好前几天我曾经工作过的一家公司就是做建筑设计行业软件的,所以也接触过一些建筑设计院,大致知道一些。
建筑设计阶段基本上相当于软件的开发过程,而建筑的建设阶段则相当于软件的应用过程。而“图纸制订后基本不做更改”的猜测是不正确的,绝大多数建筑设计图纸都会在建设阶段作少量的修改的。
而且建筑设计大体上分为两个部分:建筑设计和结构设计。在建筑设计阶段是需要很多的创造性的。不可否认“建筑业是一个已经非常成熟的工业,有非常多的规范和经验”,但这些,更多的是存在于结构设计部分,而在建筑设计部分,同样存在着巨大的变数。
——顺便说一句:前一段国内很多的大项目,如大剧院、奥运场馆等的设计搞招标,那些国外设计机构能胜出,很大程度上是由于他们的建筑设计才能。事实上他们把这些项目拿下后,拿了大笔设计费,然后基本上都是用其中很少的一部分钱把繁琐的结构设计任务外包给国内的设计院去做的。
建筑业的成熟更多地表现在流程上:比如建筑和结构的分工,多次校审,会签……这些才是软件业最需要向建筑业学习的部分。
熊最后说道:
当然,装修和软件一样,同样也在规范中,但什么时候能规范到和建筑行业一样(暂时先放过建筑行业&IT硬件业的不规范行为),那可真是个不定数了.
这虽然有点悲观,不过的确是很困难的事。毕竟建筑业有了数千年的积累,而软件业的历史不过数十年。但是也要看到,软件业的发展是很快的,建筑业的变化需要十年甚至百年的时间才能看出来,而软件业的发展只能用日新月异来形容。
希望还是很大的。
关于建筑图纸是否修改的问题,总的来说,建筑图纸的修改基本不会对建筑主要部分伤筋动骨,除非设计的很烂.对建筑来说,需求上是相对比较有限,而且是可预测,可衡量的,在很多(不太成熟的)软件行业,需求本身常常是在设计甚至是开发更BT的是集成阶段才摸索出来的,迭代在软件行业里是非常重要的事情,而建筑就算有点小问题,只要能使用,基本上不可能扒了重做或不停的补丁加补丁版本叠版本–当然,如果是扒几块玻璃改条水管这种小事情还是可以做的.我更倾向于拿建筑业和IT硬件业类比,无论表象,性质都比较相似.建筑和装修,硬件和软件,各司其职,满足人们不同层次的需求.至于建筑业和软件有没有共通之处,我的意见是很多东西抽象到一定高度,共同性那是一定有的,别说做软件,做包子都可以画UML图~~ 认同了共性之后,怎么抓住其特点,是一门功课
另外,关于软件管理这种上层建设的事情,什么时候能得到很好的实现,这是一个很综合的问题,有经济,人性等因素,我想不能孤立的看.先谈一个层面吧:经济层面.胃里空空,脑袋晕晕,这是一个现实问题.管理是要成本的,很多人都有把管理做好的思想和理想,也有很多方法论和规章制度,但这都是要花时间,人力,资源的.这些成本,在建筑,制造等传统行业花的起(如果不花代价更大),在大型的,赚钱的软件行业也花的起,但我不打算脱离现在国内的软件行业现状来看这问题,虽然今天我在的公司是有钱折腾的,但我下一个公司,下一个项目可能就不行,这也是完全可以理解的,所以对于软件管理,我更倾向于一棵红心,一双黑手~~佛在心头坐,但怎么来事就怎么做…至于什么时候成正果,那不是悲观不悲观的问题,而是不是当前最需要关心的问题 .HOHO
“建筑设计阶段基本上相当于软件的开发过程,”我觉得应该是相当于架构设计,高层设计,最多是低层设计过程,不包括编码过程,除非把编码过程列到”应用过程”里.象那种外包设计的,在外包之前可能相当于最多也就做了架构设计吧.现在的软件开发,很多还很难做到找几个高中生来做民工式编码,而且编码过程完全符合设计的,其中有设计考虑不周,需求更迭,技术难点等等原因,也是一个比较有意思的话题:)PS: 这就素BT三连回吧,我还是真闲,惭愧~
其实问题在于,对于一般人来看,把编写到一半的程序推倒重来比起把建造一半的房子推倒重盖,代价可以忽略不计,殊不知这是个没有硝烟的战场啊。另外,如果要把软件人员比作建筑工人的话,就把设计一块排除在外了,因为我们通常不认为建筑设计师是建筑工人,硬要比较的话,建筑工人可能接近于coding人员吧
嗯,我也回三点吧:1、建筑之所以没有扒了重来的事是因为:一、建筑设计一旦确定投入建设,就要有大笔的资金投入,所以不能不慎之又慎;但软件的实施成本从来都不是用户或软件公司会去考虑的问题。二、同样因为建筑业有厚实的积累,并且相对变化较少,所以具有较好的设计稳定性,因为变动较少。三、真有不合格的设计,一旦施工了也只能硬撑下去,不会扒了重来,最多祈祷而已。2、很赞成3、编码相当于结构设计中的如暖通、电气、上下水等具体设计过程——我始终认为编码也是设计的一个重要组成部分。
硬要比较的话,建筑工人更接近于编译器。^O^
O 不要搞出豆腐渣工程才是最重要的!^0^
俺不得不严重的声明一下,认为建筑行业规范,只是因为大部分程序员没有干过建筑。像俺这种民工出身的,从来不觉得建筑可取。大大小小的事情,说出来绝对吓死你们,比软件吓人多了。而且,建筑面临的那是什么责任啊,人命啊!还有终身责任制这个紧箍咒,最后结果如何?要多混乱有多混乱。比起来,至少在中国,恐怕还是软件好点。其实,什么都不重要,认真最重要,责任感最重要,具备这些的团队,自然会找到合适的方法,做出漂亮的系统。