重复造轮子很蠢,但我还是自己写了一套博客系统
重复造轮子很蠢我非常清楚不需要任何人提醒。但犹豫之后我还是自己写了一套博客系统。先回应一个很多人会有的疑惑现在都什么年代了怎么还有人自己做博客这个问题我在上一篇里写过——为什么我选择做个人博客。简单说做博客不是目的我是想通过长期写作养成输出表达的习惯给自己留一块能完全做主的地方。但上一篇讲的是为什么要写博客这篇讲的是为什么连博客系统都要自己写。后者听起来更离谱自己写博客就算了还要自己造一个写博客的工具这确实是我干出来的事。从 Halo 说起最开始用博客我图省事选了 Halo。它是开源的、开箱即用装完就能跑社区也大出了坑有人踩过。它的主题样式不符合我的审美但我想改造一个静态网页模板应该很简单就自己设计了一套主题模板配上 Halo 的后台管理系统来用。刚开始还行Halo 的底子足够好我自己改改皮勉强能看。真正开始不舒服是从后台慢慢显出来的。Halo 的功能很全全到我用不上那么多但也没法去掉。后台里那些插件、生态、扩展我一个都不想装它们却一直躺在那里占着位置每次进后台都能看到。我不需要的东西也要为它承担存在感这种附加让我很不舒服。后来我遇到一个更具体的场景。有些时候我不想写长文只是有点感想想随手记下来。这种时候说说比文章合适——短轻不要求完整。但 Halo 的说说是个插件功能得先装插件。装完之后插件集成的样式和行为又和我的审美预期对不上。改起来也费劲插件是个黑盒我不想为它研究内部实现。想到没有更好的选择我也就勉强忍了。忍无可忍的那一刻忍一直忍到服务器开始挂。后台那台部署博客的服务器是一台 2C2G 的腾讯云轻量服务器。它老是出问题网站时不时打不开。一开始我以为是腾讯云的系统服务不稳定排查了很久查系统日志、查负载、查进程绕了一大圈最后才意识到凶手是 Halo 自己。Halo 是 Java 写的跑在 JVM 上。一个博客系统把一台小服务器的内存吃得干干净净。平时占用六七百兆内容多一点的时候一个多 G甚至能冲到两个 G。2C2G 的机器光它自己就能吃掉一半还多剩下的一点资源扛不住任何风吹草动。对比一下我自己后来写的这套系统几乎一直稳定在 100MiB 以下。这个数字差距有多大做过服务器运维的人都懂。JVM 不是不好它成熟、生态好、干什么都行——但它是一个企业级的运行时为一个我自己的博客守着两三个 G 的内存这属于杀鸡用牛刀而且这把牛刀还会把鸡笼踩塌。我终于忍无可忍决定自己写一套符合自己审美和需求的博客系统。犹豫造轮子是很蠢的做之前我确实犹豫过。重复造轮子的自嗨式狂欢蠢。这是程序员圈子里的公开常识你有现成的轮子功能比你全、踩坑比你多、维护的人比你多你偏要自己写一个写得还没人家好最后还得自己维护。这事的蠢我不需要别人提醒。但转念一想我做个人博客的初衷是希望通过长期写作养成输出表达的习惯。写作是长期且持续的行为可能要坚持很多年。而工具是我每天都要用的东西——一套蹩脚的工具会让我更容易放弃写作的兴趣。如果博客系统用得顺手我可能十年二十年地写下去如果它每天都膈应我一下我大概三个月就弃坑了。从这个角度看投入一点时间做一套顺手的工具是长期投资不亏。这么一想犹豫就少了大半。我需要的不是更好的轮子我需要的是每天用得顺手的轮子。和 AI 讨论这件事决定动手之前我也把这个想法和 AI 讨论过。AI 的回答很诚实近乎冷酷地指出了这种造轮子行为的低价值你是在重复造轮子对大多数人来说维护一套自研博客系统的成本远远超过它带来的收益这是典型的投入产出不划算。但它也肯定了一些潜在价值——极低的内存占用、完全对齐个人审美的界面、原生支持 AI 集成这些对我这个单一用户来说是实打实的收益。这个回答没有拦住我反而让我更踏实了。因为它把问题拆清楚了对绝大多数人来说自研博客是蠢事但对我这个具体的场景它是划算的。我要做的不是造一个更好的博客系统而是造一个长成我样子的工具。AI 在这里的作用不是给我壮胆是帮我把模糊的冲动理成一个清晰的判断。我想要什么新系统我给自己定了几个目标。审美和我的品味对齐我喜欢极简克制的设计风格最值得参考的就是 Typora 这种所见即所得的编辑器——简洁、现代、优雅没有花里胡哨的功能。写文章的时候界面干净得只剩文字本身光标落在哪格式就呈现在哪。设计编辑器时我几乎完全照搬了它的编辑体验。这对我来说是刚需我每天要对着它写东西它好不好看、顺不顺手直接决定我愿不愿意打开它。轻轻到可以忽略被 JVM 坑过一次这次我想让博客系统轻到可以忽略不计。Rust 编译出来的单二进制跑起来内存占用极低没有运行时没有虚拟机一个二进制文件加一个数据库文件就是整个系统。我要的是它安安静静待在服务器角落里别来烦我。让 AI 直接落笔我现在习惯和 AI 探讨各种问题和想法会产生不少新的思考和产出。如果 AI 能把我们的讨论结果直接转录进博客我就能把精力放在思路本身而不是码字上。这意味着博客不是只给人用的也是给人 AI这个组合用的——我负责想它负责记。手机端抓住转瞬即逝的表达欲原来的博客在手机端很难用导致我有想法时必须先走到电脑前。但很多时候表达欲转瞬即逝——洗澡时想到一个点子通勤路上冒出一句话等我真的坐到键盘前冲动已经没了。如果手机端能有好的写作体验我才会真的习惯随手记录灵感。这四个目标每一个背后都是一个具体的、被现实逼出来的场景不是拍脑袋想的功能清单。我不想要什么除了想清楚要什么我还想清楚了不要什么。后者可能更重要。单用户这个博客是单用户的。只有我自己写不需要注册、不需要权限体系、不需要审核后台就我一个人。没有评论它没有评论功能。关于这一点我在上一篇里写过原因不想承担审核负担更不愿意承受社交负面能量。评论区是个漩涡一个观点发出去接回来的是赞许、反驳、嘲讽还是谩骂不由我控制。就算关掉评论区也会有人通过其他渠道找过来。做个人博客本来就该是想写就写不想看别人的脸色。没有社交它也没有社交功能。分享、点赞、关注、推荐那一套统统不要。我不需要它涨粉不需要它活跃不需要任何数字来证明我的内容有价值。这些反主流的决策放到商业产品里全是扣分项。但放到一个给自己用的工具里全是自由。我砍掉它们不是觉得评论、社交没价值而是想明白了一件事博客对我来说首先是写作工具不是社交产品。社交产品有它自己的逻辑但那是另一套玩法我不想把这两件事混在一起。克制不让功能膨胀还有一条我给自己立的规矩功能只从真实使用里长出来不从可以有里长出来。说说功能是因为我真想写短文才做的不是因为它听起来很酷手机端是因为我真有灵感转瞬即逝的痛点才做的不是因为移动端是趋势。我做这套系统的初衷是让自己有一套稳定、可用、顺手的写作工具而不是把它变成一个工程负担。所以我会刻意克制不让功能膨胀变丑——每加一个功能之前先问自己这个功能我明天真的会用到吗过程AI 写代码的真实体验这套系统从动工到能用花了 1 个下午加 4 个晚上——都是晚上十点半到凌晨一点这种时间。工具是 Kimi Code DeepSeek V4 Flash 的组合token 成本算下来不到 20 块钱。一个完整的博客系统前台页面、后台管理、编辑器、图片上传、数据统计、备份恢复用 Rust 从头写传统方式怎么也得一两个月我用了五个晚上。过程当然不是一帆风顺。编辑器就来回折腾了好几轮——第一版用了 Vditor用着不顺手又换了 milkdown所见即所得的细节调了很久才接近 Typora 的体验。中间还出过几回生产环境的幺蛾子登录页 500、正文丢失都是靠端到端测试才抓出来的。AI 写代码不是不会犯错是它犯错的成本很低——错了改起来也快你来我往几个回合问题就没了。但这就是自己造轮子的回报哪里不对改起来没有别人挡路。今天用着发现不舒服晚上就能改好明天用着就是舒服的。这种正反馈是忍出来的使用体验给不了的。用别人的系统你提需求、等版本、求爷爷告奶奶用自己的系统你想到什么晚上就能动手改。手机端还差一点诚实地说手机端的体验还没有完全达到我的预期。毕竟不是原生 App网页端做起来始终还是差一点意思。但做 App 或者 HTML5 化现在的成本足够低考虑到长期价值我觉得值得继续投入。反正造了一个轮子就会看到下一个——这个博客系统做完之后我脑子里已经在想它还能怎么进化了。造轮子从蠢事变成可选方案最后说回开头那个问题造轮子蠢不蠢蠢但前提是造轮子很贵。过去造轮子贵在哪儿贵在技术门槛——前端、后端、运维、安全一个人全要学会这是以年为单位的时间投入贵在时间成本——一个像样的系统一个人写几个月很正常贵在维护成本——写完不是结束是开始以后的每一个 bug 都是你的。AI 出现之后这些成本被压缩到几乎可以忽略。前端后端不会的问 AI 就行一个像样的系统五个晚上而不是五个月出了 bugAI 帮你定位维护也不再是噩梦。所以造轮子从一件蠢事变成了一个可选方案。当你可以用不到 20 块钱、五个晚上换一套完全长成自己样子的工具忍受就不再是最优解了。以前你只能忍——Halo 难看、臃肿、吃内存但你没办法造不起。现在你忍不了了你可以直接造。但最后还有一句提醒也是说给我自己听的AI 降的是造的成本降不了你沉迷的成本。轮子造起来便宜了但你的时间没有变便宜。所以选择造什么以及选择不造什么依然是你自己的事。克制比能力更稀缺。

相关新闻