大家好,我是二哥呀。
微软前 CEO 鲍尔默曾说过一句言简意赅的话:“没有 Dave,就没有今天的微软”。
可见 Dave 在微软的分量。Dave 的全名叫 Dave Cutler,微软的超级程序员,Windows NT 操作系统内核的缔造者,中文译名为大卫·卡特勒。
可能有些小伙伴对 Windows NT 比较陌生,我这里简单解释下,像 Windows 2000、Windows XP、Windows 7、Windows 10 等等,都是披了一层华丽外衣的 Windows NT。
按照卡特勒的意思就是,现如今的 Windows 操作系统版本,不管界面怎么变,内核代码都可以追溯到 1993 年的 Windows NT 分支。
可能有些小伙伴会好奇 NT 是什么意思?
比尔盖茨的解释是,NT 就是 new technology,代表微软在技术上的重大革新。这一点我到是不否认的,因为以前的 Windows 都是基于 DOS(Disk Operating System,磁盘操作系统)的。
Windows NT 于 1993 年 7 月推出,比原定的 deadline 1991 年 3 月 30 日足足晚了 2 年多时间。
看来即便是真正的神级程序员,在预估周期的时候也会过于乐观,因此我们普通程序员在估算工时的时候最起码要留一倍的缓冲期(🤣)。
项目之所以延期,是因为卡特勒要解决的难题非常多,包括:
①、日志文件系统 NTFS,具备抗崩溃能力,相信很多格式化硬盘过的小伙伴都了解这个文件格式。
②、采用用户模式和内核模式的分层设计,并且是可抢占式和可重入式的,互联网大厂面试中常问的题目。
③、服务的概念,允许用户集中式管理服务进程,Windows 用户可以通过 ctrl+alt+delete 调期
④、引入硬件抽象层,使得 Windows 操作系统可以运行在不同的硬件平台上(如 x86、MIPS、Alpha、PowerPC 等)
⑤、在多个处理器上运行(支持多核 CPU),且能够同时运行多个程序(多进程)
⑥、还要向后兼容,不能把微软之前的老用户弃之不管,写过向后兼容的小伙伴都知道,这非常的难。
Windows NT 项目是在 1988 年启动的,卡特勒和他的团队耗时 5 年才推出了第一个版本,他们几乎完成了一项不可能的挑战。
在之后的岁月里,卡特勒并没有躺在功劳簿上。
2005 年,他协助 AMD 公司开发了 64 位架构(32 位 x86 架构的扩展),并且领导团队推出了可以在 64 位架构上运行的 Windows 操作系统。
2006 年,当微软开始向云端进军的时候,亟需构建一个基于云端的操作系统,于是又招募了即将退休的卡特勒,部门负责人 Amitabh Srivastava 用一句“这可能会改变世界”成功激起了卡特勒的兴致,于是卡特勒就开发了一款云操作系统的虚拟机管理程序(Hypervisor)。
看来画饼对大佬们一直都有效啊😄。如今,微软的 Azure 云平台已经成为微软所有开发和产品的战略重心,微软也从一家软件公司顺利转型为了云计算公司。
2012 年,卡特勒还参与开发了 Xbox 主机的操作系统。
这还不算完,2016 年,74 岁的卡特勒每天仍然会去位于华盛顿州雷德蒙德微软园区的办公室敲代码,是不是非常不可思议?
这样神级的程序员,大家能猜到他年轻时的梦想是什么吗?
没错,一名足球运动员。
可惜后来的伤病摧毁了他的职业生涯,于是卡特勒就开始琢磨着以后该怎么办?
机缘巧合,他进入一家杜邦公司从事材料测试,但这份工作需要编程来建模,于是卡特勒只好去 IBM 开办的学校去学习编程。
结果,他竟然发现自己是如此的热爱编程。
于是 1971 年,他进入 DEC(1998年被康柏以 96 亿美元的价格收购)编写软件,他利用汇编语言在非常有限的内存空间内实现了多项系统功能,比如树型文件系统、交换应用程序、实时调度和一整套开发工具等。
“是金子到哪都会发光”。
卡特勒过硬的技术功底得到了 DEC 首席工程主管贝尔的赏识,就被安排负责编写 VMS 操作系统,可运行在一种新的 32 位超级小型计算机(VAX)上。
两年后,一经推出的 VAX 迅速占领了市场,卡特勒也因此一战成名,贝尔称其为“世界上最好的操作系统编写者”。
1983 年,贝尔首次将卡特勒介绍给比尔·盖茨。五年后,卡特勒加入微软,并开发出了 Windows NT 操作系统内核,让微软彻底起飞,从此一发不可收拾。
我们普通人能从卡特勒这样的大神身上学到些什么呢?
我从卡特勒过往的采访中 get 到了三句话,我觉得非常值得分享给大家。
①、When all is said and done, much more is said than done.
也就是我们常说的“思想上的巨人,行动上的矮子”,很多人说起来总是头头是道,但做起来却是束手无策。
就像很多技术大牛一旦做了管理岗,就不再重视代码能力,开始变得说得多做的少,出了事就让下属背锅。
卡特勒一向是亲力亲为,冲在第一线。
网上有个论调说:技术不重要,哪怕技术做得再好,也不如会拍领导的马屁。我觉得这个论调就很可怕,它背离了技术人的初衷,让很多原本热爱技术的人,逐渐走向了 KPI 的不归路。
这可能也是为什么我们做不出来 Windows NT 这种操作系统内核的本质原因,公司不愿意给时间,技术人不愿意沉下心去打磨。
②、Successful people do what unsuccessful people won’t.
我的理解就是,成功的人愿意去干那些失败者不愿意干的事。
就比如说,很多人都不喜欢去学习操作系统,包括我自己在内。因为感觉很枯燥,学了又感觉用不到,日常工作和学习中几乎都是偏应用类的编码。
所以在职业生涯的很长一段时间里,我都没有关注过操作系统方面的知识,就导致底层知识是欠缺的。接触的读者多了,他们的诉求就多了,于是我就也开始强迫自己去看操作系统方面的知识。
没想到,打开了另外一扇世界,编程功底得到了很大的提升。
③、If you don’t put them [bugs] in, you don’t have to take them out.
我理解的意思就是,敲代码之前要先想清楚,比如说脑海中有一副蓝图,或者敲完代码自己要先做一次 review,现在有了 AI 的帮助,那最好让 AI 再检测一遍,这样就不会引入 bug,也就不用解决 bug。
卡特勒也说过类似的观点:“不知道是因为懒惰还是愚蠢或是两者都有,有些程序员在将代码提交构建前不做测试,不理解高质量检入的重要性。”
所以我们在提交代码库的之前,一定要 check,不要想当然。