微软宣布用 Go 重写 TypeScript 编译器,引发了对编程语言选择的讨论。作者Steve Klabnik反思了技术选择背后的情境和原因,强调不同项目有不同的需求,不应轻易评判他人的选择。他还分享了自己因嘲笑他人代码而反思的经历,意识到社区文化对个人行为的影响,并倡导尊重和包容的编程文化。
Steve Klabnik是谁?
Steve Klabnik 是一位知名的程序员、技术作家和编程语言专家,尤其以对 Rust 编程语言的贡献而闻名。
- Steve Klabnik 是 Rust 编程语言的核心开发者之一,主要负责 Rust 的文档编写和社区建设。他从 2012 年开始参与 Rust 的开发工作,并在随后的十年中持续推动 Rust 的普及和发展
- 他是《Rust 权威指南》(The Rust Programming Language)的合著者之一,这本书被广泛认为是学习 Rust 的经典教材
以下是他文章大意,原文点击标题:
我昨天本来想写这篇文章的,但我不太喜欢我当时的思路。昨晚,我和一个好朋友聊了聊这件事,他鼓励我换个方式写出来。我觉得现在这种方式更好,所以,谢了,兄弟。
前几天,微软宣布他们要用 Go 语言重写 TypeScript 编译器。很多人对此有很多情绪,我也有,但和其他人的想法不太一样。
大家最大的问题是:“为什么不用 C#?” 和 “为什么不用 Rust?”。说实话,我觉得问别人为什么选择某种编程语言是有价值的;作为专业人士,我们经常要做这种决定,看看别人是怎么做决定的,能帮助我们理解他们的思维方式。
但有时候……我也说不清。我觉得有些人在选择技术栈时,想象力有点匮乏。
确实,有时候会有一些硬性要求,导致选择某种技术不合适。但我发现,这些要求往往是基于具体情境的,而不是抽象意义上的。比如,如果你想用 Lisp 写操作系统,理论上是可以的。但实际上,你可能不会在这种硬件上工作,或者不愿意把环境移植到裸机上。
但问题是,你通常不知道别人的具体情境上下文 Context是什么。
我完全没想到微软选择 Go的主要原因竟然是:
- 我们是在移植现有的代码库,而不是重写它,而我们的现有代码看起来有点像 Go,移植起来比较容易。
这是个非常好的理由!我之前从没从这个角度思考过移植和重写的区别,现在觉得非常有道理。
这里需要找到某种平衡。但与此同时,我讨厌“选择正确的工具”这种建议。除了艺术项目,谁会故意选择错误的工具呢?很多时候,某些工具看起来不合适,只是因为你不了解具体的上下文需求。
我觉得这种情况让我感到复杂的原因有两个:
- 第一个是“RIIR”(用 Rust 重写),
- 第二个是很久以前发生的一件事,它改变了我的生活。
你们很多人可能听说过“用 Rust 重写”这个梗:意思是有一群程序员总是建议把所有东西都用 Rust 重写。
虽然我确信这种情况时有发生,但我还没看到确凿的证据证明它真的普遍存在。我甚至差点写了一篇博客文章,试图量化这种现象。
但从某种程度上说,感知就是现实,如果人们相信这是真的,那它在某种程度上就是真实的,即使事实并非如此。不管有多少人真的这么建议,每次关于 Rust 的讨论中,人们都会抱怨这种现象,所以它对整体讨论产生了影响。虽然我不认为这种现象普遍存在,但在这个具体情况下,确实有很多人非常强烈地建议应该用 Rust 而不是 Go。我理解他们的出发点,但说真的:Go 在这里是个完全合理的选择。它没问题。你们为什么非要强化这种刻板印象呢?这很让人沮丧。
第二个原因是我十多年来一直在思考的事情,但直到最近才开始在私下和朋友之外的场合谈论它。长期关注我的人可能还记得我曾经是个混蛋。当然,我这辈子不止一次当过混蛋,但这次可能是对我影响最大的一次。事情的大致经过是这样的:
有人用 Node 写了一个 grep 工具。
我在网上嘲笑它,因为谁会用一个 CLI 工具写 Node 呢?
作者发现后感到很难过。
我道歉了,我觉得它可能不是最好的。
这些年我学会了更好地道歉。
无论如何,这件事改变了我的生活轨迹。如果你碰巧读到这篇文章,Heather,我真的非常非常抱歉。
这里发生了两件事:
第一件是,2013 年时,我并没有意识到我说的话有影响力。我讨厌谈论这个,因为它让我显得比我实际更重要,但这也是必须承认的。当时我把自己看作只是一个普通人,随便在网上说点什么,就像在现实生活中和朋友聊天一样,我的话只是随便说说,我是个普通人,无所谓。但事实上,当时的情况并非如此。我在 Rails 团队工作,在会议上演讲,很多人读我的博客和推文。我是个“有影响力的人”,不管好坏。但我还没有真正意识到这种变化。所以我不明白,如果我批评某件事,会有成千上万的人看到。对我来说,我只是 Steve。这件事发生在我们谈论“取消文化”之前,但当人们开始批评我时,我意识到:他们是对的。我当时确实是个混蛋,我不应该那样做。我下定决心再也不那样了。
为了做到这一点,我不得不深入思考为什么我会那样。我喜欢编程语言!我喜欢人们用他们感兴趣的语言写程序!我不认为用我不熟悉的语言写工具是愚蠢的!那为什么我当时会觉得有必要嘲笑这件事呢?
答案很简单:我当时交往的人影响了我,而这种影响让我后来反思时感到很不舒服。
你看,当时在 Rails圈子里,尤其是对 JavaScript 和 Node,有一种非常强烈的鄙视文化。当你周围的人都喜欢说三道四时,你也会不自觉地跟着说。当我意识到这一点时,我想停止这种行为。但问题来了:我的整个职业生涯,甚至大部分社交生活,都围绕着 Ruby 和 Rails。所以如果我想逃离那种文化……我该怎么办?
如果你点击了上面我道歉的链接,你可能没注意到日期:2013 年 1 月 23 日。就在 2012 年 12 月,我刚刚决定去了解一个叫 Rust 的小众编程语言。
当时 Rust 社区只有大约 40 个人在一个 IRC 聊天室里,让我印象深刻的是他们非常友好。当我遇到问题,无法编译 Hello World 时,我输入 /join #rust,本以为会收到“去读手册”之类的嘲讽。但相反,我受到了热情的欢迎。大家都很随和,这让我感觉很棒。
一个月零一天后,我意识到我的生活方向出了问题,我对现状并不满意。我想了想自己有多喜欢 Rust,再加上其他一些因素(也许我以后会写出来),我决定要让 Rust 成为一个重要的语言,并为此全力以赴。
其中一部分是关注社区文化,以及它如何发展、演变。我不想让 Rust 变成 Rails 那样。这意味着我必须真正改变自己,并且有意识地控制自己的言行。这最终促成了“我们只谈论 Rust 的优点,而不是贬低其他语言”的文化。(这部分也受到了尼采的影响,但我已经离题太远了,也许以后再说。)
总之,时间会改变一切。“Rust 社区”这个概念已经不再像以前那样清晰了。它远非完美,我对很多事情也有批评。但我认为“Rust 让你变性”这种梗的出现并非偶然。我为我们所构建的一切感到非常自豪。
所以,总之:人们选择编程语言有很多原因。当然,有些选择可能更好或更糟。但你的情境可能和别人不同,所以当别人做出你不认同的选择时,没必要表现得像个混蛋。