描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302563266
本书脱胎于清华大学计算机系老师为自己孩子编写的程序设计学习材料,是专为程序设计零基础的中小学生编写的自学教材,引导读者通过Scratch编程实践,领会计算机编程的思想和方法。本书强调分析设计与应用实践,内容丰富多彩,语言朴实无华,思维周密严谨,讲解深入浅出。书中大量原创的编程作品设计符合青少年认知与兴趣特点。
本书面向没有任何程序设计基础的四年级以上小学生。本书内容分为基础技能、思维训练、创新应用三个部分,小读者按章节内容提示一步步的自学和实践,逐步掌握和熟练Scratch程序设计。在本书的学习过程中,小读者的自学能力、计算思维、创新创意和编程实践能力均能得到有效地锻炼和提高,为将来进一步学习计算机专业知识与技术打下扎实的基础。本书编程内容少量来自于Scratch老版本自带的英文帮助,其他均为原创设计,新颖有趣,符合少儿心理特点。
第1篇基 础 技 能
第1章准备工作3
1.1程序与程序设计语言3
1.2Scratch语言4
1.3安装编程环境4
1.3.1安装桌面编辑器4
1.3.2设置界面语言7
1.3.3打开与关闭7
1.3.4版本更新8
1.4如何学习编程8
1.5本章小结9
第2章简单舞步10
2.1初识Scratch桌面编辑器10
2.1.1界面布局10
2.1.2积木语句与参数11
2.1.3积木语句的拼接组合11
2.2让小猫跳舞11
2.2.1顺序执行11
2.2.2重复执行12
2.2.3事件响应13
2.2.4从背景库中选取背景15
2.3增加伴舞者15
2.3.1从角色库中选取角色16
2.3.2同步不同角色17
2.3.3角色与造型17
2.3.4角色间的脚本复制18
2.3.5运行模式18
2.4保存文件19
2.5本章小结20
2.6练习: 灯光师21
零基础学Scratch编程目录第3章动画贺卡22
3.1动画基础22
3.1.1删除与新建角色22
3.1.2第一个字母角色23
3.1.3第二个字母角色25
3.1.4第三个字母角色28
3.1.5第四个角色29
3.2万圣节贺卡31
3.2.1跳动的红心31
3.2.2为舞台编程32
3.2.3文本角色33
3.2.4奇幻角色34
3.3本章小结36
3.4练习: 我的贺卡37
第4章石头剪子布38
4.1街舞38
4.1.1设置舞台背景38
4.1.2街舞者39
4.1.3自拍角色39
4.1.4同步的调试42
4.2石头剪子布43
4.2.1设置背景43
4.2.2添加角色导入图片44
4.2.3编写程序44
4.2.4复制角色44
4.3本章小结46
4.4练习: 我的动画46
第5章弹球游戏47
5.1弹跳的球47
5.2添加挡板47
5.3让球碰到挡板就反弹48
5.4游戏结束49
5.5游戏得分50
5.6更多游戏效果52
5.7双人对战54
5.7.1游戏设计54
5.7.2判断游戏输赢55
5.8本章小结56
5.9练习: 优化双人对战游戏57
5.9.1基础练习: 控制球的速度57
5.9.2提高练习: 控制球的反弹角度57
第6章沙滩赛跑59
6.1准备赛场59
6.2比赛选手60
6.3跑向终点61
6.4随机速度62
6.5胜利欢呼62
6.6升级弹球游戏64
6.6.1挡板与球的修改64
6.6.2增加蝙蝠怪65
6.6.3计分与增速65
6.6.4更多游戏功能65
6.7本章小结66
6.8练习: 游戏中的计时66
第7章超级英雄68
7.1绘图模式68
7.1.1体验位图模式69
7.1.2体验矢量图模式69
7.1.3绘图模式比较70
7.2绘制背景70
7.2.1白云与红日71
7.2.2城堡71
7.3英雄角色73
7.3.1造型与大小73
7.3.2跳起与落下75
7.4怪物角色75
7.5压死怪物76
7.6完善游戏功能76
7.7本章小结77
7.8练习: 星际旅行77
第8章捉迷藏79
8.1游戏设计79
8.2准备场景79
8.3随机确定小猴位置80
8.3.1随机选择乐器80
8.3.2随机露出部分身体81
8.4实现躲藏效果83
8.5本章小结83
8.6练习: 完善捉迷藏游戏84
第9章时尚换装85
9.1游戏效果说明85
9.2使用变量86
9.2.1用单个标志变量实现86
9.2.2用多个标志变量实现87
9.2.3改进单个标志变量的实现87
9.3使用消息89
9.4更多换装89
9.5本章小结90
9.6练习: 电风扇91
第10章百虫来袭93
10.1发射魔法93
10.1.1编程实现93
10.1.2脚本分析95
10.2游戏的基本元素95
10.3克隆与控制96
10.3.1实现克隆96
10.3.2控制克隆体96
10.3.3关于删除克隆体的问题97
10.4结束画面的优化98
10.5本章小结98
10.6练习: 完善百虫来袭游戏100
10.6.1基础练习100
10.6.2提高练习100
第2篇思 维 训 练
第11章绘图基础103
11.1试用“画笔”类积木103
11.1.1“画笔”类积木103
11.1.2尝试画线104
11.2绘制正多边形105
11.3绘制蜂巢图106
11.3.1问题分解107
11.3.2绘制单个蜂巢107
11.3.3绘制一排蜂巢107
11.3.4调整落笔和抬笔109
11.3.5完成蜂巢图110
11.4自制带参数的积木110
11.5复制已编写的部分程序112
11.6本章小结112
11.7练习: 绘制图形113
11.7.1了解画笔透明度的效果113
11.7.2画n角星113
11.7.3画螺旋113
11.7.4提高练习: 幻影移动114
第12章函数绘图116
12.1函数与图像116
12.1.1画坐标系116
12.1.2函数、坐标与图像116
12.2画圆117
12.2.1圆上点的函数关系117
12.2.2画上半圆117
12.2.3完成画圆119
12.3画椭圆120
12.4画抛物线120
12.5公转与自转121
12.6万花尺笔尖位置的函数表示122
12.7实现万花尺程序123
12.8本章小结124
12.9练习: 绘图与思考125
12.9.1研究万花尺程序125
12.9.2画点成图125
第13章递归与迭代计算126
13.1递归126
13.2绘制彩色雪花127
13.3绘制Koch雪花128
13.3.1分形128
13.3.2Koch曲线与Koch雪花129
13.3.3画Koch曲线与Koch雪花130
13.4绘制Julia集131
13.4.1函数的迭代计算131
13.4.2二元函数的迭代计算132
13.4.3图像化132
13.4.4其他Julia集134
13.5本章小结136
13.6练习: 绘制图像137
13.6.1绘制心形137
13.6.2绘制Mandelbrot集138
第14章数列与数字谜题139
14.1数列求和139
14.1.1编程思路139
14.1.2编程练习140
14.2数列求项140
14.2.1问题与编程思路140
14.2.2编程练习142
14.3数字谜题142
14.3.1六位整数问题142
14.3.2两数相乘问题143
14.3.3编程练习144
14.4本章小结145
14.5练习: 解决问题145
14.5.1数表145
14.5.2两数相乘146
14.5.3和与积146
第15章整除与质数147
15.1整除计数147
15.1.1小试牛刀147
15.1.2编程练习148
15.2判断质数148
15.2.1基本方法148
15.2.2加速测试149
15.3筛法求质数150
15.3.1筛法操作150
15.3.2筛法实现153
15.3.3显示质数表155
15.4本章小结156
15.5练习: 解决问题157
15.5.1分组问题157
15.5.2鸡兔同笼问题157
15.5.3韩信点兵157
第16章控制输赢比例158
16.1输赢比例158
16.2模拟比赛159
16.2.1程序设计159
16.2.2输赢统计160
16.2.3输赢比例162
16.3控制输赢比例162
16.3.1二分法162
16.3.2二分法的终止条件163
16.4本章小结165
16.5练习: 编程计算π166
第3篇应 用 实 践
第17章九连环169
17.1九连环游戏169
17.1.1九连环的操作170
17.1.2九连环的解法171
17.2编程实现九连环172
17.2.1绘制图形172
17.2.2实现操作173
17.2.3实现完整游戏175
17.2.4随机开局175
17.3思考与挑战176
17.3.1最佳操作数176
17.3.2自动完成九连环游戏177
第18章七巧板178
18.1绘制七巧板178
18.1.1绘制三角形178
18.1.2绘制其他形状179
18.1.3拼出初始图形179
18.2拖动与旋转180
18.2.1拖动模式180
18.2.2旋转的活跃状态180
18.2.3实现拖动181
18.2.4实现旋转183
18.3保存与载入185
18.4思考与挑战185
18.4.1保存多个拼图185
18.4.2为拼图命名186
第19章华容道187
19.1绘制华容道187
19.1.1绘制棋盘棋子187
19.1.2设定棋盘棋子位置188
19.1.3添加文字189
19.2保存与载入189
19.2.1棋局的表示方式189
19.2.2表示棋子摆放情况191
19.2.3用列表表示棋局192
19.2.4保存与载入192
19.2.5用单个变量保存棋局193
19.2.6关于起始编号的讨论194
19.3移动棋子195
19.3.1操作方式的设计195
19.3.2选中状态195
19.3.3判断棋子可移动196
19.4自动求解华容道198
19.4.1自动求解思路198
19.4.2设计数据结构198
19.4.3细化求解算法199
19.5思考与挑战201
19.5.1加快自动求解1201
19.5.2加快自动求解2201
19.5.3最优解法202
第20章打气球205
20.1基础游戏205
20.1.1准星205
20.1.2随机气球206
20.1.3其他206
20.2让游戏更丰富有趣207
20.3改进打气球游戏208
20.3.1加入乐趣点“选择”209
20.3.2加入情绪调节手段209
20.3.3提升基础体验211
20.3.4提升表现力212
20.4思考与挑战213
附录
附录A流程图217
A.1顺序结构217
A.2循环结构218
A.3分支结构218
附录B按键的侦测220
附录C几种重复语句的比较221
附录D调试226
D.1明确问题226
D.2细查代码226
D.3查看和设置变量值227
D.4设置断点228
某天,上小学二年级的儿子突然对我说: “爸爸,我想学编程。”其实更早时候我就在网上看到过有关儿童学习编程的一篇文章,其中提到了几个软件,都是充满游戏风格,着重设计与规划,以完成特定任务为目的的模式。这些软件并没有涉及指令或语句的概念,所传授和培养的是一种更广义的“编程”(也许翻译为“规划”或“设计”更合适)思维和能力。文章指出几岁孩子就可以通过这些软件学习编程。
儿子还在上幼儿园时就在手机上玩过LightBot游戏。当时给他玩的是初级版本,但已经有循环、函数调用等功能,比起网上那篇文章所介绍的软件,更像计算机编程。LightBot游戏中的小机器人能够按照玩家编写的指令序列执行动作,对玩家的编程成果给予直接且明确的反馈,因此即使我没有给儿子讲过任何编程概念,他也完全能够在游戏软件中学习、理解和掌握那些编程元素,通过不断尝试来修正自己的程序,完成游戏中的所有关卡任务。可见,一个吸引人的有趣平台加上直观的反馈,完全能够让孩子在玩中学习编程,而且是学习相对抽象的计算机指令的编程。
我在清华大学计算机系取得本科、硕士和博士学位,在计算机系教程序设计课程,而且负责程序设计竞赛,自然早想过什么时候让孩子学编程、学什么程序设计语言、怎么学这类问题。虽然还没有明确的答案和计划,但可以肯定的是——小学阶段就可以学编程,因为很多编程的概念并不高深。更小年龄的孩子虽然也可以学一些编程,但受认知能力所限,学不了太多,不得不浅尝辄止。而对于小学生,特别是小学中高年级学生来说,完全能够在相当长的一段时间内有计划地学习一定量的内容,而且所学内容足以用来进行丰富的创作或解决一些实际问题。同时,正因为学习者是小学生,往往教与学双方都更关注基础和必要的编程元素,不易受细枝末节的干扰而偏离“大道”。
我相信和追求“快乐学习”,希望学习路径方向正确,不走弯路。我认为C/C 语言、Java语言用作学习编程的入门语言并不理想,因为初学者难以用所学的内容编写出有趣的程序,即使最简单的“Hello world!”程序也会留给初学者一大堆问题,而且这些问题的答案不是初学者适合去了解的。如果未来想在程序设计方面往更专业一些的方向发展,我认为不宜在学习C/C 语言、Java语言之前就接触Python语言。我曾考虑过让儿子学习Logo语言,我初中时就学过它,有一定了解,但Logo语言除了画简单图形外好像也没有其他直观有趣的功能。“你想学编程,很好呀!但是你具体想学些什么呢?”我问儿子。
“我想学Scratch。”儿子毫不犹豫地回答。我听说过Scratch,但没有专门了解过。儿子想学Scratch,是因为学校高年级学生在风采展示的活动中展示了一些用Scratch编写的程序,引起了他的兴趣。我告诉儿子: “没问题。爸爸可以帮你了解一下,看看怎么来学。”
零基础学Scratch编程前言我从MIT的Scratch网站上下载了Scratch 2离线编辑器,从软件自带的教程开始了解。教程由若干很小的编程任务组成,各个任务大体上按照从最简单到略复杂的顺序排列。我一步一步照着做,完成前几个小任务就已经熟悉了Scratch的常用积木语句。我认为这些小的编程任务非常适合用来进行Scratch入门教学,对儿子来说,只需要帮他克服语言上的障碍——将英文翻译成中文。很自然地,我将教程内容展开并翻译做成PowerPoint幻灯片,同时把自己实践时所想的一些问题,也总结并在幻灯片中提出来,鼓励儿子通过动手尝试来找到答案。一些我认为基础和重要的程序设计概念和思想,在编程任务涉及时,及时在幻灯片中提出来。
我将笔记本电脑与家里的电视机连接,教儿子用双屏模式来学习,一个屏幕播放PPT幻灯片,另一个屏幕进行Scratch编程操作。PPT幻灯片的动画控制与页面切换,既避免了书本内容的一览无余,又能形成一种有控制的交流,还能让孩子自己来主导学习的进度。儿子对Scratch的学习就这样开始了,基本上是一种自学的模式,当他实践遇到困难时才找我帮忙解决。
儿子学Scratch学得很快乐。教学实验室的同事知道后,向我要了幻灯片给自己儿子学。他儿子也学得很快乐,而且会主动与老爸讨论“什么是变量”之类的问题。同事建议:可以开个班,让系里老师们的孩子一起来学Scratch。清华大学计算机系教职工孩子们的第一期编程学习班就这样开始了,每周五晚上一次课,持续大半个秋季学期。在学习内容上,除了更新最初的PPT幻灯片以外,我认真地规划了各次课的内容,一是考虑新知识循序渐进地分布在各次课程中,二是考虑后面的课程内容能够起到复习巩固前面课程内容的作用。课程内容前期主要来自于Scratch教程,后期来自于自己的设计安排。教学方式同样采取双屏自学模式,孩子们利用机房的计算机播放PPT幻灯片,同时在自带的笔记本电脑上进行Scratch编程操作。这个编程学习班的助教队伍超级豪华,因为孩子们的家长,即清华大学计算机系的老师们,可以陪着孩子一起参加这个编程学习班辅导自己孩子,因此这个编程学习班也是一个亲子活动班。系里老师们都没有用过Scratch,对这种编程语言也很感兴趣,有时两位大牌教授会丢下孩子,相互讨论眼前的Scratch编程任务。这并不奇怪,我在学习了解Scratch的过程中,同样很快就喜欢上了它。每次课程中,我会在机房走动,了解各个孩子的自学进展,解答他们的问题,帮他们排除一些困难,不过更多时候是引导他们自己来排查问题解决困难。一些共性的问题,我会总结并在下一次课程时讲解。这样的编程学习班得到了孩子和家长们广泛的好评,有两次我出差无法上课,还有家长主动代课,并且提前与我讨论并准备PPT幻灯片。同样的课程内容,后来又开了一期编程学习班,为了达到更好的教学效果,还专门为每次课程设计了课后练习。本书的第一部分就来自于这一期编程学习班的内容。
在第一期编程学习班孩子与家长们的要求下,我开设了后续的Scratch编程学习班。在这后续的“提高组”(第一期相应称为“入门组”)编程学习班上,我主要让孩子们体验编程与数学的关系,了解计算机解决问题的方式方法,普及一些基础而重要的程序设计算法思想,为进一步深入学习程序设计甚至是信息学竞赛打基础。提高组编程学习班仍然采用PPT幻灯片自学的方式,教学内容形成了本书的第二部分。
在组织孩子们学习Scratch编程的过程中,我看到了孩子们的学习能力和创新能力,多次从心底为他们的优异表现喝彩。这两种能力也是我采用这种教学模式所希望激发和培养的能力,相信对孩子们的一生都有裨益。言归正传,该系统地介绍一下本书的内容了。本书共20章,分为三个部分。第1章~第10章为第一部分“基础技能”,主要介绍Scratch中角色、造型等基础概念,由浅入深地引入各类积木语句的实践应用;第11章~第16章为第二部分“思维训练”,从绘制图形入手,强化数学思维,介绍递归、递推、枚举、筛法、二分法等算法思想;第17章~第20章为第三部分“应用实践”,是Scratch编程实践的综合与提高。
本书的前两个部分分别来源于前文提到的“入门组”和“提高组”编程学习班的课程内容,没有任何编程经验的孩子也能够轻松地从第1章开始学习。在写作本书过程中,官网的Scratch 2离线编辑器改版升级为Scratch 3桌面编辑器,在界面上有较大改动,在功能上也有变化,经过考虑将章节内容都更新为与新版编辑器一致。第三部分的内容来源于孩子们学习Scratch过程中实际编写的游戏项目,以及我本人特别想用Scratch实现的功能(我实在太喜欢Scratch这一编程语言了)。与PPT幻灯片相比,书本缺少了逐步呈现的控制,但可以用更详细的文字进行解释说明,算是各有优劣。此外,在写作过程中,产生了一些新的想法和更深入的思考,也融入到本书的内容中。如何学习本书呢?不建议小学低年级甚至更小的孩子学习本书。虽然他们也能够完成前几章的学习,但后续的章节对他们来说挑战太大,而学得太少的话,意味着掌握的工具少,实践与创新的空间小,得到的锻炼与相应收获少,乐趣也少。另外,因学习内容太难导致半途而废并不是好的体验,没必要给孩子留下编程很难学的印象。
建议孩子自学。家长可以给一些基础的帮助,例如,安装Scratch桌面编辑器,教孩子基本的计算机操作,例如登入系统、运行程序、输入汉字等,但学习Scratch编程还是让孩子按自己的节奏来。自学能力是个人不断成长的必备能力,培养锻炼孩子的自学能力,是本书的重要目的之一。
学习编程的方法与学习语文、数学、英语都不一样。编程是一种思维与实践紧密结合的创造性活动。书上的内容都理解了,并不意味着就会编程。我敬爱的导师吴文虎教授给学生们上课时,就多次强调: “编程不是学会的,是练会的。”本书建议的自学方法是: 逐段地阅读理解→实践探索→思考总结→实践应用。
阅读本书时,身边应该有一台已经打开的计算机。书中讲到了什么操作,读者就应该同步地在计算机上进行相应的操作;书中提出一个问题,读者就应该暂停住,先思考自己的想法和答案,再往下阅读;书中提出要自己尝试,读者就应该自觉地想办法去探索和尝试;书中有时只提出问题,并不给出答案,但读者真正实践了就会得到正确的答案。我希望给予孩子探索与收获的学习乐趣。
本书并没有采用讲解展示语句功能的方式介绍Scratch语言,而是从要完成的任务、要实现的功能或效果出发,即从需求出发引入可用的语句,把语句、编程语言视为解决问题的工具。与编程语言相比,分析问题→设计方案→规划程序→具体实现→修正调优这种以程序设计为手段解决问题改变世界的方法,才是更重要的。这种方法,以及在方法运用的过程中涉及的思想和技术,与具体编程语言无关,才是学习编程所真正要学的东西。我相信,这样的编程学习才能够更好地培养孩子解决问题的能力,才能更好地支持孩子将心中的创意展示出来,将创新的想法具象化,敢想敢干,能想能干。
本书刚开始的几章内容简单,学起来较快,后续章节会不断用到前面已学的内容,越来越复杂,对思维能力和动手能力的要求也越来越高,学习进度自然会慢下来。而且,随着综合的编程能力提升,孩子会想要实现自己设计的动画和游戏,这是应该鼓励的事情。家长最好能够给孩子一些命题编程任务,即给出一个主题,让孩子想办法编程来表现,例如,让孩子实现一个堆雪人的场景或游戏。这些书本外的编程活动,是孩子学习编程最好的练习,比每章后面的练习题好百倍。能够多做这些自由的编程练习的话,完全不必着急学后续章节。毕竟学完一本书并不是真正的目的,打下坚实基础,熟能生巧,让孩子将来学得更好才是目的。另外,本书第二部分、第三部分靠后的章节难度很大,对初中生来说也是不小的挑战,因此建议孩子按自己舒适的进度去学习,花两年、三年甚至更长时间也可以。
编程学习遇到的最大困难可能就是查错调试了。初学者可能犯任何错误,而且自己完全找不出问题来。虽然编程调试有利于培养孩子的耐心和细致,但最好能够有懂程序设计的人提供“保底”的帮助,避免孩子长时间无法解决问题,学习热情受到打击。如果有同样在学Scratch的小伙伴一起讨论查错,也是非常好的。本书附录D专门介绍了一些调试的方法和技巧,但对初学者的帮助有限。有条件的家长,可以考虑和孩子一起来学Scratch,这样与孩子有共同的语言,一起学习、一起讨论、一起成长,也是珍贵和难得的体验。饮水思源,感谢促使本书成文的所有人!首先感谢以吴文虎教授为首的师尊前辈,本书一脉相承了他们关于程序设计教学的理念。感谢教学实验室和系里的同事们对编程学习班的支持,感谢孩子们、家长们对编程学习班的学习方式和学习内容的肯定。感谢系里的喻文健老师,本书中基础弹球游戏的若干项扩展来自他的创意。特别感谢金山西山居的唐一鸣先生,本书第20章来源于特邀他给提高组编程学习班带来的一次课程。当然,也要感谢儿子促成我进入了Scratch的奇妙世界。孩子是我们未来的希望,愿本书的小读者们永保学习的愿望与乐趣!
邬晓钧2020年5月新冠肺炎疫情期间于清华园
评论
还没有评论。