台湾有一所大学定义了学生在校四年学习,毕业前必须具备三种”语言”能力,包括中文、英文和程序设计语言,这自然是呼应现今社会发展需求的产物。前两者是纯粹的语言能力,做为与人沟通以及文化理解的主要工具。程序设计语言同样是沟通与理解的工具,只不过对象是计算机,它是对应高度科技化社会发展下,工作职涯所应具备的基本知能。
程序设计语言做为与计算机沟通与理解的工具,它的沟通功能主要体现在”命令”计算机按指令办事。计算机就像〈一千零一夜〉故事中的神灯一样,它有强大的能耐,但阿拉丁得用它听得懂的语言来下命令给它,万能的神灯才能完成各项神奇任务。
能与计算机沟通,更重要的是要能理解,理解计算机是怎么做事的,学习程序设计语言和编程来让计算机动作的过程,就是最好的理解计算机的方法。
在「浅谈儿童编程教育」一文介绍了最简单的儿童程序设计语言Logo,并用Logo写了简短的程序来让小海龟在屏幕上画图。其实像Logo、Scratch或是可程序操控机器人Dash&Dot组合等,向前(Forward)、向后(Back)、右转(Right)、左转(Left)等几乎都是最基础的指令(instruction),也许是因为受到派普特一开始开发Logo语言就有这些指令的影响,但最根本原因是要让学习者学会操控程序设计的主角(在Logo是小海龟,Scratch是猫,Dash&Dot则是能移动的Dash机器人),并且可以立即看到操控的结果。在一般的程序语言中反而是看不到这些基本指令的。
不像Logo和Scratch只能在计算机屏幕上看到程序执行结果,若能对机器人编程来控制它执行各项任务,学习程序设计的兴趣会更高,效果也会更好。Dash&Dot就是这么一个风靡全球的可程序控制机器人组合,它得到盖兹与玛琳达基金会的推荐,并曾进入美国白宫让奥巴马总统和小朋友一起学习编程,因而被认证为最适合16岁以下学生学习编程的机器人玩具。
Dash&Dot主要透过手机或平板等移动终端来操控,移动终端上有5个不同功能的应用(APP),透过蓝牙技术和Dash或Dot连结。在这5个APP中Blockly和Wonder都内建任务挑战,它们事实上是一份完整的程序设计教材,每一个任务关卡都是在训练编程来操控机器人的方法。通过这些任务挑战后,可以创建自己的项目(project),让机器人按照自己的想法做事情。
下面我们就用一个实际项目范例来了解计算机的运作以及对应的程序应该如何设计,这个项目就是让Dash扮演一个巡逻机器人:一开始Dash会静止不动,直到按下头上按钮才开始像卫兵一样前后走动巡逻,在巡逻过程中,听到有人说话,就停下来,眼睛转动3圈,最后回答「你好!」。
首先要分析项目的内容,并把它画成流程图,图中会标出程序执行时的每一个步骤。整个项目分成三个部分:
❶ Dash机器人静止等待启动键被按下
❷ Dash机器人不断向前走50公分后右转180度,直到听到有人说话才停止
❸ Dash机器人向上看,眼珠子转3圈,然后说”嗨”
第❶部分的程序是让机器人处于静止的状态,一直到一个特定事件发生,这个事件就是机器人上的启动键被按下。在Blockly应用中编程时应该使用下面这个指令:
第❷部分的程序是让机器人判断是否听到说话声,如果没有听到说话声,则Dash执行向前走和右转两个指令。在这里要使用程序语言中的回圈与判断指令,回圈内部是一段指令,计算机会从回圈起始处开始执行,一直到回圈结尾,再回到起始处继续执行。由于程序会在回圈中重复不断地执行,因此必须加入一个条件判断,当条件被满足时就跳出回圈外面,继续执行下面的指令。对照流程图和下面的程序片段可以帮助了解程序的撰写方法。
第❸部分程序中也有一个回圈,但这个回圈只会执行指定的次数就离开回圈内部,跳到外面继续执行下面的指令。回圈内部的两个指令看起来一模一样,它们的差别在于”自定义”的内容。编写指令时按下”眼灯模式”指令会跳出一个设定Dash机器人眼灯的画面,可以控制在这个指令中眼睛的哪几个灯要点亮,只要把前后两个”眼灯模式”的内容设定为错开点亮,例如先偶数号灯点亮,下一个指令变成奇数号灯,连续执行时看起来就像眼睛在转圈圈的效果。
把这三个部分的程序片段连接起来,就成为完整的巡逻机器人控制程序了。
按左下角的程序执行键,就会看到Dash机器人来来回回的走,听到有人说话时会停下来,转转眼珠子,然后说”嗨”结束。每一个指令左侧都有一个指示灯,当程序执行到该指令时,这个指示灯会亮绿色,可以一边看着机器人执行程序,一边对照程序执行到哪一个指令。
学习程序设计时,事件驱动、重复执行和条件判断是很重要的概念。所谓事件驱动是指计算机在其所处状态下(例如静止不动),接收到一个外部来的动作(例如某个按键被按下或接收到声音等)后,驱使计算机改变原先的状态。
重复执行在程序设计上常以回圈的形式表示,回圈会”包住”一个程序片段,当把回圈内指令全部执行完就会计数一次。回圈分成两种类型,一种是有限次数的回圈,另一种则是无限回圈。有限次数回圈需要一个计数器,当计数器数值达到设定数目才会跳出回圈,否则就依序执行回圈内的指令;无限回圈则是让计算机不断地执行回圈内指令,但这样计算机就不会停下来,因此通常会加上一个条件判断,当条件被满足时就跳出回圈,不再执行回圈内的指令。其实这两种回圈类型可说是一样,都需要一个终止回圈执行的条件判断,只不过有限回圈是单纯的以计数器来控制回圈执行次数。也因为有条件判断式,才让计算机(或机器人)感觉上有一点智慧,表现得好像懂得外来刺激一样。
程序设计的训练就是在培养运算思维,学习者会学习到将一个复杂问题分解、规划解决每一个分解后问题的步骤、使用适当策略解决困难的问题,并能熟练地编程与计算机(或机器人)沟通。而搭配机器人来学习程序设计,可以提高学习者的兴趣,并加深学习的效果。