【信奥教练心得】AI替你思考,但替不了你记住——让学生上黑板画知识图谱
【信奥教练心得】AI替你思考,但替不了你记住——让学生上黑板画知识图谱

目录
- 📖 引言:AI给了答案,但带走了什么
- 🗺️ GESP大纲:现成的压缩包
- 🔢 背数字:校验码思维
- 📝 上黑板展开:从词到细节
- 👥 真实课堂:两个学生的故事
- 🧠 为什么有效:不是凭感觉
- 📂 大题错误点整理:图谱管学了什么,错题管做错什么
- 🌉 结语:装一个目录,受益终身
📖 引言:AI给了答案,但带走了什么
最近有一个话题很热:AI会不会让我们变笨?
不是危言耸听。2025年麻省理工学院媒体实验室发布了一份205页的研究报告,通过脑电图扫描发现:长期使用AI大语言模型的人,大脑神经连接数降低,批判性思维、记忆力和创造性思考能力都出现系统性下降。更令人不安的是,斯坦福与MIT的联合研究发现,连续12周依赖AI完成核心认知任务的成年人,前额叶皮层的神经激活强度显著降低——停用AI三个月后,多项认知指标仍未完全恢复。
英国一项覆盖666人的研究更直接:频繁使用AI工具的人,批判性思维得分显著更低,相关系数达到-0.68——在行为科学里,这个数字大得惊人。
这些研究的共同结论可以用一个词概括:认知外包(Cognitive Offloading)。搜索引擎让你外包了事实记忆——你不记得电话号码了,但你知道怎么搜。而AI让你外包了更深层的东西——推理、判断、组织思路。你不只是记不住答案了,你是连"怎么想到这个答案的"都记不住了。
这跟编程教学有什么关系?关系太大了。
现在一个学生写不出代码,他不需要问老师,不需要翻教材,甚至不需要思考——打开AI,输入题目,完整代码就出来了。他的程序能跑,他的成绩可能还过得去。但他脑子里有什么?什么都没有。 代码是AI生成的,逻辑是AI搭建的,调试是AI完成的。他只是一个搬运工,把AI的输出搬到提交框里。
这就是认知外包在编程教学中的具体表现。AI替他思考了,但思考的过程没有在他的脑子里留下任何痕迹。
你可能会说:那不正好?AI能做的事为什么要自己做?
因为工具能替代的是输出,不能替代的是内化。一个外科医生可以用机器人做手术,但他脑子里必须有完整的解剖学知识结构——哪根血管在哪、哪条神经不能碰——否则他连机器人的操作对不对都判断不了。同样的道理,一个学生可以用AI写代码,但他脑子里必须有完整的知识结构——什么时候用循环、什么时候用递归、边界条件怎么处理——否则他连AI写的代码对不对都看不出来。
那么问题来了:在AI时代,怎么让学生脑子里真正建起知识结构?
答案是我一直在做的一件事:让他上黑板,凭记忆画出完整的知识图谱。
AI给不了他这张图。因为这张图不是"知道答案",是"自己把知识组织过一遍"。你问AI"C++三级有哪些知识块",它一秒钟就告诉你。但你问学生,他不看任何资料能不能画出来——这才是检验。
回到一个更基本的问题。我经常问学生:
“这半年你学了什么?”
他们的反应通常是:愣住,眼睛往上翻,然后挤出来几个零散的词——"数组?循环?呃……排序?"然后就开始说具体题目了:“做了那道密码合规的题……”
他能说出做了哪道题,但说不出学了哪些知识。题目记得住,体系记不住。
在AI时代,这个问题比以前更严重了。以前学生至少还得自己写代码,写的过程中知识会被反复触碰。现在连写代码这一步都可以外包给AI了——如果他自己脑子里没有目录,他连AI写的代码是好是坏都分辨不了。
知识在大部分学生的脑子里是散着放的——像一堆文件扔在桌面上,没有文件夹,没有分类,没有目录。你问他某个知识点,他可能还记得;你问他"你现在会的东西一共有哪些板块",他答不上来。
问题出在哪?不是学得不够,是脑子里没有目录。
一本书如果没有目录,你翻找内容只能一页一页翻。但如果有目录,你扫一眼就知道第几章讲什么、每章有几节、节和节之间是什么关系。脑子里也一样——有了目录,知识就能归档,需要的时候能提取,不需要的时候不占地方。
这篇文章,我来讲一个做法:让学生背GESP知识图谱,上黑板画出来,再用数字校验完整性。 看起来是在背编程知识,实际上是在训练一种在AI时代尤其重要的能力——自己把散落的信息压缩、组织、存储、还原。 AI能帮你查,但不能帮你记。能帮你生成,但不能帮你内化。
🗺️ GESP大纲:现成的压缩包
我不需要自己编知识结构。CCF的GESP(编程能力等级认证)已经做好了——每一级都有一张官方的思维导图,把该级别的知识压缩成几个核心词汇。
我把一到八级的知识块数量列一下:
| 级别 | 知识块数 | 核心词汇 |
|---|---|---|
| 一级 | 7 | 计算机基础知识、集成开发环境、结构化程序设计、程序的基本语句、程序的基本概念、基本运算、基本数据类型 |
| 二级 | 8 | 计算机存储与网络、程序设计语言、流程图、ASCII编码、数据类型转换、多层分支结构、多层循环结构、数学函数 |
| 三级 | 6 | 数据编码、进制转换、位运算、算法与描述、一维数组、字符串及其函数 |
| 四级 | 8 | 函数、C++指针、二维及多维数组、递推算法、排序算法、文件操作、异常处理、Python复合类型嵌套 |
| 五级 | 8 | 算法复杂度、二分算法、分治算法、贪心算法、递归算法、初等数论、高精度运算、链表 |
| 六级 | 6 | 树、基于树的编码、搜索算法、简单动态规划、面向对象、栈和队列 |
| 七级 | 5 | 数学库函数、复杂动态规划、图的定义及遍历、图论算法、哈希表 |
| 八级 | 8 | 计数原理、排列与组合、杨辉三角、倍增法、代数与平面几何、图论算法及综合应用、算法优化、时空效率分析 |
你看,每一级就那么几个词。三级6个,四级8个,七级只有5个。
但这几个词不是随便压缩的。每一个词背后都展开一座冰山。

我拿三级来举例——学生上黑板画"位运算"这个块时,要能展开到这种程度:
// 位运算展开:6种运算
int a = 12; // 二进制: 1100
int b = 10; // 二进制: 1010
cout << (a & b) << endl; // 与: 1000 = 8 两个都为1才为1
cout << (a | b) << endl; // 或: 1110 = 14 有一个为1就为1
cout << (a ^ b) << endl; // 异或: 0110 = 6 不同为1
cout << (~a) << endl; // 非: 取反
cout << (a << 2) << endl; // 左移: 110000 = 48 相当于乘4
cout << (a >> 1) << endl; // 右移: 110 = 6 相当于除2
// 实际应用:用位运算判断奇偶
int n = 7;
if (n & 1) cout << "奇数" << endl; // 7 & 1 = 1
else cout << "偶数" << endl;
再比如"进制转换",展开是这样的:
// 进制转换展开
// 十进制 -> 二进制
int n = 13;
cout << bitset<8>(n) << endl; // 00001101
// 二进制 -> 十进制
string bin = "1101";
int dec = 0;
for (int i = 0; i < bin.size(); i++) {
dec = dec * 2 + (bin[i] - '0');
}
cout << dec << endl; // 13
// 十进制 -> 十六进制
cout << hex << 255 << endl; // ff
// 十六进制 -> 十进制
cout << dec << 0xff << endl; // 255
“一维数组"展开后也不止是"声明一个数组”:
// 一维数组展开
int arr[5] = {3, 1, 4, 1, 5};
// 遍历
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
// 求最大值
int maxVal = arr[0];
for (int i = 1; i < 5; i++) {
if (arr[i] > maxVal) maxVal = arr[i];
}
cout << "max = " << maxVal << endl;
// 求和
int sum = 0;
for (int i = 0; i < 5; i++) sum += arr[i];
cout << "sum = " << sum << endl;
// 逆序输出
for (int i = 4; i >= 0; i--) {
cout << arr[i] << " ";
}
这几个词就是压缩包,学生脑子里存的是压缩包,需要的时候解压展开。 存的时候只需要几个词,用的时候展开成完整的代码和原理。这比死记几十个零散的知识点高效得多。
考到几级,就背到几级。不多不少。
🔢 背数字:校验码思维
光背词汇还不够。我还会让他们多记一件事:数字。
三级有几个知识块?6个。四级呢?8个。七级呢?5个。
为什么连数字都要背?因为数字是校验码。
学生上黑板画知识图谱之前,我先问他:"三级几个?"他说"6个。"好,开始画。画完了,我让他数一遍——如果只画出来5个,不用我说,他自己就知道漏了一个。
这不是"可能漏了",是确定漏了。就跟传输文件一样,发一个文件附一个校验和(checksum),接收方验一遍,数字对不上就知道文件不完整,回去重传。
把知识压缩到极致——先压缩成几个词,再压缩成一个数字。 数字是最轻的记忆负担,但能做最重的校验工作。学生记住"三级=6",上黑板画的时候心里有个锚,画一个数一个,6个画全了才放心。
这个习惯听起来简单,但它的底层逻辑是:你对完整性的掌控,不依赖于"我感觉差不多了",而是依赖于一个可以验证的数字。 之前在第六篇讲过"能力错觉"——你以为你都会了,其实你漏了。"数字校验"就是打破能力错觉的工具:你说你会了,那你先告诉我,一共几个?
📝 上黑板展开:从词到细节
背完词汇和数字,下一步是上黑板画。
为什么是黑板?为什么不让他们在本子上写、在电脑上打?
因为黑板足够大,而且是公开的。
学生站在黑板前,面对全班,手里拿着粉笔。他需要从脑子里的压缩包出发,先写出中心词——“C++ 三级知识块”,然后往外展开6个分支词汇,再从每个词往下展开细节。
我拿一个学生上黑板画"字符串及其函数"的完整展开来举例——他从"字符串及其函数"这个词出发,需要展开到这些内容:
// 字符串及其函数展开
string s = "Hello World";
// 大小写转换
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'a' && s[i] <= 'z') s[i] -= 32; // 小写转大写
}
cout << s << endl; // HELLO WORLD
// 字符串搜索
size_t pos = s.find("WORLD");
if (pos != string::npos) {
cout << "找到,位置: " << pos << endl; // 6
}
// 字符串分割(按空格)
string word = "";
for (int i = 0; i <= s.size(); i++) {
if (i == s.size() || s[i] == ' ') {
cout << word << endl;
word = "";
} else {
word += s[i];
}
}
// 输出: HELLO
// WORLD
// 字符串替换
string s2 = "abcabc";
while (s2.find("abc") != string::npos) {
s2.replace(s2.find("abc"), 3, "XYZ");
}
cout << s2 << endl; // XYZXYZ
如果他能把这些代码默写在黑板上,说明这个知识块真的掌握了。如果他只写了"字符串及其函数"六个字就停笔了,那这个词对他来说只是一个标签,不是一个压缩包——标签贴在脑子里,但打开是空的。
这个过程的要求很明确:
- 不看任何资料——凭记忆提取
- 先画数字——写上"6",画完数一遍
- 展开到细节——不是只写"位运算"三个字就完事,要往下展开
& | ~ ^ << >>,再写出每种运算的代码示例 - 画不出来的,就是盲区——不用我批改,他自己看到空白就知道哪里不会
黑板是公开的,这意味着每个人的知识结构都被"看见"了。画得全的同学,大家看得到;画不出来的同学,大家也看得到。但这不是丢人——暴露问题,恰恰是解决问题的第一步。 这和第七篇讲的"教师脆弱性"是一个道理:把不完美亮出来,焦虑反而降低了,因为你知道接下来要补什么。
👥 真实课堂:两个学生的故事
讲一个真实的课堂场景。

我第一次让学生背GESP知识图谱的时候,有一个学生看到图就懵了。他不理解为什么要背这个——“我又不是背课文,学编程背什么知识块?”
我跟他解释:这不是背课文,是给你脑子里装一个目录。你学了那么多东西,如果没有目录,它们就是一堆散文件,用的时候翻不到。
然后我观察他们背的过程。其他同学很快就记好了,但我看他——没有一点背诵的外显痕迹。他在默读,心里背一遍,然后点了点头,好像觉得自己记住了。
看着就挺糟糕的。
为什么糟糕?因为"默读"和"提取"是两回事。默读的时候你在"再认"——看着词觉得"嗯我会",但这是错觉。真正的掌握不是看着觉得会,是关掉屏幕你能不能写出来。
于是我说:“你关掉屏幕,默写一次。”
他不情愿,但还是写了。结果——只写出来"进制转换"。
只有"进制转换"。 其他5个知识块——数据编码、位运算、算法与描述、一维数组、字符串及其函数——全部空白。
但这一点没有让我心寒。为什么?因为"进制转换"是他学过的。他不但写了这个词,还能展开细节:
// 他能默写出来的部分——进制转换
// 十进制转二进制:除2取余
int n = 13;
int bin[32], idx = 0;
while (n > 0) {
bin[idx++] = n % 2;
n /= 2;
}
for (int i = idx - 1; i >= 0; i--) {
cout << bin[i]; // 1101
}
学过的他记住了,甚至代码都能默写。没学过的他没记住——这说明知识图谱起到了诊断作用。 如果没有这个环节,他会觉得自己"差不多了"。一默写,X光照出来了:你学过的占六分之一,剩下六分之五是空白。
后面我让他接着背,清晰了解大纲有什么。试了差不多三次,他终于写下来了。第一次只写出1个,第二次写出4个,第三次终于6个全写出来了。这不是他笨,是记忆本来就需要反复提取才能固化——每提取一次,记忆痕迹就深一层。
还有另一位同学。他已经学完三级的内容,所以很轻松就记下来了。隔了两天,我让他们两个再次到黑板上默写。
学完三级的同学,他是那种每次都愿意听我讲解学习方式、并且认真照做的人。隔了两天,他还是能轻松写下来。不但能写出6个知识块,还能从每个块展开到代码:
// 他的黑板展开——"算法与描述"块
// 枚举法:穷举所有可能
for (int i = 100; i <= 999; i++) {
int a = i / 100, b = i / 10 % 10, c = i % 10;
if (a*a*a + b*b*b + c*c*c == i) {
cout << i << endl; // 水仙花数
}
}
// 模拟法:按题意一步步模拟
// 例:约瑟夫环,n个人围圈报数,数到m出列
int n = 10, m = 3;
int a[15] = {};
int cnt = 0, idx = 0, out = 0;
while (out < n) {
idx = (idx % n);
if (!a[idx]) {
cnt++;
if (cnt == m) {
a[idx] = 1;
out++;
cout << idx + 1 << " ";
cnt = 0;
}
}
idx++;
}
而另一位同学,还是遗忘了一部分。同样的方法,同样的时间间隔,结果不一样。区别在哪?不在于谁更聪明,在于一个已经有了反复提取的习惯,另一个才刚开始。
对于能够轻松记下来的同学,我会让他更进一步——不看官方图,根据自己理解去搭建知识图谱。 他可能把"位运算"和"进制转换"放在同一层,因为它们都跟二进制有关;也可能把"一维数组"和"字符串"放在一起,因为字符串本质上是字符数组。他搭的图和官方的不一样,没关系。如果他排错了,我就纠正他,告诉他为什么这样排列不合理——比如"枚举法和模拟法不是一回事,不能合并成一个块":
// 枚举法 vs 模拟法的区别
// 枚举:尝试所有可能,筛选符合条件的
// -> 不关心过程,只关心结果
for (int i = 2; i <= n; i++) {
bool prime = true;
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) { prime = false; break; }
}
if (prime) cout << i << " ";
}
// 模拟:按题意一步步还原过程
// -> 关心每一步的状态变化
// 例:小球在轨道上运动,每秒按规则移动
int pos = 0, dir = 1;
for (int t = 0; t < T; t++) {
pos += dir * speed;
if (pos >= L || pos <= 0) dir *= -1; // 碰壁反弹
}
这个纠正的过程,就是在帮他理解知识之间的真实关系,而不是死记一张图。 两种算法的本质区别不是名字不同,是解决问题的思路不同。枚举是"穷举答案",模拟是"还原过程"。理解了这一点,他以后看到一道题就知道该用哪种方法,而不是靠猜。
而对于遗忘的同学,我不会批评他。我说:“遗忘很正常,更何况,你才刚刚开始。”
这句话不是安慰。这是事实。他刚开始接触知识图谱,第一次提取当然会漏。但漏了不可怕——可怕的是他以为自己没漏。 现在他知道了哪里漏,下次提取就会去补。三次、五次、十次之后,他也能像那位同学一样,隔天还能写出来。
🧠 为什么有效:不是凭感觉
有人可能会问:让学生背知识图谱、上黑板画,这种做法有依据吗?还是你凭感觉?
有依据。而且不是一两条。
1. 专家的知识是"有结构的",新手的是"散的"
这是认知科学最经典的发现之一。美国国家科学院2000年出版的《How People Learn》中专门有一章讲专家和新手的区别:专家的知识不是事实和公式的列表,而是围绕核心概念组织的。
经典实验:让物理学专家和大学生看同一批物理题,描述解题思路。专家说的是"这是牛顿第二定律的问题"“这是能量守恒的问题”——先归类,再解题。学生说的是"这个题要用那个公式"——看到的是表面特征,没有底层结构。
我让学生背的知识块,就是让他们做专家做的事:先建结构,再填内容。 “位运算"是一个核心概念,它统领着六种具体的位操作。学生脑子里有"位运算"这个节点,再往下的代码细节就有了挂靠的地方。当他看到一道需要位运算的题时,脑子里不是去翻"我学过哪些运算符”,而是直接定位到"位运算"这个组块,展开六种运算,选择合适的那个。
2. 工作记忆的容量是有限的——所以必须压缩
1956年,认知心理学家George Miller发表了心理学史上最著名的论文之一:人类工作记忆的容量是7±2个组块。
不管信息量多大,只要能压缩成有意义的组块,就能装进工作记忆。FBICIAUSA是9个字母,很难记;但分成FBI-CIA-USA三个组块,一下子就记住了。
GESP三级有几十个知识点,但压缩成6个词,加一个数字6——完美落在工作记忆容量里。学生不用记几十个零散的点,只需要记6个词,然后从每个词展开。
3. "提取"比"再看一遍"强得多
2006年,Roediger和Karpicke做了一个实验:一组学生重新阅读材料,另一组学生从记忆中提取(闭卷回忆)。一周后测试,提取组记住的内容比阅读组多56%。
这就是为什么我不让学生"看着图背",而是要他们关掉屏幕、上黑板画。看着图背是"再认",关掉图写出来才是"提取"。那位默读的同学觉得自己记住了,一默写只写出"进制转换"——这就是再认和提取的区别。
提取是痛苦的,但痛苦的东西才有效。 每一次提取都在强化记忆痕迹,第一次提取会漏,第二次会少漏一点,第三次终于写全。这不是他笨,是大脑的工作方式。
4. 思维导图确实有效——元分析怎么说
2023年Shi等人在《Asia Pacific Education Review》发表了一篇元分析,综述21项研究:思维导图教学相比传统教学有中等偏大的效果量(Hedges’ g = 0.67),年纪越小的学生受益越明显。
另一篇系统综述也确认:思维导图能显著提升知识保持、认知加工和问题解决能力。
5. 生成效应:自己"造"出来的,比读来的记得牢
1978年,Slamecka和Graf在《Journal of Experimental Psychology》上发表了五组实验,揭示了一个后来被称为"生成效应"(Generation Effect)的现象:学生自己生成的信息,比单纯阅读的信息记得好得多——即使生成的内容并不完全正确。
这个发现对教学的含义是颠覆性的。传统教学是"老师讲、学生记",学生处于被动接收状态。但生成效应告诉我们:真正让知识扎根的,不是"看过了",而是"自己造出来了"。
我的教学链条正好踩在这个原理上。学生看GESP大纲是"阅读",关掉屏幕默写是"生成",上黑板画出来是"公开生成"。那位默读的同学觉得自己记住了——但默读是阅读,不是生成。一让他生成(默写),"进制转换"以外的东西全部空白。不是他没看过,是他从未生成过。
更进一步:当学生已经能画全之后,我让他"不看官方图,根据自己理解去搭建知识图谱"——这是更高阶的生成。他不是在复制,是在创造自己的知识结构。生成效应的研究指出,即使生成的结果有错误,生成行为本身就已经在强化记忆。所以我允许他排错,然后在纠正中加深理解。
6. 合意困难:越费劲的,记得越牢
Robert Bjork是UCLA的记忆研究专家,他在1994年提出了"合意困难"(Desirable Difficulties)的概念:在学习时感觉更难的方法,反而产生更持久的记忆。
Bjork列举了三类合意困难:间隔练习(不要集中突击)、交错练习(不要只练一种题型)、检索练习(不要只看,要提取)。这三类的共同点是——它们都让学习者在当下感觉更吃力,但长期效果远超"轻松"的学习方式。
我的教学链条里几乎每一步都是合意困难:
- 背词汇和数字 — 不是看一遍过,是要记住:检索练习
- 关掉屏幕默写 — 不看资料凭记忆提取:检索练习
- 上黑板公开画 — 有公开压力的提取:检索练习 + 情绪激励
- 画完数一遍 — 用数字校验完整性:打破"能力错觉"
- 隔两天再来一次 — 不是当天连续练,是隔天提取:间隔练习
Bjork特别指出一个陷阱:学生和老师都倾向于选择"感觉更有效"的学习方式,但"感觉有效"往往是"感觉轻松"的伪装。 那个默读的同学觉得"我记住了"——他不是在骗人,他是真的觉得有效。但感觉不等于效果。这也是为什么我在第六篇专门讲了"能力错觉":你以为你会了,其实你漏了。合意困难的价值就在这里——它让"你以为会了"在提取的那一刻被检验。
但有一条边界要注意:Bjork说的"困难"是认知上的困难,不是情绪上的压力。对特别不自信的学生,可以先让他单独默写,再过渡到公开画黑板——给他一个适应期,别一上来就把他推到挫折区。
7. 自我调节学习:从"老师驱动"到"自己驱动"
前面讲的都是记忆机制。但教学不只是让学生记住,还要让他们学会自己管理学习。Zimmerman在2000年提出了自我调节学习(Self-Regulated Learning)的循环模型,包含三个阶段:预期(forethought)→ 执行(performance)→ 反思(self-reflection)。这三个阶段循环往复,每循环一次,学生的自我调节能力就提升一层。
我的五步法和这个模型对应得严丝合缝:
| Zimmerman阶段 | 核心任务 | 我的教学步骤 |
|---|---|---|
| 预期 | 设定目标、选择策略 | 背数字"三级=6个",建立预期和锚点 |
| 执行 | 部署策略、自我监控 | 上黑板画,画一个数一个,边画边自检 |
| 反思 | 自我评价、自我反应 | 画完数一遍校验;错误点整理对应到知识块 |
Zimmerman模型的关键洞察是:自我调节不是天生的,是可以通过外部训练逐步内化的。 一开始,是老师在做"预期"——告诉学生要背几个词、几个数字、怎么画。但随着反复练习,学生会逐渐把这个流程内化为自己的习惯:他会自己设目标、自己监控进度、自己反思遗漏。
那个学完三级的同学就是例子——他"每次都愿意听讲解学习方式并认真照做",这不是服从,是他已经尝到了自我调节的甜头。他不需要老师再催,他自己知道该怎么做。而那个刚开始的同学还在依赖外部驱动——这很正常,内化需要时间,需要反复循环。
这就是为什么我"驱动"他们做这件事——不是要他们永远依赖我,是用外部驱动帮他们搭好内部的循环。 等循环转起来了,我就可以撤了。
所以这不是"我觉得有用",是有研究支撑的。而且不止一两条——专家知识组织、组块压缩、检索提取、生成效应、合意困难、自我调节学习,六条独立的记忆和学习机制,全部指向同一个结论:让学生自己把知识结构生成出来、提取出来、校验出来,比任何被动接收都有效。
📂 大题错误点整理:图谱管学了什么,错题管做错什么
知识图谱解决了一个问题:"你学了什么。"但还有一个问题没解决:“你在哪里出过错。”
做好的大题,我不会让学生做完就过。我会让他们把错误点整理出来——不是抄整道题,是标注:这道题错在哪?属于哪个知识块?
我拿第七篇那道B3843密码合规的真实代码来举例。这个学生改了四版,每一版的错误点都能对应到三级知识图谱的某个块上:
第一版错误 → 对应"一维数组"块
// 错误:最后一个密码后面没有逗号,循环不触发
for(int i = 0; i < a.size(); i++) {
if(a[i] == ',') { // 只在遇到逗号时才处理
// ... 检查密码
}
}
// 输入: seHJ12!@,sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!
// 最后一段 "123&^YUhg@!" 后面没有逗号 -> 永远不会被检查
错误点标注:循环终止条件依赖逗号,最后一组数据漏处理。 根因在数组的遍历边界。
第二版错误 → 对应"算法与描述"块
// 错误:遇到非法字符时没有停止,fu标记被污染
for(int j = k; j < i; j++) {
if(a[j] >= '0' && a[j] <= '9') number = 1;
if(a[j] >= 'a' && a[j] <= 'z') small = 1; // 注意:这里用if而不是else if
if(a[j] >= 'A' && a[j] <= 'Z') big = 1;
if(a[j] == '!' || a[j] == '@' || a[j] == '#' || a[j] == '$') {
fu = 1;
}
// 遇到非法字符时没有break,fu仍然是1 -> 非法字符被"放过"了
}
错误点标注:字符分类逻辑不完整,遇到非法字符时应中断。 根因在枚举/模拟的边界处理——算法描述不够严谨。
第四版错误 → 对应"一维数组"块(变量生命周期)
int small=0, big=0, number=0, fu=0; // 在main开头声明
// ...
for(int i = 0; i < a.size(); i++) {
if(a[i] == ',') {
// small, big, number, fu 没有在这里重置!
// 第一个密码的标记"污染"了第二个密码的判断
for(int j = k; j < i; j++) {
// ...
}
}
}
// 修复:把变量声明移到if里面,每条密码重置
if(a[i] == ',') {
int cnt=0, small=0, big=0, number=0, fu=0; // 每条密码重置标记
// ...
}
错误点标注:标记变量未在循环内重置,跨密码累积污染。 根因还是数组遍历——变量的作用域和生命周期。
你看,四版代码的四个bug,全部能对应到三级知识图谱上。这不是巧合——如果学生在做这道题之前就已经把"一维数组"和"算法与描述"这两个块完全展开、理解透了,这些错误大概率不会犯。
这就是知识图谱和错题本的配合方式:
| 知识图谱 | 错误点整理 |
|---|---|
| 回答"我学了什么" | 回答"我做错了什么" |
| 对着GESP大纲,画全貌 | 对着做过的题,标错误 |
| 漏了什么,图谱上空白 | 错在哪,错题上有记录 |
| 错误属于哪个块,图谱上有定位 | 图谱上的盲区,错题上有印证 |
| 查漏 | 补缺 |
有了这两样东西,学生对自己"会什么、不会什么、在哪跌倒过"就一清二楚。不需要靠感觉,不需要靠"差不多",打开图谱和错题本,黑白分明。
对我和学生来说,这都是一种放心。我知道他的知识结构有没有漏洞,他也知道。不需要等到考试才发现——那时候已经晚了。
🌉 结语:装一个目录,受益终身
回过头来看这套方法的全貌:
- 背数字 — 三级6个、四级8个,校验码。
- 背词汇 — 位运算、进制转换……压缩包。
- 上黑板展开 — 从词到细节,写出代码,提取验证,画不出就是盲区。
- 数一遍 — 画出来的和数字对不对,完整性校验。
- 错误点整理 — 图谱管"学了什么",错题管"做错什么",错误能定位到图谱上的某个块。
这五步走下来,学生脑子里就有了一套可查、可验证、可展开的知识管理系统。
但我后来意识到一件事:我不只是在教他们C++的知识图谱,我在教他们一种处理大量信息的能力。
压缩、存储、还原、校验——这套能力不限于编程。以后他学物理,可以先画出力学、电学、热学的知识块;学历史,可以先画古代史、近代史、现代史的大纲。任何东西多了、散了,都可以先压缩成目录,记住数量,再展开验证。
国际象棋大师的记忆力不比普通人好,但他们在真实棋局中能记住的棋子比普通人多得多——因为他们的知识被组织成了有意义的组块,而不是散落的个体。普通棋手看到25个棋子,大师看到5个战术组合。
我想做的,就是帮学生从"看到25个棋子"变成"看到5个战术组合"。 知识图谱就是他们的组块训练。
而当他习惯了这个闭环,他学任何东西都不再是一笔糊涂账。因为他脑子里有目录——翻开目录,他知道自己在哪一章,还差哪一章。
回到开头那个问题:AI会不会让我们变笨?
会,如果你把思考外包给它的话。但如果你的脑子里有一张自己搭起来的知识图谱,AI就不是替代品,而是工具——你用它来查漏补缺,而不是用它来替代思考。
AI能帮你查到任何答案,但只有你自己搭起来的知识结构,才能让你判断那个答案是对是错。 这就是我在AI时代还在让学生上黑板画图谱的原因——不是拒绝AI,是先把自己的脑子武装好。
📚 专栏回顾
- 第一篇:《从语法讲解到思维锻造:我的信奥教学实战总结》——教材设计、认知难点、表格追踪法
- 第二篇:《信息学学习之乐:思维、工具与自我对话》——计算思维、数学英语、自检习惯
- 第三篇:《从"无从下手"到"拿下大题"——一套完整的解题教学闭环》——五步闭环法、警惕答案记忆、学会提问、可视化演算
- 第四篇:《比方法更重要的,是找到适合他的节奏》——学生分类、年龄段差异、认知架构、可持续精力管理
- 第五篇:《让学生把"思考的路"走完,比走对更重要》——完成感、温故知新、先走完再优化
- 第六篇:《"懂了"是最危险的信号》——能力错觉、双重检测、脚手架微操、证明错误法、自我验证闭环
- 第七篇:《AI靠"思考链"解题,学生做编程题也该如此——一道题改了四遍才过的四步》——读题复述、I/O优先、分阶段调试、错误回顾、认知学徒制、教师脆弱性、有效失败、元认知训练
- 第八篇(本文):《AI替你思考,但替不了你记住——让学生上黑板画知识图谱》——认知外包、GESP知识图谱、数字校验、组块压缩、生成效应、合意困难、自我调节学习、检索提取、知识结构化、错误点整理
如果这篇文章对你有帮助,欢迎点赞、收藏、转发。 👍
你的学生有没有"学了但说不出学了什么"的情况?评论区聊聊。 💬
延伸阅读
本文涉及的教学方法与教育学概念,以下资料可供深入参考:
- AI对认知能力的影响(认知外包):MIT媒体实验室2025年发布205页研究报告,通过脑电图扫描发现长期使用AI大语言模型会导致大脑神经连接数降低、批判性思维和记忆力系统性下降。斯坦福与MIT联合研究进一步发现,12周AI依赖导致前额叶皮层神经激活降低,停用3个月后仍未完全恢复。英国666人研究显示频繁AI使用与批判性思维显著负相关(r = -0.68)。详见 The Impact of AI Tools on Human Cognitive Abilities 和 AI Tools and Critical Thinking: The Evidence
- 专家与新手的知识组织差异:National Research Council (2000) 在《How People Learn》中系统阐述了专家知识围绕核心概念组织、新手知识呈碎片化堆砌的差异。经典实验包括物理学专家与学生的解题思路对比。详见 How Experts Differ from Novices
- 组块理论与工作记忆容量:Miller (1956) 提出"神奇数字7±2"——人类工作记忆只能同时处理约7个组块。信息可以通过组块化压缩,使工作记忆容纳更多内容。详见 The Magical Number Seven, Plus or Minus Two
- 检索练习效应(Testing Effect):Roediger & Karpicke (2006) 发现,从记忆中提取信息比重新阅读材料能显著提升长期记忆保持率,一周后差距达56%。详见 The Testing Effect
- 生成效应(Generation Effect):Slamecka & Graf (1978) 通过五组实验发现,学生自己生成的信息比单纯阅读的信息记得好得多,即使生成内容并不完全正确。生成行为本身就是强化记忆的关键。详见 The Generation Effect: Delineation of a Phenomenon
- 合意困难(Desirable Difficulties):Bjork (1994) 提出,间隔练习、交错练习、检索练习等"感觉更难"的学习方式,反而产生更持久的记忆。Bjork & Bjork (2011) 进一步阐述了如何通过制造合意困难来增强学习效果,并警告"感觉有效"往往是"感觉轻松"的伪装。详见 Making Things Hard on Yourself, But in a Good Way
- 自我调节学习(Self-Regulated Learning):Zimmerman (2000) 提出自我调节学习的循环模型,包含预期、执行、反思三个阶段。自我调节能力不是天生的,可通过外部训练逐步内化。详见 Zimmerman’s Self-Regulated Learning Model
- 思维导图的元分析研究:Shi et al. (2023) 在《Asia Pacific Education Review》发表元分析,综述21项研究,发现思维导图教学效果量达中等偏大(Hedges’ g = 0.67)。详见 Effectiveness of Mind Mapping: A Systematic Review
- GESP编程能力等级认证标准:CCF发布的C++&Python认证知识体系,一到八级知识块结构。详见 GESP认证标准
关于作者
一名在信息学奥赛一线教学多年的教练。专注于C++编程教学、编程思维训练与教学策略研究。专栏「信奥教学手记」持续更新中,分享真实课堂案例与教学方法沉淀。
更多推荐
所有评论(0)