我为比尔盖茨熬夜加班的那个晚上

见字如面,我是军哥!

今天来篇新颖的文章。

现在是凌晨 5 点,距离 Bill Gates 的演示会议还有 5 个小时。 

我的眼睛又红又肿,有点儿神志不清。

我已经有快 24 小时没有睡觉了, 我刚刚重新编译了代码,它看起来已经可以工作了。 

给 Bill Gates 做演示是一件令人生畏的事情,而这次汇报将会决定我们这个项目的生死,不过我还有 2~3 小时,可以在桌子下面睡一会儿,然后把演示盘交给PM。 

时间回到 2001 年,我在微软 NLG 组工作,NLG 表示自然语言处理组。 

ca2c8fe9be2d790768c237fd427d262a.png

我们这个组负责微软 Office 中所有的拼写检查和语法检查,那个时候我们开发了一个叫做“上下文拼写检查器”,这个东西查出来的既不是单词拼写错误(红色波浪线),也不是语法错误(绿色波浪线)。

举个例子,你在邮件中写了两个单词 Deer Carlos, 你的本意很有可能是 Dear (亲爱的),而不是 Deer (鹿),但是拼写检查是找不到这个错误的,因为deer这个词是正确的。 

语法检查也查不出来,因为语法上也没问题。 

31760ce8d9703dcf2915594898000001.png

我们要对 Bill Gates 做的就是这个原型的演示,Bill Gates会决定这个特性是否值得投钱投人,把它做出来。

我们已经开发了一个 DLL,可是还没有集成到 Word 中去, 所以我们的演示是非常寒酸的: 

在 Word 之外的命令行工具上调用 DLL, 然后输入一些句子,它会输出有没有“上下文拼写错误”。 

很明显,这样的演示缺乏在 Word 中那种可视化的波浪线带来的视觉冲击力。 

作为一个工程师,我觉得这样的演示太平淡无奇了。为什么不把它集成到Word 中来演示呢?哪怕是 Debug 版本也好啊。 

于是我把 Office 那海量的代码下载到我本地,把我们的 DLL 加进去,做了一个 Build, 然后设置断点开始调试。 

我先找到了Word显示红色波浪线和绿色波浪线的代码,把它们 Copy出来,然后试图用蓝色波浪线来展示“上下文拼写错误”。

我发现 Word 给我们的 DLL 发了一个指针,指向一个让人费解的数据结构,那里不仅仅保存着 Word 的文本,还有格式信息,外加一个巨大的Undo缓冲区,这样 Ctrl-Z 才可以工作。

上下文拼写检查需要理解这个数据结构,在其中导航,提取出问题,然后进行检查。 

问题是这里有太多的边界情况了!我也找不到任何文档。

如果用户只是敲入了文本会怎么样?

如果加粗了一个单词,斜体另外一个单词会如何?

当你改变字体又会怎么样?

高亮一个单词呢?

删除替换一个单词呢?

......

我花了几个小时来理解这个数据结构是怎么工作的,然后终于把蓝色的波浪线给显示出来了!

这非常让人兴奋!

不过,2 分钟以后,Word 崩溃了。 a969d65db8f90fdeb92bb35ce96b743f.png

那一天我都在不停地调试,直到快下班的时候。

我的朋友武石正准备下班回家,路过我的办公室的时候给我打了个招呼,我给他展示了一下新的、老是崩溃的 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中的一个功能了,我想这可能和我彻夜不眠有很大关系。 06301713c38638cef460b3a9bf9c8df2.png

后来有个同事说,我们在演示中当场发现了 Bill Gates 发给 10 万员工的邮件中的错误,Bill Gates 难得的露出来笑脸。

我很喜欢这次经历, 它让你看到了我们那个团队中培养的激情和友情。

事实上,两个工程师几乎花了一个晚上坐在我后面,在Visual Studio中设置断点,调试世界上最丑陋的代码。 

只是因为我们不愿意满足于平庸:我们想有一个漂亮的演示,而不仅仅是一个说得过去的演示。

后记:本文的作者是 Carlos Arguelles,我把这篇文章翻译出来并且分享给大家,是因为读完后非常感慨:

微软当年能如此成功,绝对是因为有这样一批优秀的、充满激情的程序员,他们可以为了实现一个更好的演示,自发地通宵加班,并且乐在其中。 

更厉害的是,团队成员之间可以完全无私地合作,根本不考虑功利因素。软件开发可以是一件很美好的事情啊。

我不知道你是不是也在这样一家这样的公司,如果是的话,请告诉我,我要去投个简历。 

「关于作者:军哥,前饿了么、贝壳技术总监,目前是一名自由职业者兼公司顾问,乐于结交朋友,也欢迎加我微信与我做朋友(公号输入框回复“w”即可),朋友圈做个点头之交!

另外军哥写了一些,关于个人如何快速成长、深度思考、程序员或产品经理能力模型、架构,OKR干货,技术管理等电子书资料,公号后台回复 “9”获取,不谢。」

以往热文推荐:

如何写好年终总结?及时雨来了!

我自由职业 2 年了!

45 岁程序员,精通各种技术,却没有面试机会?!

腾讯员工收入证明泄露,税后250万,真的么?


更多精彩,关注我公号,一起学习、成长

628301f18c5d6dede9783ab63611a5a6.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值