代码改变世界

程序员职业的乐趣和苦恼

2008-09-06 22:53  Anders Cui  阅读(...)  评论(...编辑  收藏

久闻《人月神话》的大名,但却一直没有买它,下载的电子版也一直搁置在那里。直到最近看到同事桌上摆着这本书,才想去要用它打发上下班的时间。在第一章中有一段关于乐趣和苦恼的阐述,读来饶有共鸣,分享一下。

职业的乐趣

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

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

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

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

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

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

编程的乐趣在于它不仅满足了我们内心深处进行创作的渴望,还唤醒了每个人内心的情感

我的感受

我想做一名程序员,最初的动力来自于第一条和第五条,首先是创建事物的乐趣,第二是它较为“容易”,说它容易,是因为我拿来比较的是数学。本来还是想从事数学的,但数学的难度就不用多说了,而且还很抽象,我意识到还是编程更适合自己,我可以比较容易地获得成就感。然后是学习新知识的乐趣,我发现对技术感兴趣的人往往乐于学习新技术,即使这些技术在项目还用不是,但学到新知识的乐趣还是很吸引人的。最后,随着计算机的普及,非软件行业的人往往会对程序员很是佩服甚至是崇拜,这个也可以小小地满足一下虚荣心。

职业的苦恼

当然这个过程并不全都是快乐,它也有一些固有的苦恼。

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

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

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

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

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

我的感受

奇怪的是,我从未觉得“向完美的方式进行调整是学习编程的最困难的部分”,恰恰相反,我认为这是编程吸引人的地方之一,这会让人感觉自己更像“专家”。对第二条基本同意。寻找bug确实是一个烦人的过程,但我们在寻找bug的时候都知道解决这个bug会给自己带来怎样的快乐。对第四条基本同意。

最后作者总结道:“这,就是编程。一个许多人痛苦挣扎的焦油坑以及一个乐趣和苦恼共存的创造性活动。对于许多人而言,其中的乐趣远大于苦恼。”