当前位置: 首页 > 科技观察

两个程序员的故事

时间:2023-03-13 16:50:48 科技观察

从前,有两家互不相识的公司,一家叫“自动会计应用协会”,一家叫“统一计算资本公司”。他们还决定开发一个可提供相同功能的程序。Auto聘请了一位分析程序员Allen来解决这个问题。而“Unity”决定试试新来的初级程序员查尔斯,看看他有没有真本事。Allen在完成了一些复杂的项目并拥有丰富的经验后,决定使用PQR结构化方法来开发此程序。于是他找到部门经理,要求再派3个程序员组成项目组。该小组随后开始工作,敲定了一份初步的项目分析报告。“统一”这边,查尔斯花了一些时间思考需要解决的问题。同事们经常看到查尔斯把脚翘在办公桌上喝咖啡。偶尔,我看到他坐在电脑前,但有节奏的键盘声告诉别人,他其实是在玩小蜜蜂。没过多久,“自动”组就开始写代码了。程序员一半时间写编译代码,另一半时间在会议室讨论模块间的接口设计。查尔斯的同事们发现,他终于不再玩蜜蜂了,一半时间把脚翘在办公桌上喝咖啡,另一半时间则在纸上乱涂乱画。他似乎没有在纸上玩井字游戏,但看起来他也没有写出任何有用的东西。两个月过去了。“Auto”团队终于发布了项目时间表。他们计划在另外两个月内发布该程序的测试版。然后再经过两个月的测试和完善,最终版本就可以发布了。这会儿,他的经纪人看不惯查尔斯的闲散,决定对查尔斯进行一番批评。但是当经理走进查尔斯的办公室时,惊讶地发现查尔斯正在电脑前写代码。于是他决定搁置批评,与查尔斯随便聊了几句就离开了。不过,此后他更加关注查尔斯的表现,想借机批评查尔斯。但不愉快的谈话并没有发生,他很高兴地发现查尔斯一直在写代码。查尔斯偶尔会被发现推迟午餐时间并自愿每周加班2到3次。第三个月末,查尔斯宣布他完成了这个项目。他提交了一个500行的程序。程序清晰可读,满足了测试中的所有功能需求,甚至还有一些更方便的功能,大大提高了程序的易用性。经过测试,除了一处疏忽外,该程序的表现非常好。“自动”项目组此时已经开发了4个主要模块中的2个。在测试这些模块的同时,该团队继续开发其余模块。又过了3周,艾伦宣布提前一周完成了程序的初版。他提交了一份清单,列出了一些仍需解决的缺陷。在测试过程中,客户发现了一些列表中没有的错误和缺陷。艾伦解释说,这是意料之中的,毕竟这只是一个初步的版本,有错误很正常。又过了两个月,项目组完成了正式版程序,包括2500行代码。在测试过程中,发现这个版本满足了大部分的原始需求。程序功能中有一两处遗漏,数据输入的格式要求非常严格。但公司最终决定使用这个程序,他们可以训练打字员准确地按照要求输入数据。对于那些缺失的功能,留给维护程序员来添加。后记:起初经理对查尔斯的能力印象深刻。但是当他阅读源代码时,他发现问题比他最初想象的要简单得多。现在看来,即使对于初级程序员来说,这个难度显然也太低了。事实上,Charles平均每天产生5行代码,略高于平均水平。但考虑到项目复杂度如此之低,生产率稍高也就不足为奇了。经理对他前两个月的闲散记忆犹新。在绩效考核中,查尔斯的加薪幅度约为同期货币通胀率的一半,没有得到提拔。又过了一年,他感到沮丧并离开了Unity。在“自动”方面,艾伦因按时完成项目而受到称赞。他的主管翻了几页源代码,发现代码符合公司的结构化编程规范。但他很快就打消了阅读代码的念头,因为它看起来相当深奥。他现在才意识到,这个项目的复杂程度远超自己的想象,于是再次为艾伦的成绩点赞。项目组平均每人每天写3行代码,只是平均水平。但是考虑到问题的复杂性,能有一个平均水平就很好了。艾伦得到了大幅加薪,作为奖励,他被提升为系统分析师。原版英文:两个程序员的寓言