Stack Overflow长大后想成为什么?

现实生活中常常有人问我,我的工作是什么,对此我有一个15秒的回答:

We built a sort of Wikipedia website for computer programmers to post questions and answers. It’s called Stack Overflow.

我们创建了一个类似维基百科的网站,程序开发者们可以在上面发表问题或者回答。网站的名字叫Stack Overflow.

截至上个月,Joel Spolsky与我共同创建的Stack Overflow已经走过了十个年头。我从2012年开始就在搞其他的工作了,但是能让人们在我过世之后还能想起我的东西,那肯定还是我的老伙伴Stack Overflow。

每次在给别人介绍Stack Overflow有多优秀,作为创始人的我有多骄傲时,我一般都会用如下图所示的方式开场:

Stack Overflow长大后想成为什么 - 图1

I do not care about any of that.

这些我都不在乎。

我真正在乎的是,Stack Overflow对程序开发者们是不是有帮助。对此,让我们看看如今最伟大的开发者之一,也是我的偶像的John Carmack怎么说。

Stack Overflow为提升开发者的效率事业差不多贡献了好几亿美元 Stack Overflow为提升开发者的效率事业差不多贡献了好几亿美元

说实话,2013年9月17好是很美好的一天。我读到这条推特的时候吓了一跳,不光是因为我经常用Carl Sagan的方式读Billions这个词。我在Twitter每隔几天就会读到一些残酷无尽的人间疾苦,以及人们在网络上的互相叫骂。与此相反,那一天是我感觉到的只有喜悦。这也提醒了我,我该查查推特,看看如今谁还对网络抱有不同的理解。

Stack Overflow有着如此多用户,也帮助了一个时代的开发者,对此我感到既荣幸又谦卑。但是,实现这一成就的并不是我。

  • You did, when you contributed a well researched question to Stack Overflow.
  • 是你们,对Stack Overflow贡献了经过深入研究后想到的问题
  • You did, when you contributed a succinct and clear answer to Stack Overflow.
  • 是你们,对Stack Overflow贡献出了简洁而清晰的答案
  • You did, when you edited a question or answer on Stack Overflow to make it better.
  • 是你们,编辑了Stack Overflow的问题或答案并使其变得更好

世界各地的开发者们所贡献的那些大大小小的提问与回答,把Stack Overflow变成了一个在开发领域能与维基百科抗衡的资源库。这实在是…非常的不可思议。

Stack Overflow长大后想成为什么 - 图3

不过成功的故事都很无聊。这个世界上有很多人,本身运气好,但还时不时的告诉别人是自己的努力以及喝活力汽水换来了成功。我觉得失败的故事更有教育意义,在建立业务与规划未来时,我把自己想象成深渊专家,并开始一场比赛。这是我自己做事的习惯。

当你在凝视深渊的时候,深渊也正在凝视着你 - Friedrich Nietzsche 当你在凝视深渊的时候,深渊也正在凝视着你 - Friedrich Nietzsche

由此,我现在要与耀眼的深渊对视,预测一下Stack Overflow未来十年会遇到的挑战。这之前,我要先澄清以下事实。

从2012年2月开始,我就没有在Stack Overflow的任何领域工作了,也没有对其运营有过任何意见建议。你问我对如何运作Stack Overflow竟然能没有意见建议?额,那你可能不认识我。你问我难道我不会时不时给员工发邮件告诉他们我的想法?我也许会吧,但是我为数不多的归档邮件可以证明,这个事情很少发生。

Stack有着无与伦比的员工,在我离开公司后,他们中的大多数(包括Stack Overflow社区的成员)都能对我们的使命给出更好的,不像我那样胡思乱想的阐述。我会用生命信任他们吗?不会。但是我会用Joel的生命信任他们!

Stack Overflow并不属于我,或者Joel,或者其他一些伟大的开发者。Stack Overflow的运作靠的是世界各地日复一日做开发的人们,就像你或我一样。我觉得Stack Overflow就像个家长,它的目标是让孩子们最终能离开家长身边,成为可以独当一面的大人。

作为Stack Overflow的创始人,我在社区成立的最初四年里,花了非常多的时间参与制定规则与规范。你现在阅读的是我所弱观点,强坚持强观点,弱坚持。这只是我的一些想法,我也希望自己的预测是准确的,但是这并不意味着我可以预测未来,或者我有资格去预测未来。不过我并不会以自己是否具有资格而不去做一些事情。

Stack Overflow is a wiki first

Stack Overflow首先是一个维基百科

Stack Overflow不仅是个论坛,它跟维基百科有很多相似之处。我们衡量问题和答案是否有意义的方式,不是看那些问题和答案对特定几个人的帮助,而是看随着时间的推移,这些问题和答案能不能帮助到越来越多的人。我从2008年Stack Overflow上线后就在强调这个关系。来看看下面谁的地位最高。

Stack Overflow长大后想成为什么 - 图5

为了强调这一核心价值,Stack Overflow添加了一个简洁的功能。那就是在用户资料里会显示,你所贡献的问题与回答帮助到了多少人。

Stack Overflow长大后想成为什么 - 图6

这些问答内容到底服务于谁?回答问题为何有如此严格的审核过程?对于Stack Overflow最常见的抱怨通常来自于对这两个问题的误解。

我希望更多的人能明白,Stack Overflow并不是一个“回答我的问题”的地方,它是“让我们合作建立一个对未来的开发者们有益的地方”。也许Stack Overflow应该更加努力去帮助用户理解这件事。 我希望更多的人能明白,Stack Overflow并不是一个“回答我的问题”的地方,它是“让我们合作建立一个对未来的开发者们有益的地方”。也许Stack Overflow应该更加努力去帮助用户理解这件事。

如今很多用户,甚至Hacker News,都不知道Stack Overflow上有个功能,那就是每一个问题都是可以修改的,即使是没有登录的匿名用户也可以修改。对此我深表惊讶。这个功能不奇怪,对吧,因为Stack Overflow就是一种维基百科,这也是维基百科的运行模式,任何人都可以修改任何内容。不信的话,现在就去试试吧,找一个你认为可以提高的问题或者回答,点击“改善这个回答”或者“改善这个问题”,然后写下你的改良版。

Stack Overflow长大后想成为什么 - 图8

Stack Overflow有很多功能都容易导致用户误解其核心价值(甚至也包括我自己在2012年之前的一些所作所为)。理论上,“如今每一个开发者都听过,用过以及了解Stack Overflow”,但是…我觉得这个假设不准确。毕竟每时每刻都有新的开发者诞生。说得更复杂一点,Stack Overflow的使用模式有三种,从大到小,以倒金字塔的形式排列如下:

  1. I passively search for programming answers.

  2. 我在需要的时候去搜索答案

    用户直接上网搜索,搜索引擎会直接显示出Stack Overflow中的高票答案。出现在搜索引擎第一页,这也是Stack Overflow的主要目标。如Stack Overflow正常运行,98%的开发者在他们的整个职业生涯中,不需要主动提出或者回答问题。只要通过网络搜索就可以找Stack Overflow上到他们需要的结果。这是个好事,非常好的事。

  1. 我遇到很困难的问题时会参与Stack Overflow的讨论,因为单纯的搜索找不到我想要的答案

只在遇到难以解决的困难时,参与Stack Overflow的讨论,这很合理。然而,我觉得这个阶层的用户最容易感觉到Stack Overflow不是那么容易使用,因为这类用户可能对Stack Overflow很熟悉,但是并不清楚发布问题的流程。并且在他们急切想寻找答案的时候,他们没有时间或心思去应对Stack Overflow对于问题背景,格式,描述以及引用要求。

  1. 为了自己的职业发展,我主动参与Stack Overflow的问题讨论

    这个阶层的用户很有经验,他们贡献了很多答案,也了解什么样的问题是好问题,是他们感兴趣、愿意回答的问题。他们不经常提问,因为他们知道如何去全面搜索他们想要的答案。但是他们一旦提问,那一定是个示范性的好问题。

(理论上这里还有个第四阶层用户,他们无私的贡献了很多提问与回答,目的只是为了推动软件开发行业的发展,造福于新一代的开发者们。但是我们没空提这些大神😇,你们只会让我们显得更加平凡,所以我们就此打住吧)

第一阶层的用户在社区里开心的逛了好几年,却在变为第二阶层用户时,一下子有了不开心的用户体验。对此我一点儿也不惊讶。我认为解决这个问题最主要的方式,就是改变并提高提问页面的用户体验。另外值得注意的一点是,用户在提出了某个问题后,可能收到关于问题信息不足的负面反馈,但是他们也许并不知道,你的问题应该是“有益于其他用户而并不只是你自己”。

Stack Overflow采用了维基百科的模式,也使其自身受到了很多限制。即使用户在提问前就知道这些,很多时候到底什么是“有用的信息”也很难判断。同理,很多时候我们也不确定到底什么样的话题,人群或者地点需要一份维基百科。Henrietta Lacks有自己的维基百科页面,这毫无争议,但是他住在奥哈马市的表兄Dave,那个提出了一个关于PHP 5.6的奇怪问题的人,是不是该被写入维基百科呢?

随着事件的推移,重复内容像地雷一样遍地都是

这事儿肯定会发生,我甚至庆幸在2012年它发生之前,我就离开了Stack Overflow,这样我就不用去处理这个难以置信的技术性难题:重复性内容。在我听到的关于Stack Overflow的所有抱怨里,这个问题是我觉得最有共鸣的。

如果你接受Stack Overflow是个类似于维基百科系统这一前提,那同理你显然不能接受,在维基百科中,对于意大利有五个不同的词条。Stack Overflow不允许对于同一个技术问题有重复的提问。我们确实有很多避免重复问题的功能,比如输入问题时的同步搜索,以及提交问题前,你会看到一个很明显的,鼓励用户先去搜索相关问题的搜索框。

Stack Overflow长大后想成为什么 - 图9

… 如何查找并判断重复内容是个非常有难度的问题,即使是Google这样的公司,有着名副其实世界最聪明的工程师团队,专攻了20年也没有解决这个问题。

When you’re asking a question on a site that doesn’t allow duplicate questions, the problem space of a site with 1 million existing questions is rather different from a site with 10 million existing questions … or 100 million. Asking a single unique question goes from mildly difficult to mission almost impossible, because your question needs to thread a narrow path through this vast, enormous field of prior art questions without stepping on any of the vaguely similar looking landmines in the process.

当你在一个不允许重复问题的网站中提问时,系统去重的难度取决于总问题数量,处理一百万的问题总量的去重与一千万甚至一亿相比,是非常不同的。系统处理问题去重的难度,会从不太难处理变为最终的完全无法处理。比如你提出了一个与艺术类相关的问题,那么系统需要根据你的提问内容,在不胜枚举的已有问题中进行筛选,以确保没有看起来相似的提问。

Stack Overflow长大后想成为什么 - 图10

But wait! It gets harder!

等会儿,还有个更难的问题!

  • Some variance in similar-ish questions is OK, because 10 different people will ask a nearly identical question using 10 different sets of completely unrelated words with no overlap. I know, it sounds crazy, but trust me: humans are amazing at this. We want all those duplicates to exist so they can point to the primary question they are a duplicate of, while still being valid search targets for people who ask questions with unusual or rare word choices.

  • 相似问题中有一点内容变化也是可以的,因为十个不同的人在提出同一个问题时,完全可能使用毫不相关的词语来形容这个问题。我知道这听起来很疯狂,但是相信我:人类极其擅长做这样的事。我们希望保留这些重复的问题,并且让他们都指向同一个主问题,以便于用户更好的搜索他们需要的内容,即使这些用户使用了那些平常不太会被用到的词语去描述问题。

  • It can be legitimately difficult to determine if your question is a true duplicate. How much overlap is enough before one programming question is a duplicate of another? And by whose definition? Opinions vary. This is subject to human interpretation, and humans are.. unreliable. Nobody will ever be completely happy with this system, pretty much by design. That tension is baked in permanently and forever.

  • 如何判断你提出的问题是不是重复,这是个不小的挑战。多少词语的重叠才能决定一个问题是不是与另一个重复?谁来决定?不同人有不同理论。这是个以人类语言为标准的解析,然后人类吧……不可预知。这个系统无法做到让所有人满意,去重的缺陷会一直存在于系统之中。

I don’t have any real answers on the duplicate problem, which only gets worse over time. But I will point out that there is plenty of precedent on the Stack Exchange network for splitting sites into “expert” and “beginner” areas with slightly different rulesets. We’ve seen this for Math vs. MathOverflow, English vs. English Learners, Unix vs. Ubuntu… perhaps it’s time for a more beginner focused Stack Overflow where duplicates are less frowned upon, and conversational rules are a bit more lenient?

我对于越来越严重的重复问题并没有一个好的解决方案。但是我想指出,早期在Stack Exchange有很多先例,它们把网站分为“初级”和“高级”区域,不同区域的规则不同。我们在别的地方也能找到类似的例子,比如Math和MathOverflow,English和English Learners, Unix和Ubuntu,也许是时候搞一个以初级用户为主的Stack Overflow了,在那里我们可以允许多一些重复,少一些规则。

Stack Overflow is a competitive system of peer review

Stack Overflow是个可以同行评审的竞争性系统

Stack Overflow was indeed built to be a fairly explicitly competitive system, with the caveat that “there’s always more than one way to do it.” This design choice was based on my perennial observation that the best way to motivate any programmer .. is to subtly insinuate that another programmer could have maybe done it better.

Stack Overflow确实是个相当明确的竞争性系统,它的一大标志就是“总会有更好的解决办法”。根据我的多年观察,激励开发者最有效的方式就是…巧妙地暗示出别人的解决方案也许比你的更好。

- 你好Randall。医生说你能听到我说话,虽然你看起来像植物人。我是来告诉你,别着急慢慢康复。因为Ross接替了你的工作,并且做的非常好。他甚至找到了你代码里的瓶颈,还说他改过的代码变快了两倍。 - 这不可能!!!!!我现在就回办公室! - 你好Randall。医生说你能听到我说话,虽然你看起来像植物人。我是来告诉你,别着急慢慢康复。因为Ross接替了你的工作,并且做的非常好。他甚至找到了你代码里的瓶颈,还说他改过的代码变快了两倍。
- 这不可能!!!!!我现在就回办公室!

This is manifested in the public reputation system on Stack Overflow, the incredible power of a number printed next to someone’s name, writ large. All reputation in Stack Overflow comes from the recognition of your peers, never the “system”.

Stack Overflow的竞争性质体现在了它的公开名誉系统上,就是用户名旁边那个拥有神奇力量的数字。所有的名誉值都来源于其他用户,而不是所谓的系统。

Stack Overflow长大后想成为什么 - 图12

Once your question is asked, or your answer is posted, it can then be poked, prodded, edited, flagged, closed, opened, upvoted, downvoted, folded and spindled by your peers. The intent is for Stack Overflow to be a system of peer review and friendly competition, like a code review from a coworker you’ve never met at a different division of the company. It’s also completely fair for a fellow programmer to question the premise of your question, as long as it’s done in a nice way. For example, do you really want to use that regular expression to match HTML?

每当你提出问题或者提交回答时,你的问题或回答都可以被其他用户指指点点,他们可以编辑,标记,关闭,打开,赞,踩或者收起。这样做的目的是让Stack Overflow成为一个同行评审和友好竞争的系统,就像在公司里,你的代码被你从没见过的另一个部门的人来评审。有人以友好的方式去质疑你所提问题的提论,也是完全合理的,比如,你真的想用这个正则表达式去匹配HTML吗

I fully acknowledge that competitive peer review systems aren’t for everyone, and thus the overall process of having peers review your question may not always feel great, depending on your circumstances and background in the field — particularly when combined with the substantial tensions around utility and duplicates Stack Overflow already absorbed from its wiki elements. Kind of a double whammy there.

我完全清楚这种竞争性质的同行评审系统,并不适合每一个人。Stack Overflow采用维基百科的模式,导致它存在不能接受重复内容这样的限制。那么根据你的情况与背景,同行评审时,你收到的评价可能会让你觉得不舒服。

I’ve heard people describe the process of asking a question on Stack Overflow as anxiety inducing. To me, posting on Stack Overflow is supposed to involve a healthy kind of minor “let me be sure to show off my best work” anxiety:

我听部分用户反应,在Stack Overflow提问的过程中会感觉到焦虑。对我来说,在Stack Overflow上提问,应该感受到一种 ”我要展示出我最好的一面“ 的健康的焦虑。

  • the anxiety of giving a presentation to your fellow peers
  • 在你的同事面前演讲的焦虑
  • the anxiety of doing well on a test
  • 考试要取得好成绩的焦虑
  • the anxiety of showing up to a new job with talented coworkers you admire
  • 开始新工作,与你尊敬的优秀同事们一起工作的焦虑
  • the anxiety of attending your first day at school with other students at your level 第一天去学校报到,即将见到新同学的焦虑

I imagine systems where there is zero anxiety involved and I can only think of jobs where I had long since stopped caring about the work and thus had no anxiety about whether I even showed for work on any given day. How can that be good? Let’s just say I’m not a fan of zero-anxiety systems.

至于那种完全不会感到焦虑的地方,我唯一能想到的就是,从事了很久的工作,已经不再关注与工作本身,因此也没有那种担心有一天就会丢了工作的焦虑。这样怎么会好呢?所以说我不喜欢零焦虑的系统。

Maybe competition just isn’t your jam. Could there be a less competitive Q&A system, a system without downvotes, a system without close votes, where there was never any anxiety about posting anything, just a network of super supportive folks who believe in you and want you to succeed no matter what? Absolutely! I think many alternative sites should exist on the internet so people can choose an experience that matches their personal preferences and goals. Should Stack build that alternative? Has it already been built? It’s an open question; feel free to point out examples in the comments.

也许你不喜欢竞争。那么能不能有个少量竞争模式的Q&A系统呢?一个没有投支持或者反对票功能的系统,这样无论发表什么内容都不会感觉焦虑。这就像是一个全是你的支持者的网络,大家都相信你,希望你成功。这当然也是可以的。我认为应该有类似这样的网站,用户可以根据自己的需求与目标来选择适合自己的体验。那么Stack应该建立一个这样模式的社区吗?这样的社区已经有了吗?这是个开放题。也请随意在留言区发表你的看法。

Stack Overflow is designed for practicing programmers

Stack Overflow是为了日常开发者而设计的

Another point of confusion that comes up a fair bit is who the intended audience for Stack Overflow actually is. That one is straightforward, and it’s been the same from day one:

Stack Overflow的目标用户到底是谁,这也是经常容易被混淆的一点。这个回答很直观,而且从从未改变过:

Stack Overflow长大后想成为什么 - 图13

Q&A for professional and enthusiast programmers. By that we mean

People who either already have a job as a programmer, or could potentially be hired as a programmer today if they wanted to be.

为专业的和热衷于程序开发事业的人们而存在的Q&A平台。这是指

当前正在从事程序开发职业的人,或者如果愿意就能立即胜任程序开发工作的人。

Yes, in case you’re wondering, part of this was an overt business decision. To make money you must have an audience of people already on a programmer’s salary, or in the job hunt to be a programmer. The entire Stack Overflow network may be Creative Commons licensed, but it was never a non-profit play. It was planned as a sustainable business from the outset, and that’s why we launched Stack Overflow Careers only one year after Stack Overflow itself … to be honest far sooner than we should have, in retrospect. Careers has since been smartly subsumed into Stack Overflow proper at stackoverflow.com/jobs for a more integrated and most assuredly way-better-than-2009 experience.

如果你觉得好奇,这个定义的一部分是公开的商业决策。为了盈利,你的用户群体必须要有一部分拿着开发者薪水的人,或者在找开发者的工作的人。整个Stack Overflow社区也许有着知识共享的标签,但是它并不是个非营利组织。我们的出发点是可持续经营,这也是为什么我们在Stack Overflow上线一年之后,就成立Stack Overflow招聘平台的原因,回顾一下,成立的确实有点过早了。为了实现比2009好很多的集成化用户体验,招聘平台被归入了Stack Overflow,放在了stackoverflow.com/jobs下面。

The choice of audience wasn’t meant to be an exclusionary decision in any way, but Stack Overflow was definitely designed as a fairly strict system of peer review, which is great (IMNSHO, obviously) for already practicing professionals, but pretty much everything you would not want as a student or beginner. This is why I cringe so hard I practically turn myself inside out when people on Twitter mention that they have pointed their students at Stack Overflow. What you’d want for a beginner or a student in the field of programming is almost the exact opposite of what Stack Overflow does at every turn:

用户的选择定位并不是说要排斥非开发者,但是Stack Overflow确实是一个有着严格同行评审,对已经在从事相关行业的人来说非常优秀的功能,但同时也是对于学生或者初学者来说很不友好的功能。这也是为什么,我每次在推特上,看到有人推荐学生去Stack Overflow找答案时,我会小心翼翼的建议不要这样。对于开发领域的新手或者学生来说,他们需要的,与Stack Overflow所提供的是完全相反的。他们需要的是:

  • one on one mentoring
  • 一对一的指导
  • real time collaborative screen sharing
  • 实时屏幕共享协作
  • live chat
  • 实时语音
  • theory and background courses
  • 理论背景知识课程
  • starter tasks and exercises
  • 初学者练习
  • playgrounds to experiment in
  • 一个练习与实验的场所

These are all very fine and good things, but Stack Overflow does NONE of them, by design. Can you use Stack Overflow to learn how to program from first principles? Well, technically you can do anything with any software. You could try to have actual conversations on Reddit, if you’re a masochist. But the answer is yes. You could learn how to program on Stack Overflow, in theory, if you are a prodigy who is comfortable with the light competitive aspects (reputation, closing, downvoting) and also perfectly willing to define all your contributions to the site in terms of utility to others, not just yourself as a student attempting to learn things. But I suuuuuuper would not recommend it. There are far better websites and systems out there for learning to be a programmer. Could Stack Overflow build beginner and student friendly systems like this? I don’t know, and it’s certainly not my call to make. 🤔

这些都是对初学者来说,很好很合理的事情,但是Stack Overflow一个也不做。你可以通过Stack Overflow来从头学习如何编程吗?理论上你可以通过任何软件做任何事情,你甚至可以通过Reddit与人进行日常交流,如果你是受虐狂的话。但是答案还是肯定的,理论上你可以通过Stack Overflow学习如何编程,如果你是喜欢竞争模式(名誉,被关闭问题,被投反对票)的神童,也完全能接受要去帮助别人而不只是自己学习知识这一观点。但是我强烈不推荐这样做。对初学者来说,除了Stack Overflow外还有很多更好更合适的平台。那么Stack Overflow能不能成为一个适合新手和学生的平台呢?我不清楚,我也不能决定。🤔

And that’s it. We can now resume our normal non-abyss gazing. Or whatever it is that passes for normal in these times.

这些就是我要说的。我们可以不再与深渊对视。

I hope all of this doesn’t come across as negative. Overall I’d say the state of the Stack is strong. But does it even matter what I think? As it was in 2008, so it is in 2018.

我希望我的观点对Stack Overflow不会有什么负面影响。总的来说我认为目前的Stack Overflow很强大。但是,无论是2008年还是2018年,我怎么想有关系吗?

Stack Overflow is you. This is the scary part, the great leap of faith that Stack Overflow is predicated on: trusting your fellow programmers. The programmers who choose to participate in Stack Overflow are the “secret sauce” that makes it work. You are the reason I continue to believe in developer community as the greatest source of learning and growth. You are the reason I continue to get so many positive emails and testimonials about Stack Overflow. I can’t take credit for that. But you can. I learned the collective power of my fellow programmers long ago writing on Coding Horror. The community is far, far smarter than I will ever be. All I can ask — all any of us can ask — is to help each other along the path. And if your fellow programmers decide to recognize you for that, then I say you’ve well and truly earned it.

Stack Overflow是你们的。 Stack Overflow将信念赌在了这一点:信任你的同行。Stack Overflow的成长离不开那些积极参与社区讨论的开发者们。是你们让我相信开发者社区是最好的学习与成长的地方。是你们让我收获了如此多的对于Stack Overflow的赞誉。这不是我的功劳,而是你们的。 很久之前我在Code Horror上就知道了合作的力量是多么强大。目前我们的社区已经达到我今生难以企及的高度。我唯一能要求的,或者是我们能要求的,就是大家互相帮助互相成长。 如果有人认可了你的付出,那么你值得为此感到骄傲。

The strength of Stack Overflow begins, and ends, with the community of programmers that power the site. What should Stack Overflow be when it grows up? Whatever we make it, together.

开发者社区的力量能够创造以及终结Stack Overflow。Stack Overflow长大了会成为什么?它的未来将由我们共同创造。

Stack Overflow长大后想成为什么 - 图14

p.s. Happy 10th anniversary Stack Overflow! p.s. Stack Overflow十周年快乐!