2026 背单词工具混战:Anki、墨墨、百词斩,程序员为什么还选它
【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki
2026 年的背单词赛道,比想象中更热闹:墨墨背单词靠"签到+记忆曲线"把日均活跃做成了招牌,百词斩用"图片联想+打卡返费"把产品做成流量生意,不背单词、欧路词典、Quizlet 各自占据一方水土,而一款诞生超过 15 年、界面朴素到近乎"反产品化"的开源软件——Anki,依然是程序员圈子里争议最少的选择。社区里甚至形成了一句流传甚广的判断:"Anki 不是背单词工具,而是可编程的认知操作系统。"(社区评测)这句话很准确:当竞品在比拼谁能让你"更容易坚持"时,Anki 在设计之初就假设你会自己管理一切——算法参数、卡片结构、数据文件、同步服务器,全部开放给你。
这篇文章不做情绪化的"谁更好用",而是用一份真实源码把 Anki 拆开,看它凭什么在商业产品围攻下活到 2026 年,并从"算法、数据、生态"三个维度给出程序员视角的选型逻辑。
混战之下:三种截然不同的产品哲学
先看今年社区里的横评数据。一篇面向五款主流工具的技术评测(五大主流英语记忆工具技术与实用性深度评测),从底层算法、数据控制权、拓展能力、多端同步、自定义自由度六个维度做了对比;另一篇六级备考实测则聚焦词汇导入效率、间隔重复算法效果与多平台同步三项指标(词汇学习工具链对比)。综合这些评测,可以画出一张清晰的分工表:
| 维度 | Anki | 墨墨背单词 | 百词斩 | 不背单词 | Quizlet |
|---|---|---|---|---|---|
| 调度算法 | FSRS / SM-2,参数可调 | 自研记忆算法,黑盒 | 图像联想 + 简单间隔 | 语境驱动 + 简单间隔 | 简单间隔复习 |
| 数据所有权 | 本地 SQLite,完全自有 | 云端账号,导出受限 | 云端账号 | 云端账号 | 云端账号 |
| 内容自定义 | 字段 + 模板 + CSS/JS 全开放 | 仅可选词书 | 仅可选词书 | 仅可选词书 | 基础模板 |
| 拓展能力 | 插件生态 + Python API | 无 | 无 | 无 | 有限 |
| 多端同步 | 官方 + 自建服务器均可 | 官方服务器 | 官方服务器 | 官方服务器 | 官方服务器 |
| 免费开放 | AGPL 开源 | 收费+签到 | 收费+广告 | 部分付费 | Freemium |
这张表说明了一件事:墨墨和百词斩是"内容公司",核心资产是词书与运营;Anki 是"工具公司"(甚至不算公司),核心资产是调度引擎与开放协议。两者的胜负手根本不在同一条赛道上。
算法是硬实力:从 SM-2 到 FSRS 的源码证据
很多评测把"记忆算法"当作营销词,但 Anki 的算法是可以直接读源码的。仓库根目录的 Cargo.toml 中,FSRS 以正式依赖的形式被引入:
[workspace.dependencies.fsrs] version = "6.6.2"FSRS(Free Spaced Repetition Scheduler)是新一代的间隔重复算法,通过跟踪每张卡片的记忆状态(可提取性、稳定性、难度)来预测遗忘概率,从而动态决定复习时机。它在 Anki 中的实现位于 rslib/src/scheduler/fsrs,包含记忆状态、参数优化、重排调度与仿真器四个模块。
最值得程序员注意的,是"目标保留率"(desired retention)这个参数。在 rslib/src/deckconfig/mod.rs 中,默认值写得很清楚:
desired_retention: 0.9,含义是:系统把卡片排到"到期时你有 90% 概率还记得"的日期。这不是拍脑袋的体验值,而是可以直接调度的控制变量。官方文档对它的解释相当直白(deck-options.mdx):保留率越高,间隔越短、每日复习量越大,超过 97% 后工作量会指数级爆炸,因此文档建议保守取值。配套的曲线图直观展示了这个非线性关系:
更硬核的是"计算最低推荐保留率"(Compute Minimum Recommended Retention,CMRR)。它用你全部历史复习记录做参数拟合,再跑一遍模拟,找出"学得最多、花时间最少"的最优点。核心实现就在 rslib/src/scheduler/fsrs/retention.rs:
pub fn compute_optimal_retention(&mut self, req: SimulateFsrsReviewRequest) -> Result<f32> { ... Ok(fsrs::optimal_retention(&config, &req.params, |ip| {...}, Some(cards), None)? .clamp(0.7, 0.95)) }注意最后的clamp(0.7, 0.95)——优化结果被硬性限制在 70%~95% 之间,避免模型给出反直觉的极端值。而同文件下的get_optimal_retention_parameters则负责从复习日志中反推 FSRS 参数,做到"用你自己的数据,调你自己的算法"。这套"拟合—模拟—优化"闭环,在墨墨、百词斩的产品里是完全不存在的——对用户来说它们只是黑盒里的一个"智能复习",而对 Anki 用户来说,这是一个可复现、可验证的数值实验。
作为对照,传统 SM-2 的调度核心依然保留在 rslib/src/scheduler/states/review.rs,包括初始难度系数 2.5、复习状态中的scheduled_days/elapsed_days/ease_factor三元组,以及为防止过度规律而对长间隔施加的模糊扰动(fuzz.rs,间隔 20 天以上扰动比例降到 5%)。这意味着 Anki 同时维护着两代调度引擎,用户可以在旧算法与 FSRS 之间切换,调度版本也作为显式配置存在(rslib/src/config/mod.rs 中的SchedulerVersion)。这种"算法可替换、参数可调参、行为可验证"的工程形态,才是它能在评测中持续领先的根本原因。
数据控制权:程序员的第一条硬标准
程序员选工具,第一条硬标准是"数据是不是我的"。这一点上 Anki 几乎无可挑剔:所有学习数据存放在本地 SQLite 数据库中,卡片、笔记、复习日志、媒体文件全部落盘,不依赖任何云账号。导出的接口在 pylib/anki/collection.py 中一应俱全:
def create_backup(self, *, backup_folder: str, force: bool, wait_for_completion: bool) -> bool: """Create a backup if enough time has elapsed, and rotate old backups.""" def export_collection_package(self, out_path: str, include_media: bool, legacy: bool) -> None:备份、导出、导入都是第一公民操作。社区里甚至出现了大量围绕 Anki 的二次开发项目:有人用 Python 写命令行工具,把 Claude 生成的释义、OpenAI TTS 合成的语音、考研阅读题自动同步进 Anki,数据全部存在本地 SQLite,还自带 AnkiConnect 断连重试(社区文章 anki-vocab:让背单词变成一件很酷的事);有人用 Python 批量制作数据库词库导入 Anki(基于 Anki+Vocabulary 的英语单词记忆法)。这些实践能成立,前提是 Anki 提供了完整可编程的接口层——new_note、add_note、add_notes这些 Python 绑定直接暴露在 collection.py 中。
卡片渲染层同样开放。模板系统支持字段引用、条件判断、循环,甚至可以嵌入 JavaScript 与 CSS,渲染引擎实现在 rslib/src/template.rs 的render_card。这意味着你可以把一张单词卡做成"发音 + 词形变化 + 例句填空 + 词根拆解"的动态组件,而不是百词斩那种固定版式。
可度量:被大多数人忽略的第三条硬标准
商业背单词 App 的"打卡日历"衡量的是行为,Anki 衡量的是记忆本身。在 rslib/src/stats/graphs/retention.rs,"真实保留率"(true retention)直接从复习日志计算,按今天、昨天、本周、本月、今年、全部时间六个粒度分别统计,并区分年轻卡片与成熟卡片(成熟标准是间隔 ≥ 21 天):
const MATURE_IVL: i32 = 21; // mature interval is 21 days match (review.last_interval < MATURE_IVL, review.button_chosen) { (true, 1) => period_stat.young_failed += 1, (true, _) => period_stat.young_passed += 1, (false, 1) => period_stat.mature_failed += 1, (false, _) => period_stat.mature_passed += 1, }这组数据回答了一个 App 永远无法回答的问题:"我到底记住了多少?"你把保留率曲线调出来,对比 FSRS 预测值与实际值,就能验证算法在你身上的真实表现——这在学习工具里是罕见的"数据驱动复盘"能力。社区文章也普遍把"保留率、遗忘次数、待复习量"列为 Anki 用户复盘的三件套(Anki 作为可编程认知操作系统的底层逻辑)。
生态与自托管:程序员的第二条硬标准
第二条硬标准是"不被任何公司绑架"。Anki 的同步协议是开放的:账号登录、主机密钥认证、增量同步的客户端逻辑全部在 rslib/src/sync 中实现。登录接口 rslib/src/sync/login.rs 允许用户指定自定义endpoint:
pub struct SyncAuth { pub hkey: String, pub endpoint: Option<Url>, pub io_timeout_secs: Option<u32>, }endpoint为空时走 AnkiWeb 官方服务器,填了自定义地址就切到自己的同步服务。仓库自带的 Docker 方案(docs/syncserver/README.md)甚至提供了常规版与 distroless 极简版两种镜像,distroless 版本无 shell、无工具、攻击面更小、启动更快——这分明是按生产环境的运维标准写文档。社区里"3 分钟为 Anki 部署一个专属同步服务器"的教程因此长盛不衰(掘金文章)。
数据能迁移、算法能自调、同步能自建,这是 Anki 对"工具自由"的完整回答。反观墨墨与百词斩,学习进度与账号深度绑定,数据导出能力极为有限——对把数据当资产看待的程序员来说,这是不可接受的风险敞口。
给不同人群的最终建议
结合上述评测与源码证据,2026 年的选型建议可以收敛为三条:
- 程序员 / 以英语为工作语言的工程师:选 Anki。你需要的是可编程的卡片模板、可导出的本地数据、可自建的同步服务器,以及能写脚本批量制卡的 Python 接口。社区里为程序员设计的 Qwerty Learner(面向键盘工作者的单词肌肉记忆软件)都在 Anki 生态内做集成,方向已经很明确。
- 考研、考级等短期高强度冲刺人群:Anki 的 FSRS + 保留率优化依然是最优解,但需要投入学习成本。如果完全无法接受配置门槛,墨墨在"词书完整度 + 打卡约束力"上体验更平滑;但请注意其算法与数据不可控的代价,备考结束后你带走的只是词汇量,不是方法论。
- K12 学生与轻度用户:百词斩的图片联想和游戏化反馈对低龄用户更友好,但它的记忆机制本质上仍停留在"眼熟"层面,无法支撑长周期记忆建模。想真正建立记忆体系,最终还是要迁移到间隔重复工具上。
结论其实不复杂:墨墨、百词斩解决的是"开始背"的问题,Anki 解决的是"记得住"的问题。2026 年的工具混战里,商业产品在运营与体验上攻城略地,而 Anki 始终站在工程侧——算法开源、数据自有、接口开放、同步自主。对把学习当作系统工程来对待的程序员来说,这不是情怀选择,而是唯一符合工程约束的理性选择。
【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考