我不记得自己第一次在 Stack Overflow 上提问被踩是什么时候了,可能是2017年。当时我在写一个Python脚本,要从Excel里读取数据然后插入SQL Server,总是报编码错误。我把一整段代码贴上去,然后问“为什么不行?”。不到五分钟,收获了三个Downvotes。然后有人关闭了我的问题,理由是“需要调试细节”。当时我很生气,觉得这个社区怎么这么刻薄。后来我点开系统消息,才看到下面还有一行字:“请提供输入数据的示例,以及期望的输出和实际输出的差异。”我根本没看那本指南。确切地说,我当时连什么叫“最小可复现示例”都不知道,标题还写了“紧急求助”。
后来我花了一个下午去看那些高票答案,发现一个规律:在 Stack Overflow 上,被踩并不是因为你的代码太烂,而是因为你没有把问题压缩成一个可以被他人验证的容器。Reddit 上你随便发一个帖子,吐槽几句,会有十几个人安慰你;Quora 上甚至有人连正确答案都不要,专门讲自己的经历。但 Stack Overflow 不行,它的本质是一个“答案仓库”,每个问题的定位是给五万个人看的,而不是为了让你一个人舒服。所以它像图书馆一样,对乱放书的人非常不客气。我记得有一个问题是关于 C# 的垃圾回收机制,被关了五次,每次都是因为“过于宽泛”。管理员给了很多警告链接。后来这个问题在经过重写之后,成为一个经典答案,被引用了上百次。这给我的触动很大:问题不是问题本身,而是提问的方式没达到它的门槛。
ChatGPT 出现了以后,我更理解 Stack Overflow 的封闭了。2023年我看到很多新账号贴出非常流畅的答案,语法完美,术语精准,但稍微跑一下就会发现逻辑错。Stack Overflow 后来直接封杀 AI 生成的答案,理由是对抗虚假信息。有人说这是一种傲慢,但你想如果它像 Twitter 那样开放,整个站都会被大模型生成的“看起来很有条理”的垃圾淹没。普通用户根本分不出谁是真的踩过坑,谁是复读机。我在2024年的时候还碰到过一个关于 NestJS 的报错,Stack Overflow 上有七个方案全是同一个错误思路,底下评论在吵,后来才有一个老用户贴出自己项目的配置文件,指出那个错误不在代码里,而在环境变量。这需要的是真实的、耗费过时间的人的判断,不是语料统计。
可它也确实做得过头了。比如搜索一个常见问题,最上面经常是2008年的回答,用着过时的 API;如果你问同样问题的新版本,会被导向那个老帖,然后关闭。我的一个同事就这样放弃了提问,转而去 Reddit 上找了个很偏门的子版块。这种知识固化的现象是 Stack Overflow 最严重的问题。所以我的态度很矛盾:我一边依赖它的严格来获得高质量答案,一边又恨它对新手的惩罚。也许唯一能做的是接受它的规则,学会用它的语言提问。我的建议是,提问前真的去读那篇 2013 年发布的“如何提问”的帮助页面,里面讲到的“最小可复现示例”到今天都不过时。写清楚你做了什么,看到什么,期望什么,如果还嫌不够,把环境也贴上。这样做的成本很低,但可以让你的问题从“又一堆垃圾”变成“有人愿意花时间解决的东西”。