今天开始读梦断代码了。
书中说道,“关于软件缺陷的话题,只要谈上几分钟,必会有人拍案叹道,‘为什么就是不能像造桥那样造软件?’”的确,掩卷长思,为神马不能像造桥那样造软件哪!细想起来,两者之间的根本不同在于,一个是体力劳动,以机械为主;一个是脑力劳动,以人为主。人,从来就不是一个确定的东西,有喜怒哀乐,有自己的偏爱和偏见,充满了各种不确定性,以它为主的项目,自然不可能做到分毫不差。软件工程的主要目的,就是尽量把这种不确定性从项目中剥离出来,使做软件真正成为一个工程,而不是个人英雄主义的胡拼乱凑。
《梦断代码》在讨论“软件时间”这一概念时,其中,布鲁克斯提出了一个十分著名的法则,“往以延误的项目中补充人力,只会使其继续厌恶”,这听起来像是一个悖论,但是其后无数年间的实践,这一原则都成了程序猿和开发经理的梦魇,他们“宁愿装作法则并不适用于自己,也不肯与之妥协“。布鲁克斯指出了其中要害,”只有在任务能分派给许多相互之间无须沟通的工作者时,人和月才是可互换品。“制作软件的大量工作受困与”序列约束“”,它限制的任务分解的程度:完成某项任务是处理其他任务的先决条件,这与人力投入多少无关。“十月怀胎,无论多少妇女参加都一样。”想想也是,一个完整的软件项目,必然要按照一定的流程来进行,诸如用户需求分析,详细设计等等,人力再多,有时也无法加快各个阶段的进度,反而可能会因为交流不畅而拖累整个项目。
所以一个项目不是投入的人越多越好,而是要按照一定的流程来做,这样才有可能及时完成。