见字如面,我是军哥!
今天来篇新颖的文章。
现在是凌晨 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,我把这篇文章翻译出来并且分享给大家,是因为读完后非常感慨:
微软当年能如此成功,绝对是因为有这样一批优秀的、充满激情的程序员,他们可以为了实现一个更好的演示,自发地通宵加班,并且乐在其中。
更厉害的是,团队成员之间可以完全无私地合作,根本不考虑功利因素。软件开发可以是一件很美好的事情啊。
我不知道你是不是也在这样一家这样的公司,如果是的话,请告诉我,我要去投个简历。
「关于作者:军哥,前饿了么、贝壳技术总监,目前是一名自由职业者兼公司顾问,乐于结交朋友,也欢迎加我微信与我做朋友(公号输入框回复“w”即可),朋友圈做个点头之交!
另外军哥写了一些,关于个人如何快速成长、深度思考、程序员或产品经理能力模型、架构,OKR干货,技术管理等电子书资料,公号后台回复 “9”获取,不谢。」
以往热文推荐:
更多精彩,关注我公号,一起学习、成长