我在 Stack Overflow 上 10 年学到的东西

我在 Stack Overflow 上 10 年学到的东西
我即将迎来我在 Stack Overflow 上的十周年纪念日。 多年来,我使用该网站的方式和对其的看法发生了很大变化,我想与您分享我的经验。 我是从普通用户的角度来写这篇文章的,他们不太参与网站社区的生活或其文化。 这些天我只回答与我正在开发的产品 VS Code 相关的问题。 然而,我过去常常积极参与各种话题的讨论。 10年后我 提出约 50 个问题并给出 575 个答案,浏览了无数其他人的评论。

乔恩·斯基特 描述了 Stack Overflow 的文化 比我能做的更好、更权威。 它的出版影响了本文的一些章节,但总的来说,这些是我自己对 Stack Overflow 的经历、该网站的优点和缺点以及今天如何使用它的坦率反思。 这个讨论将相当肤浅,不会深入探讨该网站的运作或其历史。

以下是我使用 Stack Overflow 10 年来的经验教训。

你需要能够提问

乍一看,没有什么比这更简单的了:在文本字段中输入几个单词,单击“提交”,互联网将神奇地帮助您解决所有问题! 但我花了近 10 年的时间才弄清楚在那个该死的字段中输入什么词才能真正得到结果。 事实上,我每天仍然在学习它。

提出好的问题确实是一项被低估的技能(就此而言,撰写好的问题报告也是如此)。 首先,我们如何确定一个问题是否“好”? Stack Overflow 优惠 暗示,其中列出了好问题的以下品质:

  • 是否符合网站的主题?
  • 意味着客观的答案。
  • 还没有被问到。
  • 已被研究。
  • 通常使用最小的、易于重现的示例来清楚地描述问题。

好的,但是“明确的问题陈述”在实践中是什么样子的呢? 哪些信息相关,哪些信息不相关? 有时感觉为了问一个好问题,你首先需要知道答案。

不幸的是,小文本字段在这里没有帮助。 那么,这么多用户发布低质量的问题有什么奇怪的吗? 有时,他们得到的唯一答案是一些令人困惑的文档的链接。 他们仍然会很幸运。 许多低质量的问题只是默默地被否决,然后消失在无尽的问题线索中。

提出好问题是一种技巧。 幸运的是,它是可以开发的。 我主要是通过阅读一堆问题和答案来学习的,注意哪些有效,哪些无效。 哪些信息有用,哪些信息令人讨厌? 尽管你仍然会害怕在实践中使用所获得的知识并提出问题。 只是尝试并从结果中学习。 我必须承认,我自己对我早期的一些无知问题感到有点尴尬,尽管这也许证明自从我发现自己在这个网站上以来,我的提问技巧已经提高了很多。

坏问题和不太好的问题不是一回事

我不会粉饰这个药丸:有些问题就是不好。

一个由屏幕截图和短语“为什么这不起作用!?!”组成的问题- 坏的。 为什么? 看得出来作者几乎没有付出什么努力。 这与其说是一个问题,不如说是一个要求:“为我做这件事!” 我为什么要这样做? 我的时间太宝贵了,不能浪费在帮助那些一开始就不想学习并且不感激我的帮助的人。 了解什么是 Stack Overflow。

现在考虑一个题为“如何删除页面上的蓝色边框”的问题,该问题由几段讨论 CSS 轮廓属性的文本组成,但没有明确提及“CSS”或“轮廓”一词。 虽然这样的问题可能违反许多 Stack Overflow 指南,但我不同意,这不是一个坏问题。 作者至少试图提供一些信息,即使不知道该提供什么。 尝试很重要,感知和学习的意愿也很重要。

然而,许多 Stack Overflow 贡献者可能会以同样的方式处理这两个问题:否决并关闭。 这是令人沮丧的,并且在许多没有经验的用户能够学会提出更好的问题甚至理解网站如何工作之前就对他们失去了兴趣。

真正糟糕的问题不值得你花时间。 但必须记住,那些提出不太好的问题的人是无意的。 他们想提出好问题,但不知道如何提出。 如果你一味地惩罚新人,不加解释,他们将如何学习?

一个好问题并不能保证得到答案

Stack Overflow 通常可以更快地回答许多人都可以回答的简单问题。 您对 JavaScript 或 HTML 中的二分搜索有疑问吗? 精彩的! 不到一个小时就收到五个答案。 但问题越复杂或具体,无论措辞质量如何,您得到答案的可能性就越小。

随着时间的推移,获得答复的可能性也会迅速下降。 当一个问题深入提要几页时,它就会丢失。 一周后,你只能祈祷有正确知识的人会偶然发现你的问题(或者慷慨地点击它)。

您可能不喜欢正确答案

每个月我都会收到几张针对所谓不受欢迎答案的反对票。 这些答案本质上是说,“原因是因为它是这样设计的”,或者“这是不可能的,因为......”,或者“这是一个需要首先修复的错误。” 在上述所有情况下,作者都没有收到解决方案,甚至没有找到解决方法。 我怀疑当人们不喜欢答案时,他们就会投反对票。 我什至理解它们,但这并不意味着答案是错误的。

当然,反之亦然:好的答案并不一定会告诉你你想听到什么。 一些最佳答案首先回答原始问题,然后描述解决问题的其他方法。 有时我会回答用户的问题,然后写一篇长文说明为什么不建议这样做。

每当态度的表达被简化为赞成票和反对票或点赞按钮时,重要的区别就会消失。 这个问题在互联网上经常出现。 有多少社交网络可以让你区分“我支持这个”和“我认为这说得很好,即使我不喜欢它或同意它”?

总的来说,尽管每月都有反对票,但我相信 Stack Overflow 社区的投票是公平的。 我们将坚持这条道路。

我几乎从不在 Stack Overflow 上提问

我使用这个网站的时间越长,我在上面问问题的次数就越少。 这部分归功于我的职业成长。 我在工作中遇到的许多问题都太复杂,无法用简单的问题来表达,或者太具体,任何人都无法帮助我。 我已经意识到该网站的局限性,因此我避免提出几乎肯定不会得到很好答案的问题。

但我很少在这里问问题,即使是在学习新的语言或框架时也是如此。 并不是因为他是天才,恰恰相反。 只是,在 Stack Overflow 上呆了多年之后,当我有问题时,我深信我不太可能是第一个提出这个问题的人。 我开始搜索,几乎总是发现几年前就有人问过同样的问题。

观察其他人的问题是了解有关产品的新知识的好方法。

现在我正在努力 VS代码,所以我养成了看带有 vscode 标签的问题的习惯。 这是了解我的代码在现实世界中如何使用的好方法。 用户遇到什么问题? 如何改进文档或 API? 为什么我认为绝对清楚的事情会引起如此多的误解?

问题是显示您的产品如何使用的重要信号。 但重点不是回答并继续前进,而是首先尝试理解对方提出问题的原因。 或许产品存在你不知道的问题,或者你无意识地做出的一些假设? 这些问题还帮助我发现了许多错误并激励我继续工作。

如果您正在为开发人员维护产品,请不要将 Stack Overflow 视为垃圾场(或更糟的是,将其视为问题墓地)。 定期回来查看出现了哪些问题和答案。 这并不意味着您需要自己回答每个问题,但来自 Stack Overflow 的信号太重要了,不容忽视。

问题、错误报告和功能请求之间的界限是模糊的。

Stack Overflow 上有不少关于 VS Code 的问题实际上是错误报告。 还有许多其他实际上是对新功能的请求。

例如,标题为“为什么当我执行...时 VS Code 会崩溃?”的问题- 这是一个错误报告。 VS Code 不应在各种情况下崩溃。 回答错误报告问题会适得其反,因为作者可能对解决方法感到满意,而从不提交真正的错误报告。 在这种情况下,我通常会要求用户在 Github 上提交错误报告。

在其他情况下,差异可能不太明显。 例如,问题“为什么 JavaScript IntelliSense 在 VS Code 中不起作用?” 根据 JavaScript IntelliSense 的工作方式,问题可能分为以下三类之一:

  • 如果是用户配置问题,那么这确实是 Stack Overflow 的问题。
  • 如果在所描述的情况下 IntelliSense 应该起作用,但实际上不起作用,那么这是一个错误报告。
  • 如果在所描述的情况下 IntelliSense 不起作用,则这是对新功能的请求。

归根结底,大多数用户并不关心这些细微差别,他们只是希望 JavaScript IntelliSense 能够正常工作。

虽然这些差异对我来说很重要,但作为项目负责人,一般来说它们对我来说应该不重要。 因为问题、错误报告和功能请求都是表达一种想法的方式:用户期望从我的代码中得到一些东西,但没有得到它。 如果产品是完美的,用户永远不会问有关它的问题,因为一切对他们来说都是清楚的,并且它会完全按照他们想要的方式做(或者至少清楚地告诉他们为什么它不能)。

开发者也是人

人们都是情绪化的。 人们是非理性的。 人们都是混蛋。 当然,并非总是如此,但有时! 不管你相信与否,开发人员也是人。

我们开发人员喜欢告诉自己一个神话:“我们与计算机一起工作,所以我们必须保持理性。 我们理解神秘的符号,所以我们必须聪明。 软件已经占领了世界,所以我们必须保持冷静! 凉爽的! 向前!!!”

这是错误的。 如果真是这样,那么上帝会帮助其他人。 即使在 Stack Overflow 这个为专业人士设计的客观知识库工具上,即使在我自己的 VS Code 的高度具体的角落,我仍然遇到各种愤怒:逻辑谬误、侮辱、从众心理等。

不要欺骗自己:你可能并不像你想象的那么完美。 但这并不意味着我们不应该努力改掉我们的缺点。

兄弟,我是创造这个的人

我也是一个人,Stack Overflow 上发生的事情有时会让我感到恼火。 例如,当用户自信地写出废话或简单地对与 VS Code(我创建的并且我非常了解的产品)相关的问题给出错误答案时。 奇怪的是,似乎答案越是错误,就越有可能有人称其为不争的事实。

当这种情况发生时,我就按照图中的动作写下正确答案。

我在 Stack Overflow 上 10 年学到的东西

有几次这导致了很长的话题:我有祸了,因为我敢于质疑他们对我创造的东西的了解! 别再总想自己是对的了,你们这些该死的聪明人! 因为我是对的!!!

在这种绝望中很容易变得愤世嫉俗

当面对源源不断的低质量问题时,很容易变得愤世嫉俗。 他从来没有听说过谷歌吗? 他甚至知道如何构建连贯的句子吗? 你是什​​么,狗?

有时我一天会看几十个新问题。 不断观察所有这些低质量的问题可能会导致蔑视或愤世嫉俗。 这种愤世嫉俗的情绪可能会蔓延到网站上,任何遇到过热心版主或花了几个小时研究和提出问题的人都会证明这一点,结果只会收到负面回应,然后在没有任何解释的情况下消失得无影无踪。

当然,也有一些用户不付出一点努力,就提出了不好的问题。 但我相信大部分低质量的问题来自善意的人(尽管是愚蠢的)。 我总是试图记住成为新手意味着什么。 当你刚开始时,你不明白这里的一切到底是如何运作的。 在某些情况下,您甚至不知道用什么词来正确表达您的问题。 相信我,处于这个位置很难。 当你只是为了问一个问题而被泼上污水时,这是令人不愉快的。

尽管 Stack Overflow 为帮助新手做了很多工作,但仍有很多工作要做。 我试图在遵守网站标准和对没有经验的用户宽容之间找到平衡。 这可能涉及解释为什么我投票结束问题或发表评论鼓励用户提供更多信息。 我还有成长的空间。

另一方面,我会毫不犹豫地对拥有 50 名声誉的用户投反对票,这些用户发布了诸如“JavaScript 开发的最佳 VS Code 布局是什么?”之类的问题,或者上传了代码而不是文本的肥皂剧屏幕截图。

有时我只是想感谢你

Stack Overflow 上的感恩文化很薄弱。 我记得有一次,该网站会自动从问题中删除“你好”和“谢谢”这两个词。 也许这仍然是完成的,我还没有检查过。

如今,任何从事过客户支持工作的人都清楚,过多的礼貌可能会造成阻碍,甚至显得强迫。 但有时这个网站上的某人做了一些对你来说非常重要的事情,感谢他们的唯一方法就是给他们加分。 太糟糕了。

效率并不要求我们成为没有灵魂的机器人。 当然,如果用户自己愿意的话,侧通道可以提供人与人之间更真实的沟通。

有时我想知道收到答案后发生了什么

Stack Overflow 遵循交易原则:有些人提出问题,另一些人回答。 收到回复后会发生什么? 谁知道? 有时我想知道这一点。 我的回答有帮助吗? 他帮助了什么不起眼的项目? 提问者学到了什么?

当然,这种好奇心是不可能满足的。 要求用户说明他们将如何使用他们收到的信息将是非常有问题的,即使你可以做到这一点。 但想想就很有趣。

游戏化是有效的...

…将流程变成游戏时。

当我在状态栏中看到 +10 或 +25 小图标时,我仍然有点担心。 也许这些游戏化的小细节是我十年来再次访问该网站的原因。 但这些年来,我也开始思考 Stack Overflow 是一款什么样的游戏,以及获胜意味着什么。

我确信该系统的创建是出于最好的意图:奖励人们提出有用的问题和答案。 但只要你加了高分,它就生效了 古德哈特定律,而一些用户开始调整自己的行为不是为了实现最大价值,而是为了获得最大收视率。 这很重要,因为...

声誉并不意味着你所认为的那样。

声誉并不等同于技术能力、沟通技巧或对 Stack Overflow 如何运作或应该运作的理解。

我并不是说声誉没有用。 它只是不代表 Stack Overflow 管理员的意思,也不代表“声誉”这个词的含义。 我意识到声誉是影响力的衡量标准。 考虑网站上发布的两个假设答案:

  • 一个关于常见的 git 操作的内容。 我用谷歌在两分钟内写了一个三行答案。
  • 另一个是关于纠缠图论的。 或许全世界只有一百个人能够回答。 我写了几段代码和示例代码来解释问题以及如何解决它。

五年内,第一个答案的浏览量达到了 5 万次,并获得了 2000 个点赞。 第二个答案被看了 300 次,只得到了两次微不足道的赞成票。

从某种程度上来说,这是非常不诚实的。 为什么要奖励在正确的时间出现在正确的地点的东西? (并不是一切都由运气决定;了解游戏规则也起着巨大的作用)。 另一方面,第一个问题实际上比第二个问题帮助了更多的人。 或许值得认识的是,从某种意义上来说,认可导致了“声誉”的积累?

所以我认为 Stack Overflow 上的“声誉”是一种影响力的衡量标准。 真正的声誉不能用积分来衡量,它来自社区。 我听谁的建议,谁帮助别人,我信任谁? 也许这些都是不同的人,具体取决于我是用 PHP 还是 iOS 编写。

话虽如此,我不知道Stack Overflow在这方面应该做什么。 如果用户获得的不是“声誉”而是“狡猾点”,他们还会有动力吗? 如果根本没有积分系统,用户还会保持参与度吗? 我认为这不太可能。 Stack Overflow 上的“声誉”等同于真实声誉的神话不仅有利于网站本身,也有利于其最活跃的用户。 好吧,说实话,谁不喜欢提高自己的声誉呢?

不,正如生活中经常发生的那样,为了真正了解正在发生的事情,您不仅需要分析数字。 如果一篇帖子在 Stack Overflow 上有 10 分,那么看看这个人如何沟通,他发布了哪些问题和答案。 在除特殊情况外的所有情况下,请记住,Stack Overflow 分数本身不太可能表明一个人使用该网站的能力以外的任何内容。 根据我的经验,他们通常甚至不谈论这个。

如果没有 Stack Overflow,我就不会高效

每次我需要在 git 中做一些复杂的事情时,我都会去 Stack Overflow。 每当我在 bash 中需要一些简单的东西时,我都会去 Stack Overflow。 每次遇到奇怪的编译错误时,我都会去 Stack Overflow。

如果没有 IntelliSense、搜索引擎和 Stack Overflow,我的工作效率就不会很高。 从一些书来看,这使我成为一个非常糟糕的程序员。 我可能会失败很多测试并且无法解决板上的很多问题。 就这样吧。 说真的,每次我在 JavaScript 中使用 .sort 时,我都必须查找有关何时获得 -1、0 或 1 的信息,而且我每天都编写 JS,开发该语言最流行的编辑器。

不,Stack Overflow 是一个令人难以置信的工具。 只有傻瓜才不会使用所有可用的工具。 那么为什么不像我一样成为一个内心的傻瓜呢? 为重要的知识节省你的大脑资源,例如记住《宋飞正传》系列的所有情节或想出复杂的双关语(本文中缺少这些,但会有许多其他性质完全不同的内容)。

堆栈溢出是一个奇迹

Stack Overflow 允许任何人,无论经验或知识如何,都可以发布编程问题。 这些问题的回答者都是完全陌生的人,他们中的大多数人都将一生和职业生涯的时间都花在无偿帮助他人上。

奇迹是 Stack Overflow 存在的事实和工作的结果。 我确信并不是一切都如其创造者所愿,但他们尝试了。 尽管存在这些缺点,该网站多年来仍然帮助了很多人,包括我。

堆栈溢出不会永远持续下去。 有一天,会有更好的事情出现。 希望这能从 Stack Overflow 的错误中吸取教训,并从中获得最好的结果。 在那之前,我希望我们不要认为这个网站是理所当然的。 这既是一个地标,也是一个充满活力的社区,不断补充新的人口。 如果这让您担心,请记住,这一切都非常脆弱,即使是很小的行动 - 例如帮助善意但尚无知的新来者 - 也可以产生积极的效果。 如果我批评这个网站,那只是因为我关心并且我知道如何让它变得更好。

PS

当我来到 Stack Overflow 时,我还是个小学生。 我刚刚开始在 Eclipse 中编写(ES5!)JavaScript,似乎 90% 的问题都以“使用 jQuery,只是......”开始。 尽管我不知道自己在做什么,但陌生人还是花时间帮助我。 我想我当时并没有真正感激过它,但我并没有忘记。

人们总是希望 Stack Overflow 有所不同:问答网站; 解决家庭问题的工具; 编程的生活水平。 对我来说,这个网站尽管不断发展并存在缺陷,但其核心是一个开放的社区,陌生人可以在这里互相帮助学习和进步。 那太好了。 我很高兴在过去 10 年里一直是 Stack Overflow 的一员,并希望继续这样做。 我想在接下来的十年里学到和过去十年一样多的新东西。

来源: habr.com

添加评论