我们让孩子学习编程的时候,最终目的就一定要成为程序员吗?其实不然,编程思维才是大力推行编程教育的原因,它能帮助我们理清思维过程,理解问题并找出高效的解决方式,具备了这种编程思维的人也能在任何场合运筹帷幄。
文 | 丁琬懿、Ivy Liu编辑 | 李臻
01
什么是编程思维
会编程不一定有编程思维
电脑能帮人类解决问题,但在此之前,人类首先要做的是理解这个要解决的问题,并找到解决问题的路径。换句话说,电脑只能搬砖,搬哪块砖、搬到哪去、走哪条路,还得人说了算。
所谓“编程思维(computational thinking)”就是“理解问题——找出路径”的思维过程,它由四个步骤组成:
1、分解(decomposition)
把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。
复杂问题很难一下子破解,但如果把它细分成很多个小问题,逐步解决,就容易多了。
比如,破案。
找出犯罪分子可不是件容易的事。但通常警察都会通过搞懂一系列相关的小问题破案,包括:发生了什么犯罪,什么时间,什么地点,有什么证据,有没有目击者,最近、附近是否有相似案件发生……等等。
通过拆解问题,可以深入了解犯罪的过程、细节,获得大量信息。而理解是解决的第一步。
2、模式识别(pattern recognition)
找出相似模式,高效解决细分问题。
这点至关重要。
识别模式,意味着新问题变成了老问题,我们在经验库里搜索以往的类似问题及解决方法,套用解决。识别的模式越多,解题的速度就越快。
举个例子:假如你需要画100只猫,你会怎么办?找100只猫来挨个临摹?还是找出猫的“模式”?
如果是后者,你可能要知道猫长毛,有眼睛、尾巴、四条腿。然后,按照这个“模式”,你就可以“批量”画猫了——你不用每次画一个新动物,只需要变换局部特征:黄白条的猫还是黑猫,长尾巴的猫还是短尾猫。
3、抽象(abstraction)
聚焦重要的关键信息,忽视无用细节。
这是一个过滤的过程,通过认知问题的核心本质,帮助我们形成解决问题的构想。
接着举刚才画猫的例子,我们了解了猫的特征,就可以根据这些抽象的特点,形成关于猫的整体设想,做出一个模型。
4、算法(algorithms)
设计一步一步的解决路径,解决整个问题。
通过这四个步骤,一个棘手的复杂问题先被拆解成一系列好解决的小问题;每一个小问题被单独检视、思考,搜索解决方案;然后,聚焦几个重要节点,忽视小细节,形成解决思路;最后,设计步骤,执行——问题解决。
所以,所谓“编程思维”并不是编写程序的技巧,而是一种高效解决问题的思维方式,不当程序员也用得上。
2
编程思维=赢家思维
从学到玩都能用上
编程思维可以用于处理任何事。
比如——组织一次朋友聚会。
你可能需要拆分问题:你们能去哪、做什么,每个人喜欢什么、想干什么,之前你们一起玩的成功经验和失败教训,预算和每项活动的成本,时间长短,天气……
显然,用编程思维组织的朋友聚会,选择起来会更容易,也更有可能让大家玩得开心。
再比如——打电子游戏。
为了玩到一定级别,你需要知道:要收集什么物品,去哪及怎么收集,时限是多少,最佳路线是什么,怎么躲过敌人……通过了解细节、掌握要点,你就能制定计划,用最短时间完成升级。
处理正经事,更离不开“编程思维”,比如——写作。
想把作文写得又快又好,得先解题,拆分出可能的层次内容;然后调用大脑存储的相关信息——例子、格言,甚至曾经写过、看过的文章;列出提纲,理清思路;最后,写。
做数学题也一样,拆解、理解新问题——搜索出对应的老问题和公式——理清思路——做题。
职场牛人个个都有“编程思维”。
麦肯锡公司的第一个女咨询顾问芭芭拉·民托(Barbara Minto)曾提出著名的思考方式——“金字塔原理(The Minto Pyramid Principle)”。
其中,提到了一个重要原则:MECE,即Mutually Exclusive Collectively Exhaustive,中文意思是“相互独立,完全穷尽”。也就是,将影响一个重大议题的原因,不重叠、不遗漏地拆分,藉此有效把握问题核心,找到解决方案。
▲ 芭芭拉·民托
和编程思维类似的“金字塔原理”不但是麦肯锡的经典培训教材,也是顾问及学术界的必读书目。日本著名管理学家大前研一的《思考的技术》也是据此写成的。
网上曾有一个段子,说就算高考改成考怎么玩,玩得好的也还是这些学霸。
这是有道理的,因为人的选择决定事的结果,而选择是以思维模式为基础的。
正如电影《教父》中所说:“花半秒钟就能看透事物本质的人,跟花一辈子都看不清事物本质的人,注定有截然不同的命运。”
编程思维不但能大大提高解决具体问题的效率,当拥有编程思维的人面临人生选择时,也会更理性地分析利弊,目标更明确,更善于利用有限的资源。
而最重要的是,具有编程思维的人不会被貌似艰巨的困难吓倒,他们知道并相信——问题是可以解决的,也会更有勇气、毅力和自信去面对生活的挑战,不会轻易被挫折打败,陷入迷茫焦虑和自怜自艾。
学业、事业、社交、玩乐,无论你的目标是什么,编程思维都能让你更迅速、更容易地达成,人生又怎么会不快乐,不幸福?
妥妥的人生赢。
3
编程思维如何培养
可以通过编程,也可以不通过
编程,当然可以学习、实践、培养“编程思维”,而且,在编程的过程中,哪怕最有经验的程序员也会出无数小错误,需要不断弥补纠正。孩子可以在这个过程中充分体验到:努力比聪明重要、问题可以逐步解决、遇到挫折很正常、从失败中可以学到很多、别人成功了我也能受到启发……等等,培养出耐心和信心。
推荐几个编程网站给大家,可以供孩子免费学编程。
1、ScratchJr
适合年龄:2-5岁
有故事书一样的翻页设计,程序指令很简单,界面卡通,还在2014年推出了iPad版本,免费下载,家长和孩子可以一起玩游戏、写程序。
2、Code.org
适合年龄:4-104岁
由非营利组织Code.org运营推广,获得了众多科技巨头及奥巴马的支持,曾发起全球超过2亿人参与的“编程一小时(Hour ofCode)”活动,会利用动画《星球大战》、《冰雪奇缘》中的人物吸引小朋友学编程,有中文页面,同样适合学编程的新手。
之前我们用画猫举例子说明编程思维,这个网站会用分步骤画怪兽的脸培养孩子的编程思维,直观可爱又非常深入。
3、Scratch
适合年龄:8-16岁
之前提到的小学的常用版图像化程序语言,由美国麻省理工学院媒体实验室开发,完全免费。学生可以通过拖拉方块的方式学写程序,不同方块有不同功能,孩子可以像玩拼图、积木一样玩着学,能迅速建立写程序的逻辑思维,了解迴圈、判断式等程序语言的基本功能。有中文页面,同样适合学编程的新手。
在这里,孩子可以创造属于自己的游戏、动画、影音和故事。Scratch从2007年开站以来,已有超过九百万名会员(年龄集中在10到15岁),创造出了1200万个作品。
4、Hopscotch
Hopscotch是一款iPad编程工具,运用模块化代码和图形编程界面,儿童只需要拖动编程模块到代码区域就可以完成一个功能,不需要进行任何输入操作,就像堆积木一样,娱乐性非常好,很适合低龄的小朋友培养兴趣。
5、Project Bloks
前不久,Google宣布即将推出一个开放的硬件平台Project Bloks,帮助孩子们进行可视化编程,让小朋友学编程更有趣、更形象。
Project Bloks有三种零件:基板(Base Boards)、小精灵(Pucks)和脑板(Brain Board)。孩子可以像玩积木一样进行创意组合,制作玩具,操控机器人。
6、Lego Mindstorms
Lego Mindstorms是可编程、可组合的机器人玩具,孩子们可以通过编程命令盒子,控制机器人。理念与Project Bloks项目相似。
其实,除了编程,生活中的很多事都能培养“编程思维”,小到让小宝宝决定洗澡、刷牙需要准备什么,大到让上小学的孩子组织一次周末的家庭出游,都可以运用“编程思维”完成,培养出高效的思考模式及视角,为孩子未来的优异成绩、幸福人生奠定基础。