编程的乐趣和苦恼——人月神话笔记

编程系统产品的演进

在图1.1左上部分是程序,它本身是完整的,可以由作者在所开发的系统平台上运行。它通常是车库中产出的产品,以及作为单个程序员生产效率的评估标准。

有两种途径可以使程序变成更有用,但是成本更高的东西,他们表现为图中的边界。

  水平边界以下,程序变成编程产品。这是可以被任何人运行、测试、修复和扩展的程序。它可以运行在多种操作系统平台上,供多套数据使用。要成为通用的编程产品,程序必须按照普遍认可的风格来编写,特别是输入的范围和形式必须扩展,以适用于所有可以使用的基本算法。接着,对程序进行彻底的测试,确保它的稳定性和可靠性,使其值得信赖。这就意味着必须准备、运行和记录详尽的测试用例库,用来检查输入的边界和范围。此外,要将程序提升为程序产品,还需要有完备的文档,每个人都可以加以使用、修复和扩展。经验数据表明,相同功能的编程产品的成本,至少是已经过测试的程序的三倍。

  回到图中,垂直边界的右边,程序变成编程系统中的一个构件单元。它是在功能上能相互协作的程序集合,具有规范的格式,可以进行交互,并可以用来组装和搭建整个系统。要成为系统构件,程序必须按照一定的要求编制,使输入和输出在语法和语义上与精确定义的接口一致。同时程序还要符合预先定义的资源限制——内存空间、输入输出设备、计算机时间。最后,程序必须同其它系统构件单元一道,以任何能想象到的组合进行测试。由于测试用例也会随着组合不断增加,所以测试的范围非常广。因为一些意想不到的交互会产生许多不易察觉的bug,测试工作将会非常的耗时,因此相同功能的编程系统构件的成本至少是独立程序的三倍。如果系统有大量组成单元,成本还会更高。

  图1.1的右下部分代表编程系统产品。和以上的所有情况不同的是,它的成本高达九倍。然而,只有它才是真正有用的产品,是大多数系统开发的目标。

职业的乐趣

编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐?

首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈现在每片独特、崭新的树叶和雪花上的喜悦。

其次,快乐来自于开发出对其他人有用的东西。内心深处,我们期望其他人使用我们的劳动成果,并能对他们有所帮助。从这个方面,这同小孩用粘土为“爸爸办公室”捏制铅笔盒没有本质区别。

第三是整个过程体现出魔术般的力量——将相互啮合的零部件组装在一起,看到他们精妙的运行,得到预先所期望的结果,比起弹珠游戏或点唱机所具有的迷人魅力,程序化的计算机毫不逊色。

第四是学习的乐趣,来自于这项工作的非重复性。人们所面临的问题,在某个或其他方面总有些不同。因而解决问题的人可以从中学习新的事物:有时是实践上的,有时是理论上的,或者兼而有之。

  最后 ,乐趣还来自于工作在如此易于驾驭的介质上。程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。程序员凭空的运用自己的想象,来建造自己的城堡。很少有这样的介质——创造方式如此的灵活,如此的易于精炼和重建,如此的容易实现概念上的设想。

职业的苦恼

然而这个过程并不全都是喜悦。我们只有事先了解一些编程固有的烦恼,这样,当它们真的出现时,才能更加坦然的面对。

首先,必须追求完美。因为计算机也是以这样的方式来变戏法:如果咒语中的一个字符、一个停顿,没有与正确的形式一致,魔术就不会出现。实际上,我认为学习编程最困难的部分,是将做事的方式往追求完美的方向调整。

  其次,是由他人来设定目标,供给资源,提供信息。编程人员很少能控制工作环境和工作目标。用管理的术语来说,个人的权威和他所承担的责任是不匹配的。不过,似乎在所有的领域中,对要完成的工作,很少能提供与责任相一致的正式权威。而现实情况中,实际的权威来自于每次任务的完成。

  对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。依靠其他人的程序,而往往这些程序设计的并不合理,实现拙劣,发布不完整或者文档记录的很糟糕。所以,系统编程人员不得不花时间去研究和修改,而它们在理想情况下本应该是可靠完整的。

下一个烦恼——概念性设计是有趣的,但寻找琐碎的bug却只是一项重复性的活动。伴随着创造性的活动的,往往是枯燥沉闷的时间和艰苦的劳动。程序编制工作也不例外。

另外,人们发现调试和查错往往是线性收敛的,或者更糟糕的是,具有二次方的复杂度。结果,测试一拖再拖,寻找最后一个错误比第一个错误将花费更多的时间。

  最后一个苦恼,有时也是一种无奈——当投入了大量辛苦的劳动,产品在即将完成或者终于完成时,却已显得陈旧过时。可能是同事和竞争对手已在追逐新的,更好的构思;也许替代方案不仅仅是在构思,或许已经安排了。

 

这,就是编程。一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动。对于许多人而言,其中的乐趣远大于苦恼。而本书的剩余部分将试图搭建一些桥梁,为通过这样的焦油坑提供一些指导

原文地址:https://www.cnblogs.com/begodlike/p/8577434.html