尽管笔者没有着意宣传此书,但该书的销售还不错,第一次印刷的3500册基本上售完,有些网店的库存也只剩下一两本,也有少量二手书在售。考虑到读者对此书的需求,笔者特向出版社提出重印请求,在出版社的支持与帮助下,此书得以重印,特在此告知读者。
前言
一个年满6周岁的儿童,会在秋季进入小学,并从此开始一段长达16年(甚至更长)的学生生涯。作为家长,没有人会怀疑孩子上学的必要性。但是,如果一个6岁的孩子打算去学钢琴,那么他(她)的家长一定经历过反复的思考:为什么要学钢琴?如果必须给足3个理由的话,我的猜想是:一、培养音乐素养,未来成为有修养的人;二、磨练意志;三、学会一种技能,如果恰好孩子有天赋,也许未来会成为一个钢琴家。
不过,在当下,更多家长的心中可能怀着另一个疑问:为什么要让孩子学习编程?显然编程无关修养,或许可以磨练意志,但却很少有家长期待孩子未来会做一名程序员,最后一点是我在接触了为数不多的家长后得出的结论。
孩子为什么学编程?我这里斗胆抛出三个理由,供大家商榷:一、编程即将成为一种基本的生存技能;二、编程可以将现有学科连接起来,成为不同学科的实验室;三、编程培养一个人观察问题、分析问题、解决问题的能力,这些问题指的不是书本上的题目,而是现实世界中的真实问题。下面分别给出简短的解释。
一、编程是一种附加技能
所谓学习编程,指的是学习一门语言——与机器进行交流的语言。语言是用来交流的,作为人类,我们交流的对象有三类:人、自然及人造物,即可编程的机器。人与人之间使用自然语言交流,如汉语、英语等;人与自然之间使用科学语言进行交流,如数学、物理、生物等;人与机器之间使用程序语言进行交流,如C、Java、Python等,也包括AppInventor中使用的块语言。
科学技术飞速发展,“飞”意味着速度极快,智能手机就是一个例证。人造物就像被赋予了生命,它们有身份,有“智能”,甚至有行动能力,可以实现远程控制,等等。在可预见的未来,也许一两年,也许三五年,我们的周围将充斥着这样的人造物,通过简单的编程,可以让人造物满足用户的个性化需求。时下流行的概念,如无人驾驶汽车,也许下一刻就会来到你的身边。
曾几何时,司机和打字员都算是一种职业,然而在今天,几乎人人都会打字,如果有必要,人人都可以成为司机。可以预见,在不久的将来,程序员不再是一种职业,而是一种技能,掌握这个技能的人,将拥有更多与机器交流的机会。
二、编程贯通各个学科
这个结论虽然无法用推理来证明,但当你阅读本书的目录时,相信你会有所体会。书中包含了15个应用案例,从应用名称上看,它们覆盖了语文、数学、物理、英语、音乐、美术等学科,实际上还远不止于此。每个应用几乎都涉及到功能描述、用户界面设计、程序编写与调试等环节,每一段功能描述都是一篇完整的说明文,每个用户界面设计都要基于产品功能与用户体验,而程序的编写与调试更离不开缜密的思考与判断,因此,完成一个应用,对开发者而言,是一次解综合题的过程,这里所说的综合题,不仅限于某个学科,而是覆盖多学科的、真正的综合性问题。游戏类应用最能体现这种综合性,典型的例子就是第14章的接彩蛋游戏,彩蛋的外形设计、不同类型彩蛋出现的概率、彩蛋位置的随机性、下降的速度等等,这些因素都会影响游戏的趣味性,对于开发者而言,这些都是具有挑战性的综合性问题。
三、解决真实的问题
结论三不仅仅是结论二的推论,它还有另外两层含义。作为学生,他们面临的大部分问题是书本上的问题,这些问题多半是对现实世界问题的简化——保留了关键因素,忽略了非关键因素。然而在现实世界里,也许正是那些非关键因素决定了事情的成败,这是第一层含义。第二层含义是:书本上的问题都有明确的答案,而现实世界中的问题没有答案,甚至连解题方法都是未知的。
在用计算机解决现实世界的问题时,需要的不仅仅是编程的知识与技能,还需要使用数学、物理等学科的思维方法,对现实世界的问题加以抽象,提取出其中的数学或物理概念,然后再将这些数学、物理概念转化为计算机能够处理的数据,最后才是编写程序、解决问题。本书的最后两章数独和五子棋体现了这一解题过程。以数独为例,这本来是一个算术问题,但是要让问题可解,必须将算术问题转化为集合问题(高一数学),有了集合这门数学语言,才能将问题转化为程序能够处理的数据,并最终使问题得解。
本书共16章,包含15个案例,前10章中的案例相对简单,偏重于基本知识与基本技能的讲解,适合于小学高年级以上的学生;第11~13章中案例的复杂度加大,程序编写的难度也有所提升,适合初中以上的学生;最后3章中选择的是游戏类案例,综合性较强,尤其是“数独”游戏中涉及到了高中数学知识(集合),适合初中高年级或高中学生。
最后还要说明一点,AppInventor本身是一款可视化的编程工具,操作起来相对简单,而经过多年磨合完善之后的汉化版本,使得学习曲线变得更加平滑,这也是我们(张路、金从军)奋斗的目标——把编程语言变得跟输入法一样简单,让每个人都能很容易地学会编程,并体会创造的快乐。