最近,GitHub 发布了一份与 Anders Hejlsberg 的深度访谈,你可能不知道这个名字,但你肯定听说过 Turbo Pascal、Delphi、C# 和 TypeScript。
对,他就是 Turbo Pascal 和 Delphi 的创建者,C# 的首席架构师,以及 TypeScript 的设计者。
从这次深度访谈中,我总结出了一套构建能够经受规模化考验的系统模式。以下是我学到的 7 个经验:
1. 快速反馈:最为重要
Hejlsberg 说,Turbo Pascal 的成功不是因为 Pascal 语言本身有多好,而是因为它能让开发者能"立刻"看到结果。
同样,TypeScript 的价值不仅在于语言本身,更在于其强大的工具链:增量检查、快速响应,哪怕是在大型代码库。

所以快速反馈能够改变行为。
当错误能够立刻出现,开发者会进行更多的重构和测试,于是问题在出现之初就被解决。
反之,当反馈延迟,团队则会通过通过约定俗成的规则、变通方案以及额外的流程开销来弥补。
所以无论选择编程语言、框架还是内部工具,响应速度都至关重要。能够缩短编写代码与理解其后果之间距离的工具往往更受信任。
2. 团队协作:放下个人偏好
当 Hejlsberg 从单独工作转向带领团队,最难的调整不是技术层面,而是学会放弃个人偏好。
Anders Hejlsberg 说:"你必须接受事情的进展与你的预期有所不同。即便解决了这个问题,也改变不了事情的本质。"
这种思维方式远不止于适用于语言设计。
任何需要跨团队扩展的系统都需要从个人品味转向共同目标。
目标不再是编写符合你个人风格的代码,而是编写多人都能理解、维护和共同演进的代码。
C# 的诞生并非源于一个全新的理想,而是源于各种相互冲突的需求。Visual Basic 开发者追求易用性,C++ 开发者追求强大功能,而 Windows 则要求务实。
最终的结果并非理论上的纯粹,而是一种足够多的人能够有效使用的语言。
语言的成功并非源于其完美无缺的设计,而是源于其能够适应团队实际的工作方式。

3. 顺势而为:为什么 TypeScript 选择扩展 JavaScript
TypeScript 为什么能成功?
不是因为它比 JavaScript 更"完美",而是因为它选择了"扩展"而不是"替代"。
当时很多团队为了用上静态类型,直接用其他语言编译成 JavaScript。这种"推倒重来"的做法,要求开发者放弃现有的工具、库、思维模式------成本太高了!
TypeScript 的聪明之处就在于:我不要你放弃任何东西,我只是在你现有的基础上加点内容。
这背后其实也是妥协。
尊重现有工作流程的改进往往得到传播,需要全面替换的改进则很少能实现。
有意义的进展往往来自于让你已经依赖的系统变得更强大,而不是试图重新开始。

4. 透明化:公开透明建立信任
TypeScript 团队在 2014 年做了一个重要决定:完全开放开发过程,所有讨论都在 GitHub 上进行,让全世界都能看到他们是怎么做决策的。
这样做有什么好处?
开发者不仅能看到最终成果,还能理解为什么这么做。信任就这样建立起来了。
对团队来说,这也改变了工作优先级。他们可以直接查看开发者关心的问题,而不是猜测什么最重要。
所以最有效的开源项目不仅仅是分享代码。它们使决策过程可视化。这样贡献者和用户就能理解如何设定优先级,以及为什么做出权衡。

5. 必要的突破:什么时候该彻底重做
TypeScript 团队曾经用 JavaScript 来写 TypeScript 编译器,这在小项目时没问题。但随着项目越来越大,JavaScript 的单线程特性成了瓶颈。
这时他们做了一个艰难决定:把编译器用 Go 语言重写。
这不是为了炫技,而是因为技术限制已经到了不突破就无法继续发展的地步。
而这次重写的目标是语义保真度。新编译器需要表现得与旧编译器完全一样,包括怪癖和边缘情况。
结果就是带来了显著的性能收益,而社区也不必重新学习编译器。
所以有时最负责任的选择不是雄心勃勃,完全重写,而是保持最小化破坏,并移除无法通过增量优化克服的硬限制。
6. AI 时代:基础比想象力更重要
Hejlsberg 对 AI 时代的编程有个很深刻的观点:
在 AI 能生成代码的时代,工具的价值不在于创造,而在于约束。
想象一下,如果 AI 可以写代码了,那程序员的价值在哪里?就在于他们知道什么时候约束 AI,知道什么是正确的,什么是错误的。
所以AI 辅助工作流程中最有价值的工具不是生成最多代码的工具,而是正确约束它的工具。
强大的类型系统、可靠的重构工具和准确的语义模型成为必不可少的护栏。它们提供了允许 AI 输出被审查、验证和有效纠正而不是盲目信任的结构。

7. 开放协作:至关重要
尽管面临资金和维护的挑战,Hejlsberg 对开放协作依然保持乐观。一个原因是制度记忆。哪怕是多年前的讨论、决策和权衡,仍然可以搜索和可见。
"我们有 12 年的历史记录在我们的项目中,"他解释道。"如果有人记得发生了讨论,我们通常能找到它。上下文不会消失在电子邮件或私人系统中。"
这种可见性改变了系统如何演变。设计时的辩论、被拒绝的想法和权衡在个人决策做出后很长时间仍然可访问。
对于以后加入项目的开发者来说,这种共享上下文常常与代码本身同样重要。
总结
你会发现,在 Anders Hejlsberg 40 年语言设计的历程中,同样的主题反复出现:
-
快速反馈比优雅更重要
-
系统需要容纳许多人编写不完美的代码
-
行为兼容性往往比架构纯粹性更重要
-
透明化的权衡取舍能够建立信任
这些并非次要因素,而是决定工具能否随着用户群体增长而不断适应的根本性决策。
此外,它们也为创新奠定了基础,确保新想法能够在不破坏现有有效机制的前提下生根发芽。
对于任何致力于打造经久不衰的工具的人来说,这些基本要素与任何突破性功能都同样重要。而这或许才是最重要的一课。
我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。
欢迎围观我的"网页版朋友圈",关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。