TonyW  
日历
<2005年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
统计
  • 随笔 - 3
  • 文章 - 0
  • 评论 - 5
  • 引用 - 0

导航

常用链接

留言簿(2)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
焦油坑(The Tar Pit )摘自<BROOKS的人月神化>
             
            岸上的船儿,如同海上的灯塔,无法移动。
            ---荷兰谚语

            史前史中,没有别的场景比巨兽在焦油坑中垂死挣扎的场面更令人震撼。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈,焦油纠缠得越紧,没有任何猛兽足够强壮或具有足够的技巧,能够挣脱束缚,它们最后都沉到了坑底。
            过去几十年的大型系统开发就犹如这样一个焦油坑,很多大型和强壮的动物在其中剧烈地挣扎。他们中大多数开发出了可运行的系统——不过,其中只有非常少数的项目满足了目标、时间进度和预算的要求。各种团队,大型的和小型的,庞杂的和精干的,一个接一个淹没在了焦油坑中。表面上看起来好像没有任何一个单独的问题会导致困难,每个都能被解决,但是当它们相互纠缠和累积在一起的时候,团队的行动就会变得越来越慢。对问题的麻烦程度,每个人似乎都会感到惊讶,并且很难看清问题的本质。不过,如果我们想解决问题,就必须试图先去理解它。
职业的乐趣
            编程为什么有趣?作为回报,它的从业者期望着什么样的快乐?
            首先是一种创建事物的纯粹的快乐。如同小孩从玩泥巴中感到愉快一样,成人喜欢创建事物,特别是自己的设计。我想这种快乐一定是对上帝创造世界的映射,一种呈现在每个独特、崭新的叶片和雪花的喜悦。
            第二是创建对其他人有用东西的欢乐。内心深处,我们需要其他人使用我们的劳动成果并感到有所帮助。从这个方面,编程系统与小孩用粘土为“爸爸办公室”捏制铅笔盒没有本质的区别。
            第三是将相互啮合的部分组装在一起,并看到它们精妙的工作,实现预先所内建的结果,所体现的魔力。程序化的计算机具有像弹珠游戏或点唱机所有的令人入迷的魅力。
            第四是学习的乐趣,来自于该工作的非重复的特性。问题在某个或其它方面总不同,解决的人员可以学习新的事物:有时是实践上的,有时是理论上的,或者两者兼有。
最后,是在如此易于驾驭的介质上工作的乐趣。程序员,像诗人一样,几乎工作在纯粹的思考中。程序员凭空地通过实现想象来建造自己的城堡。很少有创造的媒介如此的灵活,如此容易的完善和重建,以及如此容易的实现概念上的构架。(如同我们将看到的,容易驾驭的特性具有它自己的问题)然而程序同诗歌不同,是实实在在可以移动和工作的,以及产生独立于程序的可见输出。它打印出结果,绘制图形,发出声音,移动支架等。神话和传说的魔术在我们的时代变成了现实。即在键盘上键入正确的咒语,显示屏幕活动起来,显示从来没有或者存在的事物。
             编程非常有趣,因为它满足我们内部深处的创建渴望和愉悦了所有人共同的感受。职业的苦恼然而并不全部都是喜悦,了解一些固有的烦恼能使它们出现时,更容易忍受。
首先,必须追求完美。计算机也以这种方式来变戏法。如果咒语的一个字符、一个停顿没有与正确的形式严格一致,魔术不会出现。人类不习惯于完美,只有很少的人类活动需要它。我认为,向完美的方式进行调整是学习编程的最困难的部分。
             其次,其它的人设定了目标,供给资源,提供信息。编程的人员很少控制工作的环境,甚至工作的目标。用管理的术语而言,某人的权威对他所承担的责任是不充分的。不过,看起来在所有的领域中,对完成的工作,很少能提供与责任一致的正式的权威。而现实情况中,工作推进的动力需要实际(相对于正式)的权威。对其他人的依赖的影响比较突出,这对系统编程人员尤其痛苦。他依赖者其他人的程序。通常这些程序设计得不合理,实现拙劣,发布不完整(没有源代码或测试用例),或者文档记录得很糟。所以系统编程人员必须花费时间研究和修改在理想情况下应该完整、可用和有用的东西。
             下一个烦恼——设计概念是有趣的,但寻找琐碎的BUG 仅仅是一项工作。伴随着创造性活动的,往往是枯燥、沉闷的时间,艰苦的劳动;程序编制工作也不例外。
             另外,人们发现调试查错具有线性的收敛,或者更糟的是具有二次方的复杂度。所以,测试一拖再拖,寻找最后一个错误比第一个错误花费更多的时间。
             最后一个苦恼,有时也是一种无奈——当某人花费大量劳动的产品在完成以前或完成时,显得陈旧。可能同事和竞争对手已在追逐新的、更好的设想。可能替代的方案不仅仅在构思,而且已经在安排了。现实的情况通常比上述的好一些。当产品开发完成时,新的、更佳的产品通常并不可用;仅仅是被大家所谈论。另外,它同样需要数月的开发时间。事实上,仅现实需要时,才要求使用最新的设想。因为所实现系统的价值已能体现回报,满足要求。
             诚然,产品开发所基于的技术不断在进步。一旦设计被冻结,在概念上就已经陈旧了。不过,实际产品的实现需要阶段化和进行度量。实现的落后情况需要根据其它现有的系统进行测量,而非未实现的概念。我们所面临的挑战和任务是在现实的时间、有效的资源范围内,寻找实际问题的切实可行的解决方案。
             这,就是编程。一个许多人痛苦挣扎的焦油潭以及一个乐趣和苦恼共存的创造性活动。对于许多人而言,其中的乐趣远大于烦劳。<FREDERICK P.BROOKS,JR.  人月神化>
posted on 2005-06-15 08:41 TonyW 阅读(952) 评论(1)  编辑  收藏
评论:
  • # re: 你在焦油坑中吗?  慧慧 Posted @ 2005-06-17 20:25
    technology
    technology
    technology
    technology
    technology
    technology
    technology
    technology
    technology
    technology
    technology
    technology


    哇咔咔~~~~~捣乱~~~~~~~
    嘿嘿.  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © TonyW Powered by: 博客园 模板提供:沪江博客