2021年12月1日 来源:[码农翻身]微信公众号
现在是凌晨5点,距离Bill Gates的演示会议还有5个小时。
我的眼睛又红又肿,有点儿神志不清。
我已经有快24小时没有睡觉了, 我刚刚重新编译了代码,它看起来已经可以工作了。
给Bill Gates做演示是一件令人生畏的事情,而这次汇报将会决定我们这个项目的生死,不过我还有2~3小时,可以在桌子下面睡一会儿,然后把演示盘交给PM。
时间回到2001年,我在微软NLG组工作,NLG表示自然语言处理组。
我们这个组负责微软Office中所有的拼写检查和语法检查,那个时候我们开发了一个叫做“上下文拼写检查器”,这个东西查出来的既不是单词拼写错误(红色波浪线),也不是语法错误(绿色波浪线)。
举个例子,你在邮件中写了两个单词 Deer Carlos, 你的本意很有可能是 Dear(亲爱的),而不是Deer(鹿),但是拼写检查是找不到这个错误的,因为deer这个词是正确的。
语法检查也查不出来,因为语法上也没问题。
我们要对Bill Gates做的就是这个原型的演示,Bill Gates会决定这个特性是否值得投钱投人,把它做出来。
我们已经开发了一个DLL,可是还没有集成到Word中去, 所以我们的演示是非常寒酸的:
在Word之外的命令行工具上调用DLL, 然后输入一些句子,它会输出有没有“上下文拼写错误”。
很明显,这样的演示缺乏在Word中那种可视化的波浪线带来的视觉冲击力。
作为一个工程师,我觉得这样的演示太平淡无奇了。为什么不把它集成到Word中来演示呢?哪怕是Debug版本也好啊。
于是我把Office那海量的代码下载到我本地,把我们的DLL加进去,做了一个Build, 然后设置断点开始调试。
我先找到了Word显示红色波浪线和绿色波浪线的代码,把它们Copy出来,然后试图用蓝色波浪线来展示“上下文拼写错误”。
我发现Word给我们的DLL发了一个指针,指向一个让人费解的数据结构,那里不仅仅保存着Word的文本,还有格式信息,外加一个巨大的Undo缓冲区,这样Ctrl-Z才可以工作。
上下文拼写检查需要理解这个数据结构,在其中导航,提取出问题,然后进行检查。
问题是这里有太多的边界情况了!我也找不到任何文档。
如果用户只是敲入了文本会怎么样?
如果加粗了一个单词,斜体另外一个单词会如何?
当你改变字体又会怎么样?
高亮一个单词呢?
删除替换一个单词呢?
......
我花了几个小时来理解这个数据结构是怎么工作的,然后终于把蓝色的波浪线给显示出来了!
这非常让人兴奋!
不过,2分钟以后,Word 崩溃了。
那一天我都在不停地调试,直到快下班的时候。
我的朋友武石正准备下班回家,路过我的办公室的时候给我打了个招呼,我给他展示了一下新的、老是崩溃的Demo。
他原来一直在Word部门工作,对Codebase非常了解,他决定呆一会儿,帮我瞅瞅这些边界条件,看看为啥老是崩溃。
没想到这一呆就是好几个小时,我们看着这世界上最丑陋的C++代码,笑着、骂着、把其余的事情都抛在脑后。
每隔一个小时,武石的妻子就给他打一个电话,让他马上回家,每次他都会表示歉意,然后说:快了,快了。
我的朋友戈登,另一位NLG的工程师,在8点左右来了。我们俩都是夜猫子,经常工作到凌晨。
在90年代,半夜时分的微软走廊里挤满了人是很平常的事。
他被我们俩正在折腾的东西吸引住了,也坐下来盯着屏幕给我们支招。
我们不断尝试,每次Word崩溃我们就大骂,每次没崩溃我们就哈哈大笑。
这其实并不是我们分内的工作,但是一想到要给世界上最富有的人展示我们的小功能,我们就动力十足。
一个命令行的寒酸演示是绝对不够的,它必须很漂亮,它一定得在Word中。而且它必须在明天上午10点之前工作起来!
午夜时分,我们煮了一壶新鲜的咖啡,四处寻找麦片和任何我们能找到的食物,因为我们一直在编程,根本没时间吃晚饭。
武石的妻子放弃了他——她在10点时候不再打电话,可能已经睡觉了。
戈登和我是单身汉,没有这方面的“负担”,不介意长时间的工作。
我们眼镜充满了血丝,有点晕乎乎的,但是离最终完美的演示很近了。
凌晨2点,武石终于撑不住了,他的大脑已经停止工作。他不停地道歉,然后回到他的办公室,在他的桌子底下“睡死”过去。
到了5点,戈登和我终于让演示工作了!
这时候我才给项目经理发了一封信,告诉他我的想法:用真正的Word来演示!
我编译了代码,把可执行程序复制到一个软盘中(没错,是个软盘),放到他的桌子上,把闹钟设置到9点半,然后也沉沉睡去。
早上醒来的时候,我吃惊地发现软盘还在他的桌子上,PM根本没有看到我的邮件!
我立刻抓起软盘,穿过半个微软园区,冲向Bill Gates办公室所在的9号楼。
我满头大汗,气喘吁吁,冲了进去。
“用这个程序!” 就在Bill Gates进门前的几分钟,我把软盘递了过去。
我的PM疑惑地看着我,但还是决定冒险一试。
他开始Copy程序,那进度条慢得真是让人抓狂。
终于Copy完了,他双击Word,Word的启动界面顺利显示,一个新的、空白文档展示出来,光标开始闪烁,我们都屏住了呼吸——关键时刻到来了。
PM敲入了一些句子,然后最漂亮的事情发生了:可爱的、蓝色的波浪线展示了出来! 屋子里的每个人都长长地出了一口气。
Bill Gates很喜欢这个展示,项目也正式立项了。
现在它是微软Word中的一个功能了,我想这可能和我彻夜不眠有很大关系。
后来有个同事说,我们在演示中当场发现了Bill Gates发给10万员工的邮件中的错误,Bill Gates难得的露出来笑脸。
我很喜欢这次经历, 它让你看到了我们那个团队中培养的激情和友情。
事实上,两个工程师几乎花了一个晚上坐在我后面,在Visual Studio中设置断点,调试世界上最丑陋的代码。
只是因为我们不愿意满足于平庸:我们想有一个漂亮的演示,而不仅仅是一个说得过去的演示。
后记:本文的作者是Carlos Arguelles,点击下面的阅读原文可以看到英文原文。
我把这篇文章翻译出来并且分享给大家,是因为读完后非常感慨:
微软当年能如此成功,绝对是因为有这样一批优秀的、充满激情的程序员,他们可以为了实现一个更好的演示,自发地通宵加班,并且乐在其中。
更厉害的是,团队成员之间可以完全无私地合作,根本不考虑功利因素。软件开发可以是一件很美好的事情啊。
我不知道你是不是也在这样一家这样的公司,如果是的话,请告诉我,我要去投个简历。
(完)
最后,再介绍一下我的一个备份号“想躺平的程序员”,防止被人投诉后失联,请小伙伴们保存一下吧。
这个号不会空着,经常会发一下轻松有趣的东西,让大家在紧张的工作之余乐呵一下。