📹 此处原文配有演讲视频(2017年8月19日南明教育年会),因平台限制无法转存。
演讲主要包含了以下三部分内容:
一、什么是计算机科学? 二、我做了哪些探索和实践? 三、我准备怎么教计算机科学?
大家都知道,在中小学有一门课叫做信息技术课,大致上就是教大家怎么玩Word、Excel、PowerPoint。难道学习这些软件的使用方法,就是计算机科学吗?肯定不是。
还有人觉得玩计算机就是写程序,那么只是写代码就是计算机科学吗?也未必。
那么到底什么是计算机科学,它能给我们带来什么?我们的计算机科学教育,到底要培养什么样的人?这就是我今天要给大家分享的内容。

我们生活在一个即将、甚至已经由计算机支配的世界。比如说证券市场,同时有上千支股票在进行交易,每天几千亿的成交量,这已经超出了人力可控制的范围。

再比如北京的地铁,几十条线路,几百辆地铁,有时两辆地铁之间的距离只有十几秒,这个也不是人所能控制的,只能依赖计算机。
任何事情数量规模大到一定程度,复杂度高到一定程度,就超出了人类所能处理的极限,只能由计算机来处理。
乔布斯说过一句著名的话:「人人都应该学习编程,它将教会你如何思考。」

奇怪了,我们不会思考吗? 为什么还需要通过学编程来学习如何思考呢?因为他所说的思考,不是常规意义上的思考,而是这么一个东西:
计算思维(Computation Thinking):将解决方案表达为可由计算机执行的算法的过程。
听起来有点晕是吧?没关系,我们先来看看什么是计算(Computing)。计算的过程可以分解为两个部分:抽象(Abstraction)和自动化(Automation)。
** **

先说抽象,它在学术上的定义是这样的:
抽象(Abstraction):缩减一个概念或现象的信息以使其广义化
更晕了是吧?可能大部分人都听不懂,我们来看两个例子:

第一个是包饺子,要经过一系列的流程把饺子包出来。

第二个是排队,这个大家都已经司空见惯了,干什么都需要排队,尤其是在中国。
那么,在这两个现象背后,我们能提取出来什么呢?

包饺子其实就分为三步:擀皮、剁馅、包起来,饺子就好了。至于你用的是什么面、什么馅、谁来包、几个人包……这些都是表象。

而排队呢,其实就两条:先入先出、不能插队。至于排队的人是男是女、是老是少、是高是矮、是胖是瘦……这些也都是表象。

所以说,抽象就是把那些不重要的表象抛开,去洞察事物的本质。
说完了抽象,我们再来说说自动化。
自动化(Automation):让机器来执行指定的流程,使人工干预最小化。

比如说我们可以有饺子机,把面和馅放进去,一边饺子就出来了。

比如说我们现在到银行去,都有排队叫号系统,抽一个号拿在手里,就可以坐下来看看电视、玩玩手机,等叫到你的号再到窗口办理业务。
那这样有什么好处呢?

首先,由机器来执行流程可以保证质量。比如人包饺子,是很难保证每个饺子都一样大小的,而机器就可以把饺子的重量差别控制到0.1g。
其次,人力的成本是很高的。而机器干得比人又快、又好又省钱。

最后,自动化可以很容易的实现规模化复制扩张。我们在火车站可能会看到人们排长队买票,但售票大厅的地方是有限的,队伍再长也长不到哪去。而我们在12306网站上购票时,很容易就出现上千人的队伍。

这张图里是一个五岁的小男孩,你让他提桶油都费劲,但现在他坐在一辆叉车上,很轻松就可以举起十几吨的货物。这说明了什么?
人+机器=体力 → ∞

这是AlphaGo对阵柯洁,全世界最厉害的围棋选手。坐在柯洁对面的这位黄博士棋力只有业余二段,然而他坐在那里的唯一工作就是帮AlphaGo摆棋子。我相信就是换成一个幼儿园的小朋友,只要他能准确把棋子摆放到位,他也能把柯洁杀得片甲不留。这说明了什么?
人+计算机=脑力 → ∞
简单来说,自动化的本质就是无限的扩充能力。我服务1000个人,和服务10000个人,本质上没有太大的变化,而这是人力所无法做到的。

现在我们可以回头看看上面提到的计算思维是怎么回事了:

其实我们每一次的思考都经历了抽象和自动化的过程,只不过问题在于:用什么来自动化?

自从人类诞生以来,我们都是用大脑来进行自动化的。我们想出一个问题需要计算来解决,那么谁来计算?就是我们的大脑。
公元前2000年出现了算盘,我们终于可以稍微解放一下大脑了,把一部分工作交给手来进行。
1946年出现了革命性的计算机,随后一发不可收拾。电子管、晶体管、集成电路计算机、超大规模集成电路计算机、云计算、DNA计算机、量子计算机……未来是什么样?没人知道。

简单来说,在当今的时代,计算能力趋近于无穷大,而计算成本趋近于零。也就是说:

那问题是什么?

什么可以计算?这个问题能不能通过计算来解决?
怎么进行计算?你只要想清楚了怎么计算,具体计算的过程不需要你来做。你可以让别人来做,可以让计算机来做,可以让手机来做……
如何解决问题?怎样用计算机科学来解决我们生活中、工作中、学习中的问题?
探索上面这三个问题的答案,以及拥有思考这些问题的能力,就是计算机科学教育应该教给学生的东西。
……
以上是根据视频后期整理出来的第一部分文字稿(后两部分原文仅以视频形式发布,未能转存)。
文 / 张砷镓 2017.8.27
