用计算机编程
为孩子赋能

什么是编程?

什么是编程?

很多人觉得编程是门高深莫测的学问, 担心自己学不来.
实际上, 编程虽然不是随便能学会的技能, 但是也没有那么难. 因为, 普通人已经具备了编程需要的很多基础

1. 编程是一门语言

“编程语言”是一门用于沟通的语言, 本质上和我们日常使用的汉语、英语一样:

  • 汉语是和中国人沟通的语言
  • 英语是和英美国家的人沟通的语言
  • 而”编程语言”是和计算机沟通的语言

“程序”, 就是使用计算机能够理解的语言, 书写的一连串命令和计算.

“编程”, 就是我们人类为了完成某项任务, 将解决问题的步骤, 用计算机能够理解的语言写成指令, 这就是”编程”. 而后, 计算机会根据这些指令一步步执行, 最后完成任务.

计算机世界似乎高深莫测, 不过”编程语言”却是一门经过人为精心设计的、更容易掌握的语言:

  • 从”功能”来看: “语言的功能”包括描述、判断、态度、行动命令这 4 种. 而编程语言剔除了主观色彩浓厚的”态度”, 而且对剩下 3 种功能进行了简化和规范, 只保留了”客观无异议”的部分. 这种简化显然降低了这门语言的难度
  • 从”词汇”来看: 它使用的词汇和符号非常有限. 以 Python 编程语言为例, 它的词汇是 33 个, 符号是 35 个, 总共只有 68 个字符1. 作为对比, 汉语的常用字有 3500 个2, 英语的常用字是 3000 个3
  • 从”语法”来看: 它的”句子结构”和”字词顺序”尽管和其他语言有所不同, 不过, 只需要简单的训练就能读懂. 因为它的很多设计沿用了人类的习惯. 以计算为例, 因为人类已经发明了数学, 所以编程中的计算不会再重新设计一套新的规范. 编程语言使用的大部分运算规则, 和我们平常学习的数学是相同的

2. 程序就像一份菜谱

前面说到”编程”的定义:

“编程”, 就是我们人类为了完成某项任务, 将解决问题的步骤, 用计算机能够理解的语言写成指令, 这就是”编程”. 而后, 计算机会根据这些指令一步步执行, 最后完成任务.

从定义中, 我们可以看到, “编程”涉及到 3 个组成部分:

  1. 我们人类, 负责思考解决问题的步骤
  2. 我们人类, 负责使用计算机能够理解的语言, 来描述解决步骤
  3. 计算机, 负责执行这些步骤

编程活动

我们可以把”程序”想象成一份”菜谱”.

配图_煎鸡蛋

假设我们想要煎鸡蛋但是又不会, 需要怎么做呢?
我们可以找一份煎鸡蛋的菜谱, 然后照着这个菜谱一步步去操作,最后就能做出一份香喷喷的煎蛋.

在这里, “菜谱”就是一个”程序”. 我们呢, 只需要按照这个”程序”一步步执行, 最终获得程序运行的结果 — 一份香喷喷的煎蛋.

不过稍等一下, 可能有人会问: 尽管有菜谱, 我们还是可能把煎蛋搞砸. 的确是的, 搞砸的可能包括 3 方面:

  1. 我们可能没有按照菜谱煎蛋, 导致失败;
  2. 菜谱描述的煎蛋方法可能有问题;
  3. 煎蛋方法没问题, 但是描述可能有歧义;

那么, 如果是让计算机来按照菜谱煎蛋, 是否也会面对上面的 3 个问题?

对于第 1 个问题

计算机不存在第 1 个问题. 因为计算机没有主观思想和情绪, 它只会不折不扣地执行指令.

对于第 2 个问题

第 2 个问题涉及到”解决问题的能力”.

我们不要把”解决问题的能力”想像得太过高深, 其实我们成人每一天都在解决问题. 比如, 考虑如何完成工作、考虑如何让孩子上好学校… 这些都是在解决问题. 所以说大家对于这部分有充足的练习, 能力至少是及格的. 我们唯一的瓶颈在于第 3 个问题.

对于第 3 个问题

这是我们现阶段的瓶颈 — 尽管我们有解决问题的办法, 但是还不知道如何按照计算机能够理解的语言去描述步骤, 如何让计算机不产生歧义.

如何准确描述步骤呢? 包括 2 个方面:

  • 把解决问题的”步骤”抽象成”流程”
  • 按照”计算机语言的语法”​去描述这个”流程”

​学习”计算机语言的语法”是今后的学习内容, 所以我们暂且跳过. 现在, 我们已经把”编程的难点”缩小到”如何准确描述步骤”这个问题上. 那么我们来看看, 如何把步骤抽象成流程.

我们生活工作中的大部分任务, 都可以抽象成”流程图”.

所有的”流程图”都可以使用 3 个基本结构 (“顺序”、”判断选择”、”循环”) 描述清楚, 区别只是嵌套组合的复杂程度4:

配图_3个基本流程结构

以日常生活来举例:

  • 早晨起床:
    1. 先刷牙再洗脸 — “顺序”流程
    2. 吃饭一直吃到饱 — “循环”流程
    3. 查看天气决定是否带雨伞 — “判断”流程
  • 到达公司:
    1. 碰到不一样的人, 打称呼也不一样 — “判断”流程
    2. 不断碰到人, 不断打招呼 — “循环”流程
    3. 打招呼时先和最近的人打招呼, 再和比较远的人打招呼 — “顺序”流程
  • 另外, 从你萌生让孩子学习编程的念头, 到上网搜索查询, 再到看到这本电子书, 期间也有顺序、判断、重复

所以, 我们可以发现, 把”步骤”抽象成”流程”也不会太难, 并不会成为我们学习编程的障碍.

至此, 我们已经基本具备让计算机来”煎蛋”所需要的技能了. ^_^

3. 结论

上面的分析, 可以帮助我们可以回答很多问题:

问: 什么是编程语言?

答: “编程语言”和汉语、英语一样, 也是一门用来沟通的语言. 有所不同的是, 它是一门经过人为精心设计的、更容易掌握的、用来和计算机沟通的语言.
而”编程”, 就是我们人类为了完成某项任务, 将解决问题的步骤, 用这种计算机能够理解的语言写成指令. 而后, 计算机会根据这些指令一步步执行, 最后完成任务.

问: 什么是程序?

答: “程序”就像一份菜谱, 计算机按照这个菜谱, 就能作出我们人类想要的结果.

问: 编程有什么好处?

答: 最直接的, 编程能够锻炼解决问题、逻辑思考的能力, 锻炼借助计算机帮助自己解决问题的能力.

问: 我是否适合学习编程?

答:如果你是个普通人, 心智正常, 思路清晰, 那么学习编程就没有问题.
我们需要额外学习的只是计算机语言的语法, 然后把你的思考转换成用这个语言来描述就可以了.

问: 什么年龄适合学习编程?

答: 首先观察他是否有解决一些简单问题的能力, 比如走迷宫, 比如按照图纸搭建乐高. 然后考察他现在是否有”成立、不成立”、”先后顺序”和”因果关系”、”顺序、判断、循环”的概念和体验. 如果有, 那么完全可以学习编程.

问: 编程需要学习什么语言?

答: 挑选符合孩子头脑发展水平的就可以.
对于年龄比较小的, 可以学习图形化的 Scratch5 或者 Kitten6.
对于其他人, 可以学习 Python7 或者 JavaScript8.

问: 没有基础的孩子, 如何为学习编程做好准备?

答: 因为任何新知识都是从旧知识中生长出来的. 孩子需要根据他们已有的经验来理解和构建新知识. 所以, 对于没有任何基础的孩子, 需要让他多积攒相关的体验和经历. 可以多带他留意生活中问题解决的过程, 引导他总结解决问题的方法. 在生活中多留意事物的发展过程, 引导他提炼”顺序、判断、循环”的流程. 等他具有生活中这些具体的、实物的体验和经历, 再去接触编程.

除了日常生活的观察和体验之外, 非常推荐孩子使用”Minecraft”这款电子游戏来积攒体验和经历. 首先, 它非常有趣, 能够吸引孩子, 其次它是一款超高自由度的沙盘游戏, 孩子可以在里面获取多种多样的体验, 包括生存、探险、做实验, 包括体验太空探索、化学实验、音乐编曲, 也包括编程设计. 孩子可以随意地鼓捣, 而又完全不受地理环境的限制, 也不用担心危险和破坏. 这款有趣、丰富、自由、安全的游戏, 能够让孩子获取足够多的经验, 这些宝贵的经验正是孩子理解新知识的跳板和脚手架. 此外, 我也非常建议父母和孩子一起玩 Minecraft, 让父母拥有和孩子同样的经历和体验. 这让我们能够更容易地启发和引导孩子. 大家可以看一下我写的这个 《Minecraft 系列课程》



  1. Python 的保留字/关键字有 33 个, 运算符有 35 个, 所以, 总数是 33 + 35 = 68 个 
  2. 常用汉字数量基于 1988 年出版的《现代汉语常用字表》, 而且《教育部义务教育语文课程标准(2011年版)》中提到”认识 3500 个左右常用汉字” 
  3. 常用英语的数量基于 “英孚教育”的统计: “2500 ~ 3000 个词汇能够帮助我们理解 90% 的英语交流” 
  4. 图中的流程结构进行了”单入口单出口(Single Entry, Single, Exit)”处理. 这种处理让流程嵌套组合时只有唯一的输入和输出, 从而保证结构清晰、相对独立、不会混乱 
  5. https://scratch.mit.edu 
  6. 编程猫出品的 Kitten 编程语言. “编程猫”是国内靠谱的编程教育机构, 有免费的编程工具和教程, 而且品质非常高 
  7. 推荐 Vamei 的 Python 课程廖雪峰的 Python 课程, 以及笨方法学 Python 
  8. 推荐 廖雪峰的 JavaScript 课程 
赞(7)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址