← 返回目录


软件开发教育中的「渐进式呈现」

学校≠教育≠技能;文凭溢价=80%信号传递+20%人力资本

46 👍 / 0 💬

不知是出于怀旧,还是某种奇特的责任感,我总花很多时间思考该如何教小孩软件工程。为纪念 Whyday,在此将脑海中一些纷乱的想法整理成文。

「我们该教哪门语言?」这往往是课程设计时人们问的第一个问题。但这问题问错了。我们不妨把它理解为:「我们的课程应该以哪些工具为基础?」

软件知识金字塔的基石由三个关键领域构成:

1. 算法思维:我该如何表达「这些数里哪个最大」?嗯,我需要一个 maxSoFar 变量,然后遍历每一个数……

2. 语法:我该如何用一种机器能够理解的语言来表达这些算法?

3. 系统层面的现实:为什么我不能用 while(1); 来等待线程结束?为什么我不能写 int *foo() { int x = 4; return &x; }

学生们之所以觉得 C 语言难上手,就是因为他们被迫同时学习这三个领域。知识量太大了,而且要过很久他们才能真正做出点东西来。

我曾试过教孩子们 Ruby,以避开系统层面的现实问题,但他们仍然在语法上磕磕绊绊,浪费了太多时间。

很多人说 Scheme 才是正道:没有语法,也无需面对系统现实。但当我尝试用 SICP 来教学时,却在另一个关键的第零领域上栽了跟头:

0. 源动力:当「我是不是该学学编程」这个念头萌生后,我必须有足够的热情,才能啃完一章章枯燥的基础知识。

我童年的第一个项目是个文字冒险游戏。但当我把这个「胡萝卜」吊在今天的孩子面前时,他们却无动于衷。他们中大多数人从未打开过终端,自然也不关心如何在这个陌生又落后的世界里鼓捣东西。

这正是 KoduAliceScratch 这类项目激动人心的原因:它们的产出让人感觉很真实。一个为初学者设计的系统,只有当孩子能做出连他不懂技术的朋友都想要的东西时,才算有吸引力。当他炫耀自己的作品——当他听到「哇,你这是怎么到的?!」——那一刻,他才被点燃。然后,他就彻底入迷了。

然而,另一方面,当一个孩子初次打开 Alice 时,他看到的是这个画面:

那个疯狂的 Java 界面就别管它了。它自知其丑。我们要注意两点:第一,空空如也的游戏世界;第二,一个罗列了所有可用功能的库,随时可以拖拽到场景中。有人会称这种设计为一大亮点。没错,对某些学生而言,这能激发探索欲并带来回报。但对另一些人,我认为这很可怕,就像一幅关于万里晴空的一千块拼图,茫然无措。

作为对比,我们来看看《不可思议的机器》。这个谜题的目标是:「你能让全部三把枪都开火吗?」

大部分场景已经搭建完毕,目标清晰明确。一个有限的工具箱提供了解决问题所需的零件,但解法却不止一种。每一关都很简短,玩家能频繁地获得成就感。

久而久之,玩家就学会了每个零件的用法,谜题也随之变得更加复杂。工具箱里会混入一些无关的零件;游戏还会奖励那些构思巧妙的别样解法。最终,孩子就可以进入沙盒模式,一个无限的工具箱任他使用,轮到他去设计谜题挑战朋友了。

如果把这种「渐进式呈现」的理念应用到软件教育中,会怎样呢?

我们已经见识过奖励与结构如何影响学习。我们已经见识过成就、合作等社交元素如何吸引玩家不断回归。我们也见识过在潜移默化中学习的游戏那不动声色的力量。

那为什么不做一个创造游戏的游戏呢?

比方说,有一个关卡是国际跳棋。但它出故障了:棋子只能横平竖直地走,不能斜着走!现在,修复它。游戏的各个部件都已就位,必要的构建模块也在工具箱里为你准备好了。

或者:你在玩一个游戏,AI 对手强得离谱。现在,请修改规则让你能赢,但你只能使用工具箱里这些部件。如果你用更少的修改击败 AI,还能获得一个成就。

或者:这个关卡的游戏只完成了一半。结局该是怎样?分享给你的朋友们,让他们来续写!

或者:改变规则的部件有其空间或时间上的作用范围,需要通过努力赢得或寻找;在一个在线解谜平台游戏中,和朋友们一起挥舞这些充满编程味的「魔咒」,协同作战。

关于游戏世界观的一个设想:整个世界如同刘易斯·卡罗尔的奇境,正在分崩离析。一切都颠倒错乱、残缺不全,而玩家扮演着某种神明,与熵的力量抗争。

我没有时间或资源去实现这个想法,但畅谈一番确实很有趣。这个「渐进式呈现」的灵感只是冰山一角,我还有些别的想法想与大家探讨。

特别是(因为我是个语言发烧友):这门语言该是什么样?我一直在用各种系统制作《卡坦岛》、《俄罗斯方块》和《超级马里奥兄弟》来进行测试。在可视化编程声明式编程事件驱动编程的交叉领域,我已有些心得,但这个话题,还是留待我进一步阅读和实验后再谈吧。


对这些话题感兴趣?欢迎来信交流

为求排版简洁,特将此部分移出:补充阅读附录。

我在这一领域的探索,得益于和 Ken FerryIan HendersonJoe OsbornChris ParkerDavid Smith 以及 Patrick Thomson 之间极其宝贵的讨论。感谢你们,朋友们,为本文及后续相关文章贡献了内容——也感谢你们忍受我这两个月来在每次谈话中都喋喋不休这个话题。

《不可思议的机器》截图来自 MobyGames


Thoughts Memo 汉化组译制
感谢主要译者 gemini-2.5-pro,校对Jarrett Ye
原文:Square Signals : Progressive Disclosure in Software Education
发布于 2010 年 8 月 20

专栏:Thoughts Memo的文章


← 返回目录