教孩子们Forth编程

Lobsters Hottest 新闻

摘要

一位程序员分享了他们教初中和高中生Forth编程语言的经验,解释了为什么选择它而不是Python或Scratch,以及他们如何为12节课的课程设计教学大纲。

<p><a href="https://lobste.rs/s/n3dz7x/teaching_kids_forth">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/27 01:38

# 教孩子Forth 来源:https://gracefulliberty.com/articles/teaching-kids-forth/ 2026-04-14· 11 分钟·#计算 (https://gracefulliberty.com/articles/tags/computing) Forth 是一种不常用于教孩子编程的语言。像 Python 这样的脚本语言和像 Scratch 这样的可视化环境是更受欢迎的选择。但当我获得机会向中学生和高中生介绍编程时,我选择了这个来自 1970 年代的基于栈的拼接语言。 我对这个机会欣喜若狂。我热衷于让人们能够更好地掌控他们每天随身携带的设备中蕴藏的可能性。当人们对计算机有更多了解,特别是知道如何自己制作软件时,整个世界都会打开。这让我有机会为那些很可能永远不会发现这个世界的人撬开大门。 虽然我以前曾一对一地教过别人编程,但这是我第一次在课堂环境中教学。我从对教学几乎一无所知,到设计自己的课程,包括教案、课程大纲和一个数字学习环境。 ## 为什么选择 Forth? 我本可以选择教任何编程语言。我本可以选择 Python 或 Scratch,但我想探索一条不太常见的路,或许能找到一些被忽视的宝藏。 由于教学时间有限,而且我想教授更基础的概念,我希望能避免教语法。虽然 Python 对一个懂代码的人来说像是伪代码,但对初学者来说它仍然几乎无法理解,这是我在前几年一对一教编程时发现的。 我决定要么教 Forth 要么教 Haskell。Forth 吸引人是因为它是一种拼接语言。你写下指令,它就会按顺序执行一切。只要你知道什么是栈,你就能写 Forth 程序。 Haskell 吸引人是因为它很符合学生在数学中学习变量和函数的思考方式。我见过太多初学者困惑于编程中的变量是能装任何值的盒子,而不是数学课上学到的代数定义。 我最终选择了 Forth,原因有二。首先,它更容易整合进我可以为学生准备的定制学习环境中。其次,我认为在课堂期末演示中,过程式编程比函数式编程更容易理解。 一个额外好处是,使用像 Forth 这样相对冷门的语言,能确保即使之前编过程序的学生也能从中学到东西,同时不会让新手感到疏远。 ## 设计课程 在设计课程时,我知道时间会很紧。我有 12 节课,每周一次,每次一小时。我也知道他们可能不会做很多作业,因为课外还有自己的生活。 具体的学习成果是学生能在 Forth 环境中创作自己的艺术作品。可以是简单的图画、动画或游戏。我希望他们能有一些可以看到并保存下来的东西,而不是在课程结束后觉得学了很多技术细节却没什么成果。 让学生能在自己的电脑上运行他们写的代码很重要。更重要的是,他们不需要下载或安装任何东西就能运行,因为学生可能使用各种操作系统——有些可能无法安装第三方软件。 我对学习环境的第一个选择是用 Rust 从头编写我自己的 Forth 解释器,并通过 WASM 嵌入到课程网站中。不幸的是,修复我实现中的 bug 花费的时间比预期要长。所以我改变了方向,选择了 Nick Morgan 的 Easy Forth (https://skilldrick.github.io/easyforth/) 作为我们的课程内容和 Forth 解释器。 每节课我都制作了幻灯片和教案,上传到学生可以访问的在线门户中。其中包括一份 Easy Forth 的副本。 ## 介绍计算 然后我开始给学生上实际的课程。我把笔记本电脑连到大电视上展示幻灯片,开始了介绍性讲座。 我们先回顾了计算的历史,并讨论了什么是计算机。我最喜欢的部分之一是给他们看各种设备,问它们是不是计算机。当我给他们看一个算盘并说它是计算机时,他们一开始很困惑。我们的工作定义是:“任何计算数字的东西。” 他们很快意识到几乎任何东西都可以是计算机,包括他们自己! *这是一台计算机!*一个简单的算盘 在打破他们对计算机是什么的认识并设定好期望后,我开始专门教他们 Forth。我解释了它的使用场所 (https://www.forth.com/resources/forth-apps/) 及其嵌入式应用。 基础概念讲完后,下一步是进入我们的课程内容,深入学习 Forth。然而,Easy Forth 假设读者至少知道一门编程语言,并且了解基于栈的数据结构。这离实际情况差得很远。我的任务就是填补这个空白。 ## 什么是栈? 在碰电脑之前,我们必须先可视化 Forth 底层的基本数据结构:数据栈。 任何有基本计算机科学教育的人都会知道数据栈及其操作,但通常这不是给新学习者介绍的第一个概念。 所以我用了盘子。 在 Forth 中,当你输入由空格分隔的数字时,它们会被添加到栈中。例如,这将把 1、2 和 3 添加到数据栈: `` 1 2 3 `` 如果你要打印这些数字,比如用 `. . .`,输出的文本会是 `3 2 1`。因为栈是一种后进先出的数据结构。你可以“压入”一个项到栈上(放在顶部),或者从栈上“弹出”一个项(从顶部取出)。更复杂的操作大多是基于这些实现的。 为了演示这一点,我给了每个学生一叠纸盘子。然后我让他们用这些盘子执行某些 Forth 操作。当指令要求把一个数字压入栈时,他们就把数字写在盘子上,放到自己那叠盘的顶部。当指令要求把栈顶的两个数字相加时,他们就把它们移走,相加,再把结果压入栈顶。 将 7 和 6 压入栈顶,然后将栈顶的两个项相加,并把结果压入栈顶。结果将是 13。 `` 8 6 + `` 将 2 和 3 压入栈顶,然后将栈顶的两个项相乘,把结果压入栈顶。结果将是 6。 `` 2 3 * `` 我让他们执行许多操作,直到他们熟悉自己在做什么。他们扮演着 Forth 解释器的角色。计算机只是自动做这些工作。这让他们对自己系统在做的事情有了更深入的理解。 只有在那之后,他们的机器才替他们做这些工作。 ## 继续前进 栈的概念还记忆犹新,我们每周跟随 Easy Forth 的课程前进,保持节奏以便在课程结束时完成全部内容。整个过程很顺利。我解释概念,他们做练习,有问题我就当场回答。 由于我们只有十二个小时在一起,期末项目必须很小,但也必须展示整个课程积累的知识。我决定我们将使用 Easy Forth 中创建的图形框架来制作自己的各种艺术。可以是图片、动画或游戏。我不太相信他们有足够时间做一个游戏,但鼓励他们修改内置的贪吃蛇游戏,以做出独特的东西。 *EasyForth 贪吃蛇演示 (https://skilldrick.github.io/easyforth/#snake)*EasyForth 贪吃蛇游戏 为了方便,我把 Easy Forth 练习场的代码提取出来,做成一个独立的页面。不再是显示 Forth 代码定义图形的小方框,而是扩展成一个大练习场,一边是代码,一边是图形。 在最后一节课上,我让他们修改贪吃蛇游戏。他们很快发现只需对代码做少量修改就能改变规则和颜色。他们还没有重构大型代码的能力,但对 Forth 已经有足够的熟悉度,不会害怕去探索和修改。 然后我让他们创作自己的艺术。我给了他们一个用内置图形画东西的例子,甚至展示了一个例子,创建了一个词使得画线之类的形状更容易。每个学生都决定创作自己的艺术。大多数情况下,他们坚持逐像素绘制。 画完之后,课程就结束了,课程也完成了。我告诉他们我会在线上保留我的学习环境副本一段时间。如果他们愿意,欢迎继续自己实验和学习。 ## 关于 Forth 的反思 回想起来,Forth 是一种很有趣的教孩子的语言,但我不确定它是否是最好的选择。虽然这种语言没有复杂的语法,但它要求思考软件系统的某些部分,而这些部分即使是很多程序员也通常安全地抽象在平时工作的层面之下。栈是一种基础数据结构,但在早期教育中并不一定是学生需要时刻关注的东西。 尽管 Forth 有缺点,但最终代码只是一系列单词这一点很强大。一种具有更高层次构造的拼接编程语言可能有助于教学。也许像 Factor (https://factorcode.org/) 这样的语言,甚至是一种截然不同的方法! 我可能会选择一种能提供更清晰、更即时视觉反馈中,并且对底层结构强调更少的媒介。比如 Scratch,它教控制流、变量、函数等,但避免一些底层细节。而且让精灵移动很容易! 总的来说,我不认为编程语言本身有那么重要。在大多数情况下,Forth 和任何其他语言一样有能力。这个短期课程表明学生可以有效地学习它。有些学生可能更擅长某些范式,但可能没有办法完美地微优化学习过程。给孩子们提供一个能快速且可重复地看到他们工作输出的环境,我相信大多数人都会茁壮成长。自我导向的机会是关键。 无论如何,这门课给我和我的学生都带来了独特的体验。如果他们中有人以后选择编程,他们已经接触过低层介绍。一个需要深入理解计算机科学中基础数据结构的介绍。这给了我一个作为教师学习和成长的机会——在我要求他们迭代学习的同时,我也在教学中迭代。 ## 教学的重要性 最后再加一个补充。随着编程朝着随机自动化方向发展,教人们如何自己编程变得更加重要。对于已经知道如何编程的人来说,如果我们开始依赖大语言模型 (LLM, https://www.media.mit.edu/publications/your-brain-on-chatgpt/),我们的技能会萎缩。但对于那些从未学过编程等技能的人来说,使用 LLM 可能会让他们完全放弃这项技能 (https://www.psychologytoday.com/us/blog/the-algorithmic-mind/202603/adults-lose-skills-to-ai-children-never-build-them)。 此外,许多想学习新技能的人正在转向 LLM,越来越多地用从一种被证明不准确 (https://pmc.ncbi.nlm.nih.gov/articles/PMC12518350/)、谄媚 (https://arxiv.org/abs/2502.08177) 并且在某些情况下会严重恶化精神疾病 (https://arxiv.org/abs/2603.16567) 的技术中学习,取代了从潜在可靠来源的学习。所有这些对孩子们来说更危险,他们正在学习如何自己与世界互动。 因此,为每个人,尤其是孩子们,提供一个以人为中心的环境来学习编程等基本技能至关重要。更多来自不同背景的人应该愿意投入时间和精力,分享我们所拥有的知识,并解释如何安全地获取更多知识。 即使你不是老师,也要学会教学。拥抱这些机会。创造知识在人与人之间自由流动的空间。跳过那台随机鹦鹉。

相似文章

我如何在不懂原理的情况下编写一个Forth

Lobsters Hottest

本文详细讲述了作者通过利用Lua的C API并参照JonesForth,在最初并不了解如何构建Forth语言的情况下,编写MoonForth(一种Forth编程语言实现)的经历。

Forth 与 Lisp 的迁移之道

Lobsters Hottest

本章节选自《Let Over Lambda》,探讨如何使用宏在 Lisp 中实现 Forth 编程语言,强调语法的二元性和元编程技术。旨在向 Lisp 读者教授 Forth 概念,并讨论 Forth 设计背后的哲学。

面向所有文化背景儿童的个人电脑

Lobsters Hottest

Ramsey Nasser的演讲探讨了编程语言的英语中心化特性,并介绍了一种基于阿拉伯语的编程语言,旨在促进计算教育的包容性。

用现代地牢游戏教孩子编程

Hacker News Top

一位家长创建了一款名为Canon的现代网页地牢游戏,用来教八岁的孩子编程,玩家可以使用简单的脚本语言构建和修改游戏世界。