
「不想上学」很少是突然发生的。更多时候是先没动力、再写不进作业、然后开始找借口请假,最后才说出那句「我不去了」。中间这段下滑期,家长往往看得到现象、拿不准程度——今天多睡了半小时,算不算?连着三天说累,要不要管?
这篇给一套工程化的做法:把「还想不想学」拆成五个可观察量,按时间维度分绿、黄、红三档,配一张一周看板。它不诊断、不打分,只回答一个问题:这个孩子现在在第几档,下一步该做什么。
学心四力里的生命力,指孩子还想学、还觉得学习跟自己有关的那点活气(抗挫与恢复也在它身上);生命力不是一天掉下去的,家庭土壤里家长的回应方式是最先能量测的那一格。
树的比喻在这里很直接:叶子枯了,整棵树都蔫。孩子摔了能不能爬起来、难了还愿不愿意长,就是生命力的状态。它掉下去的过程是渐变的,所以能被观测、被记录、被分级——这正是工程化能帮上忙的地方。
分数的问题在于它假装精确。「状态 62 分」这种数字既说不清怎么算的,也定不了下一步。换成可观察量就清楚了——每个量都只记事实与时间:
可观察量 | 看什么 | 记录单位 |
|---|---|---|
上学意愿 | 起床后对上学的反应 | 每天一次记录 |
作业启动 | 当天是否动笔、启动用了多久 | 每天一次记录 |
睡眠与食欲 | 入睡时间、饭量变化 | 每天一次记录 |
情绪持续天数 | 低落或易激惹连着几天 | 连续天数累计 |
被拒后的恢复时长 | 被拒绝或受挫后多久缓过来 | 单次分钟数 |
这五个量的共同点是当场可看、不需要孩子配合打分。家长看一眼就能记,孩子也不用被追着问「你今天状态怎么样」。
分级不用分数,用时间。这是刻意的:情绪起伏人人都有,只有「持续多久」才把正常波动和下滑区分开。
档 | 判定 | 该做什么 |
|---|---|---|
绿档 | 单日波动,次日恢复 | 正常陪伴,照常记录 |
黄档 | 同一信号连续 3 到 5 天 | 加大支持,启动小步训练 |
红档 | 同一信号持续两周以上,或拒学反复出现 | 走专业评估,医院优先于陪跑 |
判定逻辑写成代码就是一个持续天数的闸门:
from dataclasses import dataclass, field
from enum import Enum
class Signal(Enum):
WILL = "上学意愿"
START = "作业启动"
SLEEP = "睡眠与食欲"
MOOD = "情绪持续天数"
RECOVER = "被拒后恢复"
@dataclass
class DayLog:
date: str
will_ok: bool
started_homework: bool
sleep_ok: bool
mood_low: bool
recover_minutes: int
@dataclass
class WeekBoard:
days: list = field(default_factory=list)
def consecutive(self, flag) -> int:
n = 0
for d in reversed(self.days):
if flag(d):
n += 1
else:
break
return n
def grade(self, recover_threshold: int = 120, recover_hits: int = 3) -> str:
"""五路信号取最高档:前四路看连续天数,第五路看 7 天窗口内的事件次数。"""
mood_days = self.consecutive(lambda d: d.mood_low)
refuse_days = self.consecutive(lambda d: not d.will_ok)
start_miss = self.consecutive(lambda d: not d.started_homework)
sleep_bad = self.consecutive(lambda d: not d.sleep_ok)
recover_events = sum(1 for d in self.days[-7:]
if d.recover_minutes >= recover_threshold)
if max(mood_days, refuse_days, start_miss, sleep_bad) >= 14:
return "红"
if (max(mood_days, refuse_days, start_miss, sleep_bad) >= 3
or recover_events >= recover_hits):
return "黄"
return "绿"注意 grade 里没有任何分数运算,只有连续天数与事件次数的比较。绿黄红的边界是 3 天和 14 天,不是 60 分和 80 分——前者能被日历核对,后者只能被质疑。
五个信号在 grade 里各就各位:上学意愿、作业启动、睡眠与食欲三个是连续天数闸门(连缺连差满 3 天进黄档、满 14 天进红档,同一套日历判据);被拒后的恢复时长不一样——它是事件型信号,单次很长可能只是当天恰好摔了一跤,所以它不看连续、看频次:近 7 天窗口内恢复时长超过阈值的次数。阈值(示例 120 分钟、3 次)是家长按自家基线自定的参数,不是医学标准——孩子平时摔一跤十分钟就能缓,连续一周每次都要一小时以上,这本身就是趋势。grade 返回的是五路信号的最高档:任何一路进红,整体就是红。
看板不只记孩子。家长侧的回应方式和孩子的状态并排记,因为这两个量本来就互相牵动:
日期 | 上学意愿 | 作业启动 | 情绪低落 | 恢复分钟 | 家长当天的回应方式 |
|---|---|---|---|---|---|
周一 | 去了 | 动笔 15 分钟 | 否 | 20 | 催了两次 |
周二 | 去了 | 没动笔 | 是 | 60 | 陪坐但没说话 |
周三 | 请假 | 没动笔 | 是 | 120 | 没有批评,谈了谈 |
最后一列是家庭土壤的读数。孩子连着黄、家长连着催,这个组合比单看孩子更能预判走向。看板的作用就是把这两条线画在同一张纸上,趋势自然显形。
这张表要能长期跑,还得解决两个工程问题:数据放哪、周报怎么出。
持久化:看板不必上数据库。一天一条记录、一周一张表,用最朴素的 CSV 就够——week_log.csv 五列固定(日期、五个信号位),追加写入、永不改历史行;改历史行会让「连续天数」失真,这是整套判据的根基。真要做电子版,把 CSV 路径交给脚本读入 DayLog 列表即可,grade() 对数据来源无感知——它只认「按日期有序的记录序列」,这也是把判定逻辑写成纯函数的好处:存储换三遍,判定一行不改。
周报生成:每周日晚上跑一遍 grade(),把结果追加进 week_report.csv(周次、各信号连续天数、恢复事件次数、档位)——注意周报里存的是这周的读数,不是结论句。三个月后你想回看「状态是从哪周开始变的」,靠的是这些数字列自己排出趋势,而不是当时写下的一句「本周还行」。判断会过期,读数不会。
这是整套设计里最重要的一条:红档不是「加大陪跑力度」的信号,是转专业评估的信号。 时间维度上两周不恢复,说明这已经超出家庭方法能覆盖的范围。文末的医学转介声明不是免责套话,是这张表的出口定义——表做得再精细,出口错了就全盘皆输。
工程上这条同样成立:任何监测系统都必须给「超出处理能力」的分支留出口,而不是把所有异常都留在自己手里硬扛。
在学科极度内卷的形势下,额外给孩子增加一个竞争优势,靠的不是再多报一门课——而是比别人家更早看见下滑、更早把支持给到。这张表买的就是这个「更早」。
问:孩子情绪波动很正常,会不会被这张表误判成红档?
不会。红档的门槛是「同一信号持续两周以上」或「拒学反复出现」,单次发脾气、单日低落连黄档都进不了。时间维度的设计就是为了滤掉正常波动。真正要防的反方向错误是:孩子已经连着两周不对,家长还拿「谁都有心情不好」自我安慰。
问:五个量里哪几个最值得优先盯?
情绪持续天数和上学意愿这两个最值得优先。它们一个管深度、一个管行为后果,任何一项连续恶化都值得认真对待。恢复时长也敏感,但记录成本高一些,可以只在受挫事件后记。
问:看板要记多久?
至少记满两周才看得出趋势,这也是黄档判定的最小窗口。进入稳定期后降频到每周抽查三天就行,不用一年到头天天记。
作者:学心四力教研团队
医学转介声明(必读)
本文为家庭教育与学习状态的经验分享,不构成医疗或心理诊断,也不替代专业治疗。若孩子出现持续两周以上的情绪低落或易激惹、睡眠与食欲的明显改变、拒绝上学、反复躯体不适或自伤念头,请优先带孩子到正规医疗机构的精神科或儿童青少年心理门诊做专业评估,不要仅依赖课程或陪伴服务。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。