詹姆斯·高斯林:Java、JVM、Emacs 与计算的早期岁月
James Gosling: Java, JVM, Emacs, and the Early Days of Computing
Java 之父回顾语言设计的初衷、JVM 的演化,以及早年编程工具与计算环境的往事。
2020 年,Chrome 团队统计了一遍自家修过的高危漏洞。六到七成属于同一类:指针指到了不该指的地方。
詹姆斯·高斯林(James Gosling)看到这条新闻时的反应是拍额头。三十年前,1990 年,他和 Sun 的几个同事启动 Java 项目,最重要的设计目标之一就是让这类 bug 在语言层面写不出来。
三十年过去,指针还在惹事。
这个细节差不多能概括整期访谈的气质。他不讲宏大叙事,讲的是具体的机器、具体的 bug、会议室里几个人怎么吵架。这些细节把五十年计算的脉络串了起来:从 PDP-8 到 Emacs,从 ARPANET 到 Java 虚拟机,从柯达的倒下到 Android 的官司。
他看代码的方式和大多数人不一样
访谈开始,Lex 问了一个奇怪的问题:你最喜欢的无理数是什么。
他说没有这回事,不知道这个说法从哪来的。顺口讲了一段少年往事。十几岁读到一本《好奇与有趣数字词典》(The Dictionary of Curious and Interesting Numbers),几乎背了下来。后来养成一个怪癖,刷卡、填支票时会想办法让收据总额凑成一个有意思的数字。
Lex 追问 √2 有没有故事。他的回答有味道:那是唯一一个摧毁过宗教的数字。毕达哥拉斯学派相信一切数都能写成整数之比,直到有人证明 √2 不能。世界的不完美从那一天起有了数学证明。
接着聊到哥德尔不完备定理。他的读法挺别致。这条定理常被理解成"有些事你永远无法知道",他从中读到的教训是另一件事。人们想要非黑即白的答案,想要真或假。只要允许第三种状态,真、假、也许,日子就能过下去。
这段闲谈里藏着理解他整个职业生涯的钥匙。他相信二进制之外还有别的层次,同时又极度厌恶模糊。他喜欢把复杂的东西收拢成一眼能看懂的形状。
Lex 问:想一个程序的时候
Lex 问:想一个程序的时候,你脑子里看到的是什么。
他的回答是:图片。
代码落在纸上,很快会变成一张图。它更像一台机器,这个连着那个,齿轮咬合在一起。他看到的是那个,字母拼出来的词法结构并不在他的视野里。
这解释了他为什么坚持一种在很多人看来不健康的代码风格:极度密集,最少留白,一个函数最好能完整放在一屏里。
他说因为这事被工程团队约谈过好几次。场景挺戏剧化,所有人提前到场坐好,等他进门,然后集体开口:"詹姆斯,关于你的代码风格。"
他的理由纯粹是视觉上的。滚动屏幕意味着失忆,意味着要把刚才看到的东西从脑子里重新捞一遍。整个函数摊在同一屏上,他一眼就能看到输入什么、输出什么、这东西到底在干嘛。代码在纸上会直接跳出来,像一台机器的透视图。
自称视觉思考者、自认口语表达不好的人,写出了 Emacs 和 Java,两个都需要极强抽象表达能力的东西。抽象未必靠语言完成。
从 PDP-8 到用高压电搭井字棋
让他上手的第一个机器,是卡尔加里大学的 PDP-8。
规格他记得一清二楚:4K 内存,12 位字长,主频大约三分之一兆赫兹。他顺手算了一下,今天随便一台机器都比它快一万倍以上。
那台机器藏在计算中心的角落,原本是一个网络项目买来的,买来之后基本没人碰。他注意到它闲置,就开始折腾,没人管,于是一直折腾下去。输入设备是一台电传打字机,纸带那种,屏幕还没有进入人们的视野。
这是历史上第一台用集成电路造的计算机。所谓集成电路,也不过是把十到十二个晶体管刻在一片硅上。今天一颗芯片上有上百亿个。
Lex 问:那个年代你有没有感受到摩尔定律的魔力,感觉到未来在指尖。
他把这种浪漫打了个稀碎:那时候它就是个玩具。
但这个玩具解释了一件重要的事。他从小就喜欢动手做东西,做东西的麻烦在于需要材料,木头、电线、开关,样样要钱。写程序不需要任何物理材料,你能构造任意复杂的东西,成本为零。对一个没什么钱的少年来说,这是一扇突然打开的门。
那时候他确实很穷。做电子项目靠翻垃圾桶捡零件,最大的收获是电话公司交换中心后面扔掉的继电器架。他用这些继电器搭了一台会下井字棋的机器。
麻烦在于继电器的驱动电压有讲究,他没有合适的电源。他从一堆废弃电视机里拆零件,拼出一个不对但能用的东西,最后让继电器跑在 300 伏电压下,接头全部裸露,没有任何绝缘。
Lex 说我很惊讶你活下来了。他回,原因有很多。他还顺口提了一句,十几岁的极客发现铝热剂很容易自制,是件很常见的事。
在 PDP-8 上,他最初用的语言叫 FOCAL-5,可以理解成极度精简版的 Fortran。写的东西包括二十一点、纸牌接龙,还有一类他特别喜欢的:画函数图像。输入一个函数或者一组数据,让电传打字机把它打出来。没有屏幕,图像由字符一行一行堆出来。
他就看着,觉得,哦,漂亮的图。
Emacs 是一次顺手做出来的东西
1985 到 1986 年,他在卡内基梅隆。Unix 已经在研究圈站稳,Unix 上却没有 Emacs。当时的主流编辑器叫 TECO,全称文本编辑器与校正器(Text Editor and Corrector)。
TECO 的宏语言公认晦涩。他的原话是,把一段 TECO 程序打在纸上,你会以为那是一页随机字符,比 LaTeX 还难读。
用惯了就明白它的逻辑。TECO 为高速盲打做了优化,几乎每个键就是一个命令,加上 Shift 和 Control,一个键能对应两三个命令,编码密度极高。用它编辑文档,你要在脑子里维护一个游标位置的心智模型:光标在 A 和 E 之间,要交换这两个字母,那就执行这样几个动作。
他给了一个绝妙的比喻:用 TECO,相当于闭着眼睛用 Emacs。
最早的 Emacs 就是一堆 TECO 宏。这个名字的意思是编辑器宏(Editor MACroS),最初是麻省理工的理查德·斯托曼(Richard Stallman)等人写的一套宏集合。后来 MIT 之外出现了好几个实现,代码完全不同,继承了那套哲学。
Emacs 加进来的东西里,最关键的是看得见。你编辑的东西以符合文档本来面貌的方式呈现在屏幕上,不需要靠记忆在脑子里画图。再加上它可编程,能自由扩展命令。
他第一次用 Emacs 是某个暑假去 Multics 项目写 Pascal 编译器,那套 Emacs 是伯纳德·格林伯格(Bernard Greenberg)用 Maclisp 写的。他在那台机器上住了三个月,基本上住在 Emacs 里。回到 CMU 之后,他发现校园里什么机器都有,Unix 偏偏没有 Emacs,决定顺手补上这个洞。
用 C 写,因为当时 Unix 上能用的只有 C。一两个月之后,这个编辑器已经好用到能编辑自己的源码。接着它占领了 CMU,然后越过校园围墙。原因也简单,Unix 拿下了 ARPANET 上的研究社区,Emacs 是当时最好的编辑器。
那段时间他曾经在 ARPANET 上每一个非军方主机都有登录账号,因为总有人发邮件过来说能不能给我们装一下。那是安全性还没人关心的年代,没人管。
八零年代的 ARPANET,就是他眼里的社交媒体
Lex 问他,当年能想象今天的互联网吗。
他的回答有点出人意料:很多东西其实没怎么变。
在 CMU 的时候,社交生活已经高度依赖 ARPANET。那时候没有手机,人们坐在终端前打字,邮件和一行短消息是最主要的沟通方式。约午饭、约约会,全部在网络上完成。
所以他个人的时间线是这样的:从 1980 年代初到中期,他已经在社交媒体上生活了。等到 1990 年代互联网爆发、社交媒体成为大众现象,他的感受是这有什么大惊小怪的。变的只是规模。规模的变化确实惊人,底层的东西几乎没动。
真正变了的是网络之外的那些利益格局。
为什么有线电视公司恨互联网
1990 年代初,Sun 内部写过一个提案,核心意思是:有了互联网技术,任何人都可以成为内容提供者。你可以把家庭录像发给远方的父母,可以传孩子的作文,街角的小店或者餐馆可以直接向外发布信息。
听起来很正常。在当时,这个提案在另一些人眼里是灾难。
他讲了一个特别精准的观察。有线电视公司的大部分员工,真心认为自己的工作是把好内容送到用户手上,用户为此付费。这是他们在组织金字塔底层看到的世界。
往上走,看法会变。有线电视公司真正的生意,从来都是把观众的眼球卖给广告主。这个认知在基层员工那里几乎不存在,在高层是默认设置。对他们来说,互联网是抢眼球的人,并非新机会。互联网上的内容越多,他们的观众越分散,广告价值越低。
他说他们和好几家有线电视公司正面冲突过,就是在这件事上。公司内部分层很清楚:底层在为用户服务,高层在卖用户。
柯达知道自己在往墙上撞,但它停不下来
柯达的故事他讲得最细,因为 Sun 当年是柯达的重要供应商,他和柯达的人打过很多交道。
柯达有一个规模不小的数码相机和数字影像研究团队。他们非常清楚趋势线长什么样。数码相机今天的画质确实不如胶片,改善速度是一条陡峭的曲线。两条线迟早会交叉,交叉的那天就是胶片业务的崩塌。这件事他们知道得太清楚了。
问题在于,在撞墙之前,他们赚得盆满钵满。
他把这类困境讲成了一个结构性难题。要跨过这道坎,你必须主动做一次转型,转型期必然是一段低谷:收入下滑,利润变负,几个季度报表难看。上市公司的铁律是,CEO 不能让某个季度的报表出现大坑。
他把特斯拉和亚马逊拿出来做对照。这两家公司在早期都敢承受巨大的账面亏损,因为它们有耐心资本:创始人手里握着一大块股票,可以不管华尔街怎么想。亚马逊长期在亏损中运营,本质上是在投资未来。这种做法在一般公司里几乎不可能,因为没有一个持股足够多、说话足够算数的人去顶住季报压力。
他顺带评价了这几个创始人。贝索斯有愿景,而且有能力一直照着愿景走。愿景人人都有,绝大多数愿景是彻头彻尾的蠢主意,然后公司就烧掉了。硅谷的失败率很高,很多失败的原因在于时机不对、运气不好,想法蠢只是其中一小部分。
说到特斯拉,他提了一个很有意思的细节。Model X 的鹰翼门,从工程角度看是彻底的荒唐,他的原话是那是一种对工程的亵渎。说这话的时候他带着欣赏。
因为那对门恰好是伟大领导力的符号:你有愿景,你就一头扎进去。如果你要做一件蠢事,那就把它做得彻底蠢,然后全力以赴。
聪明地工作是句毒鸡汤
聊到乔布斯,他的态度很坦诚。乔布斯和他有过几次面试和谈判,他个人其实是喜欢乔布斯的,从来没想过给乔布斯干活。
Lex 追问为什么。
他说,乔布斯对技术的部分并不懂,对人的感受、对人与物之间的关系,眼光极准。同时乔布斯会吼人、会骂人。
我不认为你需要那样做。有推动人做到最好,也有推过头。我认为他站在了那条线的错误一侧。(James Gosling 谈乔布斯)
他接着说了一段批评硅谷的话,说得挺重。硅谷当下的一个问题是,很多飞得很高的公司由彻头彻尾的混蛋在管。乔布斯的神话在这里起了坏作用:他成功了,因为他狠,所以想成功就得狠。这个推论在他看来完全不成立。
他认识很多成功的人,人都很好,只是不在公众视野里。媒体把混蛋抬成了英雄,因为混蛋做的事容易上新闻。
Lex 在这段里做了个漂亮的反弹。他说自己更担心另一种硅谷文化:对努力工作的抵制。聪明地工作而不是努力地工作,这句话听起来像是给懒惰找的借口。追求效率没有错,发现那条高效路径本身需要大量的笨功夫。
他完全同意,而且说得更狠。那些说聪明地工作而不是努力地工作的人,基本上都失败了。聪明和努力有先后顺序,先有大量的努力,才有资格谈哪条路更聪明。
他举了谷歌作为反例。谷歌历史上的领导层,拉里·佩奇和谢尔盖·布林,都是很好的人。桑达尔·皮查伊也是。而这是一家工作极其拼命的公司。
Lisp 的伟大与括号的原罪
Lex 提到一个大家都同意的事:Lisp 是史上最伟大的语言之一。他同意它在自己清单上,不愿意把它排第一。
理由朴素得让人发笑:括号实在太多了。
他也说,这些多到夸张的括号里,确实藏着一种有趣的语言结构。他一直觉得应该有一个更友好的 Lisp 版本藏在某个地方,只是他从没花时间去找。
他的清单上,Lisp 之上还有 Simula。这个名字今天很少有人提,它是第一个面向对象的编程语言,1967 年就有了 Simula 67。面向对象和语言真正结合,从这里开始。协程(coroutine)也是第一次作为语言的一部分出现在这里。
协程接近线程,没有真正的并发。好处是不需要复杂的加锁就能写出像多线程一样的代码,心智模型是并行的,你能用完全不同的方式组织很多问题。坏处是它用不上多核。真要在多核机器上跑协程,要么享受不到多核,要么就得掉进信号量和锁的世界。
Java 不是被设计出来的,是被憋出来的
1990 年,Sun 内部有一小撮人觉得,计算行业漏掉了什么。
起因很模糊:有些事正在计算机行业之外发生。电梯、机车、工厂的过程控制系统、音频设备、视频设备,里面都塞了处理器,都在用处理器做事。手机刚露出一点雏形。这些领域的处理器用量,比传统计算机行业大得多。
当时 C 和 C++ 已经完全统治了世界。问题不在于语言没人用,问题在于有一群人正在用 C 和 C++ 重新发明计算机网络,并且在重犯计算机行业二十年前犯过的所有错误。
于是几个人开始了真正的公路旅行。飞到日本,拜访东芝、夏普、三菱、索尼;去韩国见三星;去欧洲见飞利浦、西门子、汤姆逊。因为他们在 Sun 工作,对方愿意接待。
拜访中的发现,一部分在技术上,一部分在文化上。
技术上的发现是,这些消费电子公司造出来的网络方案,一眼就能看出二十五个必然翻车的地方。文化上的发现更深:这些公司把和用户的关系当作神圣不可侵犯的东西。他们在可靠性和性能之间不做交易。
这一点让他印象极深,计算机行业不是这样的。计算机行业习惯用可靠性换性能。他举了克雷超级计算机的例子,当年克雷为了让除法变快,用了牛顿迭代近似,结果是一个浮点数的低若干位本质上是随机数。这在跑分上是胜利,在烤面包机上就是灾难。如果一台烤箱的控制芯片算错了温度,后果不是重启,是房子着火。
回到 Sun 之后,他们决定用一个最土的办法去理解这些市场:做一个原型。做一个家庭电子设备的控制系统,电视、录像机那一类。
写的还是 C 和 C++,写着写着,麻烦就暴露出来了。
团队里有一位做商业计划的同事,MBA 出身。日常讨论里他反复问一些外行问题,这些问题逼着工程师把一些习以为常的东西重新审视一遍。安全性的要求、可靠性的要求、内存管理的细节,一条一条浮上来。
最刺眼的是裸指针。1990 年代初,行业里已经有共识:安全漏洞的第一大来源就是指针 bug,占全部漏洞的五到七成,其中绝大多数是缓冲区溢出。
他在这段里放了一句自嘲。他年轻时做过一个 Pascal 到 VAX 汇编的翻译器,那个项目是为了把一批跑在 PERQ 工作站上的软件搬到 VAX 上,PERQ 是 Three Rivers 计算机公司造的教育用机器。他本来以为那是个偷懒的权宜之计,结果生成的代码质量比 C 编译器还好,快得惊人。他当时想把这个做成博士论文题目,没人觉得有意思。
好几年后,当 Java 团队需要解决同一份软件如何跨不同指令集的机器运行这个问题时,那段经验回来了。
于是他想到,为什么不做一台抽象机器。写一个指令集,让代码编译成这台抽象机器的指令,然后为每一台真实机器写一个翻译器。既可以解释执行,也可以编译执行。解释器容易写,编译器跑得快,两条路都留着。
他的总结带着一贯的自嘲:我大部分好主意都是懒出来的。有些人的蠢主意,是因为他们不够懒,非要把东西做得特别复杂。
虚拟机的两次胜利
Java 虚拟机是一个被刻意设计成可以从多个角度理解的东西。
一个角度很少被提及:你可以把它看成语法树的逆波兰记法编码。另一个角度是它对外呈现的样子,一台抽象机器的指令集,而这台抽象机器可以被翻译成任何一台物理机器。
为什么这件事重要,要回到 1990 年代初和消费电子公司打交道的场景。
采购部门的痛苦非常具体。一台设备由钣金、齿轮、电路板、电容、电阻拼起来,除了 CPU,几乎所有零件都有多个来源,可以比价,可以谈判,能拿到合理价格。
CPU 是专有的,而且每一代都不同。一旦选了某家的芯片,你从今往后就是它的客户,没有退路。因为你的软件已经焊死在这台机器上。C 语言在这件事上特别糟,它把底层机器的太多特性直接漏给了程序员。字长、字节序、浮点行为,全都写在代码里。
最荒谬的地方在于时间的错位:这个不可逆的决定,必须在第一行软件写出来之前做出。采购部门被这个逻辑逼疯了很多年。
虚拟机解决的正是这件事。芯片之上的那一层被抹平,软件的生命周期和芯片的生命周期脱钩了。你想换供应商,换就是了。
他还讲了另一半痛苦:跨代迁移。Sun 当年从摩托罗拉的 68010 换到 68020,两代芯片之间有一堆差异,其中一条把他们坑得极惨。他因此成了这个案子的主要负责人,整整一年的人生被这件事吃掉。
在所有差异里,最要命的是浮点。
早年的机器不全是补码表示整数。CDC 的机器用反码,偶尔还有用十进制的。他觉得这已经够荒唐了,干脆就定死:整数就用补码,别再折腾。
浮点更乱。各家机器对浮点的处理方式差异巨大,后果是整个软件行业没法写出一个通用的数值计算库。在 CDC 上能跑的代码,搬到 IBM 上就不对,再搬到另一台机器上又是另一回事。
行业里为此积累了大量工作,最后沉淀出一个标准,也就是后来的 IEEE 754。他做 Java 的时候,这个标准已经基本统一了天下,只剩几个角落还有钉子户。他的态度强硬:必须能说清楚二加二等于什么。
这场仗打得很不体面。有几台机器没有正确实现 754,主要对手是英特尔。英特尔在舍入上做了奇怪的处理,在超越函数上做了更奇怪的处理,名义是优化。
他提到一个至今让人无话可说的细节:英特尔的三角函数在做范围约简时,用的圆周率值略有偏差。正弦和余弦的计算,建立在一个错的 π 上。
Android 那笔账,本来可以便宜很多
访谈快结束时,Lex 问了 Android。
他的回答被时间限制压得很紧,信息量不小。他说他很高兴谷歌做了这件事。Java 在手机上已经跑了很多年,跑得很好。
问题出在怎么做的这一部分。他点名了当年主导 Android 的安迪·鲁宾(Andy Rubin),越了很多条线。这些越界后来滚成了巨额诉讼。在他看来,这些线本来完全没必要越,不越线的成本要低得多。
Lex 追问,是不是当时没人预料到 Android 会这么成功。
他的回答很有意思。他觉得这件事跟安迪做了什么关系不大,它注定会爆炸。他形容安迪像是一个炸弹制造商。有些最好的东西和有些最坏的东西,都出自这种爆炸性。
至于骄傲这件事,他给了一个更早的答案。Android 出现之前,Java 已经在几十亿部手机里了。比手机更让他骄傲的是智能卡标准采纳了 Java。那个项目里所有参与者都做得很扎实,SIM 卡就是其中之一。你口袋里那张卡,跑的是 Java。
开源、斯托曼,和软件工程师必须发誓贫穷
Lex 问了一个不太好答的问题:你做过一些很棒但没成为主流的工作,部分原因是许可问题。回头看开源这件事,你怎么想。
他先给了立场:整体上他是开源的大粉丝。开源能建社区、能推动协作、能加速开发,这些都很了不起。
他对一件事有意见:当开源变成宗教,开始主张一切都必须开源的时候。在他的理解里,这个版本的极端主张等价于要求所有以生产信息为生的人发誓贫穷,包括写软件的、拍电影的。这条他接受不了。
他承认自己心里有一小块是认同那种冲动的。有人靠一个专利赚了几十亿,那个专利来自半夜半睡半醒时劈下来的一道闪电。那是运气,运气好没什么可说的。当这种运气膨胀成他眼中的剥削时,问题就出现了。他举了制药业的例子:一种药一天要一百美元,这不对劲。
他真正在意的有一个更具体的判断标准:如果一样东西因为不开源而变成了更差的产品,那就是坏事。
他自己就是受害者。Lex 说,我用 Emacs,我很抱歉,我本来可能用你写的那个版本。他说,其实你现在用的那个,血统上可以追溯到他写的那一份。Linux 上的默认实现,源头绕了一圈是他的代码。
为什么没继续做下去,他讲得很实在。研究生最后两年,有一件事变得很清楚:要么当一辈子 Emacs 先生,要么毕业。两件事他做不到同时。
他去找了 ARPANET 上所有可能接手的人,几乎每个人都回了一句:我有正职工作。最后找到新泽西一个车库里的两个人,还带着一条狗,他们愿意接手,但要收费。他的条件是,对大学和学校必须免费。对方答应了。这个安排得罪了一些人。
他也承认,如果当年当了 Emacs 先生,今天可能非常有钱,Emacs 也许会膨胀成一整套文本处理产品线。他的原话是:自己在财务上有一长串次优决策的历史,因为他不想要那种生活。
谈到理查德·斯托曼,他试着把分歧讲清楚。他的立场是,当信息必须自由被推到极端,结果就是所有以生产信息为业的人都要发誓贫穷。他不想暴富,他也不是暴富的人,但他得养孩子。
他也承认平衡的另一面。有些软件闭源之后,官僚体系开始生长,产品反而变差了,这让他难过。这是双向的。
他举了一个很少被提到的现实机制。很多国家的会计和审计标准,包括萨班斯法案的各种解读,会有这样的逻辑:如果一家公司的业务依赖某个软件,你没有为它买支持合同,这在审计上是一个风险项。于是你必须买支持合同。这就给开源软件公司提供了一条活路,卖服务和支持。
这里也有分寸。开源数据库厂商收的支持费,和甲骨文那种收法,是两回事。他用的词是贪婪。平衡是存在的,问题在于太多现代商业变成了赢家通吃。
他留下的东西,不是语言
访谈最后两个问题,一个关于遗产,一个关于给年轻人的建议。
Lex 问,五百年后人们写到你,你希望他们记住什么。
他的回答是:希望人们不害怕做出信仰之跃。
他说自己有一份很怪的历史,做了一堆奇怪的事,结果还不错。最怪的那些,往往是最酷的。当然也有烧掉的。他估了一下,自己做过的事里,超过一半是烧掉的,偶尔让人极其恼火。
但还是要继续做。即使烧掉,你至少学到了东西。
给年轻工程师的建议很短:不要害怕风险。做蠢事一两次是可以的,社会会给你一两次豁免。第三次第四次就不太行了。
他还讲了一件我觉得是整期访谈里最值得抄下来的一段。
他很早就在思考技术决策里的伦理问题。因为他是科幻小说的大粉丝,他会把每一个技术决定放进一个框架里问:你是在造《银翼杀手》,还是在造《星际迷航》。你更愿意住在哪一个未来里。
他的答案毫不含糊:《星际迷航》。
Lex 顺着说,那最喜欢的 AI 就是《星际迷航》里的 Data,最不喜欢的当然是天网。他同意,谈话就此结束。
这个结尾看着轻松,其实很硬。一个写了全世界最流行语言之一的人,衡量技术的方式,是这东西把人带向哪个未来,性能、市场份额、融资额都不在这个位置上。他一生做的很多选择都笨拙、不最优、财务上说不通,这条标准一直在。
最后他留给节目一句话:生活里最难的事之一,是做选择。
从 PDP-8 后面那个没人管的角落,到 300 伏裸线搭出来的井字棋机器,到用一个月的晚上写出改变整个研究社区工作方式的编辑器,到因为讨厌指针 bug 而做出的那台虚拟机,这条线索其实一直都在。他一直在做的,是把世界收拾得让人能一眼看明白。
- 翻出最近写的一段代码,试着把其中一个函数压到一屏之内。看不到全局的时候,你其实是在靠记忆写程序,而记忆会漏。
- 下一次技术选型,先问一句:这东西三年后要换掉,成本是多少。绑死在供应商身上之前,想清楚退路在哪。
- 查一下自己项目的代码库里有多少裸指针、多少手动内存管理。三十年过去了,这一条仍然是最常见的漏洞来源。
- 如果你在带团队,把推人一把和把人推下悬崖分开。前者能让人做出这辈子最好的工作,后者只会让人记住你是个混蛋。
- 给自己留一两次信仰之跃的额度。前两次搞砸是可以的,把它算进学费。第三次开始,先复盘。
- 做一个技术决定之前,花两分钟问自己:这东西是在把世界推向《星际迷航》,还是《银翼杀手》。答案不一定要改变决定,但值得你知道。
- 别信聪明地工作而不是努力工作。那句话的完整版本应该是:先努力到有资格谈聪明。
本集资源与出处
- 视频在 YouTube 收看
- 音频官方 MP3 直链来自 lexfridman.com 官方播客 RSS
- 官网Lex Fridman 官网本集页面
- 文稿HappyScribe 版文稿