关于构建论坛软件的思考
摘要
作者反思使用AI编码工具构建论坛软件bsBB的经历。作为一名非专业程序员,他们分享了利用LLM处理底层细节同时专注于系统设计的经验。
暂无内容
查看缓存全文
缓存时间: 2026/05/23 21:34
# 关于构建论坛软件的反思
来源:https://www.counting-stuff.com/reflections-on-building-forum-software/
*怎么两个星期四就这么过去了。一切恍如隔世。感谢订阅者们支持本新闻通讯的一贯闹腾。*
这周,我把 **bsBB**(https://github.com/randyau/bsBB) 丢到了世界上——它正是我们闪亮的新 *官方* 论坛(https://forum.counting-stuff.com/) 的底层驱动软件。它的定位是一个自由空间,就像我们那个非常有趣的 Discord 一样,用来讨论社区里大家觉得有意思的事情。它之所以“官方”,是因为短期内不会消失,所以赶紧去用吧,分享你喜欢的东西——无论是关于这份新闻通讯的,还是广义上的数据话题。
没错,我们本质上是一个数据社区,因为那是我写作的内容,也是你们订阅的初衷。但正如我多次提到的,我们首先是“人”,其次才是“数据从业者”。这意味着作为人类,我们有大量觉得有趣、酷炫、想要分享的东西。
所以让我把话说清楚:**任何想聊聊自己为之兴奋、或者单纯带来快乐与着迷的话题的人,我都非常乐意在论坛上为他们找到并开辟一片分享的空间。**
否则,就尽情享受吧。我有意将它建构成对年轻时管理使用过的那些论坛的致敬。
---
## 关于构建整个论坛这件事的反思
bsBB 并非我第一次借助 AI 工具完成大量重编码项目,但它是第一个我刻意作为业余项目来打造、并准备作为公开制品供人使用的。所以从某种意义上说,它算是“正经事”。从另一种意义上说,它仍是一个源于对 Web 1.0 时代纯粹怀旧的、脑洞大开的周末项目——毕竟我们眼前的实际网络正被泛滥的 AI 垃圾淹没。
现在有很多人在推崇或诋毁 AI 编码。就我而言,那些以写代码为生的人比我能更好地厘清这些答案。
今天有趣的地方在于:我 *不* 是以编码为生的。事实上,虽然我 *能* 写出还算凑合的代码,并在某些实现上深入细节,但我从来 *不喜欢* 深挖作为计算机科学基础的数据结构和算法。我的兴趣和优势一直更倾向于更广阔的领域。
所以我总是喜欢在比底层高出一到两个抽象层次上处理代码——那里有系统图、API、行为契约,以及协调、信任和信息问题。这就是为什么我在工作中最开心的时刻,就是和工程师一起弄清楚如何实际创建我想要的东西。这也正是为什么我 *一生* 都在努力理解前端 Web 开发——在 CSS 刚刚兴起的 HTML **4** 时代之后——却始终不得要领。我无法在脑海中记住海量的 CSS 属性、行为和各种浏览器专属的诡异东西,无法把它们拼凑成有意义的逻辑。
然后这些 LLM 工具出现了,它们在不同程度上承诺能编写那些需要大量记忆和经验才能拼凑的低层烦人代码。我只需要提供我真正享受的东西:信息、规划、设计和愿景——这些恰好高一个层次。
或者至少,这是承诺。
所以,我真正享受的是,我真的可以把精力花在我最喜欢的事情上:在脑中弄清楚系统如何运作,想法和功能单元如何相互作用以创造出能正常工作的软件。由于我的职业生涯大多在探究软件因用户交互而失效的边缘,我认为自己在预测可能出现问题的地方方面还算不错。这些当然很适合喂给 LLM,因为它们在高度受限、清晰明确且紧凑的约束条件下工作得最好。
但没有任何人能在设计的初始阶段就完美想象出最终产品。构建任何东西——无论是软件还是家具——都是一个迭代过程,你会在此过程中遇到未曾预料的障碍或机遇。在这个过程中我发现一件迷人的事情:虽然我在语言和实现细节方面什么都没学到,但我学到了很多关于 *软件所属的系统* 的东西。
我的意思是:对于 bsBB,我最初的构想是:“如果做一个简化版 phpBB,但用 Bluesky 作为用户系统会怎样?”根据过往经验,我知道没人想要再注册一个新账户,而且我也不想卷入存储用户数据、最终被人攻破的麻烦。虽然我不必深入研究 ATProto 规范来找出具体授权细节,但我仍然了解了将 Bluesky 作为唯一认证方法的含义。一方面,它要求 bsBB 拥有一个可公开访问的域名作为认证流程的一部分,这导致了大量本地开发测试问题。另一方面,它影响了 bsBB 上用户个人资料数据的初始化方式(通过从用户的 Personal Data Server 拉取数据)——我必须决定拉取哪些信息,以及同步发生在什么时间点。
在测试基本的 Markdown 帖子功能时,我意识到自己忘记了这个标记语言的许多部分,因为我很少用它们(比如 `` 的图片语法)。这意味着要构建一个弹出式标记提醒功能。如果我们有这个功能,那么最好也做一个弹出式表情选择器,因为我们可以复用很多弹出逻辑。
哦,我们还需要审核工具……但我们需要哪些审核工具呢?封禁——永久还是可逆,带不带理由,谁有权限?版主——他们能/不能做什么,在哪里行使权力,是全局角色还是每个论坛单独设置?帖子删除——是否允许,如果能的话谁可以删除什么,删到什么程度?软删除和硬删除怎么选?如果出现需要从所有记录中抹除的个人身份信息(PII)怎么办?
我绝对 *沉迷于* 解决这些有趣的问题,远胜于找出实现它们的最佳模式。对于一个可能每天只有 1-5 个活跃用户的小论坛系统,那些典型的“代码质量”衡量标准压根不重要,只要“代码忠实执行它该做的事,不多不少”就行。
因此,我发现 LLM 辅助编码的整个过程就像走一条非常有趣的钢丝,极大地锻炼了我系统设计和“预想未来问题”的能力。
我手上还有另一个小项目,改天再写——它向我展示了一些从小我就感兴趣、但从未停下来足够关注、直到我开始编写一个对抗兴趣的业余项目时才注意到的系统细节。
另一方面,我也见识了这些 LLM 能做出多么愚蠢可怕的事情。在一次实验中,我让 Anthropic 的 Haiku 模型为 bsBB 构建一个中等复杂度的功能:上传、存储和管理小文件(用于保存 favicon 和几个 logo 之类——基础设施功能)。等整体设计概念敲定后,我让它自由发挥,自己去做了晚饭。回来之后,我又让另外几个 LLM(Sonnet 和 Gemini)审计代码,看看它试图交付哪些有问题的东西……结果模型们发现了各种需要修复的问题。*然后我又让同样的模型再次审计代码*——它们又发现了 *新的* 问题需要标记。这没完没了。没有神奇的万能药,只有无尽的警惕(而这恰恰是人类出了名不擅长的)。
每当我不得不用 LLM 来比手动更快地编写分析代码时,我都会带着这种体验。因为对于分析代码,没有“代码是否编译并正常运作”这样的最终护栏,建立“模型很可能会做些蠢事,提前预判”的感觉非常重要。虽然构建 bsBB 时大部分时间是疯狂按“1”接受大堆工具权限请求,但在分析工作中我可不能陷入那种自满模式。更多时候,我要盯着滚动的注释代码行,手指放在 Ctrl+C 上,以防 LLM 决定用某种古怪的方案来解决一个感知到的问题,而不是使用真正合法的方法。
所以,由于我特别喜欢摆弄系统及其连接方式,我可以找到让 LLM 填补空白的方法。但这确实锻炼了不同的技能——设定准则和管理,而不是单纯的“把代码搞定”。这很像我从一个构建模型的分析师,转变为必须设计出别人能使用的分析框架。如果你想保留那些“底层”技能,就得使用它们,否则它们就会生锈。
相似文章
了解你的敌人:对AI辅助软件开发的批判性探讨
Amy J. Ko 分享了她对AI辅助软件开发的批判性观点,探讨了使用LLM编写代码的前景与陷阱,并讲述了她为期三个月的实验,以评估对生产力和实践的真实影响。
用Pi构建Pi
一篇反思性文章,探讨使用AI代理(Pi)构建Pi开源项目时遇到的挑战,重点分析了大量低质量AI生成的问题报告如何误导人类维护者和AI本身。
论坛上的自主AI版主
一家私营公司与法国一所大学技术学院(IUT)的合作研究项目创建了一个临时论坛,完全由名为Gram的自主AI版主管理,这是一项关于AI行动是自我触发还是受指令驱动的实验的一部分。
@VukRosic99: 用一次提示构建LLM + 设置DeepSeek研究员(其副业)的自动研究系统 一个实时构建过程,通过一次提示创建完整…
演示了通过向AI编码代理(Claude Code/Codex)发送单个提示来构建完整的LLM,并安装由DeepSeek研究员开发的自主AI研究技能,涵盖架构、故障模式以及无人值守运行。
用机器重建我的博客,为机器服务·
作者重建了博客,加入了完整的结构化数据标记(JSON-LD、微格式),并配备了一个由提示词引导的AI协作写作助手,该提示词避免了常见的LLM模式,同时通过CI验证防止数据损坏。