第1章 欢迎来到编程世界 / Chapter 1 Welcome to the World of Programming
你有没有想过,你每天玩的《我的世界》小游戏、刷短视频时自动跳出来的你喜欢的猫咪视频、甚至妈妈点外卖时显示的“预计30分钟送达”,背后都有同一种看不见的“魔法”在起作用?这种魔法不是童话里的咒语,而是编程(Programming)——给计算机下达清晰指令的艺术,让它帮你完成你想做的任何事。
很多人对编程的第一印象是“只有戴厚眼镜的程序员坐在电脑前敲满屏看不懂的字符才能做”,但实际上,编程的本质和你教弟弟妹妹怎么搭积木、告诉机器人怎么帮你拿拖鞋没有任何区别:你只需要把要做的事拆成一步一步的小指令,按顺序告诉计算机,它就会乖乖照做。甚至你不需要用到电脑,用纸和笔就能完成第一次编程体验——这就是本章要带你做的事。
---
1.1 什么是编程?What is Programming?
从本质上来说,编程就是人和计算机交流的语言。就像你和妈妈说话用汉语、和外国小朋友说话用英语一样,你要让计算机听懂你的意思,就需要用它能理解的“语言”下指令。
不过计算机可比人“死板”多了:如果你对妈妈说“我要吃凉的甜的”,妈妈可能会给你做冰棍、雪糕或者冰淇淋,但如果你对计算机说“帮我算个题”,它完全不知道你要算什么——你必须给出清晰、准确、没有歧义的指令,比如“计算1+1的结果,把答案告诉我”,它才会输出正确的答案。
> 💡 电子版小贴士:最早的“程序员”并不是现代意义上的技术人员,而是19世纪的英国诗人艾达·洛夫莱斯,她为分析机编写了世界上第一个算法,被认为是史上第一位程序员。
编程语言就是人和计算机交流的工具,经过几十年的发展,现在已经有两百多种编程语言,有的适合做网站,有的适合做人工智能,有的适合小朋友学习。本书要带你认识的两种语言——Scratch和Python,就是目前全球最适合青少年编程启蒙的两种工具,就像你学画画先学蜡笔再学油画一样,我们会先从简单的Scratch开始,再过渡到更强大的Python。
---
1.2 什么是计算思维?What is Computational Thinking?
很多人觉得学编程就是学写代码、记命令,但实际上
很多人觉得学编程就是学写代码、记命令,但实际上,学编程最核心的收获,根本不是背下了多少条代码命令,而是掌握一种叫计算思维(Computational Thinking)的底层能力——它就像你学数学学的“数感”、学语文学的“语感”一样,是编程给你留下的真正有价值的“思维肌肉”,哪怕你以后不做程序员,这种能力也能帮你更高效地解决生活中遇到的各种问题。
---
1.2 什么是计算思维?What is Computational Thinking?
计算思维这个概念最早是由美国卡内基梅隆大学的周以真教授在2006年提出的,它的定义是:运用计算机科学的基础概念,进行问题求解、系统设计、人类行为理解的一系列思维活动。听起来很复杂?其实用一句话就能概括:把大问题拆成小问题,找规律,用通用规则解决,最后按步骤执行。
计算思维包含4个核心要素,每个要素都对应着生活中你早就用过的能力,只是以前你没把它们和“编程”联系起来:
1.2.1 分解(Decomposition):把大问题拆成小问题
你有没有试过自己组装一个几百块的乐高城堡?如果直接把所有零件倒在地上瞎拼,大概率会拼到一半就放弃。但如果你先把城堡分解成“城墙、塔楼、大门、屋顶、装饰”几个部分,再每个部分单独拼,最后组装起来,就会容易得多。
这就是分解的本质:面对一个复杂的大问题,先把它拆成若干个独立的小问题,每个小问题单独解决,最后组合起来就能解决大问题。在编程里,比如你要做一个“打地鼠”的小游戏,就可以分解成“画游戏背景、做地鼠出现的动画、做锤子敲击的动画、算分数、判断游戏结束”几个小任务,每个任务单独写代码,最后拼起来就是一个完整的游戏。
> 💡 电子版小贴士:周以真教授提出计算思维的时候,曾经举过一个例子:计算1到100的和,不用一个个加,而是先找规律:1+100=101,2+99=101,一共有50对这样的数,所以总和是101×50=5050,这就是分解+模式识别的典型应用。对应的数学公式可以表示为:$$S_n = \frac{n(a_1 + a_n)}{2}$$,其中$n$是项数,$a_1$是首项,$a_n$是末项,代入$n=100, a_1=1, a_n=100$,就能得到$S_{100}=5050$。
1.2.2 模式识别(Pattern Recognition):找重复的规律
你有没有发现,你每次放学回家的路线都是固定的:先过马路,再走小区门口的小卖部,最后到单元楼?你每次妈妈让你买酱油,都会给你10块钱,找回3块?这些重复出现的、有规律的东西,就是模式。
在编程里,模式识别就是找到问题里重复出现的部分,把它们统一处理,不用重复写代码。比如你要做一个小猫走路动画,小猫每走一步都要“切换造型→移动10步→等待0.5秒”,这个重复的步骤就是模式,你不用每一步都写一遍,只要把这三个动作打包成一个“自定义积木”(Scratch)或者“函数(Function)”(Python),下次直接用就行,能省很多事。
1.2.3 抽象(Abstraction):提取通用规则,忽略无关细节
你妈妈做番茄炒鸡蛋的时候,不用每次都记“今天买的番茄是红的还是粉的,鸡蛋是大的还是小的”,她只要记住通用规则:“番茄切块,鸡蛋打散炒熟,先放番茄再放鸡蛋,加盐和糖调味”,不管什么番茄鸡蛋,按这个规则做都不会难吃。
这就是抽象的本质:去掉问题里和当前目标无关的细节,只保留核心的通用规则。在编程里,比如你要写一个“计算所有三角形面积”的程序,你不用管这个三角形是大的小的、红的绿的,只要记住公式“面积=底×高÷2”,就能算出所有三角形的面积,这就是抽象。
1.2.4 算法(Algorithm):按步骤解决问题的流程
你有没有过上学快迟到的经历?你出门的步骤是不是固定的:“起床→穿衣服→刷牙→吃早餐→穿鞋→出门”?这个按顺序执行、能保证你按时到校的步骤,就是算法——算法就是解决某个问题的、明确的、有限的步骤集合,按这个步骤做,就一定能得到正确的结果。
在编程里,算法就是你写的代码的底层逻辑,比如你要写一个“判断一个数是奇数还是偶数”的程序,算法就是:“输入一个数→把这个数除以2→如果余数是0,就是偶数→如果余数不是0,就是奇数→输出结果”,这个步骤就是算法,不管用什么编程语言写,这个核心步骤都不会变。
我们可以用一张流程图来总结计算思维的四个核心步骤: ```mermaid graph LR A[复杂问题] --> B[分解 Decomposition<br>拆成独立小问题] B --> C[模式识别 Pattern Recognition<br>找重复规律] C --> D[抽象 Abstraction<br>提取通用规则,忽略无关细节] D --> E[算法 Algorithm<br>写出明确解决步骤] E --> F[得到正确结果] ``` > 📖 纸书排版:上述流程图可放在页面中央,用浅灰色底纹区分,方便读者直观理解计算思维的逻辑。
很多人觉得“计算思维只有程序员才需要”,但实际上它早就渗透在你生活的方方面面:你整理书包的时候把书按学科分类(分解),你发现每次周末妈妈都会带你去公园(模式识别),你总结出“考试前复习错题比做新题有用”的经验(抽象),你做番茄炒蛋的时候按步骤放材料(算法)——这些都是计算思维的应用。学编程,本质上就是把这些你本来就有的思维能力,变得更有条理、更系统,能解决更复杂的问题。
---
1.3 Scratch vs Python:两种编程启蒙工具对比 / Scratch vs Python: Comparison of Two Introductory Programming Tools
现在你已经知道了编程的本质和计算思维的核心,接下来就要认识我们这本书要带你学习的两种编程工具:Scratch和Python。它们就像编程世界的“蜡笔”和“油画”:蜡笔容易上手,色彩鲜艳,适合小朋友涂鸦画画;油画功能更强大,能画出更精细的作品,适合进阶学习。
1.3.1 Scratch:可视化积木编程 / Scratch: Visual Block-based Programming
Scratch是由美国麻省理工学院(MIT)媒体实验室在2007年开发的一款面向青少年的可视化编程工具,它的名字来自嘻哈音乐里的“ scratching(即兴打碟)”,寓意是“像打碟一样即兴创作自己的数字作品”。
Scratch最大的特点是完全不用记代码语法,所有功能都用彩色的积木块表示,你只需要像搭乐高一样把积木块拖拽拼接,就能做出动画、游戏、互动故事。比如你想让小猫说“你好”,只需要拖1块“说”积木,填上“你好”两个字,点击运行,小猫就会立刻说出来,全程不用写任何字符代码。
根据MIT媒体实验室2023年的统计数据,全球已经有超过1.2亿青少年注册使用Scratch,创作了超过3亿个数字作品,是目前全球用户最多的青少年编程工具。Scratch适合8-14岁的初学者,它的优势非常明显:
- ✅ **零语法门槛**:不用记复杂的代码规则,不会出现因为打错一个字母就运行失败的情况,不会打击学习信心;
- ✅ **即时反馈**:拖完积木立刻就能看到动画、游戏的运行效果,能快速获得成就感;
- ✅ **创意表达优先**:不用先学枯燥的理论,想做什么直接拖积木做,在创作中自然学会编程思维。
比如你想做一个“打地鼠”的小游戏,在Scratch里只需要拖10块左右的积木就能实现:当绿旗被点击时,地鼠随机出现在3个洞里,等待1秒后隐藏,当鼠标点击地鼠时,分数加1,地鼠发出“嗷”的声音。全程不需要写任何代码,10分钟就能做完。
1.3.2 Python:文本编程语言 / Python: Text-based Programming Language
Python是1991年由荷兰程序员吉多·范罗苏姆发布的一款通用编程语言,它的设计哲学是“优雅、明确、简单”,语法非常接近英语,是目前全球最流行的编程语言之一,在TIOBE编程语言排行榜上常年位居第一,被广泛应用于网站开发、人工智能、数据分析、自动化办公、游戏开发等几乎所有领域。
Python和Scratch最大的区别是用纯文本写代码,需要掌握语法规则,但功能比Scratch强大得多。比如刚才Scratch里让小猫说“你好”需要拖积木,在Python里只需要写一行代码: ```python print("你好") ``` 没错,`print`在英语里就是“打印”的意思,这行代码的意思就是“打印输出‘你好’两个字”,非常简单好记。
Python适合12岁以上的学习者,尤其是已经学过Scratch、想要进阶解决实际问题的学习者。它的优势也非常突出:
- ✅ **语法简单**:没有复杂的符号规则,读起来就像读英语句子一样,入门门槛比C++、Java等其他文本编程语言低很多;
- ✅ **功能强大**:能实现几乎所有你能想到的编程功能,比如做一个自己的网站、训练一个能识别猫狗图片的人工智能模型、分析你最喜欢的动画片的豆瓣评分、自动帮你整理电脑里的文件;
- ✅ **应用场景广**:现在很多小学、中学的信息学竞赛、大学的人工智能课程都用Python作为教学语言,学完Python之后不管是升学还是做实际项目都用得上。
比如你想统计你过去一年看过的所有动画片的总时长,在Python里只需要几行代码就能从表格里自动算出结果,而Scratch因为没有数据处理功能,根本做不到这一点。
我们可以用一张表格来对比Scratch和Python的核心差异: | 对比维度 | Scratch | Python | |---------|---------|--------| | 编程形式 | 可视化拖拽积木 | 纯文本代码 | | 语法门槛 | 零门槛,不用记语法 | 需要掌握基础语法规则 | | 学习年龄 | 8-14岁初学者 | 12岁以上,有Scratch基础更佳 | | 核心优势 | 快速做动画、小游戏,培养兴趣 | 解决实际问题,功能覆盖全场景 | | 适用场景 | 编程启蒙、创意表达、思维训练 | 数据分析、人工智能、网站开发、自动化办公 | | 学习成本 | 1-2周就能做完整小作品 | 1-2个月能掌握基础语法,解决实际问题 |
> 📱 电子版交互:点击表格中的“Scratch”“Python”可以跳转到对应的官网介绍页面,点击“适用场景”可以查看对应场景的作品案例。
我们为什么要先学Scratch再学Python?这符合儿童的认知发展规律:小朋友学东西都是从具象到抽象的,先玩看得见、摸得着的积木,建立编程的基本概念,再过渡到抽象的文本代码,就不会有畏难情绪。就像你学数学,先学数苹果、数积木,再学1+1=2,最后学方程、函数,是一个道理。
1.3.3 怎么选择适合自己的学习路径?/ How to Choose Your Learning Path?
如果你现在是第一次接触编程,没有任何基础,建议你从Scratch开始学,先完成前5章的Scratch内容,建立对编程的基本认知,再学后面的Python内容,你会发现很多概念都是相通的,学起来会非常轻松。
如果你已经学过一点Scratch,或者已经上初中了,觉得Scratch太简单,也可以直接从Python部分开始学,遇到不懂的编程概念再回头查Scratch部分的对应内容,两种语言对照学习,理解会更深刻。
> 💡 小贴士:不管你是从Scratch开始还是从Python开始,都不要跳过硬纸上编程的部分——它是你第一次接触“给计算机下指令”的体验,能帮你消除对编程的陌生感,建立“编程就是解决问题”的底层认知。
---
1.4 中英双语学习指南 / Bilingual Learning Guide
本书特意采用了中英双语的设计,这不是为了“增加难度”,而是为了帮你更扎实地掌握编程的核心概念,同时提前适应编程里的英文环境。
1.4.1 为什么要学双语编程?/ Why Learn Bilingual Programming?
很多小朋友一看到编程里的英文单词就害怕,觉得“我英语不好,学不了编程”,但实际上: 1. 编程里用到的英文单词都是非常简单的日常词汇,比如`print`(打印)、`if`(如果)、`while`(当…的时候)、`sum`(总和),都是小学英语就学过的词,根本没有生僻词; 2. 现在全球绝大多数编程教程、技术文档都是英文的,提前适应中英双语的编程内容,以后查资料、看教程会方便很多; 3. 中英双语对照能帮你把“概念”和“代码”对应起来,不会出现“知道中文意思但不知道怎么写代码”的问题。
比如“计算1+1的和”这个概念,你既要知道它的中文意思,也要知道Python里写出来是`sum = 1 + 1`,`sum`就是“总和”的意思,这样以后遇到类似的“计算总和”的问题,你就能立刻想到用`sum`这个变量。
1.4.2 本书的结构设计 / Book Structure Design
为了帮你更好地适应双语学习,本书做了专门的设计:
- 每章的标题都是中英对照,关键术语第一次出现时都会同时标注中英文,比如**编程(Programming)**、**计算思维(Computational Thinking)**;
- 每章最后都附有中英术语对照表,方便你随时查阅;
- 英文内容都是和中文内容对应的,不会出现“英文讲了一个新概念,中文没提”的情况,你可以对照着看,理解会更深刻;
- 配套的音频资源里有所有英文术语的发音,你可以边看边听,磨耳朵的同时记住术语的英文读法。
1.4.3 双语学习小建议 / Bilingual Learning Tips
1. 先理解概念,再记英文:不用强迫自己一开始就记住所有术语的英文,先理解中文的意思,看到几次之后自然就记住了; 2. 对照着看,不要跳过英文:不要觉得英文难就只看中文,对照着看能帮你建立“概念-英文-代码”的三重对应,记忆会更牢固; 3. 遇到不懂的英文先猜:编程里的英文都是直白的,比如`input`就是“输入”,`output`就是“输出”,`function`就是“功能”,猜一猜大多都能猜对,实在不懂再查术语表。
> 📖 纸书排版:每页的页脚都标注当前页的中英术语对照索引,方便读者快速查阅。
---
1.5 纸上编程小游戏:机器人送外卖 / Offline Programming Game: Robot Food Delivery
现在你已经对编程有了基本的认知,接下来我们要玩一个完全不用电脑、不用手机,只需要纸和笔的编程小游戏,帮你第一次体验“给计算机下指令”的感觉,消除对编程的陌生感和恐惧感。
1.5.1 游戏准备 / Game Preparation
你需要准备:
- 1张A4纸,画一个5×5的方格地图(一共25个格子);
- 1支笔,用来写指令;
- 1个小物件当“机器人”(比如乐高小人、硬币、橡皮都可以);
- 可选:2个不同颜色的小物件当“障碍物”(比如桌子、大树)。
1.5.2 游戏规则 / Game Rules
1. 设定地图:把5×5的地图的左上角格子标为「餐厅(Restaurant)」,右下角格子标为「顾客家(Customer's Home)」,在中间随便放2个障碍物,比如第2行第3列放桌子,第4行第2列放大树,机器人碰到障碍物就算“撞墙”,任务失败。 2. 编写指令:你是“程序员”,要给机器人写指令,指令只有4种,用符号表示:
- ↑:向前走1格(向地图上方走)
- ↓:向后走1格(向地图下方走)
- ←:向左走1格
- →:向右走1格
你把指令按顺序写在另一张纸上,比如`↑↑→→↓↓`就是先向上走2格,再向右走2格,再向下走2格。 3. 执行指令:把机器人放在「餐厅」的格子里,按你写的指令顺序移动,每走一步就念一个指令,如果机器人走到顾客家,就算任务成功;如果机器人碰到障碍物或者走出地图边界,就算任务失败。 4. 调试修改:如果任务失败,你要找出是哪条指令错了,修改之后再重新执行,直到任务成功。
1.5.3 游戏示例 / Game Example
我们来看一个具体的例子:假设地图如下(R是餐厅,C是顾客家,X是障碍物): ``` 行1: R _ _ _ _ 行2: _ _ X _ _ 行3: _ _ _ _ _ 行4: _ X _ _ _ 行5: _ _ _ _ C ``` 如果你写的指令是`↑↑→↓↓←↑`,机器人会怎么走? 1. 第一步↑:从行1走到行5?哦,向上走是行号变小,所以从行1的R往上走就走出地图了,直接失败。 2