不用排课的打字练习:Happy Path Input 的设计思路
键盘配列、双拼、五笔都在练同一件事:把“看到的”变成“按下的”。这篇讲 Happy Path Input 为什么把练习拆成按键映射、怎样用 FSRS 安排复习,以及哪些事它还做不到。
大多数打字练习软件,都把“练什么、练多少、什么时候复习”留给使用者自己决定。选一篇文章,打完,看一眼速度,下次再来。可真正难的恰恰是这些决定:哪几个键还没记住,哪个双拼韵母总是想半天,昨天学的五笔字根今天还剩多少。
Happy Path Input 的目标只有一句话:让你不受打扰地把一种输入方式练成。 打开页面,选一门课,开始打字;剩下的安排交给程序。下面是我们为此做的几个取舍。
打开就练,界面不抢注意力
练习页只保留三样东西:大号的目标文字、标出下一个键的键位图、一条安静的状态栏。开始打字后,状态栏和页脚会淡出。
- 答对自动进入下一题,不需要按回车,也不需要给自己打分。
- 回到首页按 Enter,直接从上次的课程继续。
- 按 Esc 暂停;切到别的窗口时会自动排除这段时间。
我们删掉了大部分徽章、动画和说明文字。判断标准很简单:一个元素如果不能帮你更快练会,它就不应该出现在练习页上。
把四件事分开:键盘、配列、方案、语料
“学打字”其实混着四个不同的问题:
- 物理键盘形态:ANSI、ISO、JIS 的主键区不一样,JIS 多出几个键,ISO 左下角多一个键。
- 字符配列:同一块键盘,按 QWERTY、Dvorak、Colemak 或德语 QWERTZ 理解,每个位置输出的字符不同。
- 输入法方案:全拼、小鹤双拼、五笔 86 规定的是“一个音或一个字该按哪些键”。
- 练习语料:用什么字词和句子来练。
把它们混在一起,就会出现一些奇怪的错误。比如有 JIS 键盘不等于开启了假名直输;用 US 键盘也完全可以练日语罗马字输入。所以项目里四者分开建模:你在首页选一次键盘形态,所有课程共用;缺少对应实体键的练习项会被自动排除,而不是假装你按得到。
练的是映射,不是题目
一道题只是载体,真正要记住的是映射。双拼里,zh → v 和 ui → v 是两项不同的技能,即使按的是同一个键;而 a → a 这类读音和键位一样的,不单独占用练习。五笔里,每一个编码键都归到它所代表的字根。
每次按键,我们都记下它属于哪个映射、按对没有、有没有看提示、用了多久。一个映射的熟练度由三部分相乘:
- 最近的准确度:越近的按键权重越大;看着提示按对,最多只能证明到 75%。
- 相对你自己的速度:跟你按普通字母的节奏比,而不是跟别人比。犹豫的那几百毫秒,就是回忆的成本。
- 还记得的概率:来自 FSRS 记忆模型,随时间缓慢下降。
出题时,程序只问一件事:现在练哪个映射最值?没学过的尽快引入,但同时“正在学”的映射最多三个;没练熟的放进字词里反复出现;已经掌握、还没到期的,不再占用你的时间。
为什么用 FSRS,以及我们怎么用它
FSRS 是一个开源的间隔重复算法,最初为记忆卡片设计,能根据你每次回忆的表现估计“多久以后会忘”。在这里,每个映射对应一张 FSRS 卡片:
- 按错记作 Again;看提示按对记作 Hard;独立按对记作 Good;明显慢于你自己的节奏记 Hard。
- 同一天里的反复练习不会刷高长期稳定性。 短时间连打十遍只能说明你现在记得,不能说明一周后还记得;只有到期复习和按错,才会更新卡片。
- 卡片到期时,对应映射重新获得最高优先级。
需要说清楚的是:FSRS 是为记忆设计的,打字还包含运动技能。把它用在按键映射上是我们的产品判断,不是算法本身的保证;熟练度是安排练习用的估计,不是测验成绩。模型参数目前是对着模拟的学习者调出来的,还没有真实用户数据验证。所以我们不承诺多少天学会,也不承诺提速多少倍。
五笔,为什么从《论语》《诗经》开始
五笔入门最劝退的是字根表:一百多个字根,背了不知道有什么用。我们的做法是倒过来,先确定要读的文本,再决定字根的顺序:
- 约 130 个字根,按“学会后能多打出《论语》《诗经》里多少字”排序;
- 25 个一级简码;
- 两部书里最常用的 238 个字的全码(大约覆盖正文的七成),以及 702 个四字句。
四字句节奏整齐,每一句都是一次完整的小练习。手写的拆字会和 rime-wubi 的全码逐一核对。这门课目前还不包含二级简码和词组,所以它是五笔入门,不是完整的五笔课程。
进度只属于你
所有练习记录都保存在你浏览器的 IndexedDB 里:不需要注册,不上传服务器。首页可以导出备份文件,换电脑或换浏览器时再导入。代价是记录跟着浏览器走;清除网站数据之前,记得先备份。
还做不到的事
- 没有 JIS 假名直输,也没有完整的日语汉字转换;那部分用系统输入法实战。
- 系统输入法不会暴露候选过程,所以在“实战”课程里,我们只能看到上屏结果,无法判断你具体哪条组字规则出错。
- 熟练度模型还很年轻,参数会随着真实使用继续调整。
如果你也受够了“自己给自己排课”,可以直接选一门课开始。