技术杂谈 001.A:两个程序员的寓言

技术杂谈 001.A:两个程序员的寓言

2025-11-21

编者按

1985 年,来自伊利诺伊大学芝加哥分校数学、统计与计算机科学系的 Neil W. Rickert 在《ACM Sigsoft Software Engineering Notes》上发表了 《The Parable of the Two Programmers:两个程序员的寓言》。 这篇文章引起了很大的反响,从 1985 年至今,经常被大家在各大论坛、博客、社交媒体上讨论。

我在一次偶然的机会看到这篇文章,觉得很有趣,于是画了这个故事的示意图,跟原文放在一起,方便大家阅读。 我也写了两篇关于这个故事的后续,如果这篇故事引起了你的兴趣,可以期待接下来的文章。


原文

曾几何时,在彼此不知情的情况下,「自动会计应用程序协会(Automated Accounting Applications Association,以下简称 4A)」和 「综合计算机化资本公司(Consolidated Computerized Capital Corporation,以下简称 4C)」决定他们需要相同的程序来执行某项服务。

4A 聘请了一位程序员兼分析师 Alan 来解决他们的问题。与此同时,4C 决定请新雇用的入门级程序员 Charles 来处理这项工作,看看他是否像他假装的那么好。

两个公司的招聘情况

图 1:两个公司的招聘情况

Alan 在困难的编程项目中拥有丰富的经验,决定使用 PQR 结构化设计方法。考虑到这一点,他要求他的部门经理分配另外三个程序员作为编程团队。然后,团队开始工作,大量编写初步报告和问题分析。

回到 4C 公司,Charles 花了一些时间思考这个问题。他的同事注意到 Charles 经常双脚搭在桌子上喝咖啡。偶尔可以看到他出现在电脑终端前,但他的同事能从有节奏的敲击声判断出他其实在玩《太空侵略者》。

此时,4A 的团队已经开始编写代码。程序员们大约有一半时间在写代码和编译,剩下的时间则在开会,讨论各个模块之间的接口。

他的办公室伙伴注意到 Charles 终于不再玩《太空侵略者》了。现在他把时间分在脚搭桌上喝咖啡和在小纸片上涂鸦。他的涂鸦看起来不像井字棋,但也说不上有什么意义。

头两个月的进展

图 2:头两个月的进展

两个月过去了,Alan 的团队终于发布了实施时间表。再过两个月,他们将交付程序的测试版本。然后再经过两个月的测试和完善,应该就能产出一个完整版本。

查尔斯的经理此时已经厌倦了看他无所事事,决定找他谈谈。但当他走进 Charles 的办公室时,却惊讶地看到 Charles 正在终端前忙着敲代码。于是他决定暂时不提这事,闲聊几句后就离开了。不过,他开始更加密切观察 Charles,准备等合适时机再和他对质。虽然有些话如鲠在喉,但他很高兴地发现 Charles 似乎大部分时间都很忙,甚至有人看到他推迟吃午饭,每周有两三天还会加班。

三个月结束时,Charles 宣布项目已经完成。他提交了一个 500 行的程序。这个程序看起来写得很清晰,测试时也完全满足了规范要求。实际上,它还多了一些便利功能,可能会大大提升程序的可用性。程序经过测试,除了一个很快被修正的小疏漏外,表现良好。

此时,4A 公司的团队已经完成了项目所需四个主要模块中的两个。这些模块已经在测试,其他模块还在开发中。

又过了三周,Alan 宣布初步版本提前一周完成。他还列出了一份待修正的缺陷清单。程序进入测试阶段,用户发现了不少清单之外的 bug 和缺陷。正如 Alan 所说,这并不意外,毕竟这是预览版,难免有 bug。

又过了大约两个月,团队完成了正式版程序,代码量大约 2,500 行。测试时,程序似乎满足了大部分最初的需求,但有一两个功能被省略了,对输入数据的格式也非常挑剔。不过公司还是决定上线这个程序,反正可以培训数据录入人员按严格格式输入。程序随后交给维护程序员,日后再补齐缺失的功能。

后四个月的进展

图 3:后四个月的进展

后续:

起初,查尔斯的主管对他印象很深。但当他通读源代码后,发现这个项目其实比他最初想象的要简单得多。现在看来,这对初级程序员来说也不算什么挑战。

Charles 确实每天写了大约 5 行代码,这可能略高于平均水平。但考虑到程序的简单性,这也没什么特别的。他的主管还记得他那两个月的”摸鱼”。

在下一次薪资评定时,Charles 得到了一次加薪,但幅度只有同期通胀率的一半,也没有晋升。大约一年后,他感到灰心,离开了 4C 公司。

在 4A 公司,Alan 因为按时完成项目而得到表彰。他的主管翻看了程序,花了几分钟时间,确认公司结构化编程的标准得到了遵守。但很快就放弃了继续阅读,因为程序实在难以理解,他这才意识到项目比最初设想的要复杂得多。于是他再次表扬了 Alan 取得的成果。团队平均每人每天写了 3 行多代码,这虽然只是平均水平,但考虑到问题的复杂性,已属难得。Alan 得到了丰厚的加薪,并被提拔为系统分析师,以表彰他的成绩。

相关链接

Copyright © 2025