生活在一个天天被黑科技刷新想象力的时代,小孩子们很早就接触电脑或者PAD,在玩游戏和乐高积木的时候,不少孩子表现出浓厚的学习编程的兴趣。兴趣是最好的老师,家长们都希望能够发现和培养孩子的特长。但很多家长并不懂编程。所以,我们帮家长理解在编程课上到底学什么。
一些家长会感到奇怪,编程课不就是编程吗?如果你是这么想,那说明你对编程这件事还并不很了解。打个比方,我们想要学写作,前提当然是要能写字,但我们不会把写作课称为写字课,因为写作者需要有思想,而写字并不需要思想。同样在编程课上,学生不仅仅是学习程序语言,更要学习程序设计的思维方式,这种思维方式被称为计算思维(Computational Thinking)。计算思维是编程课的灵魂,也是我们希望在编程课上教会孩子的东西。
如同数学思维、工程思维、经济思维等等一样,计算思维是一个涵义广泛的概念。计算思维的基础是计算机科学,同时又付诸于工程实践。一方面,如同所有其他科学思维一样,计算思维要求学习者努力培养探究能力,通过对现实世界的观察和思考,界定问题,构建模型,提出假设,设计实验,采集数据和验证结果,从而开拓人类的认知领域。另一方面,与单纯的探索发现不同,我们开发软件产品和服务的目的是为了改造世界,提升人类的生活水平。这就要求软件开发者具备设计思维和工程思维,能够项目化地规划、设计、开发、实施、测试和发布产品。如果说数学家追求的是洞穿自然本质,将一切具像提炼成符号化语言,进行形式化的规则演算和表达;那么软件开发专家追求的是建立物理世界与数字世界之间的映射关系。先基于人类社会创造出一个纯数字的虚拟网络社会,再让这个受造物服务于人类丰富生活体验的诉求。
我们现在广泛引用的一个计算思维的总定义,是2006年3月由时任美国卡内基梅隆大学计算机科学系主任周以真教授首先提出的。她在发表于权威期刊的一篇论文中提出:“计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动”。一般的读者见到这个专业定义会觉得过于抽象晦涩,其实理解这个概念并不困难。这个总定义里提到了三件与我们人类生存息息相关的事。
第一是解决问题。人生可以被看成我们自己穷极一生所做出的的所有决策的排列。每一个决策都对应着一个核心问题。问题可能是挑战,也可能是机遇。解决问题是生活的本质。这些问题中很大的比例因为计算机的出现而被更有效的解决。计算机最初被发明出来是用于进行数学计算的,能被计算机求解的问题,我们称它们为可计算的。当我们能通过建模和算法把现实问题表述为可计算问题时,计算机凭借其无与伦比的计算速度和数据处理能力可以帮人类完成超大规模的问题求解,例如预测天气情况、搜索海量数据、规划行车路径等等。可计算问题也可以是简单的问题,例如使用电子表格程序的公式功能计算本月的总支出费用。随着计算机硬件、算法和数据库等技术领域的不断突破,善用计算思维进行问题求解也愈发变得更重要。
第二是改造世界。世界可以被看成由相互作用的无数个系统组成。我们一直在定义和设计各个系统,以及整体化地分析它们的机理、构成和相互作用。由于大千世界太过纷繁复杂,单凭人脑无法胜任理解和改造世界这一重任。而计算思维和计算机技术的应用重新定义了人类与外界的关系,例如一种所谓面向对象的设计思想,就指导软件开发者以简洁优美的方式去重新定义万物。
第三是认识自己。认识自己,是镌刻在古希腊德尔菲神庙上的神谕。自古至今,在各式各样的问题中,最让我们着迷的还是理解我们人类自己的社会、群体以及个体的行为。借助数据化的行为分析技术,例如大数据和深度学习,阿里巴巴和亚马逊能够透过消费者行为获得洞察,从而精准地推荐商品或投放广告给用户。今日头条能够获知你的喜好,把你最关心的新闻呈现在你眼前。
计算思维是所有生活在科技时代的年轻人必备的基本技能。我们鼓励孩子学习编程不是为了把他们培养成程序员,而是为了发展他们的计算思维。编程是一种可以随便把玩的工具,是孩子手里的一支神笔,让孩子能够运用计算思维达成更深层目的。
我是编程玩童的木瓜,欢迎对少儿编程感兴趣的朋友和我交流。