推荐序一

推荐序一

我们为什么要“与小卡特一起学 Python”?

当我拿到《父与子的编程之旅:与小卡特一起学 Python》这本书时,非常巧,我正在琢磨怎么教我 8 岁的儿子编程。

当时为了找教材,我都做好了回一趟老家的打算——在一个旧书柜里,藏着二十多年前我参加全市组织的“初中生学编程”的所有讲义。那是我整个学生生涯中印象最深的教材了,而学习编程的岁月,也是我学生生涯中最深刻的记忆和最受益的历程。

30 年前,有位老人摸了摸小李劲的头,说了一句“计算机要从娃娃抓起”,当时绝大多数中国人还不知道计算机为何物。4 年后,正上初一的我得益于此,被选拔参加了全市组织的周末编程培训。乍一接触,便一头扎了进去,如痴如醉,即使刮风下雨感冒发烧也一节课没丢,至今脑海中还时不时浮现当时用循环编的由“*”组成的几何图形的画面。学编程不但没影响我的学习,反而给我带来了强大的自信。在获得全市最好的编程考试成绩后,追求卓越成为我的习惯,我的主课成绩也一直遥遥领先,就这样我非常顺利地度过了求学生涯。

说到培养孩子编程,有些人认为不宜太早,拔苗助长;有些人认为没用,因为在这个浮躁的当下,程序员已经沦为 IT 民工;还有些人觉得家长功利,以为是受新闻里那些少年出名的低龄程序员和黑客的影响。

先说功利。我是在非常严格的家庭中成长起来的,一路出类拔萃的成绩背后,是求学时每天 4 点起床早自习的辛苦和勤奋。为了从 99 到 100 那一分的提升,我付出了太多不必要的辛劳。所以在孩子的发展规划上,我没有任何情结,只是希望孩子不要重复我自己的弯路,能把他的天赋和能力发挥出来,做个有用的人,并无期待他“成名成家”的初衷。

再说说为什么孩子还这么小,我就着手教他学编程。无他,只为培养专一求精 的精神。

现在的孩子大多一直生活在一个宽松、丰富多彩的成长环境下,钢琴、围棋、机器人、网球、滑雪这些孩子们爱学爱玩的项目,我儿子也多有触及。但一直对他观察琢磨的我,发现了一个很大的问题,这也是现在孩子的通病:什么都玩一下,兴趣广泛,但对哪个都不通。不通非常致命,因为不通孩子就无法建立自信,没有自信就容易躲避困难,然后又更不自信,如此恶性循环。没有自信作为基础,孩子很难充分发挥自己的能力,形成自己的特长。所以说从小能有一个特长,有一个专注的、足够突出的拿手项目,对孩子的发展非常重要。

现在的孩子还有一个特点,就是非常聪明、精力旺盛。这个时候如果不能给他一个有乐趣、有难度的事,他的发展节奏就会被破坏,天赋就会被浪费。对于数理感觉比较好的孩子,编程其实是个非常好的选项。这里有创造、逻辑、条理、推理、计算,可以充分锻炼孩子。

至于学编程会不会变成 IT 民工命,我想这其实是一个“伪命题”。现在少年 MBA、少年领导力、情商培训很火,不是说它们没作用,但管理能力和情商在成长过程中可以潜移默化地培养,而具备一项专业的技能才是立身之根本。商界固然有马云、乔布斯这样没有专业技能的领袖,但更多能开创全新格局的还是有技术背景的业界领袖居多,如马化腾、李彦宏、Google 创始人、Facebook 创始人等。

我第一次接触 Python,是在十多年前。地球人都知道,编程语言是程序员表达 思想、解决问题、创造乐趣的载体。程序员早期的生涯,都是以学习和掌握数种甚至数十种编程语言开始的。Linux 刚进中国的时候,我和一些编程同好热衷于汉化和自制 Linux 发行版。当时最大的 Linux 版本 Redhat 是我们研究和学习的首要对象,尤其是它的系统安装程序,灵活而复杂。很快,从 Redhat 某个早期版本中,我们发现了 Python 被用来实现了系统安装程序。那是我第一次学习 Python。灵活、表达能力强、面向对象,这是我对它的概括。现在有很多酷而强大的新语言,但 Python 已然拥有了庞大的用户基础,也成为了 Google 工程师们使用的三大语言之一。当年的 苹果电脑标配了 Basic、绿色的字库界面,没有什么亲和力。而如今的 Python,天然和图形编程结合,想必会更得孩子们的喜欢。

跟孩子一起学编程,也是一个父亲的幸福时光。当我带着儿子完成 print "Hello World"print "1+2" 后,他抢过电脑,想了一下,然后用稚嫩的小手输入了 print "2345\*10"。计算机居然算对了!看到他惊讶的表情,我想每一位父亲都会享受到这种“成长的乐趣”。

陈俊

腾讯效果广告平台部商务研发中心总监

2014 年 10 月 12 日

目录

  • 版权声明
  • 对本书第 1 版的赞誉
  • 对本书第 2 版的赞誉
  • 推荐序一
  • 推荐序二
  • 第 1 版译者序
  • 前言
  • 关于本书
  • 第 1 版致谢
  • 第 2 版致谢
  • 第 1 章 出发吧
  • 第 2 章 记住内存和变量
  • 第 3 章 基本数学运算
  • 第 4 章 数据的类型
  • 第 5 章 输入
  • 第 6 章 GUI——图形用户界面
  • 第 7 章 判断再判断
  • 第 8 章 转圈圈
  • 第 9 章 全都为了你——注释
  • 第 10 章 游戏时间到了
  • 第 11 章 嵌套与可变循环
  • 第 12 章 收集起来——列表与字典
  • 第 13 章 函数
  • 第 14 章 对象
  • 第 15 章 模块
  • 第 16 章 图形
  • 第 17 章 动画精灵和碰撞检测
  • 第 18 章 一种新的输入——事件
  • 第 19 章 声音
  • 第 20 章 更多 GUI
  • 第 21 章 打印格式化与字符串
  • 第 22 章 文件输入与输出
  • 第 23 章 碰运气——随机性
  • 第 24 章 计算机仿真
  • 第 25 章 Skier 游戏的说明
  • 第 26 章 Python Battle
  • 第 27 章 接下来呢
  • 附录 A 变量命名规则
  • 附录 B Python 2 与 Python 3 的差异
  • 附录 C 自测题答案