像助记媒介(Mnemonic medium)[1]一样,Execute Program 的课程将正文与交互卡片穿插在一起。但让 Execute Program 得以命名的核心理念在于,每一次交互都涉及在嵌入式解释器中执行一段程序。事实上,Execute Program 没有任何不可执行的卡片。
例如,一节课可能包含几个段落,介绍在 SQL 中可以通过使用 SELECT column_name 来只选择特定的列。然后它可能会提供这样一个卡片:
exec(`CREATE TABLE cats (name STRING, age INTEGER)`);
exec(`INSERT INTO cats (name, age) VALUES (“Boromir”, 3), (“Aragorn”, 15)`);
exec(`SELECT name FROM cats`)
> 读者的光标位于最后一行;他们需要输入上方代码表达式的求值结果。Execute Program 随后会对读者的输入表达式(即作为 Javascript 代码)进行求值,并将结果值与测试值进行比较。
这 看起来 像是一个 Quizlet 风格的抽认卡,要求用户输入标准答案,但事实并非如此。这是一个真正的解释器,它会真正地对你的程序求值。所以你可以写 [{name: “Boromir”}, {name: “Aragorn”}] 或者 [“Boromir”, “Aragorn”].map(n => ({name: n})——这两种写法都是正确的。我喜欢这个设计模型,因为它将课程置于更接近真实的语境中:赋能环境着重于环境所赋能的事[2]。
更复杂的卡片被称为「问题(problems)」,它为读者提供一份代码清单和一个「目标表达式」——即最后一行代码的期望值。例如:
function adds2(input: number) {
}
adds2(4)
// GOAL: 6读者的任务是修改代码清单,以便生成目标表达式。当读者准备好时,他们执行自己的程序;程序会被求值,其输出将与目标值进行比较。
一个相关的、更具野心的构思:将像 Shenzhen I/O 这样的游戏置于像 IDE 这样的专业环境中意味着什么?
同样相关:可执行的书籍
Q. Execute Program 的卡片要求读者输入一个答案。这种交互与 Quizlet 的有何不同?
A. 答案是在真正的解释器中进行求值的,而不仅仅是逐字比对。
Q. 为什么 Execute Program 对读者的答案进行求值而不是逐字比对,这一点很重要?
A. 这允许读者在解决卡片时拥有一定的真实灵活性。
链接至本文(已汉化)
- 暂无
声明
此内容发布由 Andy Matuschak 许可。未经允许,不得转载或修改。保留所有权利。
Thoughts Memo 汉化组译制
感谢主要译者 gemini-3-pro-preview,校对 Jarrett Ye
原文:Readers answer Execute Program’s prompts by executing a program
参考
1. 助记媒介(Mnemonic medium) ./459483765.html2. 赋能环境着重于环境所赋能的事 https://l-m-sherlock.github.io/ZhiHuArchive/487188240.html