021-5527 0978Mon. - Fri. 8:30-18:00

乔布斯:每个人都应该花1年时间学习编程

乔布斯:每个人都应该花1年时间学习编程

u=2462537639,3896123218&fm=15&gp=0
这个访谈纪录片叫做《乔布斯:遗失的访谈》(Steve Jobs: The Lost Interview),本来是1995年录制的,但是在近几年才公开。在片中,乔布斯谈到他20岁左右学习编程的经历,称“当时编程可以帮助我们完成工作,但没有明确的实用性,重要的是我们把它看作思考的镜子,学习如何思考。“
乔布斯进而也表示,“我觉得每个人都应该学习一门编程语言。学习编程教你如何思考,就像学法律一样。学法律并不一定要为了做律师,但法律教你一种思考方式。学习编程也是一样,我把计算机科学看成是基础教育,每个人都应该花1年时间学习编程。”
v2-8618d377acc25804db37c70508113043_r

大多数人听到编程都觉得很复杂,其实学习编程最主要的并不是学习编程技术,而是培养编程思维,但什么是编程思维?

电脑能帮人类解决问题,但在此之前,人类首先要做的是理解这个要解决的问题,并找到解决问题的路径。换句话说,电脑只能搬砖,但是搬哪块砖、搬到哪去,走哪条路,为什么这么做还是人决定的,机器只是执行的过程。所谓“编程思维(computational thinking)”就是“理解问题——找出路径”的思维过程”,它由四个步骤组成:

ec60cf5325d04cc7917d3c92e8ef023c

1、分解(decomposition)

把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。复杂问题很难一下子破解,但如果把它细分成很多个小问题,逐步解决,就容易多了。

比如,破案。

找出犯罪分子可不是件容易的事。但通常警察都会通过搞懂一系列相关的小问题破案,包括:发生了什么犯罪,什么时间,什么地点,有什么证据,有没有目击者,最近、附近是否有相似案件发生……等等。
通过拆解问题,可以深入了解犯罪的过程、细节,获得大量信息。而理解是解决的第一步。
397a1c51e0bc4a5d9165bfa864c34924

2、模式识别(pattern recognition)

找出相似模式,高效解决细分问题。这点至关重要。识别模式,意味着新问题变成了老问题,我们在经验库里搜索以往的类似问题及解决方法,套用解决。识别的模式越多,解题的速度就越快。

举个例子:假如你需要画100只猫,你会怎么办?找100只猫来挨个临摹?还是找出猫的“模式”?

如果是后者,你可能要知道猫长毛,有眼睛、尾巴、四条腿。然后,按照这个“模式”,你就可以“批量”画猫了——你不用每次画一个新动物,只需要变换局部特征:黄白条的猫还是黑猫,长尾巴的猫还是短尾猫。

9d6d9cebd788431a9b8ce7e159fa6a9e

3、抽象(abstraction)

聚焦重要的关键信息,忽视无用细节。这是一个过滤的过程,通过认知问题的核心本质,帮助我们形成解决问题的构想。

接着举刚才画猫的例子,我们了解了猫的特征,就可以根据这些抽象的特点,形成关于猫的整体设想,做出一个模型。

4、算法(algorithms)

c509ecaae1ef44668765939134b62185

设计一步一步的解决路径,解决整个问题。

通过这四个步骤,一个棘手的复杂问题先被拆解成一系列好解决的小问题;每一个小问题被单独检视、思考,搜索解决方案;然后,聚焦几个重要节点,忽视小细节,形成解决思路;最后,设计步骤,执行——问题解决。

所以,所谓“编程思维”并不是编写程序的技巧,而是一种高效解决问题的思维方式,不当程序员也用得上。

v2-fdcced88cb55bcd30238cc7ab4a79997_hd
编程到底是什么?

电影《教父》中所说:“花半秒钟就能看透事物本质的人,跟花一辈子都看不清事物本质的人,注定有截然不同的命运。”

本质上说,编程是想办法解决问题,实现目标的过程。一个问题常常有多种不同的解法,每个孩子会通过不同的途径去达成同一个目标。当他们在思考和讨论方法背后的逻辑时,当他们在列举实现目标的步骤时,就是在运用编程的算法。是的,这样说来,算法和编程离我们的生活非常近,数学计算是个显而易见的例子,孩子们每天选择上学的路也是算法,甚至做三明治,或是绑鞋带的步骤都可以称之为算法。

而编程的核心是通过分析步骤的角度去解读问题。现代家长们都希望,孩子们能从学习中获取真正的本领,以适应现在和未来社会的发展需求,不希望他们只会考试或者死板的套用公式,缺乏逻辑思考与实践能力。儿童学习编程恰恰是为了提升逻辑思考的能力,养成解决问题的思维习惯,绝不是为了长大做一名程序员或者计算机工程师。

当孩子们掌握编程的要领后,即使面对再复杂的问题都可以简单地剖析成几个重要部分,然后他们就会发现哪些部分是他们已经解决的,哪些部分是关键问题所在,哪些部分之间存在逻辑或者时间关联。

接着就是想办法:怎么安排时间最合理、怎么设计步骤最科学,怎样取舍和选择等等。当总结和推敲出最优方案后,孩子们就如同讲故事一样,会用“先”、“然后”以及“最后”来解释他们的想法,这是非常重要的分析与解决难题的能力,将这套思维逻辑运用于计算机语言进行实践,就是编程。

这个国家的每个人都应该学习编程……因为它能教会你如何思考。

——史蒂夫 · 乔布斯