WRITING
我给儿子做了个「资产盘面」:83 条家规变成一个会涨跌的账本

贴纸和小红花的问题不是不管用,是攒不住。
攒到第十七张就没人记得第一张是为什么给的,更没人记得上周到底是涨了还是跌了。 孩子看不见自己在变好,只看得见今天有没有拿到那一张。
所以我把它做成了一个账本 —— 每一笔加分扣分都有事由、有时间、有当时的余额, 攒起来的那个总数摆在最上面,像看盘一样。他现在每天回家自己点开看涨了多少。
一、打开是这样

页面顶上是一幅「家」的场景 —— 一共 11 档,从破帐篷一路到金碧辉煌的宫殿, 住哪一档只看总市值:挣分升级,花分回落,没有购买、没有解锁。 底下那行永远写着「还差 N 分升级到下一档」,升档的那一刻会弹「🎉 乔迁新居」。 这是财富的诚实具象化 —— 数字还太抽象的年纪,房子看得懂。
家的下面是大数字:总积分、今天涨了多少、涨了百分之几、折合多少钱, 以及一个「历史新高」的标记 —— 破了自己的记录就会亮出来。
再往下是三十天的走势。这条线是这套东西真正起作用的地方:单看今天加了 10 分没什么感觉, 看见这条线从月初一路爬到现在,感觉完全不一样。 点一下总市值还能重放一遍:

再往下按学科拆开,语文挣了多少、体育挣了多少一目了然。哪一栏一直是矮的,不用说他自己也看得见。
二、一次完整的加分是怎么走的
分不是随手给的,是照着一张表给的。家里本来就有一张《积分条例》, 语文数学英语科学体育小号道法劳动一直到「爸爸特别奖励」,奖分扣分都写着。 我把那张表整个搬进了系统 —— 83 条规则,一条不改,一条不漏。

打开「给他加分」,第一眼是锁着的。规则能看,加不了 —— 要先输家长密码。

解锁之后整面墙铺开。每条规则一个按钮,点一下就记上。 按钮上那些小标签是这条规则怎么算的:
| 标签 | 什么意思 | 例子 |
|---|---|---|
| (无) | 固定分,点一下就记 | 听写全对一次 +10 |
按个数 | 你填个数,按个算 | 听写错字 −1/个 |
自己填 | 表里给了区间,你在区间里定 | 诗歌小古文背诵 10~50 |
算一下 | 有档位,填完自动算 | 跳绳、仰卧起坐、考试 |
换时间 | 换的不是分,是看电视的时间 | 认识生字 +1 分钟/2 个字 |
「算一下」这类最能说明问题。原表里跳绳写着七个档位,末尾一句「不重复累计」:

填「跳了 3 组、每分钟 190 个」,它自己算出 +120 分, 并且告诉你为什么是 120 —— 「3 组 190 个以上」这一档。 不用去翻表,也不用担心把 180 那一档和 190 那一档记混。
落账那一下是这样的 —— 彩带满屏、加分飘字、余额当场更新:

三、这本账,防刷分也防赖账
一个能自己给自己加分的积分系统,第二天就会变成刷分游戏。所以这几条是硬的:
| 会发生的事 | 它怎么处理 |
|---|---|
| 孩子拿到已登录的平板,自己加分 | 加分要家长密码,而且每次现输。孩子这边登录多久都加不了一分 |
| 分不够还想换东西 | 换不了,卡片上写着「还差 N 分」 |
| 靠刷题无限挣分 | 做题挣的分服务端每天封顶 30,前端报多少都不算数 |
| 一道题不做直接交卷 | 不给分 |
| 记错了、点错了 | 每条流水后面有「撤销」—— 那笔直接删掉,分数回去,曲线上不留痕迹(后台留底,家长查得到) |
| 扣分扣成负数 | 允许,欠着下次挣回来 —— 表里的扣分条款就是这么定的 |
撤销这条,我们改过一次主意。一开始做的是会计那套「红冲」:撤销不删记录, 反向再记一笔冲掉。上线一用就发现不对 —— 记错的那笔和它的红冲会在孩子的走势线上 凿出一对毛刺,像他真的大起大落过一样。现在撤销就是真删(后台 deleted 区留底): 审计的痕迹留给家长,干净的曲线留给孩子。
反过来,每一分是怎么来的,也都查得到:

每一笔都有时间、有事由、有当时的余额。不是「你有 1440 分」, 是「8 月 8 号爸爸特别奖励 +300,余额从 1080 变成 1380」。
余额这一列不是单独存的一个数字,是从流水一笔一笔加出来的。 所以账本和余额永远不可能对不上 —— 对不上的账本比没有账本更糟。 上面还能筛「只看加分」「只看花掉的」,想知道这个月钱都花哪儿去了,一点就出来。
四、快到手的那一件,一直摆在眼前

商店里 12 件东西,从 150 分的「多看一集动画」到 20000 分的「一次短途旅行」。 买得起的亮着,买不起的灰着 —— 但灰的那些写着还差多少分。
图里这个状态是我特意摆出来的,因为它是这套东西最有效的一屏: 「满足一个心愿」1500 分,还差 60 分。
60 分是什么概念?听写全对一次 +10,洗全家碗筷 +10,晨跑半小时 +20。 也就是说今天再做几件事就够了。这比「继续加油」有用得多。
真换到手那一下,也要风光 —— 祝贺横幅加彩带。攒了几个星期换来的东西, 兑现的瞬间就该像个仪式,而不是账本上冷冰冰扣一笔:

五、研究和成熟 App,都指向同一件事
攒分换奖励不是我发明的,它在心理学里有个正式名字,叫代币制 —— 先给一个能攒的中间物(分数、贴纸、筹码),攒够了换真正想要的东西。 1968 年两位行为心理学家 Ayllon 和 Azrin 把它做成第一套完整系统并写成了书 (The Token Economy), 之后半个多世纪,它一直是教育研究里被反复测量的对象。
它到底管不管用,是有数的。研究里衡量「管不管用」的尺子叫效果量 —— 0.2 算小,0.5 算中,0.8 以上算大:

- 汇总 28 项小学课堂研究(1980–2014)的元分析算出平均效果量 0.82 —— 到了「大」这一档; 而且 6–15 岁的孩子比 3–5 岁效果更好,正好覆盖小学 (Soares 等,School Psychology Review,2016)。
- 另一篇汇总 2000–2019 年 24 项研究的综述结论一样: 普通班和特教班都是大效果。
- 范围再放宽到游戏化(把分数、勋章、关卡这些游戏零件搬进学习): Sailer 和 Homner 2020 年的元分析给出的数是 —— 对成绩 0.49、对动机 0.36、对行为 0.25。有用,但没到魔法的程度。
- 规模上的旁证:美国 95% 的 K-8 学校在用 ClassDojo —— 它本质就是老师手里的加分器。
丑话说两句:课堂那几篇是小样本研究攒出来的(28 项研究合计才 90 个孩子), 数字别当精确值看,方向一致才是重点。而且 Sailer 那篇特意指出: 光发分数和勋章,效果最弱;配上清晰的目标和够得着的挑战才强。 这正是「资产盘面 + 走势线 + 还差多少」想比「一张分数表」多做到的那部分。
但这套东西有一个研究得同样充分的坑:奖励会把本来就有的兴趣弄没。 1973 年斯坦福那个著名的幼儿园实验 (Lepper、Greene 和 Nisbett): 本来就爱画画的孩子,提前告诉他「画了有奖状」, 拿完奖之后自由活动时间里画画的时间掉了差不多一半 —— 奖励把「我想画」偷换成了「我为奖状画」。
1999 年 128 项实验的元分析 (Deci、Koestner 和 Ryan,Psychological Bulletin)确认了这件事, 也把边界画清楚了:侵蚀发生在本来就有兴趣的事上; 对本来就不爱干的事(订正作业、收拾书桌、每天跳绳),没有兴趣可供侵蚀; 口头表扬不但不侵蚀,还略有增益。
对着这条边界看这张规则表:分的大头落在习惯和任务上; 「得赞 / 被表扬」这类条目,记的是表扬这件事本身,分数只是把它记下来。 汇率压到 100 分 = 1 元也有这层考虑 —— 钱味越淡,分数越像「你做到了」的记号,越不像工钱。
产品这边我也翻了翻把「让人天天来」做到极致的那几个,挑两个最值得抄的。 多邻国把「连续打卡」做成了公司级的核心功能,官方博客给过数: 连续学满 7 天的用户,完成整门课程的概率是别人的 3.6 倍; 光是给连击数字加一段庆祝动画,新用户 7 天后还在用的比例就多了 1.7%。 它的心法就一句:让进度看得见,让人舍不得断。 ClassDojo 的心法则是当场加分:行为发生的那一刻老师手机上点一下, 孩子立刻看到,家长同步看到 —— 反馈隔得越久越没用。
| 它们的做法 | 搬进这套系统的样子 |
|---|---|
| 多邻国:连击数字 + 里程碑庆祝 | 走势线 + 「历史新高」标记;配套的练习站里有连续天数打卡 |
| 多邻国:每日任务永远写着「还差 N 题」 | 商店卡片写着「还差 60 分」,够得着的目标一直摆在眼前 |
| 多邻国:断签可以用道具续上 | 没抄。 扣分就是扣分,账本不粉饰 —— 但欠着可以挣回来 |
| ClassDojo:当场加分,家长同步 | 规则墙一点就记上,全家看同一份流水 |
| 两家都有:虚拟货币 + 兑换商店 | 三种币(积分 / 电视时间 / 心愿),走同一条流水线 |
也有明确不抄的:多邻国的排行榜没有搬 —— 家里就一个孩子, 他要比的对象是上个月的自己,那条走势线就是他的排行榜。
六、想用的话,以及给同行的几句
这套东西跑在我自己的服务器上,这篇不放地址 —— 里面是一个具体的小孩的账本、他的错题和他的试卷。 前阵子刚把它改成了多账号:每人一本独立的账,做题进度也跟着账号走,换设备不丢。 想试的话跟我说,可以给你开一个账号,也可以帮你搭一份完全自己的 —— 一张你家自己的规则表,一个你自己的账本,数据在你自己手里。 我这份是从家里现成的 Excel 一条条搬进去的。
现在有什么。口径:下面数的是规则表和商店的条目数, 不含系统自带的机制(做题积分、每日上限、撤销这些不算规则),也不含练习平台那边的题库:
| 项 | 数量 | 说明 |
|---|---|---|
| 规则 | 83 条 | 全部来自家里那张表,逐条搬进来的 |
| 覆盖学科 | 9 门 | 语文 28 · 数学 13 · 劳动 10 · 英语 9 · 体育 8 · 道法品德 7 · 小号 4 · 日常 3 · 爸爸特别奖励 1 |
| 其中扣分条款 | 23 条 | 奖分扣分并列,不是只报喜 |
| 规则形态 | 5 种 | 固定分 49 · 家长填区间 17 · 按个数 9 · 档位计算器 5 · 换电视时间 3 |
| 档位计算器 | 5 个 | 跳绳 · 仰卧起坐 · 语文考试 · 比上次进步 · 作文字数 |
| 兑换商品 | 12 件 | 150 分(多看一集动画)到 20000 分(一次短途旅行) |
| 货币 | 3 种 | 积分 · 电视时间 · 心愿,走同一条时间线 |
| 汇率 | 100 分 = 1 元 | 表里原写 10:1,按表里的分值估下来约 1700 分/月,那就是 170 元/月,判定偏高,压了十倍 |
还空着的:规则表里「科学」这一栏一条规则都没有 —— 家里那张表就没写。 首页那张卡会一直显示 0,等补。
给同行的几句。零第三方依赖:服务端是一个 Python 标准库写的 HTTP 服务,
静态文件和接口都归它发,数据是一个 JSON 账本文件,整套东西一条 pip install 都没有。
几条自己觉得值得说的约束:
- 登录门在应用层,不在 nginx。 用
auth_request的话,登录门在本地根本测不到,等于没有门。 现在本地起一份就能跑同一条路径,冒烟测的是真的那道门。 - 家长密码不发 cookie。 这是有意的:能自己给自己加分的积分系统当场失效。
- 分值一律服务端算,页面预览和真正记账是同一个函数。 两边各算各的, 迟早算出不同的数,而家长看到的是预览、孩子拿到的是记账。
- 档位表达式用
ast白名单求值,绝不用eval。 表达式来自配置文件 ——eval等于把任意代码执行权交出去。 - 余额永远从流水现算,不单独存一个数。 单独存的 balance 字段迟早和流水漂移。 撤销是真删 + deleted 区留底 —— 对账能力给家长,零痕迹的曲线给孩子。
- 每个分值都能在原表里指出出处。 原表没给的(比如「其他酌情加分」没给数), 必须在那条规则上标明「这个值是我们定的」—— 有一道机器门盯着,标不出来就红。
关于这些图
全部是真页面跑真操作截下来的,不是画的示意图:起一个真的服务端、真的登录、 真的点解锁和点规则。图里的账本是造出来的演示数据,一个字节真实账本都没有: 服务端跑在临时目录里,跑完就没;规则和商品全从产品自己的配置现取,取不到就报错退出,不编。 唯一一张画出来的图是第五节那张研究数据图,数字逐个对过原文。
相关文章
订阅
新文章都先发在这里。用 RSS 订阅: /feed.xml