面向对象:本科二年级学生(首次接触数据结构) 单次课长:90 分钟(含 45 分钟压缩版) 本课目标:不讲定义,只做三件事 —— 建立用途感、建立信心、建立课堂契约
第一节课最大的浪费,是把 40 分钟花在"数据结构是研究数据之间关系的一门学科"这类定义上。学生记不住定义,只会记住第一节课的感受。
本方案按三层递进组织:
| 层次 | 要回答的问题 | 手段 | 时长占比 |
|---|---|---|---|
| 体验层 | "这东西长什么样?" | 猜数游戏、扑克牌排序 | 约 30% |
| 意义层 | "它和我有什么关系?" | 跨领域结构案例(建筑/人体/语言/城市) | 约 25% |
| 契约层 | "我该怎么跟这门课配合?" | 课堂价值的实验证据、课程地图、考核与节奏 | 约 25% |
| 收束 | "第一件事做什么?" | 第一个作业 | 约 10% |
一个原则贯穿全程:先具体,后半抽象,最后才抽象。所有抽象概念都必须在课堂里先被学生"身体感受"过一遍。
下面每一条都按"学生原话 → 背后真正担心的事 → 一句话应答"整理。建议上课时把这张表印给学生,或在 PPT 上展示,然后说一句:"这些你们想问又不好意思问的,我今天一次讲完。"
| # | 学生原话 | 背后真正担心的事 | 一句话应答 |
|---|---|---|---|
| 1 | "学这个有什么用?我以后又不写算法。" | 抽象结构与具体业务之间的连接看不见 | 它练的是结构化思维——一种在写代码之前就已经在用的通用能力;先用游戏让你自己感觉到 |
| 2 | "工作里谁还手写链表?" | 分不清"理解"和"实现" | 你可以不手写,但你必须能判断——什么时候该用哈希表、什么时候该用堆 |
| 3 | "框架都封装好了,我调 API 不就行了?" | 把"会用"当成"懂了" | 线上性能事故,最后都要回到结构选择上;封装替你实现,不替你判断 |
| 4 | "我不做开发,做测试/产品,学它干嘛?" | 担心投入产出比 | 结构化表达是通用职业技能(金字塔原理、MECE),和数据结构是同一个脑子的两种用法 |
| # | 学生原话 | 背后真正担心的事 | 一句话应答 |
|---|---|---|---|
| 5 | "网上有更好的课,为什么要来教室?" | 课堂的不可替代性从未被证明 | 用实验数据回答:主动学习让挂科率降低 55%;MOOC 完成率只有 3.13%(见第四部分) |
| 6 | "听懂了,但自己做不出来。" | 懂 ≠ 会,这是最普遍的挫败 | 课堂专门处理"你卡住的那 30 秒",这恰恰是一对一辅导有效的核心机制 |
| 7 | "一节课没跟上,后面就全崩了。" | 怕节奏被甩下 | 第一个课就讲清"预习—课堂—复盘"的节奏契约,让进度可预测 |
| # | 学生原话 | 背后真正担心的事 | 一句话应答 |
|---|---|---|---|
| 8 | "我 C 语言和指针很烂,是不是注定学不好?" | 自我设限 | 教育实验证明:绝大多数人都能达到高水平,缺的是条件不是天赋(Bloom 1984) |
| 9 | "递归太抽象了,脑子转不过来。" | 缺少心理表征,不是缺少智商 | 用汉诺塔和扑克牌先建立身体记忆,再形式化 |
| 10 | "这么多结构,我记不住哪个是哪个。" | 把它当成记忆任务 | 核心结构只有四大类(线性、树、图、哈希/散列),真正的考点是"选择依据"不是"背诵清单" |
| # | 学生原话 | 背后真正担心的事 | 一句话应答 |
|---|---|---|---|
| 11 | "AI 一秒钟就能写出快排,我背它有啥用?" | 我的比较优势到底在哪 | 人类负责选择什么抽象、判断什么取舍,机器负责实现(Wing 计算思维,2006)。不会判断的人,连 AI 给的答案对不对都不知道 |
| 12 | "让 AI 写就行了,我只要会提需求。" | 把 AI 当拐杖而非搭档 | AI 会给你一个能跑的答案,但不会替你承担线上事故;这门课教你审 AI 的作业 |
| # | 学生原话 | 背后真正担心的事 | 一句话应答 |
|---|---|---|---|
| 13 | "期末怎么考?刷题能过吗?" | 想要一条可控的投入路径 | 第一节课就把考核方式、及格线、优秀线讲明白,别让他们猜 |
| 14 | "这门课和操作系统、数据库、编译原理什么关系?" | 脑子里没有知识地图 | 画出后续课程依赖图(见第六部分课程地图) |
| 15 | "学完就忘,怎么办?" | 对遗忘的无力感 | 间隔重复 + 课堂检索练习,这两件事有百年实证支持 |
| 16 | "教材伪代码和能跑的代码不一样,学哪个?" | 抽象层级混乱 | 伪代码是思想层,代码是工程层;先思想后工程,两个都要 |
给老师的提示:第 5、8、11、12 条是这一代学生真正的痛点。建议这四条不要一口气讲完,而是分散在课程里逐层回应——第一节课先给"答案的影子",后面每讲到对应章节再收一次网。
这是回应第 1 条困惑的正面论证。分三层讲,从现象到机制再到能力。
教学建议:不要说"结构思维很通用",直接把例子摆出来,每个例子只讲 30 秒,让密度本身产生说服力。
| 领域 | 结构形态 | 权威出处 | 课堂上讲这一句 |
|---|---|---|---|
| 建筑与城市规划 | 树 vs. 半格(semi-lattice) | Christopher Alexander, A City is Not a Tree, Architectural Forum, 1965 | 1965 年就有建筑师在吵"城市不是树、是半格"——数据结构里树与图的区别,规划师早就在为它付出代价 |
| 建筑 → 软件 | 模式语言 → 设计模式 | Alexander, A Pattern Language, 1977;GoF Design Patterns, 1994 自述受其启发 | 计算机界最著名的"设计模式",直接借自建筑师亚历山大 |
| 人体解剖 | 组织层次:化学→细胞→组织→器官→系统→个体 | Marieb & Hoehn, Human Anatomy & Physiology;Gray's Anatomy | 人体教材第一章讲的就是"结构层次"——你的身体是一棵倒过来的树 |
| 血液循环 / 呼吸 | 分形分枝网络 | West, Brown & Enquist, Science 276:122 (1997) | 血管做成树,是为了用最小的能量把氧送到每个细胞——这就是"树形结构的效率优势" |
| 人类语言 | 句法树、递归嵌套 | Chomsky, Syntactic Structures, 1957 | "我知道你以为他说……"句子套句子,正是递归定义;树是人类语言的底层结构 |
| 生物分类 | 分类树(域界门纲目科属种) | Linnaeus, Systema Naturae, 1735 | 生物学家是最早的"树结构重度用户" |
| 复杂系统与组织 | 层级 = 近可分解系统 | Herbert A. Simon, The Architecture of Complexity, 1962 | 钟表匠 Hora 把 1000 个零件拆成 10 个一组,效率比 Tempus 高约 4000 倍——组织结构、模块化、微服务,都是同一件事 |
| 地图导航 | 图 / 最短路 | Dijkstra, Numerische Mathematik 1:269 (1959) | 你的导航每秒上亿次运算,核心是 1959 年那个图算法 |
| 社交网络 | 图 / 小世界 | Milgram, The Small World Problem, 1967 | "六度分隔"说的就是一张图的直径 |
| 法律 | 层级条款 + 检索索引 | 法典的章—节—条—款—项层级;法律检索系统的倒排索引 | 找一个法条 = 一次树搜索;法律检索系统 = 倒排索引 |
| 化学 | 分子图(原子=顶点,键=边) | 化学图论的标准表述 | 分子式本身就是一张图,化学家靠拓扑判断手性 |
| 结构化表达 | 金字塔 / 树形论证 | Barbara Minto, The Minto Pyramid Principle | 咨询顾问的第一课:先讲结论,再给三个理由——这就是一棵树 |
课堂落点一句话(建议写在黑板上):
结构不是计算机科学的发明,是人类理解复杂事物的默认方式。这门课只是把它变得精确、可度量、可实现。
这是最有说服力、也最适合第一节课讲的故事,出自 Herbert A. Simon(1978 年诺贝尔经济学奖、1975 年图灵奖得主)1962 年的论文《The Architecture of Complexity》。
故事:两个钟表匠 Tempus 和 Hora 都做 1000 个零件的表。差别只在装配方式:
Simon 的计算结果:如果被打断的概率是 0.01,Hora 完成同样多的表,平均比 Tempus 快约 4000 倍。
Simon 由此提出"近可分解系统"(nearly decomposable systems):系统内部的强连接聚集在子系统内部,子系统之间是弱连接。他认为这正是复杂系统(自然界、社会、工程)几乎普遍呈现层级结构的原因——不是因为层级更美,而是因为没有层级的复杂系统根本没时间进化出来。
课堂上直接对上数据结构:
参考话术:"同学们,你们从小被要求'做事要有条理',但没人告诉过你——有条理在数学上是能算出更好结果的。今天这门课,就是给'有条理'装上刻度。"
教师可用的收束句:这门课教的东西,一半你会用在代码里,另一半你会用在人生里——但你在第一节课还看不出来。所以我给你们一个学期,慢慢验证。
这是回应第 5 条困惑的核心板块。关键提醒:不要讲情怀,讲数据。 学生在数据面前非常讲道理。
| 数据 | 内容 | 出处 |
|---|---|---|
| 主动学习 vs. 传统讲授 | 元分析 225 项研究:主动学习使考试成绩平均提高约 0.47 个标准差(约半个等级),而传统讲授课堂的挂科率比主动学习课堂高 55% | Freeman et al., PNAS 111(23):8410–8415, 2014 |
| 感觉学习 vs. 实际学习 | 随机分组、内容完全相同的对比实验:学生在主动学习课堂里学得更多,但自己感觉学得更少;认知努力被误读为"学得差" | Deslauriers et al., PNAS 116(39):19251–19257, 2019 |
| MOOC 的真实完成率 | 哈佛/MIT 在 edX 上的 565 门课、1267 万次注册:2017–18 年完成率仅 3.13%,且 6 年间不升反降;52% 的注册者一份内容都没打开过,即使付费学员完成率也只有 46% | Reich & Ruipérez-Valiente, Science 363(6423):130–131, 2019 |
| 一对一辅导的上限 | 接受一对一辅导的学生,平均成绩比传统班级学生高 2 个标准差,即超过 98% 的传统课堂学生;Bloom 称之为"2 Sigma 问题" | Bloom, Educational Researcher 13(6):4–16, 1984 |
Deslauriers 那一条建议放在最前面讲,因为它太"反直觉"了。 该论文作者之一 Greg Kestin 就明确说自己在开学第一节课就给自己的学生看这个研究数据,让学生理解"自己参与"的重要性。你可以照做。
| 课堂独有 | 网课为何给不了 | 对应机制来源 |
|---|---|---|
| 即时纠错 | 视频不能在你写错的那一秒喊停 | Bloom 指出这是辅导有效的首要机制:错误当场修正,而不是累积 |
| 认知冲突 | 没人反问你"你确定吗" | 被问住的那一刻才是真正开始学习的地方 |
| 同伴解释 | 独自看视频没有解释的对象 | 费曼技巧:讲给别人听,才暴露自己没懂的地方 |
| 被校准的脚手架 | 网课不知道你现在该跳多高 | 老师的工作是调节"难度梯度",不是传递信息 |
| 进度管理 | 网课最难的是"明天再来" | MOOC 52% 的人连内容都没打开——这是自律的成本 |
| 可验证的反馈 | 网课作业常无反馈或反馈延迟数周 | 反馈的时效性决定学习效率 |
让学生反感的不是"网课不好"这种说法,而是老师站在对立面。建议这样讲:
"我不会说网课不好,我自己也看网课。你们真正的问题不是'要不要上网课',而是分工错了。网课擅长讲清楚一件事——它把'知识传递'做到了极致,而知识传递恰好是这十年贬值最快的东西。课堂的价值在另一件事上:它是你唯一会被卡住、被追问、被当场纠正的地方。
一句话:网课给你答案,课堂给你卡住之后的那一步。"
道具:扑克牌若干副(去掉大小王)、计时器、黑板/白板。
做法:手里拿一副牌,抽 40 张,问全班:
"这 40 张牌有多少种排列方式?40 × 39 × 38 × …… × 1,也就是 40 的阶乘。这个数是 8 后面跟 47 个零。 今天全世界最快的超级计算机,每秒大约能算 10 的 18 次方次。让它从宇宙大爆炸那一刻开始算,一刻不停地算到今天——连这个数的亿分之一都算不完。 可是你们打牌的时候,理一把牌只要三秒钟。 人类凭什么三秒钟做完机器算不完的事?这就是这门课一个学期要回答的问题。"
为什么这个开场有效:它给出了一个真实的、可验证的、反直觉的悬念,而且答案不是"因为人聪明",而是"因为人用了结构"。整门课都是这个悬念的展开。
做法:
引导步骤:
2^7 = 128 > 100。2^30 ≈ 10.7 亿,30 次。落点:同样的数据,不同的组织方式,成本差 3000 万倍(100 vs. 30 只是表面数字,真正的对比是"线性"和"对数"两条曲线的形状)。这就是"结构决定效率"。
分组:4 人一组。每组发一副洗好的牌,取前 13 张。组内角色:2 人当"处理器"(用手操作牌)、1 人计时、1 人当"计数器"(记录比较次数)。
规则:处理器只允许做两个动作 ——(a)翻开两张牌比较大小;(b)交换两张牌的位置。不允许一眼扫完直接排好。
三个回合,同一副牌,三种策略:
| 回合 | 策略名称 | 操作方式 | 预期现象 |
|---|---|---|---|
| A | 选择排序 | 每轮从剩下的牌里找出最小的那张,放到已排好区的末尾 | 比较次数固定且多,操作笨重,容易数不清 |
| B | 插入排序 | 像斗地主理牌:摸一张,插到手里合适的位置 | 对"已经比较有序"的牌特别快;一上来就很快上手 |
| C | 归并排序 | 两人一组:每人先把自己那 6–7 张排好,然后把两堆"已经有序的"合并成一堆 | 合并时几乎不需要比较,明显更快 |
引导与板书:
O(n²) 与 O(n log n),并算一笔账:n =
100
万时,n² = 10^12,n log n ≈ 2 × 10^7,相差约
5 万倍。按电脑每秒一亿次比较算,一个是约 3 小时,一个是约 0.2
秒。这里一定要回扣 Simon 的钟表匠:"Hora 把表拆成小组件,归并排序把牌拆成小有序段。你们今天上午已经亲手做了一次 Simon 1962 年的论文。"
做法:在回合 B 结束后问一句:"为什么大家理牌都是'摸一张插进去',而不是把 13 张全部摊开、重新挑一遍?"
学生答不上来,但他们的手已经选对了。此时说:
"你们的直觉已经选出了插入排序。这门课要做的事,只是给直觉装上刻度——让你以后能说清楚'为什么这样更快',以及在什么情况下这个直觉会失效。"
这句话是第一节课很重要的心理锚点:它把学生的既有直觉从"可能错的经验"变成"可以被验证的资产",对建立信心非常有效。
做法:把全班按"学号后两位除以 10 的余数"分成 10 组。
观察:有的组挤了 8 个人,有的组空着。
追问:
落点:哈希表的核心矛盾是"空间换时间"和"冲突必然存在"。这是唯一一个学生每天都在用(字典、缓存、数据库索引)却完全不知道名字的结构。
3 个盘子最少几步?→ 7 步。4 个?→ 15
步。规律:2^n − 1。
落点:"递归不是难,而是你还没学会'把大问题交给小一号的自己'。这门课会给你三次机会学会它。"
| 时间 | 环节 | 内容 | 目的 |
|---|---|---|---|
| 0–3 | 开场钩子 | 40 张牌的 40! 悖论 | 制造悬念,不讲任何定义 |
| 3–8 | 自我介绍 | 不用念简历。讲一件"我用一个数据结构的想法解决了一件小事"的真实经历 | 用真实感替代权威感 |
| 8–15 | 困惑收集 | 现场问卷/举手:"这门课你最想问的是什么?"把答案归类投影,与第二部分的 16 条对照 | 让学生知道"你的困惑被认真对待了" |
| 15–22 | 游戏 1 | 猜数 → 二分查找 → 2^30 | 第一次亲手摸到"效率" |
| 22–37 | 游戏 2 | 扑克牌三种排序策略对比 | 亲手体验算法差异 |
| 37–47 | 复杂度引入 | 三回合数据对比 + O(n²) vs O(n log n) + 回扣钟表匠 | 把体感转成可度量的语言 |
| 47–62 | 结构无处不在 | 12 个跨领域案例(每个 30 秒)+ 钟表匠寓言详讲 | 回答"学了有什么用" |
| 62–72 | 为什么来课堂 | 四组数据 + 六条机制差异 + "网课给你答案,课堂给你卡住之后的那一步" | 建立课堂契约 |
| 72–82 | 课程地图 | 本课在知识体系中的位置、后续课程依赖图、考核方式、节奏契约、学习资源与工具 | 让投入路径可预期 |
| 82–90 | 收尾 | 布置第一个作业 + 一句话寄语 | 留下第一步行动 |
| 时间 | 环节 |
|---|---|
| 0–3 | 开场钩子(40! 悖论) |
| 3–8 | 困惑收集(快速举手,只取前 5 条) |
| 8–15 | 游戏 1:猜数 → 二分查找 |
| 15–25 | 游戏 2:扑克牌排序(只做回合 A 和 C,对比最明显) |
| 25–33 | 结构无处不在(压缩到 5 个案例:建筑、人体、语言、组织、导航)+ 钟表匠一句话 |
| 33–41 | 为什么来课堂(只讲 Freeman 和 MOOC 两组数据)+ 课程地图 + 考核 |
| 41–45 | 作业 + 寄语 |
时间不够时的取舍优先级(按"可以砍"排序):
① 回应"学这个有什么用"
"你们问的其实是两件事。第一件事是'我以后用不用得上'——这个我诚实回答:你大概率不会手写红黑树。第二件事是'这门课到底在训练我什么'——这个答案比第一件重要得多。 它训练的是你处理复杂事物的方式。你将来要处理的不是数组和链表,是一份 200 行的业务需求、一个 8 个人的项目、一个 30 平的房子、一份 3 万字的报告。这些东西有一个共同点:你不可能一次装完一千个零件。 这门课教你的是:怎么拆、拆到什么程度、拆完之后怎么拼回来、以及什么时候不该拆。"
② 回应"AI 都会写了,我背它干什么"
"AI 会给你一个能跑的答案。它不会告诉你:这个答案在数据量涨到一千万条的时候会不会崩,也不会在半夜两点替你承担责任。 更现实的一点是:如果你看不出 AI 的答案哪里不对,你就没有资格用 AI。 而这门课给你的,恰好是那个判断力。 顺便说,AI 也是在这门课的知识体系里被造出来的——你正在学的是它的地基。"
③ 回应"为什么不能只看网课"
"我不反对网课。我只说一句:网课把知识传递做到了极致,而知识传递是这十年贬值最快的东西。 有个实验特别值得你们知道:研究者把学生随机分到两组,学的内容完全一样,一组是名师讲授,一组是要自己动手。结果是——动手的那组实际学得更多,但自己感觉学得更少。因为费力会被大脑误读成'没学好'。 所以这门课会有很多让你觉得'有点累'的环节。如果某一节课你觉得很轻松很享受,那可能不是好事。"
④ 收尾寄语
"最后一个问题:你们觉得这门课最后考的是记住多少种数据结构吗? 不是。这门课考的是——给你一个没见过的问题,你能不能在十分钟内说出'它长得像什么结构'。 这个能力,从今天你们排那 13 张牌的时候就已经开始了。"
| 页码 | 页面内容 |
|---|---|
| 1 | 封面:课程名 / 教师 / 学期。不要艺术字 |
| 2 | 一个大数字:40! = 8×10^47,一行小字:"超算从宇宙诞生算到现在,算不完它的亿分之一" |
| 3 | "人类三秒做完机器算不完的事——凭什么?" |
| 4–6 | 学生的困惑(直接投影学生的原始提问截图/手写) |
| 7 | 游戏 1 规则截图 + 一张"猜数轮次"记录表 |
| 8 | 2^7 = 128、2^30 ≈ 10^9、100 vs 30
三条 |
| 9 | 游戏 2 规则:只许比较和交换 |
| 10 | 三个回合的比较次数柱状图(现场填数) |
| 11 | O(n²) vs O(n log n);n = 100 万时的 3 小时
vs 0.2 秒 |
| 12 | 钟表匠 Tempus 与 Hora 的对比图 + "快 4000 倍" |
| 13–16 | 跨领域结构案例(建筑 / 人体 / 语言 / 组织 / 导航,每页 1–2 个) |
| 17 | "结构不是计算机科学的发明" 大字页 |
| 18 | Freeman 2014 数据:挂科率高 55% |
| 19 | Deslauriers 2019 数据:学得更多,感觉更少 |
| 20 | MOOC 数据:1267 万次注册,完成率 3.13% |
| 21 | "网课给你答案,课堂给你卡住之后的那一步" |
| 22 | 课程地图:本课与后续课程的关系图 |
| 23 | 考核方式与节奏契约 |
| 24 | 第一个作业 + 联系方式 |
任务:找出你身边的 3 个数据结构。
要求:拍一张照片或截一张图,配一句话说明它是什么结构、为什么。示例(课上只给 2–3 个,剩下的留白让学生自己想):
加分项(可选):用一副扑克牌给你的家人或室友讲明白一个排序算法,录一段 30 秒的视频。允许失败,允许讲错——重点是把"讲"这个动作做出来。
为什么这个作业重要:它把整门课的立场固定下来——这门课不是从课本里学,是从你身边学。同时它让每个学生在第一周就产生"我发现了一个东西"的正反馈,这对建立信心比任何鼓励的话都有效。
准备清单
四个常见翻车点
一个可以放进备课夹的判断标准
第一节课结束时的最佳状态不是"学生觉得老师讲得好",而是"学生想知道 40 张牌到底有多少种排法,以及为什么归并排序能更快"。留下一个他们自己在课上没能完全解决的问题,比讲透一个知识点更值钱。
第一节课的任务不是让学生"知道数据结构是什么",而是让他们怀疑自己原来的那个问题——"学这个有什么用"。 当学生开始问"归并排序为什么能快 5 万倍"的时候,这门课就已经成功了。