📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Jeff Atwood: Stack Overflow and Coding Horror | Lex Fridman Podcast #7

Lex Fridman1:20:09

Transcription

以下是与杰夫·阿特伍德的对话。他是 Stack Overflow 和 Stack Exchange 网站的联合创始人,这些网站每天都有数百万用户访问。与维基百科类似,很难低估这些网站网络对全球知识和生产力所产生的巨大影响。杰夫也是著名博客 Coding Horror 的作者,以及 Discourse 的创始人,Discourse 是一个旨在提高我们在线社区讨论质量的开源软件项目。本次对话是麻省理工学院人工智能课程和人工智能播客的一部分。如果您喜欢,请在 YouTube、iTunes 或您选择的播客提供商上订阅,或者在 Twitter 上与我联系,我的用户名是 Lex Friedman,拼写为 Fri D。现在,这是我与杰夫·阿特伍德的对话。

在十年前共同创建并管理了世界上最大的程序员社区 Stack Overflow 几年后,您认为是什么最能激励程序员?是名誉、财富、荣耀、编程过程本身,还是归属感?

主要是解谜。我认为这是独立于他人解决问题、独自解决问题的想法。虽然您知道现在没有人真正独自编程了,但我必须说,有一种隐藏自己、不断解决问题直到解决它的方面,基本上是蛮力。对我来说,很多编程就像计算机那么快,对吧?您可以做人类永远做不到的事情,但您只是做了很多次,而且如此频繁,以至于您得到了正确的答案。

您是在说,仅仅是摆弄代码这个行为本身,就是大多数人最 the thing that drives most probably 的驱动力吗?是克服痛苦和折磨的蛮力过程中的喜悦和挣扎的平衡,最终导致了真正有效的东西?

数据也很有趣。有一个叫做“洗牌问题”的东西。大多数程序员写的朴素洗牌算法都有一个巨大的缺陷,而且网上有很多关于这个的文章,因为如果您是一家赌场,并且有一个不精明的程序员编写您的洗牌算法,这可能会非常糟糕。会有令人惊讶的错误方式。但有趣的是,弄清楚这一点的方法就是多次运行您的洗牌算法,看看您能得到多少种牌的排列。您应该得到所有牌的平均分布。而使用朴素的洗牌方法,如果您只看数据,如果您只是蛮力地尝试,然后说“好吧,我不知道会发生什么”,您就写一个执行了十亿次的程序,然后看看数据的桶是什么样的。

蒙提霍尔问题是另一个例子,您有三扇门,有人给您关于另一扇门的信息。正确的答案是您应该总是换门。而蒙提霍尔问题并不直观,人们总是对此感到困惑,对吧?但您可以用数据来解决它。如果您编写一个执行蒙提霍尔游戏并从不换门和总是换门的程序,您会立即看到,您不必很聪明,对吧?您可以通过算法来解决它,您可以通过数据蛮力解决它,然后说“好吧,我知道答案是这个,因为我运行了这个程序十亿次,这些是我从它那里得到的数据桶”。所以,经验性地找到它。

但那有什么乐趣呢?那么,对您个人而言,除了家庭之外,是什么激励您在这个过程中?

说实话,我现在并不怎么写代码了。我在 Discourse 上做的是管理方面的事情,我一直有点鄙视。作为一名程序员,您认为经理们什么都不做。但代码的奇怪之处在于,您会意识到语言就是代码。能够指导他人可以让您获得比自己做得更多的事情。

您是在说语言、代码、社区、沟通,是的,那些都是人类。您可以将其视为系统性的。那么,在进入编程之前,是什么让一位好经理脱颖而出?是什么让一位好领导者脱颖而出?

我认为领导者首先是关于以身作则。也就是说,做您想成为的人。这可能会让人筋疲力尽,尤其是当您有孩子的时候,因为您会意识到您的孩子一直在看着您,即使是以您自己都停止看到自己的方式。地球上最难看到的人其实是您自己。看到别人并对他们做出评判更有趣,但您对自己有偏见,您实际上并没有像别人那样看到自己。您对自己非常非常苛刻,而别人却不会。所以,其中一个见解是,您必须非常勤奋地思考:我的行为方式是否代表了我希望其他人如何行为?也就是说,以身作则。

有很多领导者搞砸了的例子,他们做出了“哇,为什么会这样?”的决定。这只是一个坏的榜样。所以,我认为以身作则是其中之一。另一个我认为是努力工作。我不是指拼命工作,而是表现出对问题的真正热情。不是您解决方案的热情,而是问题本身,您真的相信它。

以 Discourse 为例,这是我目前的项目,我们正在研究的问题是如何让人们在群体中以一种不会像狼嚎一样崩溃的方式进行交流?我们如何处理网络钓鱼?不是如何让人们发布段落的技术问题,如何让人们使用粗体,如何让人们使用完整的句子,尽管那些也是问题,但我们如何让人们相处融洽?然后解决他们设定的任何问题,达成某种共识,或者即使不互相伤害?也许讨论并不重要,但人们在互相尖叫吗?为什么?这不应该是这种沟通的目的。

所以,我想说,领导力就是设定榜样,做代表您想成为的人的事情,并确保您确实在做这些事情。而且这里也有一个技巧,因为您不做的事情也说明了很多关于您是谁。

那么,让我们停在那儿。这两个方面都非常迷人。那么,作为领导者,您如何拥有这种自我意识?您刚才说很难有自我意识。所以,对您个人而言,或者对您见过或仰慕的其他领导者而言,您如何知道您正在做的事情是错误的事情?您与他人交谈的方式,您的行为方式,以及您没有做的事情?您如何获得这种服务?

一方面是处理您收到的反馈。您如何获得反馈?您收到反馈了吗?所以,我们在这里为 Discourse 做的一个例子是,我们有三位联合创始人,我们在做出决定之前会定期讨论。所以,不是一个人会犯错,或者会有误解之类的事情。所以,这是领导力集体共识的一部分。我认为,拥有一个领导者拥有绝对法律的系统是非常危险的。根据我的经验,例如,由一个人领导的几个社区,那个人会做出所有决定,那个人会心情不好,可能会发生什么事情,您知道,有很多变量。所以,起初,当您想到领导力时,您会想让多个人来领导,让他们互相交谈。

互相给予关于他们所做决定的反馈。然后,当您收到反馈时,我认为您脑海中会有一个小小的声音,或者您的直觉,或者您想把它放在哪里。我认为那个声音很重要。我认为大多数有道德指南针的人,或者想做正确事情的人,大多数人都想做正确的事情。我确实相信这一点。也许有一小撮反社会者不是,但大多数人都希望别人认为他们是好人。为什么不呢?您希望别人鄙视您吗?那太奇怪了。所以,您有那个小小的声音,就像肩膀上的天使和魔鬼一样,在和您谈论您在做什么,您做得怎么样,做这些决定让您感觉如何?我认为与那个声音保持一致很重要。

但是您说那个声音也……我认为这是程序员的情况。有时肩膀上的魔鬼有点太响了。所以,您对很多开发者来说有点太自我批评了,尤其是当您有内向性格时。您如何与自我批评作斗争?来自他人的批评?

领导力的一部分是做一些可能不受欢迎或人们怀疑的事情,而您仍然坚持您的决定。那么,这种平衡是什么样的?

我认为您必须让人们了解您的决策过程。所以,博客在这里非常重要,沟通再次变得重要。代码语言只是另一种代码。就是“这是我得出结论的程序”。说“这是最终决定,接受吧”是一回事,这通常不能令人满意。但如果您说,“看,我们已经考虑这个问题一段时间了,发生了一些事情,我们认为这是正确的,我们的目标是实现这个目标,我们已经考虑了这些选项,我们认为这是可行的选项中最好的”,人们会说,“哦,好吧,也许我并不完全同意您,但我可以看到您的想法是什么。”而且您可以看到,这并不是随意从天而降的决定。这就像一个人试图就目标达成某种共识,而他们的目标可能与您的不同,这完全是合法的。但如果您清楚这一点,就会说,“好吧,我们不同意的原因是我们有完全不同的目标。”我们怎么能同意呢?不是因为您是个坏人,而是因为我们在开始研究这个问题时,心中有截然不同的目标。

您提到的另一个是热情。或者抱歉,是努力工作。

对我来说,这两者是联系在一起的。我就是非常喜欢 Discourse 正在努力解决的问题。因为在某种程度上,世界正在走向 Facebook basically 拥有所有东西,以及人类交流的每一个方面。对我来说,这一直是一个有点可怕的世界。首先,因为我不认为 Facebook 在执行方面做得很好,我必须赞美他们,他们在所做的事情方面非常有能力。但 Facebook 在道德指南针方面做得不多。就 Facebook 而言,Facebook 关心 Facebook,真的。他们并不真正关心您和您的问题。他们关心的是 Facebook 能变得多大。

您是在谈论公司,还是 Facebook 的运作机制?

有点两者都有。而 Discourse 的想法,我如此热衷于它的原因,是因为我相信每个社区都应该有权拥有自己。他们应该拥有自己的软件,他们可以运行,属于他们,那是他们的空间,在那里他们可以制定规则。如果他们不喜欢,他们可以迁移到不同的托管,或者他们需要什么。但这种“公司城镇”的想法,即所有人类交流都隐含地属于 WhatsApp、Instagram 和 Facebook,这确实令人不安。因为 Facebook 确实很聪明,就像我说的,他们执行得很好,购买 Instagram 是非常明智的决定。他们还做了一件事,如果您知道的话,他们有一个 VPN 软件,他们免费提供给智能手机用户,它间接将所有流量数据反馈给 Facebook。所以,他们可以看到通过 VPN 真正受欢迎的是什么。他们拥有对网络数据的低级访问权限,因为用户允许他们这样做。

好的,让我们在这里暂停一下。首先,Discourse,您能谈谈社区的所有不同方式吗?您构建了 Stack Overflow,您构建了 Discourse。所以,Stack Overflow 就像维基百科,您在谈论它,它非常具体,非常专注。那么,Discourse 的目的是什么?也许与 Facebook 形成对比?首先,Discourse 是什么?

让我从一开始说起。Stack Overflow 是一个非常结构化的、维基风格的程序员问答平台。这就是我们最初处理的问题。当我们开始时,我们以为是讨论,因为我们看了编程论坛和其他东西。但我们很快意识到我们是在做问答,这是人类交流中一个非常狭窄的子集。

所以,当您开始 Stack Overflow 时,您甚至不知道问答吗?

我们不知道。我们有一个想法,我们看到了在线上奏效的东西。我们有一个目标。我们的目标是有一个叫做 Experts Exchange 的网站,它非常糟糕。谢谢您毁了那个网站。我知道,对吧?很多人已经不记得它了,这很好。当人们不记得您试图取代的东西时,那就是成功的衡量标准,您就赢了。

这是一个回答编程问题的地方,但它是否专注于问答,还是讨论,并不清楚。有很多编程论坛,所以我们并不确定。我们就像,“好吧,我们将采用 Digg 和 Reddit 的方面,比如投票,重新排序答案基于投票,维基风格的东西,可以编辑帖子,不仅是您的帖子,还有其他人的帖子,使它们更好,并保持最新。博文的所有权,就像“好吧,这是我,我这么说,这是我的声音,这是我所知道的”,您的声誉会累积到您身上,这纯粹是认可。

您刚才问是什么激励程序员?我认为同伴认可激励他们很多。这是 Stack Overflow 的一个关键见解,即来自同伴的认可就是事情的完成方式。最初是金钱?好吧,您的老板。但您的同伴说,“哇,这个人真的很懂行”,这很有价值。所以,声誉系统就源于此。

所以,我们基本上是将许多我们看到有效并且我们知道有效的东西拼凑在一起,这就是 Stack Overflow。随着时间的推移,我们意识到它并不是真正的讨论,而是非常专注的问题和答案。页面上没有太多空间让我谈论这个相关的、题外话的事情。它更像是,“好吧,他正在回答一个问题。”它是在澄清问题,还是可以作为同一个问题的替代答案?因为通常在编程中不止一种方法可以做到。通常有五到十种方法。

我们早期在 Stack Overflow 上遇到的一个模式是,有些问题有数百个答案。哇,怎么会有有 500、200、500 个答案的编程问题?我们看了看,意识到那些实际上并不是传统意义上的问题,而是讨论。这是我们早期允许的,但我们最终决定不允许的,比如“您最喜欢的编程食物是什么?”“您见过的最有趣的编程卡通是什么?”我们不得不制定规则,比如“为什么这不允许?”例如,“这是您真正面临的问题吗?”没有人会去工作说,“哇,我无法工作,因为我不知道最有趣的编程卡通是什么。”“所以,抱歉,无法编译这段代码了。”这不是您在工作中面临的真正问题。那是规则。

第二个是“您能从中真正学到什么?”这就像我称之为“意外学习”或“Reddit 式学习”,您只是浏览一些东西。“哦,哇,您知道吗?青蛙只能活三年。”我随便说的,我不知道是不是真的,但我并没有刻意去学习它,我也不需要知道它。这是意外学习。我们更倾向于有目的的学习。我们就像,“好吧,我有一个问题,我想学习与这个问题相关的东西。”可能是编译器理论,可能是其他东西,但我有一个编译器问题,因此我需要了解编译器理论。这个方面可以帮助我找到答案。所以,是一种有方向的学习。

所以,我们不得不为所有这些规则进行事后补充,因为我们弄清楚了我们到底在做什么。随着时间的推移,系统变得非常严格,很多人仍然对此抱怨。我写了我的最新博客文章,“Stack Overflow 想成为什么?”庆祝十周年。是的,是的,十年了,那个系统趋向于严格。有多种原因。

一个原因是,人们不喜欢看到别人因为他们认为琐碎的事情而获得声誉。我其实可以理解,因为如果您看到一个程序员因为“最有趣的编程卡通”或“代码中最有趣的评论”而获得五百次点赞,就像,“好吧,他们为什么有声誉?是因为他们写了那个笑话吗?不,也许是,或者卡通片?他们获得了大量声誉,是基于别人的工作,甚至不是编程,只是一个笑话?它与……有关。”所以,您开始怨恨,“好吧,那不公平。”在某种程度上,他们是正确的。我的意思是,我表示同情,因为这不正确。您因此获得声誉,而不是因为“这里有一个非常棘手的正则表达式问题,这里有一个非常……巧妙、有见地、详细的答案,解释了为什么您会看到这种行为,让我教您一些避免将来发生这种情况的方法。”那太棒了,那是金子,对吧?您希望人们因此获得声誉,而不是因为“哇,看看我看到的这个有趣的东西。”好的。

所以,有一个非常具体的问答格式。然后,带我走过走向 Discourse 和 Facebook 以及 Twitter 的旅程。您从头开始。Stack Overflow 演变成了一个目的。那么,您对创建社区、讨论的热情在哪里诞生?

部分原因在于认识到 Stack Overflow 只适用于非常具体的主题,这些主题基于数据、事实和科学,答案可以被验证为真。另一种形式是知识的宝库,定义了任何东西,您可以参考那本书,它会给您答案。它只适用于有半清晰答案、可以以某种形式验证的事物。再次,总有不止一种方法可以做到,系统中有完整的灵活性。但它失效的地方是像扑克和乐高这样的东西。

如果我们去 Stack Exchange.com,我们有一个引擎,试图启动不同的问答主题。人们可以提出问答主题,样本问题,如果它在网络中获得足够的支持,我们就会启动那个问答网站。所以,我们启动了扑克和乐高,它们表现很差。我的意思是,它们可能仍然以某种形式存在,但这是一个实验,这是一个测试。有些主题在 Stack 引擎中效果非常好,有些则不然。

但乐高和扑克之所以不起作用,是因为它们太社交了。不是关于“这里的规则是什么?”在扑克中,就像,“我们玩扑克时喜欢抽什么牌子的雪茄?”或者,“玩扑克时用什么酷的牌组?”或者,“我手上有这个,给我一些我能用的策略。”它更多的是围绕“发生了什么”的讨论。

就像乐高一样,同样的事情。“看这个酷的乐高套装,我找到了。”“哇,那太棒了。”这不是问题,对吧?所有这些社交组成部分,讨论,根本不适合。我们实际上必须允许这些。在 Stack Overflow 上,它不是关于社交,而是关于您在工作中面临的需要具体答案的问题。您有一个真正的问题,阻碍了您,没有人会被“我玩同花顺时该怎么办?”这样的问题所阻碍。世界上有一个阻碍性的问题。它只是一个闲逛和讨论的机会。

所以,Discourse 是解决这个问题的一种方式,它说,“看,讨论论坛软件以前非常非常糟糕。”当我离开 Stack Overflow 时,直到 2013 年末或 2012 年初,它仍然非常非常糟糕。我预计它有所改进,而且自从我上次看以来已经四年了,但它根本没有改进。我当时想,“这太糟糕了,因为我喜欢这些谈论他们喜欢的东西的人的社区。”就是社区的兴趣。而且没有好的软件给他们。

初创公司会来找我,说,“杰夫,我想……我有一个初创公司,这是我的想法。”我首先会告诉他们的是,“好吧,首先,你为什么问我?我真的不知道您的领域。”“为什么您不问社区?那些对这个问题感兴趣的人?那些使用您产品的人?为什么您不和他们谈谈?”然后他们说,“哦,好主意。我该怎么做?”然后我就开始播放悲伤的萨克斯风,因为我意识到所有与用户、客户、观众、赞助人交谈的软件都非常糟糕。我当时想,“我都不好意思推荐给别人。”然而,我认为他们可以在产品上获得最大、最强大、最有效的输入,那就是来自他们的用户,来自他们的社区。这就是我们在 Stack Overflow 上所做的。

所以,我们谈论论坛,互联网的“暗物质”?它仍然……我不知道它是否仍然是,但很长一段时间以来,它有一些最热情、最迷人的讨论。通常的结构是什么?它通常是线性的,是顺序的,您一个接一个地发帖,还有分页。所以,每十个帖子,您就进入下一页。这种格式仍然被使用,比如,我们正在与特斯拉汽车公司进行大量研究,那里有 Tesla Motors Club 论坛,我真的很想经营那个。他们联系了我们,我认为我们没有得到,但我真的很想得到那个。但他们甚至在 2012 年之前就开始了,我相信。我的意思是,他们已经运行了很长时间了,它仍然是一个极其丰富的信息来源。

那么,这个系统有什么问题?您如何尝试解决它?

我认为在连接热爱同一事物的人们围绕特定主题方面,有很多力量。我的意思是,Facebook 的连接理念就是任何与另一个人有关的人,就像通过友谊或其他任何原因一样。Facebook 的世界理念就是状态更新。您的朋友在餐馆吃了东西。而讨论论坛则更多地围绕兴趣图谱。我喜欢电动汽车,特别是特斯拉。我喜欢他们解决问题的方式,我喜欢创始人的风格,我就是喜欢设计理念。特斯拉有很多值得喜欢的地方。

如果您看过 The Oatmeal,他写了一篇关于特斯拉的漫画,这实际上很酷,因为我学到了一些东西。他写了特斯拉汽车有多棒,特别是它们是如何建造不同的,他详细地介绍了,这对我来说非常有趣。

如果您读过那篇 Oatmeal 的文章,它几乎是所有兴趣社区的起源。我就是喜欢这些东西。对我来说,就是……我喜欢溜溜球。我喜欢溜溜球社区。这些兴趣社区非常迷人。我感觉比我认识的不常联系的朋友更与溜溜球社区有联系。对我来说,强大的东西是兴趣图谱。Facebook 也在涉足兴趣图谱。我的意思是,他们有小组,您可以注册小组之类的,但它更多的是关于关系图谱。这是我的同事,这是我的亲戚,这是我的朋友。但不是关于兴趣。

所以,我认为这是论坛和社区建立的基础。我个人喜欢。我喜欢,正如我所说,领导力就是热情。对事物充满热情是看待世界的一种非常有效的方式。我认为世界上很多事情都是这样完成的。我曾经有人这样描述我:“杰夫,你是一个一次只对几件事充满热情,然后就全力以赴的人。”我当时想,“哦,这有点对,这就是我所做的。”我会投入到某件事中,然后投入几年,或者无论多久,我都会学习所有我能学到的东西,然后深入研究。这就是我喜欢体验世界的方式。不是对很多事情都浅尝辄止,而是对一些我感兴趣的事情深入研究。

所以,论坛解锁了这一点。而且,您不希望一个世界里一切都属于 Facebook,至少我不希望。我希望一个社区可以拥有自己的东西,制定自己的规范,制定自己的规则,控制体验。因为社区也关乎所有权。就像,如果您每周四在 Barnes & Noble 开会,而 Barnes & Noble 说,“你们这些家伙滚出去,你们买的书不够多。”那么,您就完蛋了,对吧?Barnes & Noble 拥有您。但如果您有自己的会议空间,您自己的俱乐部会所,您可以制定自己的规则,决定在那里谈论什么,然后就能产生比每周四下午 3 点在 Barnes & Noble 闲逛更好的信息。

所以,这就是 Discourse 的愿景,一个完全开源的地方。您可以获取软件,可以在任何地方安装它。您和一群人可以深入研究您感兴趣的任何东西。这对初创公司也很有用。初创公司就是一群人,他们深入研究一个特定的问题。他们想与社区交流。那么,就安装 Discourse 吧。这就是我们在 Discourse 上所做的。这就是我在 Stack Overflow 上所做的。我在 Meta Stack Overflow 上花了大量时间,这是我们的内部……嗯,公开的社区反馈网站。并体验用户正在经历的事情。因为他们是系统中所有工作的人,他们有很多有趣的反馈。

而且有那个 90/10 的规则,就像您收到的 90% 的反馈实际上是不可行的,原因有很多。它可能是坏的反馈,可能是疯狂的反馈,可能是您现在无法处理的反馈。但其中有 10% 是金子,是字面意义上的金子和钻石。就像对您的核心产品有非常好的改进的反馈,而且并不难实现,而且实际上很有意义。我最喜欢的是其中大约 5% 的东西,我甚至都没想到。就像,“我的天,我从来没想过。”但这是一个绝妙的主意。

我可以指出 Stack Overflow 的许多功能都源于 Meta Stack Overflow 的反馈,以及 Meta Discourse。同样的原则。在 Discourse 上,我们从社区那里获得想法。“我的天,我从来没想过,但那太棒了。”我喜欢与社区的这种关系。

通过建立这些社区,您学到了什么?获得社区关键成员的过程是怎样的?是运气、技能、时机、毅力,还是工具,比如 Discourse,赋能了那个社区?开始时,一个人,然后发展到 2 个,10 个,100 个,1000 个,等等,关键方面是什么?

我认为我们从“一”开始。我的意思是,我认为这是毅力,而且您必须有趣。我非常钦佩的人曾经说过,我一直很喜欢博客,他说,“如何写博客?您必须有一些有趣的事情要说,并且以有趣的方式说出来。”然后,这样做十年。这就是起源。您必须有一些有趣的事情要说,这与其他人说的完全不同,并且以有趣的方式说出来。同样,以一种有趣的方式说出来。

然后,关于成长,就像仪式一样。我的意思是,您必须……假设您正在写博客,您必须说,“好吧,我每周要写三次博客。”您必须坚持那个时间表。因为直到您这样做几年,您才会取得任何进展。需要很多年才能达到您需要达到的目标。其中一部分是拥有坚持时间表的纪律。

如果您对此充满热情,这就不会感觉像工作。我喜欢这个,我可以整天、每天都谈论它。您只需要以一种对别人有趣的方式来做。然后,当您发展社区时,社区内的参与模式,就像生成这些工件,并邀请其他人帮助您,就像合作这些工件一样。

即使是写博客,就像我感觉在我博客的早期,我从 2004 年开始写博客,这实际上是 Stack Overflow 的起源。如果您看看我所有的博客,它们都指向 Stack Overflow。我所有的精力都在我的博客上,但有 40,000 人订阅了我。我当时想,“我想做点什么。”然后我遇到了乔尔,我说,“嘿,乔尔,我想做点什么。我所有的精力都在我的博客上,我想做点什么,我想建立点什么。”我所有的博客读者都看到了,“哦,酷,你让我们参与进来。你说,‘看,你是这个社区的一部分,让我们一起建立这个东西。’”他们选择了名字。我们就在我的博客上投票决定 Stack Overflow 的名字。我们想出了名字。命名是计算机科学中最难的问题之一,对吧?

但您可以回到我的博客,那里有投票,我们投票决定 Stack Overflow 成为网站的名字。所有早期的 Stack Overflow Beta 用户都是我的博客读者加上乔尔的博客读者。所以,我们从……如果您看看起源,我只是一个程序员,他说,“嘿,我喜欢编程,但我没有一个可以谈论它的渠道。”所以我只是写博客,因为我没有足够的人可以谈论它。因为当时我工作的公司,编程不是公司的核心产出,它是一家制药公司。我就是喜欢这个东西,到了荒谬的程度。所以我当时想,“我只是写博客。”然后我会找到一个听众。最终找到了听众,最终找到了乔尔,最终从那个核心活动中建立了 Stack Overflow。

但这是重复的,将我的博客评论的反馈,乔尔的反馈,早期 Stack Overflow 社区的反馈反馈回来。当人们看到您这样做时,他们会跟着您。他们说,“看,酷,您是真诚的。您实际上并没有听取一切,因为那是不可能的。但您实际上……正在倾听我们的反馈,以及您正在做的事情。”为什么不呢?因为在 Stack Overflow 上所有工作的人是谁?是我?乔尔?不,是其他程序员在做所有工作。所以,您必须尊重这一点。

然后,围绕着“看,我们在这里试图做一件非常具体的事情。我们不是在试图解决世界上所有的问题。我们试图以一种非常具体的方式解决这个非常具体的问答问题。不是因为我们是混蛋,而是因为这些严格的规则帮助我们取得非常好的结果。”而程序员,这对他们来说很容易推销,因为程序员习惯于处理荒谬的规则系统,就像不断地那样。那基本上是他们的工作。所以,他们非常……哦,是的,超级严格的规则系统,让我……那是什么?编程,对吧?那就是 Stack Overflow。

所以,您让它听起来很容易。但在 2004 年,让我们回到 2004 年。您开始写博客。它当时叫 Coding Horror 吗?

一开始,这是我做的最明智的事情之一。我联系了史蒂夫。我说,“我真的很喜欢这个。”这是史蒂夫·麦康奈尔的《代码大全》中的一个侧边栏插图,指示代码中的危险。Coding Horror 就像“小心”。我喜欢那个插图,因为它触动了我,因为我看到了那个插图,然后我想,“我的天,那就是我。我总是最糟糕的敌人。”

编程中的一个关键见解是,每次您写东西时,都要想:“我将如何搞砸自己?”因为您会不断地搞砸。所以,那个图标就像,“哦,是的,我需要不断地举起那面镜子,看着自己说,‘看,您非常容易出错,您会搞砸的。’您如何以一种您以后不会搞砸的方式来构建它?您如何获得围绕着确保在每一步我都考虑所有我可能做错的事情,或者其他人可能做错的事情的纪律?因为这实际上是您成为一名更好的程序员的方式,很多时候。

所以,那个侧边栏插图我太喜欢了,我写信给史蒂夫,在我开始写博客之前说,“嘿,我能用这个吗?我真的很喜欢这个插图。”史蒂夫很友善地给了我一部分许可。他一直给我许可。所以,是的,太棒了。

但您在 2004 年开始写博客。您看看斯蒂芬·金的写作书,或者斯蒂芬·普雷斯菲尔德的《战争艺术》这本书。作家似乎很痛苦。写作过程很艰难,对吧?会有痛苦。

我不会欺骗您。工作就是痛苦。做工作。即使每周您都想,“好吧,那篇博客文章写得不太好。”或者,“人们不喜欢它。”或者,“人们写了关于它的负面评论。”您必须有一种态度,“无论发生什么,我都要为自己做这件事。”这与您无关,而是与我有关。我的意思是,最终,这与每个人都有关,因为这是好作品进入世界的方式。但您必须非常严格地说,“我就是自私,因为我必须为自己做这件事。”

您提到了斯蒂芬·金的写作书。例如,我写东西时,我会大声朗读。写任何东西的最佳建议之一就是大声朗读。多次朗读,让它听起来像您在说话。因为好的写作目标就是它应该听起来像您说出来的,只是措辞稍微好一些,因为您有更多的时间来思考您在说什么。但它听起来应该很自然。我认为这是我可以给任何人的最好的写作建议。就是一遍又一遍地大声朗读,确保它听起来像您通常会说的话,而且听起来不错。

您的写作过程是怎样的?

通常,博客文章背后都有一个很好的想法。所以,想法。我认为您必须有一个概念。世界上有太多有趣的事情了。我的天,世界太棒了。您永远无法写完所有正在发生的事情,因为它太不可思议了。但如果您每天想不出一个有趣的事情来谈论,那说明您不够努力。因为世界上充满了非常有趣的事情。

而且,挖掘旧书是一个很好的方法。它们带来了仍然非常相关的旧东西。我做了很多,因为我当时在读经典的编程书籍。很多早期的重磅炸弹……哦,我当时在读一本编程书,它带来了一个非常酷的概念,我想多谈谈。您不必声称那是您的想法,但它给了您一些有趣的事情来谈论,而且是永恒的。您不必想,“我该谈论什么?”所以,去挖掘一些经典的旧编程书籍,找到一些,“哇,这很有趣。”或者,“它今天如何应用?”或者,“X 和 Y 怎么样?”或者,“比较这两个概念。”所以,从那本书里摘出几句话,然后就像,读者不同意。

所以,在 2007 年,您写道,有人出高价想买下您的博客,但您选择不卖。您当时在考虑所有哪些因素?因为我想带您回到过去,您的人生中似乎做出了很多非线性的决定。那么,那个决定是怎样的?

我喜欢“选择您自己的冒险”之类的书,我小时候很喜欢。我觉得早期的程序员书籍,因为它们都关于“如果-那么”语句。它们也非常非常无情。有很多网站映射了经典的“选择您自己的冒险”书籍,以及有多少结局是糟糕的。有很多糟糕的结局。所以,游戏的一部分就是,“哦,我得到了一个糟糕的结局,回到一步,回到更早的几步,我怎么会到这里?”这是一个决策序列。生活也是如此。每个决定都是一个序列。

所以,这个特定的决定,博客变得相当受欢迎。我发现了许多 RSS 阅读器。然后,一个家伙突然联系我,来自一家……一家错误跟踪公司。他说,“我真的很想买您的博客。”大概是……当时是十万美元,我记不清了,大概是八万美元,但这是一笔巨款。而且,当时,我一年的薪水就一次性拿到了。所以我真的在想,“好吧……”我记得当时和人们谈论,“哇,这是一笔巨款。”但然后我想,“我真的很喜欢我的博客。我真的想卖掉我的博客吗?因为那时它就不再属于我了。”

我喜欢的一个指导方针是,我不喜欢给人们太多建议,但我确实给了一个建议,因为我认为它确实是真的,而且普遍很有帮助。每当您面临一系列决策时,比如 A、B 或 C,您就得选择那个稍微有点吓人的。不是像跳悬崖那么吓人,而是让您感到紧张的那一个。因为如果您选择了安全的选择,您就没有真正推动自己,您就没有选择能帮助您成长的东西。

所以,对我来说,更吓人的选择是说,“不,让我们看看它会走向何方。”因为那样我就拥有它了。我的意思是,它属于我,它是我的东西,我可以把它带到另一个逻辑结论。想象一下,如果我说了“是”并卖掉了博客,世界会有多么不同。很可能不会有 Stack Overflow。很多其他事情也会改变。

所以,对于那个特定的决定,我认为是同样的规则。“什么让我有点害怕?做那个让我有点害怕的事情。”

说到这里,初创公司。我认为有一些普遍的问题,很多人都会感兴趣。您创办了 Stack Overflow,您创办了 Discourse。那么,一开始,这个过程是怎样的?您开始谈论它吗?您开始编程吗?您是从哪里开始的?催化剂是什么,实际上……

我认为最初的关键是有一个问题。某种状态的世界是不令人满意的,以至于您对此感到沮ット。我的意思是,在这种情况下,它是 Experts Exchange。我的意思是,乔尔的原始想法,因为我当时去找他,我说,“乔尔,我所有的精力都在我的博客上,我想做点什么,我想建立点什么,但我不知道是什么,因为我老实说,我不是一个好的想法人。我真的不是。我是执行者。我真的很擅长执行,但我并不擅长……头脑风暴。不是我的强项。这也是为什么我喜欢社区反馈,因为他们整天都在为您头脑风暴。”

所以,当我能进去,从社区那里挑选一个头脑风暴的想法时,即使我必须花三个小时阅读才能得到一个好主意,也值得。但总之,乔尔的想法是,“嘿,Experts Exchange 有很棒的数据,但界面很糟糕。”它试图欺骗您,感觉像一个二手车销售员,它就是很糟糕。所以我当时想,“哦,太棒了。它融入了社区,它融入了……我们可以做一个知识共享。”

所以,我认为核心是有一个非常好的想法,您对此非常强烈。一开始,世界上有一个错误,一个不公正,我们将纠正它。

通过构建这个用于讨论的平台的过程,就像是“看,没有好的软件供社区闲逛和做事情,对吧?无论是解决问题、创业,还是其他什么,论坛都是一个很棒的构建模块,或者在线社区,但它们很糟糕,它们太糟糕了,对吧?我甚至因为与这个软件相关联而感到尴尬,真的。我当时想,我们必须要有我们能引以为傲的软件。它就像是与 Reddit 竞争,与 Twitter 竞争,与 Facebook 竞争,对吧?我很自豪能在我的网站上拥有这个软件。”所以,这就是 Discourse 的起源,它源于对社区需要一个好的解决方案的强烈感受。

所以,这是第一步,起源。你为什么对此感觉如此强烈?然后人们围绕这个想法团结起来,就像乔尔已经对这个想法感到非常兴奋,我也对这个想法感到兴奋。所以,关于论坛软件,我在 Twitter 上发帖,我做了研究,作为我研究的一部分,我开始研究这个问题,对吧?我发现了一个叫做“论坛战争”的游戏,这是一个对论坛的戏仿,它仍然非常非常有趣,关于论坛行为,大概是 2003 年,它已经有些过时了,对吧?在 Twitter 上,行为有点不同,但它很棒,非常有趣,而且它就像一个 RPG 游戏,它附带了一个论坛,所以它就像一个关于论坛的游戏,附带了一个论坛。我当时想,“这太棒了,对吧?这太酷了。”而那个公司或那个项目的创始人,它并不是一个真正的公司,联系了我,这个来自多伦多的罗宾·沃德说:“嘿,你知道我看到你一直在谈论论坛,而且我真的很喜欢那个问题空间。”他说:“我仍然很想构建真正好的论坛软件,因为我认为市面上没有好的。”我当时想,“太棒了。”在那一刻,我想,“我们要开始创业了”,因为我无法想象有比这更好的人走进门来说“我对这个感到兴奋”。

这和乔尔一样,对吧?我是说,乔尔是这个行业的传奇人物,对吧?所以当他走进来,说他对这些问题感到兴奋时,就像我一样,“伙计,我们可以做到,对吧?”所以对我来说,这是最重要的一步,就是拥有一个你非常兴奋的想法,以及另一个联合创始人,对吧?因为再次,你获得了双重领导,对吧?我是否做出了一个糟糕的决定?有时拥有检查机制会很好,比如“这个想法好吗?我不知道,对吧?”所以这些是关键的种子。

然后开始构建东西,无论是程序员,还是视频类型,所以有很多研究,有很多研究,比如“市面上有什么失败了?因为很多人关注成功。我关注成功人士。每个人都关注成功。那些很无聊。给我看看失败的。因为那才是有趣的地方,那是人们在尝试的地方,那是人们在推动的地方,但他们失败了,但他们可能失败的原因与他们的想法的质量没有直接关系,对吧?是的,所以看看所有的失败,不要只看每个人都看的,那就是“哦,天哪,看看所有这些成功人士。”看看失败,看看那些不起作用的东西,研究整个领域。”所以,这就是我当时正在做的研究,它引导我找到了罗宾,对吧?

然后,例如,我们做了 Stack Overflow,我们想,“好吧,我真的很喜欢投票、Digg 和 Reddit 的一些元素。我喜欢维基百科,一切都是最新的,没有什么像一个古老的墓碑,上面有糟糕的过时信息。我们知道这很有效。维基百科是一个很棒的资源。博客,所有权的概念非常强大,对吧?就像“哦,我,乔写了这个,看看乔的答案有多好,对吧?”就像所有这些概念都在涌现,研究市面上所有有效的东西以及它们为什么有效,并试图将它们再次融入那个,那个弗兰肯斯坦的怪物,也就是 Stack Overflow。顺便说一句,那不是一个轻松的决定,因为 Stack Overflow 系统中仍然存在很多张力,人们抱怨 Stack Overflow 是因为它太严格了,对吧?为什么它这么严格?你们为什么总是关闭我的问题?这是因为我们在系统中有如此多的张力,围绕着试图从系统中获得好的结果,你知道,这些东西不是免费的,对吧?不是说我们都有完美的答案,没有人会受伤,没有人会被投反对票,就像那样,它不是那样的,对吧?

所以,这是一个有趣的点,一个小小的离题。是的,你说得对,关于焦虑。我曾在 Stack Overflow 上发布过很多问题和答案,我通常会问一些我正在处理的非常具体的问题。这是你谈论的一个话题,Stack Overflow 的目标不是写一个问题,不是关于你,而是关于一个问题,它将有助于社区的未来,对吧?但这很难说服,对吧?因为人们会说,“嗯,我真的不在乎委员会,我在乎的是我的问题,我的问题。”然后,这是公平的,对吧?这是否又是一种张力,一种平衡?我们想帮助你,但我们也希望每个人都能跟上来,对吧?那些排队的人会说,“哦,我也有那个问题。”如果从来没有人站出来说“我也有这个问题”,那么这个问题就不应该出现在 Stack Overflow 上,因为这个问题太具体了。甚至那也是一种张力,对吧?你如何判断?你怎么知道没有人会再问这个问题?所以系统里有很多张力。

你认为提问的焦虑,回答的焦虑,这种张力是程序员固有的,是这种过程固有的,还是可以改进?可以有一个幸福之地,那种张力不那么严酷吗?我不认为 Stack Overflow 可以完全改变它的运作方式。他们终于在做的一件事是,提问页面自 2011 年以来就没有改变过。我仍然对此有些耿耿于怀,因为我觉得你有一个问答系统,而一个问答系统的核心页面是什么?首先是问题,所有答案,以及所有答案。还有提问页面,特别是当你是一个新用户或试图提问的人时,那是你最需要帮助的时候,而我们只是没有跟上时代。但好消息是,据我所知,他们正在努力解决这个问题,它将是一个更基于向导的格式。你可以设想一个世界,在这个基于向导的程序中,当你提问时,“好吧,想一个好的标题。标题中有什么好词?标题中有一个不好的词是‘问题’,例如,我有一个问题。哦,你有一个问题?好吧,一个问题,这太棒了,对吧?你需要具体,对吧?所以它试图帮助你写一个好的问题标题,例如,这一步将被分解出来,所有这些东西。但在这个提问向导的步骤中,可能会说,“嘿,我有点紧张,我以前从未做过这件事,你能把我放到一个特殊指导的队列里吗?”你可以选择一个特殊的导师。我认为那将是太棒了。我对此没有任何异议,因为它是一个选择加入的系统,因为那里有些人说,“不,我只想帮助他们。我想帮助一个人,无论如何。我想付出额外的努力,我想花几个小时和这个人在一起。”他们的目标是什么?伟大的想法。我有什么资格评判?所以,那很好,它并没有被排除在外。但我们一开始就有一种大都市的氛围,就像,“看,我们是纽约市人。你来到纽约市,不要指望他们会说‘欢迎来到城市,乔,你好吗?进来吧,我带你四处看看。’纽约市不是这样运作的,对吧?我是说,你知道,纽约市以粗鲁闻名,我实际上不这么认为,因为我最近去过那里,它并不粗鲁。人们只是在忙自己的事,对吧?看,看,我有事要做。我很忙。我是一个忙碌的专业人士,你也是。既然你是一个忙碌的专业人士,当你提问时,你肯定会问最好的问题,对吧?因为你是一个忙碌的专业人士,你不会接受一个非常好的问题,其中包含很多关于你为什么这样做、你做什么、你研究了什么、你发现了什么的信息,对吧?因为你和我一样是专业人士,对吧?这有时会惹恼人们。而且我认为说“看,我不想要那种经历,我只想为初学者提供一个更轻松的地方”是没错的。我仍然认为牺牲不是为初学者设计的,对吧?有一种误解,你知道,甚至乔也说,“哦,是的,Stack Overflow 是为初学者准备的。”我认为如果你是一个神童,那还可以,但那并不真正代表,对吧?我认为作为初学者,你想要一套完全不同的工具,你想要实时屏幕共享,实时聊天,你想要访问资源,你想要一个你可以尝试和测试的游乐场,所有这些我们都没有给人们的东西,因为那从来都不是我们设计 Stack Overflow 的受众。这并不意味着它是错的,我认为如果互联网上有这样一个网站,或者如果 Stack Overflow 说,“嘿,我们要开始做这个”,那也很好。你知道,我不在那里,我没有做那些决定。但我确实认为你描述的压力,这种张力,是为了让人们意识到,“看,我有点紧张,因为我知道我必须尽我所能。”

另一个你谈论的,对我来说也很有趣,是重复的问题,或者说是。这是一个非常困难的问题,你强调了。论坛非常非常难。你可以拿一个很小的主题,你可能可以写 10、20、30 种提问方式,它们都会完全不同。我不知道是否应该有一个页面来回答所有这些问题。Stack Overflow 能否帮助区分,分离这些重复的问题,或者将它们连接起来,或者这是一个完全无望的、困难的、不可能的任务?我认为这是一个非常非常困难的计算机科学问题,部分原因是人们非常擅长使用完全不同的词语。在 Stack Overflow 上,我总是很惊讶,你会发现两个问题在功能上是相同的,而一个问题与另一个问题没有任何共同的词语,就像“我的天哪,从计算机科学的角度来看,你如何开始解决这个问题?”而且这种情况经常发生。人们非常擅长这样做,对吧?无意中以 10、20 种不同的方式问同样的事情。而另一个复杂之处在于,我们希望其中一些重复存在,因为如果有五个版本,用不同的词语,这五个版本是否指向一个集中的答案?就像,“好吧,这是重复的。不,没关系。这里,这里是你想要的答案,在这里,在这里,在这里,你知道,我们希望拥有的主要例子,而不是十个问题的副本和答案,因为如果你有十个问题的副本和答案,这也降低了声誉系统的价值,而程序员讨厌这一点,正如我之前提到的。你正在获得一个答案的声誉,而这个答案是别人或参与者给出的。就像,嗯,这是一个答案,但别人给出了那个答案,所以为什么你因为和四年前给出了相同答案的那个家伙一样获得声誉?人们对此感到冒犯,对吧?所以声誉系统本身就增加了系统的张力,因为那些声誉很高的人变得非常有动力去执行声誉系统,而且在大多数情况下,这是好的。我知道这听起来很奇怪,但对于大多数情况来说,就像,严格的系统,我认为要使用技术力量,你必须有这样的想法:好吧,严格的系统最终效果更好。而且我认为在编程中,你熟悉松散类型与严格类型,对吧?你可以声明一个变量,不声明一个变量,而是开始使用一个变量,然后“哦,我看到它隐式地是一个整数,哇,太棒了。鸭子 = 5。好吧,鸭子现在是 5。”然后你想,“酷,太棒了,简单多了,对吧?我为什么要担心类型?”而且很长一段时间,就像在 Ruby 社区里,他们会说,“是的,这太棒了。你只需要做大量的单元测试,这是在事后测试你的程序的有效性,以捕获严格类型的变量本可以捕获的任何错误。”现在你有了微软的 TypeScript,由 C# 的创造者之一,软件开发中最伟大的头脑之一,蒙德斯,对吧?在语言设计方面,他说,“不,不,不,我们想把一个严格的类型系统附加到 JavaScript 上,因为它让事情变得更好。”现在每个人都说,“我的天哪,我们部署了 TypeScript,发现了 50 个我们不知道的潜在错误。”对吧?这非常普遍。所以我认为编程中有一个真相,那就是严格性,它不是目标。我们不是说要非常严格,因为严格性是正确的。不,不,严格性会产生更好的结果。这就是我说的,对吧?所以变量的严格类型,我想你现在几乎普遍认为,基本上是正确的,应该在每种语言中都这样。鸭子 = 5 应该在运行时出错,因为你没有声明,你没有告诉我鸭子是一个整数,对吧?这是一个错误,对吧?或者你可能打错了,把“deck”写成了“duck”,对吧?你永远不知道。这种情况经常发生,对吧?所以,考虑到这一点,我会说,严格性,系统是正确的。现在,这并不意味着残忍,这并不意味着刻薄,这并不意味着愤怒。它只是意味着严格。

所以,我认为人们感到恼火的地方在于,人们会变得暴躁,对吧?你问的另一个问题是,“为什么程序员有时有点刻薄?”那么,程序员整天和谁一起工作?我有一个理论,如果你在一份工作中,你整天和某人一起工作,你最终会变成什么样?而计算机是什么?世界上最伟大的,因为计算机对你没有任何耐心。计算机,你犯了一个错误,一切都会崩溃,对吧?一个分号就能让太空任务崩溃,对吧?所以这是正常的。你开始内化这一点,你开始想,“哦,我的同事,计算机,对一切都非常严格,而且有点混蛋。”所以,这就是我将要做的,因为我与这台计算机一起工作,我必须在所有事情上都接受它的条款。因此,你开始吸收这一点,你开始想,“哦,好吧,任意地非常严格是很好的。”错误代码 56249 是一个完全好的错误消息,因为这是计算机给我的,对吧?所以你在某种程度上忘记了做一个普通人。你知道,他们说伟大的侦探内化了罪犯,自己也成了罪犯。这种大师侦探的套路很好,因为你可以像罪犯一样思考。我确实认为这对程序员来说是真的。非常好的程序员会像计算机一样思考,因为那是他们的工作。但如果你内化得太多,你就会变成计算机。你就会变成一个混蛋,因为那是你内化的。你几乎不是混蛋,但你对缺乏严格性没有耐心,正如你所说。它不是出于刻薄,它是偶然的。但我确实认为这是程序员的一个职业风险,你开始像计算机一样行事。你非常不宽容,你非常简洁,你非常,“错了,正确,继续。”就像,“你能帮我吗?我该怎么做才能修复?错了,下一个问题,对吧?”这对于计算机来说是正常的,对吧?只是失败,然后继续,对吧?就像,你还记得《周六夜现场》吗?在 90 年代,他们有一个角色,一个 IT guy?那个叫“Move”的角色?是吉米·法伦吗?不,不,不能装傻。哦,是的,我记得“Move”,对吧?他对任何事情都没有耐心。他可能在 MADtv 上,但无论如何,那一直是人们的看法,对吧?你开始像计算机一样行事。就像,“哦,你错了,让开。”

你写了这么多关于编程、程序、程序员的博客文章,你认为什么是一个好的,让我们先从一个好的独立程序员开始吧?我认为你不应该是一个独立程序员。我认为要成为一个好的独立程序员,就像我谈论的,虽然不是公开的,但约翰·卡马克在《毁灭战士大师》这本书中提出的一个很好的观点,这是一本很棒的书,任何听这本书的人,如果还没读过,请读一下,这是一本很棒的书。他说,当时他们正在研究像《德军总部》和《毁灭战士》这样的东西,他们没有我们今天拥有的资源,他们没有 Stack Overflow,他们没有维基百科,他们没有 Discourse 论坛,他们没有可以寻求帮助的地方,对吧?他们不得不自己工作,这就是为什么需要卡马克这样的天才来做这些事情,因为你必须是天才才能从头开始发明很多他发明的技巧,那是天才级别的。但你不再需要成为天才了。这意味着不要独自工作。你必须擅长在线研究。你必须擅长提问,非常好的问题,经过非常好的研究,这意味着,“哦,我出去研究了三个小时才写了这些问题。”这就是你应该做的,因为那将使你变得更好,对吧?对我来说,这是 80 年代和今天的编程之间的最大区别,就像,你当时不得不独自一人,对吧?你去哪里找答案?我记得在我学习 Windows 的 Visual Basic 的早期,当我遇到程序问题时,我会打电话给微软的帮助热线,因为我不知道该做什么。所以我打电话,他们有这些巨大的电话中心。你能想象现在有多么陌生吗?谁会这样做?对吧?那太疯狂了。所以当你卡住时,别无他法,对吧?我有那些附带的书,我读了它们,虔诚地研究了它们。我刚看到史蒂夫·西诺夫斯基的一篇文章,说 C++ 版本 7 附带了大约 10,000 页的书面材料,因为你还能在哪里弄清楚这些东西?去图书馆?我是说,你没有维基百科,你没有 Reddit,你不知道去哪里回答这些问题。

所以,你多年来一直谈论基本上不自大,不认为自己是世界上最好的程序员。它总是试图改进,成为比昨天更好的程序员。那么,在作为公众人物的这 15 年里,你作为一名程序员和作为一名思考者、设计者,在编程方面发生了什么变化?我想说,我最终获得的重大见解是,作为一名程序员,你最终必须停止编写代码才能有效,这有点令人不安,因为你真的很喜欢它。但你意识到,从广义上讲,在编程方面有效并不意味着编写代码。很多时候,你可以通过不编写代码来获得更大的成功。编写代码,就解决你遇到的问题而言,基本上就是雇佣那些非常优秀的人,让他们自由地去做,并给他们基本的指导,比如战略之类的。因为你遇到的很多问题不一定是通过非常棘手的代码来解决的,它们是通过概念性解决方案来解决的,然后可以转化为代码。但你是否解决了正确的问题?我是说,所以对我来说,我获得的主要见解是,要作为一个程序员取得成功,你最终必须停止编写代码。这听起来可能会让听到的人感到沮丧,但我不是这个意思。我的意思是,你最终是在一个更高级别的语言中进行编码。就像,“好吧,我们正在用汇编语言编码,对吧?这是开始。你被硬编码到架构中。然后你有了像 C 这样的东西,我们可以在架构之间进行抽象。你可以编写代码,然后我可以为 ARM 或,你知道,你知道,任何其他存在的 x86 或其他东西编译该代码。然后甚至更高级别的 .NET,对吧?你正在看 Python、Ruby 等解释型语言。然后对我来说,作为一个程序员,就像,“好吧,我想去更高层。我想去更高层。”我如何抽象到语言之上?就像,“嗯,你通过口语和书面语进行抽象,对吧?你正在激励人们完成任务,给他们指导,‘如果我们这样做会怎样?如果我们这样做会怎样?’你正在用最高级别的语言编写,对我来说就是英语,无论你的口语是什么。”所以一切都关乎有效性,对吧?而且我认为 Patrick McKenzie,Patio 11 在 Hacker News 上,在 Stripe 工作,他有一篇关于这个的精彩文章,关于称自己为程序员在某种程度上是职业生涯的限制,一旦你离你的出生地足够远。我真的相信这一点,再次,我为此道歉,这听起来令人沮丧,我不是这个意思,但他太对了。因为所有围绕代码发生的事情,比如人,嗯,这是另一件事。如果你看看我早期的博客文章,关于“哇,编程是关于人的,而不是关于代码”,这似乎没有道理,但它是关于这些人是否能相处?他们能否互相理解?你能否向我解释你在做什么?你是否解决了正确的问题?人们没有写。

另一本经典的编程书籍,同样与《代码大全》齐名,请阅读。软件就是人,对吧?人首先是软件。所以,我早期在博客上磨练的许多技能都与弄清楚编程中的人际关系有关,而那些更难的部分。编程的难点在于,一旦你达到一定的编程技能水平,你几乎可以解决你面前的任何合理问题。你不是从头开始编写算法,对吧?那根本不会发生。所以你面前的任何合理问题,你都能解决。但你无法解决的是,“我的经理是个彻头彻尾的混蛋。”你无法用代码解决这个问题。那不是代码的问题。然而,这比“哦,我们不得不使用这个愚蠢的框架,我不喜欢”或者“你知道,山姆一直在写我讨厌的糟糕代码”或者“你知道,你知道,戴夫在那里写着上帝知道什么”要重要得多。这些不是你的问题。你的问题是你的经理或同事对你团队中的其他人如此有毒,以至于没有人能完成任何事情,因为每个人都如此紧张和害怕,对吧?这些是你必须解决的问题。

所以,当你进入这些更高级别的抽象时,当你作为一个程序员发展到更高的抽象级别时,你会进入自然语言。你也是那个宣扬“建造它”,“深入其中,去做”的人,就像“边做边学”。是的。你是否担心,当你达到越来越高级别的抽象时,你会失去对低级别构建的追踪?你是否担心这一点?即使现在没有,也许十年后,二十年后?不,我的意思是,总是有那种偏执,哦,天哪,我不再写代码了,感觉不那么有价值了。但对我来说,就像,当我们开始 Discourse 项目时,它是 Ruby,我其实并不懂 Ruby。就像你指出的那样,这是另一个来自 Stack Overflow 的有价值的抽象。你可以非常精通,例如 C#,我当时正在使用它,我们用它构建了 Stack Overflow,而且它仍然是用它写的。然后切换到 Ruby,你又是一个新手了,对吧?就像,我,但我有框架。我知道什么是 for 循环,我知道什么是递归,我知道什么是堆栈跟踪,对吧?我拥有成为程序员的所有基本概念。我只是不懂 Ruby。所以,我仍然在一个更高的层次上。我不是一个初学者初学者,就像你说的。我只是需要将我已有的编程概念应用于 Ruby。

所以,有一个非常有趣的问题。看着 Ruby,你如何学习足够的知识,以便你的直觉可以被应用?这就是我开始时意识到的,只有我和罗宾。我意识到,如果我打扰罗宾,我现在就在浪费我们的生产力。每次我去罗宾那里,而不是构建 Discourse 的第一个 alpha 版本,他现在正在回答我关于 Ruby 的愚蠢问题。这是对他时间的有效利用吗?这是对我时间的有效利用吗?这两个问题的答案都是响亮的“否”。对吧?我们正在开发一个 alpha 版本,而且它基本上是……好吧,我们会雇佣更多的程序员。我们最终雇佣了尼尔,然后最终是萨姆,他作为联合创始人加入,实际上是萨姆先,然后是尼尔。但问题的答案就是雇佣其他有能力的程序员。不是说“现在我将通过自己的努力来学习 Ruby”。但某种程度上,编写代码对你来说会成为一种负担,就完成事情而言。项目中有太多其他事情,比如构建原型,就像你提到的。那么,如果你不写代码,你如何让每个人都专注于“我们正在构建什么?”首先是基本的模型和研究,对吧?我们甚至想构建什么?有一些这样的事情。然后很快就进入原型阶段,比如构建一个原型,让我们快速迭代原型。这就是我们在 Discourse 上所做的。这就是我们为了获得种子资金而进行的演示,那就是 Discourse 的 alpha 版本,我们已经运行并准备就绪。而且它很糟糕。我是说,它很糟糕。我有截图,我都不敢看。但它是原型,我们正在弄清楚什么有效,什么无效。因为你头脑中的想法,或者即使是在纸上的想法,与你坐在那里,生活在软件中的方式,实际花费时间生活和呼吸软件的方式之间存在巨大的差距。它们是如此不同。所以我的哲学是,尽快进入原型阶段,然后你真正优化的是迭代速度,你如何快速地转动曲柄,我们能多快地迭代?这是任何软件项目的绝对关键指标。

我最近发了一条推文,人们很喜欢,我完全同意。这对我来说太基本了。如果你想衡量任何软件技术公司的核心竞争力,那就是一个人说“嘿,我们真的需要这个词在产品中,改变这个词。”因为这对用户来说会更清楚。就像,而不是“响应”,而是“回复”之类的。从那个想法的构思到这个单个词的改变,推出给用户的速度,那就是你的生命周期,你的健康,你的心跳。如果你的心跳非常慢,你基本上就死了。说真的,如果需要两周甚至一个月才能改变那个词,而那是一个“哦,我的天哪,这个伟大的想法,这个词更清晰了”,我是说,每个人都支持这个改变,这不仅仅是“我们只是因为无聊而改变它”,而是“这是一个很棒的改变”,然后它需要几个月才能推出,就像,“你死了。”你无法迭代,你什么也做不了,对吧?所以,关于心跳,就像,进入原型阶段,然后迭代。这就是我所认为的现代软件开发的一些核心原则。

这太迷人了。你这样说,实际上,我从事自动驾驶汽车的建造工作。当你看看特斯拉与其他大多数汽车制造商相比时,特斯拉的心跳,或者说,在几天之内,他们可以向所有车辆进行无线软件更新。这与所有其他汽车制造商形成了鲜明对比,他们需要数年时间才能更新一段软件。而这反映在一切方面,最终的产品,也反映在他们适应时代的速度有多慢。我不是说成为一只蜂鸟是目标。就像,你没有心跳,就像,你只是在尖叫。但它确实是健康的衡量标准。你应该有一个健康的心跳。这取决于听众来决定这意味着什么,但它必须是健康的,必须是合理的。否则,你只会让我感到沮丧,因为这就是你构建软件的方式。你犯错误,你推出它,你生活在其中,看看感觉如何,然后说,“哦,天哪,那是个糟糕的主意。”“哦,我的天哪,如果我们这样做,它会更好。”你转动曲柄,然后你做得越多,你最终就会超越你的竞争对手,因为它是变化率,对吧?速度变化,对吧?你移动的速度有多快?一年之内,你就会领先数英里,当他们赶上你的时候,对吧?这就是它的运作方式。而且,用户也喜欢。作为一个软件开发者,我喜欢不断变化的软件,因为我不明白为什么人们会因为“哦,他们改变了软件”而如此生气。我简直不敢相信。我说,“是的,改变软件,一直改变它,男人。”这就是让这些东西变得伟大的原因,那就是它可以如此快速地改变,并成为比现在更好的东西。现在,当然,有些改变很糟糕,我承认。我见过很多次。但总的来说,这就是让软件变得很酷的原因,对吧?它如此易于塑形。对抗这一点对我来说很奇怪,因为就像,你在对抗你正在构建的东西的本质。这没有意义。你想真正拥抱它,而不是成为一只蜂鸟,而是拥抱它,以健康的节奏,你的心跳,对吧?

你谈到人们真的不会改变。这是真的。这就是为什么你博客上写的很多东西可能仍然是真的。有硬币的另一面,人们不会改变。所以投资和理解人就像在 1970 年学习 Unix,因为什么都没有改变,对吧?是的,你学到的关于人的所有东西在 30、40 年后仍然有效,而如果你学习最新的 JavaScript 框架,它可能只在两年内有效,对吧?是的,没错。但是,如果你看看编程的未来,有一个人的组成部分,也有技术本身。你认为编程的未来是什么?它会发生显著变化吗?还是在你看来,人们最终在编程,所以它不会改变?你预见到它不会改变,你资助了它?你必须看看编程的基础。有一件事总是让我震惊,那就是源代码控制。我没有学过任何关于源代码控制的东西。我于 1992 年大学毕业。但我记得在 1998-99 年,甚至可能今天,我从人们那里听说他们没有学习源代码控制。对我来说,就像,“好吧,你怎么能不学习源代码控制?这对于与其他程序员一起工作,以一种他们不会丢失你的工作的方式工作来说是如此基础。”就像,只是最基本的,字面上的基石软件开发就是源代码控制。现在,你比较一下今天的 GitHub,对吧?微软收购 GitHub,我认为这是一个非常明智的收购。现在他们有任何想要合理源代码控制的人,都可以注册 GitHub。一切都设置好了,有大量的教程,大量的指南。所以,从概念上讲,编程是否比 1999 年有所进步?就像,“好吧,我们有 GitHub。”我的天哪,是的,对吧?它比以前有了巨大的进步。至于编程是否显著不同,我将说是的,但我认为我们所认为的基础的基准将继续提高,并且实际上会变得更好。就像源代码控制,这是基础之一,它已经比 10、20 年前有了数千倍的进步。所以这些是基础。

让我介绍两件事,也许你可以评论一下。一个是手机。这可能会从根本上改变编程,或者可能不会。也许你可以评论一下。另一个是人工智能,它有望以某种方式为你做一些编程。一种思考方式是,程序员就是利用你头脑中的智能来做一些有用的事情。人工智能的希望是它能为你做一些有用的事情,你不需要去想它。所以,你认为智能手机,每个人都拥有它们,并且它们越来越强大,这是否可能改变编程?你认为人工智能是否可能改变编程?

好的,所以,智能手机确实改变了。我是说,自从,你知道,我猜是 2010 年,它们开始变得非常流行。我是说,在过去的八年里,世界发生了翻天覆地的变化。每个人都随身携带一台电脑,这很正常。这在社会上是一个巨大的变化。我认为我们仍然在处理这带来的许多积极和消极的后果,对吧?每个人都一直在线,每个人都一直使用电脑。这是我作为极客的梦想世界,但就像,“小心你许下的愿望。”对吧?哇,每个人都是电脑。这并不完全是我们想象中的乌托邦,对吧?计算机可以用于很多不一定好的事情。所以对我来说,智能手机的核心焦点就是它把一台电脑放在每个人面前。当然,一台小型触摸屏,或者说,稍小的触摸屏电脑。至于编程,我不知道。我有点倾向于接受 Unix 的世界观,就编程而言。就像,你想教这些基本的命令行东西,而这正是程序员将要做很长一段时间的事情。我认为不会有什么神奇的视觉编程发生。我只是,我不知道。随着时间的推移,我成为了 Unix 哲学的一个信徒。你知道,他们对 Unix 的看法是正确的,它将是这样的很长一段时间。而且,正如我所说,我们将继续提高基准,工具会变得更好,它会变得更简单,但它仍然是基础,将是命令行工具。你知道,制作花哨的 IDE,就是这样了,在可预见的未来。我没有看到任何视觉编程的东西在眼前出现。因为你可以,我想,你在智能手机上做什么,可以直接类比编程?我正在思考,对吧?而且真的没有太多。

不一定类比编程,但你可能需要编写的程序类型可能非常不同。是的,以及语言的类型。我是说,但我也可能认同同样的观点,因为这个世界上的所有东西都可能用 JavaScript 编写。哦,是的,这已经发生了。我是说,Discourse 本身就是,Discourse 本身也是,JavaScript 是另一个在这边押注的。我仍然坚信这一点。所以,我会说,智能手机主要是一种文化转变,而不是编程转变。

你的另一个问题是关于人工智能,以及预测你将要做什么的设备。我认为这有一些优点。我认为人工智能在它所做的事情方面有点夸大其词。更像是人们是可预测的,对吧?人们做同样的事情。让我给你举个例子。我们在 Discourse 中加入了一个检查,很多大型商业网站都有,比如你现在从纽约市登录,然后一个小时后,你从旧金山登录。嗯,嗯,这很有趣。你怎么能在不到一个小时的时间里从纽约到旧金山?所以,在那一刻,你想,“好吧,这是一个可疑的登录。”在那一刻,我们会提醒你。就像,“好吧,但这是 AI,对吧?这只是一个启发式方法,就像,你如何在不到一个小时的时间里移动了 2000 英里?你可能在使用 VPN,还有其他事情发生,但那只是一个基本的预测,基于人们基本上不会移动太多的想法。他们可能会偶尔旅行,但除非你是一个旅行推销员,否则你每天都在环游世界,对吧?你将要做的事情有如此多的重复性和可预测性。而且我认为好的软件会预测你的需求。例如,Google,我认为它叫做 Google Now,或者 whatever that Google thing is,它会预测你的通勤,并根据你的手机位置预测。你每天在哪里?那可能是你的工作地点。我认为计算机可以在这方面做得更好。但我犹豫称之为“全功能 AI”。它只是计算机在做得更好,首先,它们拥有大量的……因为现在每个人都有智能手机,我突然有了所有这些数据,我们以前没有的关于位置,关于,你知道,沟通,并将这些数据输入一些基本启发式方法,也许是一些复杂的算法,将它们转化为预测,预测你的需求,就像一个朋友会做的那样,对吧?“哦,嘿,我看到你在家,你想吃晚饭吗?”“让我们去吃点东西,因为我们通常在这个时间做这个,对吧?”以及实际的编程行为。DCI 正在改进,让编程生活变得更好。我认为这是可能的,因为编程中有很多重复。哦,你知道,Clippy 会是一个糟糕的例子,就像,“哦,我看到,你似乎在写一个 for 循环。”但代码中有模式,对吧?就像,实际上库也是这样的,对吧?就像,与其去,你知道,编写自己的 HTTP 请求库,就像,你会使用我们现有的一个已经经过故障排除的库。它不是 AI 本身,它只是,你知道,构建更好的乐高积木,更大的乐高积木,具有更多的功能。所以人们不再需要担心低级的东西了。就像 WordPress,对我来说,它是一个工具,供非程序员做一些事情。我是说,你可以把 WordPress 变成任何东西,这真是太疯狂了,通过插件,对吧?而这本身并不是编程,它只是乐高积木堆叠 WordPress 元素,一点点配置粘合剂。所以,我想,也许从更广泛的意义上来说,我看到的是,会有更多的粘合,更少的实际编程。而这是一件好事,对吧?因为你需要的大部分东西都已经存在了。

你说 1970 年是 Unix。你认为 PHP 和这些早期编程诞生的早期遗迹会和我们在一起很长时间吗?就像你说的,Unix 本身。你认为最终,这些东西会因为惯性而存在吗?我有点这么认为。我是 Windows 的早期坚定支持者,我曾经是,就像,Unix 是浪费时间。但随着时间的推移,我完全改变了。我当时想,“好吧,Unix 的人是对的,而微软和 Windows 在很大程度上是错的,至少在服务器端。在桌面上不是。你需要一个 GUI,你知道,东西。”是的,这两种哲学,就像苹果建立在 Unix 之上,有效地是 Darwin,而在桌面上,它甚至在服务器端也是一个稍微恢复的。你现在要编程了。问题是,编程将在哪里?会有更多的客户端编程,因为从技术上讲,Discourse 是客户端编程。我们交付一大堆 JavaScript,然后在本地执行。所以我们真的在使用更多的本地计算能力。我们仍然会检索数据,当然,我们必须在屏幕上显示帖子等等。但在排序和许多基本事情方面,我们使用的是主机处理器。但就编程的很大一部分仍然是服务器端而言,我会说,是的,Unix 哲学绝对是其中之一。而且会有不同的覆盖层在 Unix 之上,但如果你剥离一两层,它仍然是 Unix。

所以,我敢肯定,Unix 会存在很长时间。我敢肯定,Unix 会存在。听到你这么说很有意思,因为你在微软方面做了这么多出色的后端开发工作。那么,未来对 Jeff Atwood 来说意味着什么?在 Discourse 中继续,在 Discourse 中,并试图改善网络上的对话。Discourse 是……无论它是什么。最初我称之为五年项目,然后很快将其修改为十年项目。所以我们从 2013 年初开始,那就是我们推出了第一个版本。所以我们仍然,你知道,五年了。这是开始变得好的部分。我们有一个很好的产品。Discourse,任何软件项目,都需要三年时间才能构建你想要的东西。无论如何,v1 会很糟糕,但你仍然会发布它,因为这就是你变得更好的方式。这是关于转动曲柄,而不是关于 v1 完美,因为那太荒谬了。这是关于 v1,然后我们变得非常擅长 v1.1、1.2、1.3。我们能多快地迭代?而且我认为我们在 Discourse 上疯狂地迭代,以至于它现在是一个非常好的产品,我们有强大的动力。我最初的愿景是,我想成为讨论领域的 WordPress。也就是说,有人来找你,说,“我想开始写博客。”虽然这个问题本身现在有点过时了,但我想答案应该是,“WordPress 通常是。”因为大多数时候,这是博客的明显选择。但如果有人说,“嘿,我需要一群人聚在一起做点什么。”答案应该是 Discourse,对吧?那应该是人们的默认答案,因为它开源,免费,不花你任何钱,你控制着它。你可以在你的最小服务器上运行 Discourse,每月五美元。现在他们已经降低了 VPS 的价格。以前是每月十美元,一千兆字节的内存,我们依赖于此。我们有一个有点重的堆栈,有很多……

在讨论中需要一些东西,你需要 Discourse,你需要 Redis,你需要 Ruby on Rails,你需要 Sidekick 来安排日程,这不是一件微不足道的事情,因为我们的架构是为未来十年而设计的。我不在乎共享的 PHP 托管,那不是我的模式。我的想法是,最终这对每个人来说都会非常便宜,我想用我再次提到的,你知道的,雇佣更大的构建块级别来正确地构建它,这些构建块有更多的需求。有一个 WordPress 模型,wordpress.org,juarez.com 是他们的中央托管。对于这个课程,或者不,我们不是严格地将开源与商业方面区分开来。我们有一个托管业务,这就是这个课程赚钱的方式,我们托管 Discourse 实例,我们与客户有着非常密切的关系,他们向我们提供产品反馈。我们肯定会比那些只是随便看看并给出反馈的人更重视客户的反馈,但这就是我们赚所有钱的地方。但我们没有严格的划分,我们鼓励人们使用 Discourse,整个重点是它是免费的,对吧?任何人都可以设置它。我不想成为唯一托管 Discourse 的人,这绝对不是目标,但这是我们建立业务的主要方式,而且它实际上是一项很棒的业务。我的意思是,就托管而言,这项业务进行得非常好。我以前在 Google 工作过,Google 是一个基本上靠广告资助的公司,Facebook 也是。让我问一下,你能评论一下吗?我认为广告是最好的,所以你会非常批判广告是什么,但它最好的时候实际上是在某种意义上为你服务,它将你连接到你想探索的东西,所以它就像相关的帖子或相关内容一样,这是最好的广告。所以 Discourse 是根据人们的兴趣将人们联系起来,这似乎是一个广告在最好的时候可以真正服务于用户的平台。你是否正在考虑将其作为一种经济支持平台的方式?这很有趣,因为我对广告有不同的看法,我有点同意你。我最近不情愿地安装了那个拦截器,因为我不喜欢这样做,但广告的性能,伙计,它们现在太重了,而且太疯狂了。所以这几乎是一个性能论证,而不是我实际上支持广告,而且我相反,我有不同的观点。我同意你,如果你正确地做广告,它会显示你感兴趣的东西,我并不介意,这实际上是一件好事。所以,而且我认为通过看他们的广告来支持那些做这项工作的人是理性的。但即便如此,我现在也运行广告拦截器,我本来不想这样做,但所有这些艺术家说服了我,只是为了给你提供广告,就加载了 30 到 40 兆字节的东西。是的,现在感觉就像 Stack Overflow 或 Expert Exchange 在你开始的时候一样。有这么多公司,而且技术含量很高,这很尴尬。如果你看到那些标志图表,整整一页,你甚至都看不到它们,它们太小了,这个领域有这么多公司。但既然你提到了,我确实想指出,很少有 Discourse 网站是通过广告支持模式运行的。它不起作用,因为它太稀释了,太奇怪了,收入不高,而且用户讨厌它。所以这是用户讨厌它,它实际上在实践中效果不佳的结合。理论上是的,我同意你,但如果你清理干净快速的广告,那些正是你感兴趣的东西,太棒了。我们离那还很远,对吧?就像 Google 在重新定位等方面做得还可以,但在现实世界中,Discourse 网站很少能让广告奏效。它只是因为太多原因而不起作用。但你知道奏效的是什么?是订阅,Patreon,联盟代码,比如亚马逊,比如“哦,这里有一个很酷的溜溜球,点击一下”,然后你点击并去亚马逊,他们会从中获得一小部分。我认为这是公平的,因为你在那个网站上看到了溜溜球,然后你点击并购买了它,对吧?他们从中获得 5% 或 2% 的收入是公平的,或者无论是什么。这些东西确实奏效。事实上,我以前经常参与的一个网站,我帮助了主人。我让他们切换到 Discourse,当然付钱让他们切换到 Discourse,因为我说,“看,你们必须切换,我不能再来这里了,所有这些糟糕的内部软件。”但我还说,“看,而且最重要的是,你们在向人们展示他们讨厌的广告。你们应该全力支持 Patreon,因为他们有一点 Patreon。全力支持 Patreon,为任何发布的亚马逊链接做亚马逊联盟,然后就做那个,然后加倍投入那些东西。”这对他们和这位创作者来说效果非常好。所以那些东西奏效了,但传统广告,我的意思是,至少在 Discourse 上肯定不起作用。所以最后一个问题,你创造了代码键盘,我成年后大部分时间都在编程,还有一个 Kinesis 键盘,我现在 upstairs 有一个。你能描述一下机械键盘是什么吗?为什么它会让你快乐?嗯,你知道,这也是一个恋物癖物品,真的。它不是必需的,你可以在任何键盘上编程,对吧?甚至可以在屏幕键盘上。哦,天哪,那太可怕了,对吧?嗯,你可以,但如果你回顾一下计算的早期,有巧克力键盘,我认为它们很糟糕,对吧?但什么是巧克力键盘?哦,天哪,好吧,它们只是薄的橡胶膜,所有橡胶的,哦不,超级糟糕,对吧?是的,所以这是一个恋物癖物品。它真正说明的是,看,我真的很关心键盘,因为键盘是与计算机通信的主要方式,对吧?所以就像为这个播客拥有一个好的麦克风一样,你需要一个好的键盘,对吧?因为它有非常好的触感,我按下按键时确切地知道,我得到了那个小咔哒声,所以,而且感觉很好,它也是一种恋物癖物品。就像哇,我足够关心编程,以至于我关心我用来与计算机通信的主要工具,确保它尽可能好,用起来感觉很好,而且我可以用它非常高效。所以说实话,它有点像一个恋物癖物品,但一个好的。它表明你很认真,如果你有兴趣,它表明你关心基本功,因为你知道什么能让你成为一个好的程序员?能够快速打字,对吧?这是真的,对吧?所以一项核心技能就是能够快速打字,将你的想法从脑海中转移到代码库中。所以练习打字可以让你成为一个更好的程序员。它也是让你,嗯,让你享受打字,正确地享受打字的过程。我弹钢琴的时候,就是这样。所以有一种触感,最终会激发你的热情,让你快乐,对吧?不,完全是这样。我的意思是,有趣的是,手工键盘已经爆炸了,Massdrop 在这方面已经疯了,仅在 Massdrop 上就有大约 500 个键盘项目。还有一个我关注的 Twitter 上的家伙,我以前为那个网站 Tech Report 写过文章,很久以前,他每周都在发布我称之为键盘色情的东西,就是很酷的键盘。天哪,它们看起来真的很酷,对吧?就像这个家伙有多少键盘?是的,他有溜溜球。你有多少个溜溜球?你需要多少个?技术上来说,一个,但我喜欢很多,我不知道为什么。所以键盘也是如此。所以,是的,它们很棒。我强烈建议任何没有机械键盘的人去研究一下,看看你喜欢什么。而且,你知道,它最终是一个恋物癖物品,但我认为这些物品,这些我们拥有的宗教圣物,是我们人性的一部分。那一部分很重要,对吧?它让生活值得过。是的,严格来说它不是必需的,但如果你想想,没有什么东西是必需的,对吧?所以,是的,为什么不呢?所以,好的,杰夫,非常感谢你今天的谈话。是的,不客气,谢谢你的邀请。