论坛首页 招聘求职论坛

[转]《人月神话》:关于(程序员)职业的乐趣和苦恼

浏览 3745 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-27  
偶尔复习了一遍《人月神话》的节选,这一段关于乐趣和苦恼的阐述,虽然未必能覆盖所有的情况,但已经把一些比较普遍的情况给概括了.其实乐趣和苦恼,无非就是那些东西,简单,但难以逾越.

-----------------------------------------------------------------------------------

职业的乐趣

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

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

第二是创建对其他人有用东西的欢乐。内心深处,我们需要其他人使用我们的劳动成果并感到有所帮助。从这个方面,编程系统与小孩用粘土为“爸爸办公室”捏制铅笔盒没有本质的区别。

第三是将相互啮合的部分组装在一起,并看到它们精妙的工作,实现预先所内建的结果,所体现的魔力。程序化的计算机具有像弹珠游戏或点唱机所有的令人入迷的魅力。

第四是学习的乐趣,来自于该工作的非重复的特性。问题在某个或其它方面总不同,解决的人员可以学习新的事物:有时是实践上的,有时是理论上的,或者两者兼有。

最后,是在如此易于驾驭的介质上工作的乐趣。程序员,像诗人一样,几乎工作在纯粹的思考中。程序员凭空地通过实现想象来建造自己的城堡。很少有创造的媒介如此的灵活,如此容易的完善和重建,以及如此容易的实现概念上的构架。(如同我们将看到的,容易驾驭的特性具有它自己的问题)然而程序同诗歌不同,是实实在在可以移动和工作的,以及产生独立于程序的可见输出。它打印出结果,绘制图形,发出声音,移动支架等。神话和传说的魔术在我们的时代变成了现实。即在键盘上键入正确的咒语,显示屏幕活动起来,显示从来没有或者存在的事物。编程非常有趣,因为它满足我们内部深处的创建渴望和愉悦了所有人共同的感受。


职业的苦恼

然而并不全部都是喜悦,了解一些固有的烦恼能使它们出现时,更容易忍受。

首先,必须追求完美。计算机也以这种方式来变戏法。如果咒语的一个字符、一个停顿没有与正确的形式严格一致,魔术不会出现。人类不习惯于完美,只有很少的人类活动需要它。我认为,向完美的方式进行调整是学习编程的最困难的部分。

其次,其它的人设定了目标,供给资源,提供信息。编程的人员很少控制工作的环境,甚至工作的目标。用管理的术语而言,某人的权威对他所承担的责任是不充分的。不过,看起来在所有的领域中,对完成的工作,很少能提供与责任一致的正式的权威。而现实情况中,工作推进的动力需要实际(相对于正式)的权威。对其他人的依赖的影响比较突出,这对系统编程人员尤其痛苦。他依赖者其他人的程序。通常这些程序设计得不合理,实现拙劣,发布不完整(没有源代码或测试用例),或者文档记录得很糟。所以系统编程人员必须花费时间研究和修改在理想情况下应该完整、可用和有用的东西。

下一个烦恼——设计概念是有趣的,但寻找琐碎的BUG 仅仅是一项工作。伴随着创造性活动的,往往是枯燥、沉闷的时间,艰苦的劳动;程序编制工作也不例外。另外,人们发现调试查错具有线性的收敛,或者更糟的是具有二次方的复杂度。所以,测试一拖再拖,寻找最后一个错误比第一个错误花费更多的时间。

最后一个苦恼,有时也是一种无奈——当某人花费大量劳动的产品在完成以前或完成时,显得陈旧。可能同事和竞争对手已在追逐新的、更好的设想。可能替代的方案不仅仅在构思,而且已经在安排了。现实的情况通常比上述的好一些。当产品开发完成时,新的、更佳的产品通常并不可用;仅仅是被大家所谈论。另外,它同样需要数月的开发时间。事实上,仅现实需要时,才要求使用最新的设想。因为所实现系统的价值已能体现回报,满足要求。

诚然,产品开发所基于的技术不断在进步。一旦设计被冻结,在概念上就已经陈旧了。不过,实际产品的实现需要阶段化和进行度量。实现的落后情况需要根据其它现有的系统进行测量,而非未实现的概念。我们所面临的挑战和任务是在现实的时间、有效的资源范围内,寻找实际问题的切实可行的解决方案。

这,就是编程。一个许多人痛苦挣扎的焦油潭以及一个乐趣和苦恼共存的创造性活动。对于许多人而言,其中的乐趣远大于烦劳。本书的剩余部分试图为通过这样的焦油潭搭建一些木板小径。

转自:http://vcbear.mblogger.cn/posts/40222.aspx
   发表时间:2006-12-27  
说得好,看来有必要买个《人月》le
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics