现在是凌晨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,点击下面的阅读原文可以看到英文原文。

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

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

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

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

(完)

最后,再介绍一下我的一个备份号“想躺平的程序员”,防止被人投诉后失联,请小伙伴们保存一下吧。

这个号不会空着,经常会发一下轻松有趣的东西,让大家在紧张的工作之余乐呵一下。

我为Bill Gates熬夜加班的那个晚上相关推荐

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

    见字如面,我是军哥! 今天来篇新颖的文章. 现在是凌晨 5 点,距离 Bill Gates 的演示会议还有 5 个小时. 我的眼睛又红又肿,有点儿神志不清. 我已经有快 24 小时没有睡觉了, 我刚刚 ...

  2. gridview获取选中行数据_Word转Excel,不想熬夜加班,那就掌握这个数据清洗方法...

    私信回复关键词[福利]~ 获取丰富办公资源,助你高效办公早下班! 小伙伴们,大家好,我是专治各种疑难杂「数」的农夫~ 今天,我就为大家介绍一种高效的数据清洗方法,助你告别熬夜加班,拥抱美好的夜晚时光~ ...

  3. 临近下班又开会,熬夜加班写纪要,语音转写还收费……

    先声明,这是一篇吐槽为主.介绍为辅的小短文,是一位打工人心酸历程的吐槽记录,一位底层员工拯救头秃的回忆录.大家自行选择阅读啊! 小编最近离职了,所以就可以肆无忌惮的写这么一篇吐槽前领导的文章.有类似经 ...

  4. content is king – Bill Gates (1/3/1996) 内容为王 - 比尔盖茨

    以下中文版本由谷歌翻译 内容为王 - 比尔盖茨(1/3/1996) 内容是我期望在互联网上赚取大部分真钱的地方,就像在广播中一样. 半个世纪前开始的电视革命催生了许多行业,包括制造电视机,但长期的赢家 ...

  5. 为什么程序员熬夜加班,项目还是会延期?

    首先这和你熬夜加班没有半毛线关系,千万别自己感动自己. 但凡是互联网项目,出现延期是常有的事情. 项目延期之后,一般流程是领导开会,大家讨论,新一任背锅侠,然后下一次还是老样子. 项目评审 项目初期, ...

  6. 比尔·盖茨(Bill Gates)

    Century霸主--微软总裁:比尔·盖茨 简介 威廉·亨利·盖茨(William Henry Gates III)昵称比尔·盖茨(Bill Gates) 是全球个人计算机软件的领先供应商-微软公司 ...

  7. Bill Gates

    比尔·盖茨[1] (Bill Gates),全名威廉·亨利·盖茨三世,简称比尔或盖茨.1955年10月28日出生于美国华盛顿州西雅图,企业家.软件工程师.慈善家.微软公司创始人.曾任微软董事长.CEO ...

  8. 像Bill Gates一样思考集装箱

    [ back ]  微课名称:      像Bill Gates一样思考集装箱    PS. 此微課改版錄製中,敬請期待... 立即学习此微课: 方法:ADT学院为您播放(免费播放中) 微课目标: B ...

  9. 研究生活:熬夜加班真的应该是研究生正常的生活节奏吗?

    "科研苦,科研累",熬夜加班几乎是每个科研人,研究生的必修之路.很多科研人的生活可能是007,虽然近期提出996的工作是违法的,但是对于科研人来说,这似乎无关痛痒,因为有人强调,做 ...

最新文章

  1. 简单有效提升服务器性能,4个简单操作,让你的服务器性能飞速提升!
  2. CNN和RNN中如何引入BatchNorm
  3. 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
  4. c语言 开辟复数指针数组,指针和数组 - llwwzz的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. linux 文件列添加字段,如何在linux中加入所需列的文件?
  6. 判断浏览器是pc端还是移动端
  7. python echo off_生活中的python-随机分配单词输出至word
  8. 小干货:Linux 系统的备份恢复
  9. laravel框架解决sql注入问题
  10. 城市管理观念要革新 智慧安防是前提条件忽视不得
  11. 理论+示例,三个问题系统捋清UGC平台的玩法
  12. 7-3 敲笨钟 (20 分)Java
  13. 编制现金流量表3个步骤!
  14. easyUI双击事件,完整总结
  15. 外贸邮箱用哪个邮箱号比较好,是多少?
  16. 解决使用maven打jar包缺失依赖包问题
  17. Flutter 报错:Could not resolve io.flutter:flutter_embedding_debug:1.0.0-ee76268252c22f5c11e82a7b87423c
  18. 论文阅读笔记-场景图谱-图谱生成:Scene Graph Generation from Objects, Phrases and Region Captions
  19. 深度学习(9):FastFCN论文翻译与学习
  20. Openshift 学习一(搭建Openshift环境)

热门文章

  1. C++实现双人枪战游戏
  2. 爬取拉钩Java招聘数据
  3. 查找父类的所有子类 crtl+alt+b
  4. SQL中查询MySQL的版本
  5. AI工具究竟是帮手还是对手?你怎么看,一起来聊聊吧!
  6. 怎么在手机上赚钱?分享5个赚钱方法,生活费是足够了!
  7. dnSpy反编译工具调试netcore项目
  8. 关于css--的封装、继承、多态
  9. DNP3 模拟器使用教程
  10. 蚂蚁金服 Java开发专家 一面在线编程题