《人月神话》百度文库地址:http://wenku.baidu.com/view/92ac6d31ee06eff9aef80775.html###
职业的乐趣
编程为什么有趣作为回报它的从业者期望得到什么样的快乐 首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样成年人喜欢创建事物特别是自己进行设计。我想这种快乐是上帝创造世界的折射一种呈现在每片独特、崭新的树叶和雪花上的喜悦1。 其次快乐来自于开发对其他人有用的东西。内心深处我们期望其他人使用我们的劳动成果并能对他们有所帮助。从这个方面这同小孩用粘土为“爸爸办公室”捏制铅笔盒没有本质的区别。 第三是整个过程体现出魔术般的力量——将相互啮合的零部件组装在一起看到它们精妙地运行得到预先所希望的结果。比起弹珠游戏或点唱机所具有的迷人魅力程序化的计算机毫不逊色。 第四是学习的乐趣来自于这项工作的非重复特性。人们所面临的问题在某个或其它方面总有些不同。因而解决问题的人可以从中学习新的事物有时是实践上的有时是理论上的或者兼而有之。 最后乐趣还来自于工作在如此易于驾驭的介质上。程序员就像诗人一样几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象来建造自己的“城堡”。很少有这样的介质——创造的方式如此得灵活如此得易于精炼和重建如此得容易实现概念上的设想。不过我们将会看到容易驾驭的特性也有它自己的问题 然而程序毕竟同诗歌不同它是实实在在的东西可以移动和运行能独立产生可见的输出能打印结果绘制图形发出声音移动支架。神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语屏幕会活动、变幻显示出前所未有的或是已经存在的事物。 编程非常有趣在于它不仅满足了我们内心深处进行创造的渴望而且还愉悦了每个人内在的情感。
职业的苦恼
然而这个过程并不全都是喜悦。我们只有事先了解一些编程固有的烦恼这样当它们真的出现时才能更加坦然地面对。 首先必须追求完美。因为计算机也是以这样的方式来变戏法如果咒语中的一个字符、一个停顿没有与正确的形式一致魔术就不会出现。现实中很少的人类活动要求完美所以人类对它本来就不习惯。实际上我认为学习编程的最困难部分是将做事的方式往追求完美的方向调整。 其次是由他人来设定目标供给资源提供信息。编程人员很少能控制工作环境和工作目标。用管理的术语来说个人的权威和他所承担的责任是不相配的。不过似乎在所有的领域中对要完成的工作很少能提供与责任相一致的正式权威。而现实情况中实际相对于正式的权威来自于每次任务的完成。 对于系统编程人员而言对其他人的依赖是一件非常痛苦的事情。他依靠其他人的程序而往往这些程序设计得并不合理实现拙劣发布不完整没有源代码或测试用例或者文档记录得很糟。所以系统编程人员不得不花费时间去研究和修改而它们在理想情况下本应该是可靠完整的。 下一个烦恼——概念性设计是有趣的但寻找琐碎的b u g却只是一项重复性的活动。伴随着创造性活动的往往是枯燥沉闷的时间和艰苦的劳动。程序编制工作也不例外。
另外人们发现调试和查错往往是线性收敛的或者更糟糕的是具有二次方的复杂度。结果测试一拖再拖寻找最后一个错误比第一个错误将花费更多的时间。 最后一个苦恼有时也是一种无奈——当投入了大量辛苦的劳动产品在即将完成或者终于完成的时候却已显得陈旧过时。可能是同事和竞争对手已在追逐新的、更好的构思也许替代方案不仅仅是在构思而且已经在安排了。 现实情况比上面所说的通常要好一些。当产品开发完成时更优秀的新产品通常还不能投入使用而仅仅是为大家谈论而已。另外它同样需要数月的开发时间。事实上只有实际需要时才会用到最新的设想因为所实现的系统已经能满足要求体现了回报。 诚然产品开发所基于的技术在不断地进步。一旦设计被冻结在概念上就已经开始陈旧了。不过实际产品需要一步一步按阶段实现。实现落后与否的判断应根据其它已有的系统而不是未实现的概念。因此我们所面临的挑战和任务是在现有的时间和有效的资源范围内寻找解决实际问题的切实可行方案。 这就是编程。一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动。对于许多人而言其中的乐趣远大于苦恼。而本书的剩余部分将试图搭建一些桥梁为通过这样的焦油坑提供一些指导