本节摘要:经验值不按时长结算,按有效练习结算——题目难度必须落在"学习区",必须有即时反馈,必须针对薄弱点。本节讲三区的判定、练习日志的记法,以及把"刷题"从数量导向改成弱点导向的完整流程。
经验值系统的第三颗天赋:前两节解决了输入汇率和记忆保值,本节解决"练什么、练多难"。这颗天赋点亮的标志是——你不再问"今天刷了多少题",而开始问"今天哪个弱点被消灭了"。
练习科学里有个被反复验证的划分:把任务难度相对你的水平分成三个区。
多数"越学越没进步"的现象都能在三区模型里找到解释:长期待在舒适区(反复做已经会的题型),或者反复冲恐慌区(基础未稳就去碰竞赛级难题),两者共同点是学习区一片空白。
自我判定的操作方法:拿十道目标难度的题做一遍,做对且用时正常的算舒适区,做错但看懂解析的算学习区,连解析都看不明白的算恐慌区。这个比例每周重测一次,它就是你的"练级地图"。

把"一般练习"升级成"刻意练习",缺一不可的四个要件:
刻意练习需要数据支撑,工具就是一份练习日志。每天一行,五个字段:
日期 题目/任务 难度判定 结果 弱点标签 09-01 统计词频 学习区 错 字典get默认值 09-02 统计词频变体 学习区 对 - 09-02 反转链表 恐慌区 弃 指针操作不熟 09-03 两数之和 学习区 错 哈希思路没想到 09-04 两数之和重做 学习区 对 -
一周后统计这份日志,用脚本算出各弱点标签的错误率:
from collections import Counter log = [ ("字典get默认值", 1), ("指针操作不熟", 1), ("哈希思路没想到", 1), ("哈希思路没想到", 1), ("字典get默认值", 1), ("字典get默认值", 0), # 0 表示已消灭 ] active, cleared = Counter(), Counter() for tag, wrong in log: (active if wrong else cleared)[tag] += 1 print("活跃弱点(按频率):") for tag, n in active.most_common(): print(f" {tag}: 出现 {n} 次") print("已复核通过:", dict(cleared))
活跃弱点(按频率): 哈希思路没想到: 出现 2 次 字典get默认值: 出现 1 次 指针操作不熟: 出现 1 次 已复核通过: {'字典get默认值': 1}
下周的选题就照着这份统计来:频率最高的活跃弱点配最多题量,已消灭的标签不再重复投入。这就是"数量导向"到"弱点导向"的切换开关——练多少由日志决定,而不是由打卡的天数决定。
背景:小赵给自己定的目标是每天三道算法题。坚持了一个月,题量完成了,但同一类哈希题错了四遍。
操作:他停掉数量目标,翻出一个月的做题记录打上弱点标签,发现错误集中在两类:哈希思路、边界条件。他把每天三道改成"哈希思路两道加边界专项一道",并规定同类题连对三次才能换标签。
结果:两周后哈希类题目的正确率从一半不到升到基本稳定做对,总题量反而比之前少了一半,用时也短了。
解读:进步来自"重复命中同一个弱点直到消灭",而不是题目的横向铺开。日志在这个模式里是决策依据——没有它,你只能感觉到"好像练了很多",看不到"弱在哪、消灭没消灭"。
变式:这个框架不限于算法题。学框架时把"做一个功能"当题目,学语言时把"写一个小工具"当题目,同样记录结果与弱点标签,同样按标签集中突破。
⚠️ 常见坑:把"做题时长"当KPI。坐满两小时但都在舒适区刷手感,日志上全是"对",看起来很美,实际收益接近于零。日志里真正值钱的是"错"的那几行。
刻意练习的框架定了,具体到不同学习目标,配方可直接参考:
语法内化期(入门头几个月):题目形态是"二十行内的小程序",来源可以是教程习题自改或自命题。每天二十到四十分钟,重点是把弱标签逐个消灭,量不重要,标签清零才重要。
解题能力期(准备面试或竞赛):题目形态是算法题,但要严格按学习区选题——用通过率或自己的历史正确率筛出六到八成把握的题。每题必走完整循环:先独立思考二十分钟,卡住看一条提示而不是完整解析,解出后必须复盘"卡住的那步本质缺什么",记入标签。
项目能力期(第三章的主场):题目形态升级为"给现有项目加一个功能"。刻意练习的成分体现在功能的选择上——每个新功能应该引入一个你不会的知识点,纯复习型功能(重复用已会的技能)属于舒适区,可以用来攒信心但别当成主菜。
三个阶段的共同纪律只有一条:练习结束的标志不是时间到,而是当日弱标签的题目连对三次。时间到了但没连对,加练一刻钟;提前连对,提前收工。练习时长服从于目标,而不是反过来。