通过 Logo 语言教孩子编程
作为三个小男孩的父亲,我经常思考为了在未来的就业市场中保持竞争力,他们需要具备哪些技能。 显然,他们需要扎实的阅读、写作、数学和科学技能,并辅以历史、文学和艺术,使他们成为全面发展的人。 作为一名电脑爱好者,我认识到即使是基本的计算机技能也很有价值。
未来的 работники 需要能够使用文字处理器和电子表格,并且需要能够发送和接收电子邮件。 这些技能非常基础,可能仅仅勉强能让人找到一份体面的工作。 使求职者在竞争中脱颖而出的将是基本的编程能力以及与之相关的思维过程。 虽然我不提倡尝试教你的五岁孩子用 C 或 Java 编程,但我确实认为你应该尽早开始。 Logo 编程语言是向年幼的孩子介绍编程艺术和科学的绝佳方式。
对于那些不熟悉 Logo 语言的人来说,本质上,它是关于向一只青蛙发出编程指令,然后青蛙执行这些指令。 青蛙理解基本的命令,例如“向前”、“向后”、“向左转”等等。 这只非常聪明和听话的青蛙碰巧还带着一支魔法笔,他可以用它来描绘他在电脑屏幕上移动的路径。 通过向青蛙发送适当的命令,你可以让他描绘出几何形状。 对于家长或老师来说,很高兴知道 Logo 编程语言很容易学习。 我大约在 30 分钟内学会了它,而且当时我还在与流感作斗争。 毕竟,它对一只青蛙来说足够简单,对吧?
大多数 Logo 编程命令都是不言自明的。“向前”命令接受一个参数,即向前移动的像素数。“向左转”命令也接受一个参数,即转动的度数。“去”命令接受两个参数,X 和 Y,它们描述了青蛙应该去的位置在屏幕上的坐标。“落笔”命令告诉青蛙将笔放在地面上,以便它在移动时描绘出路径。 相反,“抬笔”命令使他抬起笔,以便他可以在不留下痕迹的情况下移动。 令人惊讶的是,这支笔还可以使用“笔宽”和“笔颜色”命令来改变其宽度和颜色。
“清除”命令会擦除青蛙留下的所有痕迹,但它会将青蛙留在原地。“重置”命令会清除屏幕并将青蛙放回中心。 大多数 Logo 程序都将以“重置”命令开始,除非程序的一部分需要能够从未知状态开始。
这只青蛙还理解数学。 他可以进行加、减、乘、除运算。 而且,他显然受过良好的教育,因为他知道数字 pi 和三角函数,如 sin、cos、tan、arcsin、arccos、arctan 以及函数 sqrt 和 exp。 当然,他也理解变量的概念,你的孩子的程序可以将值分配给变量以供以后使用。
Logo 还支持程序循环和分支。 if 语句接受一个(可能是复合的)布尔表达式,如果表达式的计算结果为真,则执行一个带括号的代码块,否则执行一个可选的替代块。 本质上,它看起来像
if <expression> { block } else { block }
还有一个 while 循环、一个 repeat 循环(它只是循环给定的次数)和一个 for 循环(它看起来很像 BASIC 中的 for 循环)。
对于本文,我使用的是 KTurtle,它随 KDE 环境一起提供。 KTurtle 本质上是一个 IDE,它具有编程窗口、执行窗口、错误窗口和调试器。 你甚至可以控制青蛙执行指令的速度。 我确信除了 KTurtle 之外还有其他可用的实现。 让我们看一个简单的例子,以便您可以了解该语言的外观。
reset forward 30 turnleft 90 forward 30 turnleft 90 forward 30 turnleft 90 forward 30
这个小程序几乎不需要解释。 它只是清除屏幕并绘制一个边长为 30 像素的方框。
让我们做一个更复杂的例子,展示青蛙的一些能力。
$sides = 100 reset $dotted = 1
repeat $sides { if ($dotted == 1) { pendown $red = random 0,255 $blue = random 0,255 $green = random 0,255 pencolor $red,$blue,$green $dotted = 0 } else { penup $dotted = 1 }
forward 5 turnleft 360/$sides }
这个小巧的程序通过使用虚线和彩色线条绘制一个 100 边形来模拟绘制一个圆。 实际上,当您将边数更改为小于约 20 的值时,程序中会有一个明显的错误。
修复先前程序中的错误是介绍 Logo 编程语言的最后一个特性的好方法:结构化编程。 Logo 允许您使用“learn”命令创建自己的命令或子程序。 例如
learn dottedline $n { $dotted = 1 repeat $n { if ($dotted == 1) { penup $dotted = 0 } else { pendown $dotted = 1 } forward 2 } }
这段代码使我们的青蛙能够执行一个名为 dottedline 的新命令。 现在我们的程序看起来像这样
$sides = 20 learn dottedline $n { $dotted = 1 repeat $n { if ($dotted == 1) { penup $dotted = 0 } else { pendown $dotted = 1 } forward 2 } } reset repeat $sides { $red = random 0,255 $blue = random 0,255 $green = random 0,255 pencolor $red,$blue,$green dottedline 6 turnleft 360/$sides }
而且,如果我们运行这个程序,我们会看到一个由彩色虚线组成的 20 边“圆”。 当 sides=3 时,这个程序也能正常运行,而之前的程序则不能。 随着边数变大,如何缩放“圆”仍然是一个问题,但这超出了本文的范围。
如你所见,Logo 是一种相当简单但又完整的语言。 我在本文后面介绍的示例对于大多数年轻的程序员来说可能有点高级; 但是,年龄较大的程序员应该能够理解这个级别的程序逻辑。 在这一点上,他们应该转向更高级的语言。 与此同时,你的年轻学生可以学习使用命令来绘制几何形状和图片。
作为家长或老师,我建议首先让学生给青蛙发出基本命令,以便他们熟悉结果。 然后,随着学生变得越来越成熟,向他们提供越来越复杂的几何形状,并让他们编写一个程序来模仿该形状。 如果你只做到这一步,想想你将完成什么。 你的学生将获得鼠标/键盘技能、几何/空间思维能力和基本的编程经验,并且他们可能会在这个过程中发出一些咯咯的笑声。 只要你引导他们,防止他们“卡住”和感到沮丧,他们就会做得很好。
作为结构化编程的介绍,我将向他们展示像这样的工作程序
learn box $count{ repeat $count { turnleft 360/$count forward 20*5/$count } } reset repeat 20 { box 5 turnleft random 1,360 penup forward 50 pendown }
让学生识别这个程序中的所有“可调参数”,逐个更改它们并观察结果。
正如你所看到的,Logo 对于讲师来说是一种容易掌握的语言,而且对于非常年轻的学生来说仍然非常容易上手。 就业市场可能对 Logo 程序员的需求不大,我并不是想暗示我的儿子长大后会成为程序员,但是基本的计算机和编程技能将为他们提供许多他们原本可能没有的选择,而 Logo 编程语言是一个良好的第一步。