《人月神话》第1章:焦油坑

岸上的船儿如同海上的灯塔,没法移动
程序员

A ship on the beach is a lighthouse to the sea...算法


巨兽在焦油坑中垂死挣扎,它们挣扎得越是猛烈,焦油纠缠得越紧,没有任何猛兽足够强壮或具备强壮或具备足够的技巧,可以挣脱束缚,它们都沉到了坑底。编程

过去几十年的大型系统开发就犹如这样一个焦油坑,各类团队,大型的或小型的,庞杂的或精干的,一个接一个淹没在了焦油坑中。ide


独立来看,每个坑都不是问题,但置身于软件项目中,众多问题交织在一块儿,就可能带来具大的风暴,世界自己就是一个复杂的系统,软件系统亦是如此。测试

任何人都对本身过分自信,入坑前,感受本身无所不能,望风披靡,幻想着本身总能在各类复杂环境中安然度过。前人的智慧告诉咱们,若是没有认真地进行需求分析、设计、进度计划,风险管理等,真正开始开发后,总会出现让本身陷入使人痛苦的麻烦。这也须要咱们拥有丰富的项目管理经验和解决复杂问题的能力。spa


既然是明知是焦油坑,那咱们为何要跳进去呢?操作系统

大概是由于过程是痛苦的,但结果是快乐的!设计

快乐在于不只知足了咱们心里深处进行创造的渴望,并且还唤醒了每一个人心里的情感。接口

这也是为何看起来前路艰险,但每一年仍有成千上万的人加入到程序开发的洪流中。ip


在开始以前,先了解4个概念:程序 program、编程产品 programing product、编程系统 programing system 和 编程系统产品 programing system product


程序program

它自己是完整的,能够由开发者在所开发的系统平台上运行。


编程产品programing product

这是能够被任何人运行,测试,修复和扩展的程序。它能够运行在多种操做系统平台上,供多套数据使用。

要成为通用的编程产品,程序必须按照广泛承认的风格来编写,特别是输入的范围和形式必须扩展,以适用于全部能够合理使用的基本算法。

同时,对程序进行完全的测试,确保它的稳定性和可靠性,使其值得信赖。这就意味着必须准备,运行和记录详尽的测试用例库,用来检查输入的边界和范围。

此外,要将程序提高为程序产品,还须要有完备的文档,每一个人均可以加以使用,修复和扩展。

经验数据代表,相同功能的编程产品的成本,至少是已经通过测试的程序的3倍。


编程系统programing system

这是在功能上能相互协做的程序集合,具备规范的格式,能够进行交互,并能够用来组装和搭建整个系统。

要成为系统构件,程序必须按照必定的要求编制,使输入和输出在语法和语义上与精肯定义的接口一致。

同时程序还要符合预先定义的资源限制—内存空间,输入输出设备,计算机时间。

最后,程序必须同其它系统构件单元一道,以任何能想象到的组合进行测试。

因为测试用例会随着组合不断增长,因此测试的范围很是广。由于一些意想不到的交互会产生许多不易察觉的bug,测试工做将会很是耗时。

所以相同功能的编程系统构件的成本至少是独立程序的3倍。


编程系统产品 programing system product

其成本高达9倍,然而,只有它才是真正有用的产品,是大多数系统开发的目标。


软件从业人员的苦恼,主要来自于如下几方面:

一、苦恼来自追求完美。罗马不是一天建成的,软件系统项目要用修长城的理念,而不要用修核电站的思惟。

二、苦恼来自由他人来设定目标,供给资源,提供信息。如必需要和其它程序员合做,拙劣的设计,不完整的代码或文档等,不怕神同样的对手,就怕猪同样的队友。

三、概念设计是有趣的,但寻找琐碎的bug倒是一项重复性活动。

四、无奈 - 当历经千心万苦,产品终于要发布时,却已显得陈旧过期。尤为是如今的互联网产品,竞争更是激烈。


这是一个痛并快乐着的职业,但对许多人而言,其中的快乐远远大于苦恼。

待到软件系统项目成功的那一刻,看到每一个人脸上洋溢着的幸福,感受历来没有经历过任何苦恼。

相关文章
相关标签/搜索