用建造房屋来隐喻“构建软件”很恰当!
建造房屋前需要明确要建什么样的房子,医院,学校,个人住宅,大型写字楼还是其他,建造不同房子所需要用到的人力、财力、工具等显然不一样;做软件前同样需要做需求分析,明确要实现怎么样的软件。
需求做好后,建造房屋需要设计房屋结构,设计房屋风格等,要产生设计图纸等文档;做软件在需求分析后也要进行各种设计。
此后,进入实际“构建”阶段。建造房屋要“准备好建造地点,打好地基,搭建房屋框架,砌好边墙,盖好房顶,通水、电、煤气等”,这相当于软件的构建。在房子大部分完工后,需要进行装修美化,这相当于软件开发中的优化
整个建造房屋的过程,都应该有监理来负责监督,否则设计可能不合理,建筑工人可能采用了差拆料,这就像软件开发整个过程都需要有测试来监督。
书中举了几个例子,觉得挺有道理。
1、盖房子的时候,把一堵墙推倒然后移动半尺是很昂贵的(倒不是浪费了多少钉子,而是要付给工人更多的钱),所以,一开始的时候,就要尽量把房屋设计好
2、盖房子的时候,沐浴房可以买别人的,组合橱柜也可以买别人的,不见得什么都需要自己来做,做软件时也一样,可以利用现有的程序库完成很多功能,没必要什么都自己写(当然可以借鉴下别人的沐浴房是怎么做的,所以也有必要学习一下别人的程序库)
3、盖房子的时候需要用到很多工具,推土机、起重机、卡车。。。。写软件的时候也要用到很多工具,有些基本的工具如IDE、编辑器、调试器等要能熟练使用,但没必要对所有用到的工具都精通,你推土机开的再好,房子就肯定能建好吗?