禁用Matlab,美国又给我们创造一次机会?(下)法道 | 跟陶叔学编程
The following article is from 跟陶叔学编程 Author 跟陶叔学编程
关注风云之声
提升思维层次
导读
虽然新闻的热点会过去,但中国科技行业面临的打压却一直在持续。按最新的情况分析,中美之间的对抗并没有得到缓解,而是不断扩大,越来越激烈。谁也无法预测这场对抗会在什么时候结束,但是我们每个人能做的就是坚持做好自己的事,直到胜利来临!
经过前面两篇的讨论,我们对以Matlab为代表的科学计算软件有了一个基本的了解,并对由禁用Matlab带来的挑战与机遇进行了详细的分析。(参看上篇《破局》)同时,作为对策我们需要加快与开源软件运动的结合,站在为人类社会贡献公共基础软件产品的高度来推动开源软件的发展。在面临美国政府新一轮科技剿杀的当前,我们必须抓住战机,冲杀出一条软件发展的新路,为世界科技发展打出一片新的天地。(参看中篇《顺势》)
但是,我们也要明白当前中国软件行业发展是不均衡的,重应用轻基础,已经放心大胆地在美国技术的基础上狂奔多年,直到如今被人卡了脖子。亡羊补牢,犹未为晚,现在我们需要回顾走过的发展之路,弄清楚我们有哪些得失?而欧美在基础软件上形成压倒性的优势,原因是什么?什么是其创新与发展之道?我们需要做哪些调整,才能实现学习、吸收并超越?在本篇中我们来讨论一下这些有点沉重却非常重要的问题。
下篇《道与法道》,分为三个部分:
一、基础软件如今是谁的天下?
二、基础软件发展历程的启示
三、应该做些改变了
一、基础软件如今是谁的天下?
在一般的定义中,基础软件包括操作系统、数据库和中间件。前两项大家都很熟悉,中间件是一种很重要的基础软件,但大家普遍感受不到它的存在,这里先不做详细介绍,以后有机会再讲。而在当前局面下,很多工业软件也表现出基础性的作用,因为相关行业的发展已经受到这些软件非常大的影响。比如Matlab对于教学科研的影响,Photoshop对于图像处理的影响等。所以在本篇中把工业软件也包括在基础软件中。
那么基础软件的现状是怎么样的呢?可能大家已经有了一个大致的感觉,但是我们还是拿具体的情况来讨论吧,因为具体的情况比你大致的感觉还要严重。在知乎上有一篇文章列举了当前十大领域占绝对优势地位的基础软件(或产品公司)及其所属国家(https://zhuanlan.zhihu.com/p/90044122),摘抄整理并添加出现年份后如下所示:
1. 操作系统。Windows(美国,1985),Unix(美国,1969),Linux(芬兰,1991),安卓(美国,2007),iOS(美国,2007)
2. 数据库。Oracle(美国,1977),IBM DB2(美国,1983),SQL Server(美国,1988),MySQL(瑞典,1996)
3. 专业图像处理。Photoshop(美国,1987),Illustrator(美国,1987),CorelDRAW(加拿大,1989)
4. EDA芯片设计。Cadence(美国,1988),Mentor Graphics(美国,1981),Synopsys(美国,1986),Crosslight(加拿大,1993)
5. 专业数学软件。Matlab(美国,1981),Mathematica(美国,1988),Maple(加拿大,1988)
6. 电影工业特效。Maya(美国,1983),3ds Max(美国,1990),Houdini(加拿大,1987),Cinema 4D (德国,1989)
7. CAD/CAM。AutoCAD(美国,1982),CATIA(法国,1982),UG(德国,1983)
8. 石油化工。PRO/II(美国,1979),Aspen Plus(美国,1981),gPROMS(英国,1988),VMGSim(加拿大,1999),CMG Suite(加拿大,1978)
9. 电力系统。PSCAD(加拿大,1976),PSAPAC(美国,1994),ARENE(法国,1996), HYPERSIM(加拿大,1995)
10. 大型通用有限元分析。ANSYS(美国,1970),Abaqus(法国,1978),Nastran(美国,1969)
根据该资料进行简单统计,可以得出基础软件按国别统计图如下:
可以看到美国基础软件数量为22种,遥遥领先。而同属西方主要国家的加、法、德、英都有贡献,而芬兰、瑞典这样的北欧国家也榜上有名。美国为首的西方国家在基础软件中的优势显而易见。
除了以上基础软件之外,基础软件的基础,也就是创造这些软件的编程语言也是非常重要。这个情况怎么样呢?
现代编程语言最早从1945年就已经出现,据统计已经产生过2500种以上。这其中绝大部分并没有被广泛使用,或者已经被淘汰。我们仅仅讨论当前活跃的语言。有一个TIOBE排行榜,它是反映编程语言流行程度的一个指标,每月会更新一次。查看它的榜单就可以知道当前活跃程度最高的那些语言。最新的一期榜单(2020年7月)按使用热度排序列出了如下50种语言(括号中是所属国家及诞生年份):
C(美国,1972)、Java(美国,1995)、Python(荷兰,1991)、C++(美国,1979)、C#(美国,2000)、Visual Basic(美国,1991)、JavaScript(美国,1995)、R(新西兰,1995)、PHP(加拿大,1994)、Swift(美国,2014)、SQL(美国,1986)、Go(美国,2009)、Assembly language(美国,50年代初)、Perl(美国,1986)、MATLAB(美国,1981)、Ruby(日本,1995)、Scratch(美国,2007)、Rust(美国,2006)、PL/SQL(美国,1988)、Classic Visual Basic(美国,1991)、SAS(美国,1976)、Transact-SQL(美国,1988)、Objective-C(美国,1983)、Groovy(美国,2003)、Dart(美国,2011)、D(美国,2001)、Kotlin(捷克,2011)、COBOL(美国,1960)、ABAP(德国,80年代)、Delphi/Object Pascal(美国,1985)、OpenEdge ABL(美国,1984)、Logo(美国,1968)、PowerShell(美国,2006)、Lisp(美国,1958)、(Visual) FoxPro(美国,1988)、Julia(美国,2012)、Lua(巴西,1993)、Scala(瑞士,2001)、VBScript(美国,1991)、Haskell(美国,1990)、Scheme(美国,1975)、TypeScript(美国,2012)、Ada(美国,1975)、Prolog(法国,1972)、PostScript(美国,1985)、Erlang(瑞典,1991)、RPG(美国,1959)、Apex(美国,2000)、C shell(美国,80年代)、Fortran(美国,1956)
我们同样将上述主流编程语言按国别进行统计,可以得出以下图表:
其中,由美国创造的主流编程语言有40种,占80%,其余10国各有1种。由此可见,在编程语言上,美国更是一骑绝尘!
通过考察基础软件,并延伸考察到编程语言,我们不得不面对一个现实:整个行业的基础主要是由美国打造,一些西方国家也做出了贡献,甚至还有发展中国家的贡献,但中国贡献程度很低(有几个基础软件中国参与了研制,中国人也创造了编程语言,还有使用中文的编程语言,但是流行程度远不够上榜)。
现实就是现实,差距真的太大了!承认这个现实后,我们接下来需要弄清楚三个问题:是什么原因让美国在基础软件上至今仍能天下无敌?基础软件领域的强国有什么制胜法宝?我们落后他们这么多的原因到底是什么?
二、基础软件发展历程的启示
美国在基础软件上独霸天下最重要的当然是历史原因。现代计算机起源在美国,无论是硬件还是软件,都是由美国人最早创造、制定标准、实现产业化。美国在基础软件上强是理所应当的,这个好理解也不用多说。但是其他西方国家,甚至还有发展中国家在基础软件上取得的成就该怎么解释呢?
我在仔细查阅基础软件发展历史资料后,发现了这些国家有一个显著的共同点,那就是大学发挥了非常重要的作用。许多基础软件是由大学教授甚至是学生最早发起的。比如Matlab的前身是克里夫·莫勒尔(Cleve Moler)教授为了在课堂上讲解矩阵运算而开发的简单工具,Photoshop是托马斯·诺尔(Thomas Knoll)在完成博士论文期间偶然的兴趣之作,比尔·盖茨在上大学期间写出了BASIC编译器,林纳斯·托瓦兹(Linus Torvalds)在上大学时因为觉得现有操作系统太渣就开始了Linux操作系统的开发……这都是类似的故事。尤其要关注的是唯一一个产生自发展中国家的流行语言Lua,也是出自大学校园——它由巴西里约热内卢天主教大学的三人研究小组创造。
其实稍做分析也就能理解这种现象产生的原因了:大学往往能够接触到最前沿的计算机技术,技术人才集中的氛围又会使得大家对最新出现的需求很敏感,自然而然地会尝试用最新的计算机技术手段针对新需求创造新工具。大学天然是创新的重要策源地。但是,中国有许多优秀的大学,为什么我们大学的创新开拓就不足以贡献出一款有影响力的基础软件或编程语言呢?是不是还有些条件在中国是与国外差异很大的呢?
这样的差异是确实存在的。
第一个差异就是知识产权保护。许多基础软件在刚出现时往往就是一个简单的工具。但在知识产权保护完善的前提下,即使它只有很少的功能,只要它被人们使用就可以获得相应的收入,也就能支撑它的不断发展。开发软件的人员能够从中获得利益,也就有动力持续投入进行完善。在本文的中篇介绍过,因为商业软件的发达而刺激了自由(免费)软件的出现,但并不是说商业软件就是邪恶的。在软件产业发展过程,开发软件能够赚钱而且是赚大钱是产业发展的重要动力,这是有历史贡献的,我们没有必要抹杀。
而反观国内软件行业的发展过程,我们不能回避的深刻印象就是盗版。盗版的盛行一方面让我们能够快速用上最新软件,使得中国各行业直接与世界最高IT水平对接,另一方面也造成国内软件行业的成长环境非常独特与残酷:中国人很早就形成了“软件不要钱”的观念。这不仅让国外软件收不到钱,更严重的是阻碍了国产软件的发展。国内很多行业在与国外同行竞争时有一条普遍经验就是走“质次价廉”的路线,即质量虽然比国外产品差一些,但是价格要低一大截。这种路线给国产商品争取到一定的发展空间,由此获得原始积累,使国产货能够慢慢地发展起来,甚至抓住机会实现逆袭。但是在软件行业,因为盗版,国外软件实际上是免费使用,国内同类软件连“质次价廉”的机会都没有。这样的状况演化下去,一方面国内软件业很早就熟悉了互联网时代的玩法:免费用软件,靠流量获取收益。这是在互联网时代,中国成长为世界上唯一可以与美国抗衡的软件大国的原因。但是另一方面这又在根本上扼杀了我们在基础软件上成长的机会。因为基础软件大多数只是行业软件,没有那么大的用户量,不可能靠流量获得收益。而用户量大的如操作系统,开发难度大,使用习惯与生态形成了壁垒。即使后来国外软件公司在中国开展维权,“免费”软件不再免费,国内基础软件也已经错过了发展时机,无力回天矣。
第二个差异是在教育上。西方国家以及部分发展中国家,对软件的基础教育做得很完善,对操作系统、编译器、编程语言原理进行了系统、深入的教学与研究。可能有的读者会说,我国大学的计算机专业也会讲授这些课程。但国内往往也就止于讲授而已,而在国外却会动手去重新实现这些基础软件。比如在中篇中曾经介绍,当Unix操作系统出现以后,加州大学伯克利分校就成立了兴趣小组,对这个操作系统进行专门研究与改进,并推出了BSD Unix版本。而在Unix商业化以后,为了向学生讲解操作系统原理的实现细节,在荷兰阿姆斯特丹自由大学计算机科学系任教的美国教授安德鲁·塔能鲍姆(Andrew S. Tanenbaum,1944年3月16日—)自己开发一个与Unix兼容的操作系统Minix。这个操作系统成为他编写的教材《操作系统设计与实现》一部分,后来也成为了Linux操作系统的来源之一。
塔能鲍姆与他编写的《操作系统设计与实现》
我们的近邻日本对于软件的基础教育研究也很深入,编写了许多优秀的教材与专著,为免广告之嫌这里就不列举书名了。我们能够举出基础软件原理方面中国人原创的教材或有影响力的书籍吗?
再深入思考一步,为什么国外会对基础软件的原理的教学如此重视呢?归根结底又会回到知识产权上。因为基础软件重要,并且日渐昂贵,为同类软件的竞品提供了空间。不同领域的基础软件都会有多种产品竞争,造成了底层开发人才的需求量很大,学校自然就有动力为学生讲授更深的知识,教学实践活动也会更有针对性。因此,知识产权保护牵一发而动全身,是产业健康发展的重要保障。
与此同时,还有一个问题值得我们注意。就算我们的大学增强了对基础软件原理的教学,从当前计算机专业的实际情况来看,也不一定会马上取得很好的效果。相信很多科班出身的程序员都有在原理课上睡大觉的经历。但是,似乎国外在开展这方面教学时效果却很好,许多学生展现出的理解能力与实践能力超强,更不要说像林纳斯这样直接以大学生身份创造新的操作系统的妖怪了。这又是为什么呢?
答案是他们抢跑了。
可能有些故事大家已经很耳熟了。比尔·盖茨13岁开始学编程,20岁写出BASIC编译器并创立微软。芬兰人林纳斯·托瓦兹10岁开始在外祖父的教导下学习编程,22岁作为大学生创造出Linux。日本人松本行弘从初三开始编程,30岁创造出Ruby语言。这里只列举了几位在基础软件领域做出贡献的人物,要是扩大到应用软件,编程少年就更多了。
还要提到一个特例,那就是乔布斯。他虽然接触编程比较晚,编程水平甚至被盖茨嘲笑,但他对编程有深刻体会,特别强调“编程思维”的重要。他说:“学习编程教你如何思考,就像学法律一样。学法律的人未必都成为律师,但法律教你一种思考方式。同样,编程教你另一种思考方式。所以,我把计算机科学看成基础教育,是每个人都应该花一年时间学习的课程。”
任何人对编程的学习,都必须经过相当长时间的训练。这个过程不仅是获得思考方法、熟悉各种技巧,还会积累一些重要的、有深度的问题。这些问题只有当他们开始学习基础软件原理时才能得到很好的解答,让他们顿悟,产生“相逢情便深,恨不相逢早”的感觉。解决了这些问题,编程少年们才能脱胎换骨,才有可能晋阶成元婴级的怪物。一方面大学老师教得深入,另一方面学生一点就通。教学相长,这样的基础软件教育才能成功。
而我们绝大多数的学生都是在大学阶段才开始接触编程,都还处在尝新鲜的阶段,更多地喜欢去实现一些具体的功能。他们没有经过长时间的实践,还没有感受过被底层问题苦苦纠缠不得解脱的痛苦。此时让他们上原理课,告诉他们这就是很重要的问题的答案,他们如何知道珍惜?“此情可待成追忆?只是当时已惘然”——“如果时光可以倒流,我必不在原理课上睡大觉!”我们学生的基础不一样,让他们自觉、重视,很少有几个天才能够做到。
基础不同!即使我们的大学一样能够接触最新的计算机技术与最鲜活的需求,但是学生的能力还在培养中,他们并不能及时对这些有利条件做出反应。等到他们能力培养得差不多了,也该毕业离开学校了,走向工作岗位面对最普通需求去实现最基本的功能。错过,可能就是一辈子。
三、应该做些改变了
通过上面的分析,我们可以了解到国内软件行业在发展过程中走了一段弯路,造成基础研究与创新的根基不牢,中国人在基础软件领域几无所出,现在也就不得不面对被动的局面了。那我们是否还有翻盘的机会呢?
还真有!我们继续对前面提到的基础软件与编程语言的情况进行分析,这次我们统计每个产品出现的时间,可得如下统计图:
主流编程语言产生年代统计图
从图中我们可以看到80、90年代是这些软件出现的高峰。那个时代正是个人计算机刚出现的时候,计算机与计算机用户的数量出现爆炸性增长,各个行业都出现了旺盛的软件需求。那时为满足各行业需求产生的一大批基础软件,绵延发展直到今天。而计算机与用户数量的又一次爆发性增长是在07年乔布斯推出苹果手机正式开启移动互联网时代以后,但这一次却没有对应出现新的基础软件的高峰。这是因为智能手机更多是个人通信娱乐终端,到今天也没有成为真正的生产力工具。它的兴盛只带火了安卓与iOS两种操作系统,其它基础软件的格局没有出现太大的改变。
但是新的技术变革浪潮正在来临。在5G时代,物联网、车联网、工业互联网等网络形态将终于得到实现,越来越多的终端设备接入网络,它们的相互连接与计算需求将造成全新的巨大的应用场景,人工智能的广泛应用会使得计算的复杂性大幅增加,这些变革对整个计算机行业带来的冲击一定不亚于个人计算机的出现。正是基于这种判断,美国才会这么疯狂没有底限地对中国科技企业与高科技产业发起打击。而我们在应对美国无所不用其极的攻击的同时,更要积极争夺在各行业即将出现的逆袭机会。
这次新的技术浪潮是对生产力的革命,必然会造成新的基础软件的崛起。我们不能再错过这个机会,要为它的到来做好准备。而所做准备中,必须对国内软件产业过去发展中存在的问题做一个彻底的改正,这其中应该包括:
1. 加大力度进行软件知识产权保护。只有完善的知识产权保护,才能使创新获得尊重,才能使创新成果不断成长壮大,不被拙劣的抄袭扼杀,才能使做出创新的人获得应有的收入激励其开创事业。同时,因为知识产权保护,会加大了软件使用成本,必将对社会需求进行正向驱使,增大对底层研发人才的需要。这种需求的压力又会传导到教育部门,促进学校加强对底层技术的教学与研究。同样因为软件使用成本的增加,行业对开源软件也必定会更加重视,会大大加快开源软件在国内的发展,走上与国际潮流方向一致的健康发展之路。加强知识产权保护,作用强大,可以达成“驱虎吞狼、一箭多雕”的效果。我们绝不能把它当作一句口号,而是要让它成为产业发展的重要保障。
2. 对国内软件教育进行改革。教育改革有两大重点。一是加强学校对基础软件的教学与研究。这个不用说太多。当前已经有学校开始了行动。7月5日,被列入美国政府实体名单并被禁用Matlab的哈尔滨工业大学,举行了计算学部成立大会。
会上,学部刘挺主任在发言中明确计算学部任务:培养国之栋梁,打造国之重器,在探索一校三区计算学科共建的同时,培养人工智能+X复合型人才。我愿意相信这将成为国内基础软件教育与研究的一个转折性事件。
第二个重点,就是要让中国的孩子在更早年龄开始计算机编程的学习。关于这一点就有必要进行详细的讨论。
其实我国政府很早就开始重视对中小学生的计算机普及教育。1984年2月16日,小平同志在上海微电子技术应用汇报展览会观看小学生操作计算机时说:“计算机普及要从娃娃抓起。”从那时开始国内就掀起了面向中小学生进行计算机普及教育的热潮。
我最近拜访了涛思科技创始人陶建辉先生,他正好是这段历史的见证者。他回忆说,84年为贯彻小平同志指示,团中央向各地学校配发了一批计算机。当时上高一的他由此才接触到计算机,并且通过自学掌握了BASIC编程,从此走上了编程的道路。如今已年过50的陶先生依然坚持亲自写代码。涛思科技推出的TDengine是面向物联网的开源大数据平台,是国产基础软件在新的技术革命到来之前所进行的准备之一,目前项目发展势头非常喜人。
但是,从84年开始的这一波计算机普及教育在实施的过程中,更多地注重计算机应用,对基础原理与编程方向力度不够。这是受到当时国内大众对最新科技的接受程度的限制,我们也因此失去了收获更早一批计算机编程人才的机会。
好在政府已经发现了计算机教育中存在的问题,开始着手调整相关政策。国务院于2017年发布的《新一代人工智能发展规划》(国发〔2017〕35号)明确提出:“实施全民智能教育项目,在中小学阶段设置人工智能相关课程,逐步推广编程教育,鼓励社会力量参与寓教于乐的编程教学软件、游戏的开发和推广。建设和完善人工智能科普基础设施,充分发挥各类人工智能创新基地平台等的科普作用,鼓励人工智能企业、科研机构搭建开源平台,面向公众开放人工智能研发平台、生产设施或展馆等。支持开展人工智能竞赛,鼓励进行形式多样的人工智能科普创作。鼓励科学家参与人工智能科普。”
教育部2019年发布《2019年教育信息化和网络安全工作要点》(教技厅〔2019〕2号)明确提出“推动在中小学阶段设置人工智能相关课程,逐步推广编程教育。”
这些都是国家层面对中小学开展编程教育进行的布局,把教育重点做了进一步的明确,将对中国计算机普及教育的面貌带来焕然一新的变化。
虽然在国家层面已经把大方向确定了,但是很多家长依然会有不解甚至担心。他们认为现在孩子的课业负担本来就很重,再增加编程这门课,这不是让孩子更加吃不消吗?其实这是长期以来我们在推广编程教育时一直忽视了的方面:没有把学习编程与学习文化课的区别说清楚!
在这里,我希望能向大家做一个清晰的传达:编程和其它学科不一样!它不应该被看作一门与文化课平行的课程,它的本质是用一种新的思考方式去运用课堂上教授的学科知识。它更多的是对知识的运用,而且是一种形象化、快速的运用。
首先,要理解学习编程是获得一种新的思考方式,也就是乔布斯所说的“编程思维”。那么什么是编程思维呢?具体来说,编程思维分为两个部分:建立模型与分解问题。在编程中将程序语句的执行方式分为顺序、选择与循环三种。顺序是从前往后逐个执行,选择是根据具体条件执行或不执行(或者执行这个部分还是那个部分),循环是在满足一定条件的前提下对同样的动作重复执行。这三种执行方式构成了最核心的问题解决模式,顺序是最基本的模式,选择是程序实现交互的基础,而循环则是在前两种模式的基础之上发现问题中隐藏的相似性。由此可见三种执行方式其实是三种解决问题的思维模型,世界上一切的问题都可以最终通过分解细化后套入这三种模型进行解决。
比如一个简单的成绩统计问题:班上共有40名小朋友,对一次考试成绩分别按100分、90分以上、90分以下进行分组统计。这就需要用到三种模型,分组时根据成绩区间进行判断就是用到选择,对40个成绩数字进行逐一检查就用要到循环,选择与循环内部就是顺序。三种模型的不同组合就能构成所有问题的解决思路。
除了用这种解决实际问题的方式来训练编程思维,现在还有一些游戏以更轻松活泼的方式使儿童获得同样的训练。其中有一款叫LightBot的手机游戏,通过给机器人预设动作来完成点亮灯泡的任务。大家可以让自己的小孩尝试一下,切实感受一下编程思维是个什么样子。
通过编程学习,让中小学生熟悉思维模型,获得问题拆解能力,将会使他们获得强大的思考方法,思考问题解决问题的能力也将获得极大的提升。
还要理解编程的过程是对学到的各种学科知识理解与运用的过程。我们现有的教育体系,其实是十分重视对知识的运用的。我们从小学开始就会接触到一种题型:应用题。这种题型的出发点就是让学生运用课本所学知识,从而实现理解与消化。但是因为受题型体裁所限,为了将知识点硬塞进去就出现了许多奇葩的题目,比如数学应用题里经常被大家吐槽的水池一个管子进水另一个管子放水之类的问题。这类题目乍一看违反了常理,相信大家都有过被它支配的童年阴影。
其实要实现对这类题目背后知识点的运用,改用编程来做就会变得既合理又好玩了。我们可以让小孩按照题目要求做一个水池的示例程序,并且进水与放水的速度可以调节。这样就能用可视化的方式让小孩体验不同速度对水池蓄水时间的影响。当然我们还可以换成其它类似的应用场景,比如手机一边使用一边充电,大坝蓄水与泄洪等。其它常见的应用题如追及问题,可以设计成射击游戏,通过调整敌机与子弹不同的速度让孩子看到速度对于击中目标所需时间的影响。编程的好处就在于,可以让孩子在动手实现游戏的过程中,自己产生动力去运用所学数学知识。
计算机编程能给教学带来的好处,许多专家学者都做过专门的阐述。其中数学家康拉德·沃尔夫拉姆(Conrad Wolfram,1970年6月10日—,他是科学计算软件Mathematica发明人Stephen Wolfram的弟弟)在TED上做的一个演讲就非常有影响。该演讲的题目是《用计算机教给孩子真正的数学》,康拉德认为应当使用计算机编程让数学学习变得贴合实际,变得有趣。他为了帮助7岁的女儿理解“当多边形的边数增加到非常大时, 多边形会变成一个圆”这个概念时,他编写了如下的示例:
生动的图形变化立刻让小姑娘对数学概念有了直观的认识。同时由于这个模型实际上是对极限和微积分概念的启蒙,他又继续以此作为起点,向小姑娘讲了一些微积分知识,小姑娘也很快就理解接受了。康拉德由此提出应当充分运用计算机带来的便利,让儿童真正体会到数学的魅力,再也不会由于教学方式的原因而认为数学沉闷枯燥、累觉不爱。
其实不仅是数学,其它学科知识同样通过编程的实践获得直接运用,从而激起孩子的学习兴趣,更重要的是从中获得成就感。
除了对中小学生学习编程意义有正确的认识之外,将编程教育落到实处我们还需要多学习欧美先进国家的教育理念与教学经验,才能获得最好的效果。这其中非常关键的一点,就是他们一直在不断进行教育手段的创新,力图降低编程学习的门槛,让更多孩子能够接触编程以后就能喜爱编程。一方面他们推出了许多能让儿童训练编程思维的游戏,如前面提到的LightBot。还有许多趣味性的编程入门级工具,如苹果推出的Swift Playgrounds等。而更厉害的是,他们还在琢磨让儿童能够少写代码或者不写代码,以图形化的方式开始编程。
这种尝试美国人从60年代,也就是最早的大规模使用的编程语言出现大约十年之后,就已经开始了。1968年,麻省理工人工智能实验室创始人之一的西摩尔·佩普特(Seymour Papert,1928年2月29日—2016年7月31日)创造了LOGO程序语言。LOGO语言是有史以来第一个专门为儿童设计的编程语言。在计算机极其复杂的年代,LOGO语言把编程简化到了极致。在LOGO的世界里有一只小海龟,你可以通过输入指令,让海龟在画面上走动,可以向上下左右,或者是按照你指定的角度移动。你还可以让小海龟以加速或减速移动,也可以让小海龟重复某一个动作。这些指令看似简单,但假如能将其进行合理的组合和排序,就可以创造出各种图形,包括人、房子、汽车、动物和抽象图案。除了对编程语言进行简化,为了在当时条件下,能够脱离昂贵的计算机使用LOGO语言,西摩尔还发明了实体版“海龟画图”。孩子可以使用简易的键盘控制器,操纵“小海龟”在纸上画出图形。LOGO语言是对儿童编程教学的开创性的尝试,它的许多理念直到今天都有着十分重要的意义。
西摩尔(左)和操纵“小海龟”画图的儿童
到2007年,西摩尔的学生米切尔·瑞斯尼克(Mitchel Resnick,1956年6月12日—)又创造出Scratch语言。这种语言在LOGO的基础上更进一步,使用者可以不认识英文单词,也可以不使用键盘,只用鼠标拖动积木形状的程序模块进行拼搭就可以完成编程。Scratch同时也是一个开源项目,全世界儿童都可以免费使用,以它为第一级台阶,开始编程世界的攀登之旅。
米切尔和Scratch编程器界面
除了美国之外,还有许多西方的IT科学家也在不断尝试简化编程语言的教学,使编程的大门能向更多人敞开。比如Pascal语言、ABC语言就是作为教学语言被创造的,如今在人工智能领域大火的Python语言则继承了ABC的一些特性。应该说,欧美国家锲而不舍地普及编程教育的精神是值得我们好好学习的,同时全世界都越来越重视编程教育的氛围也给了我们压力与动力,更应该在国内把编程普及教育真正的做起来做好。这是我们能在今后的技术革命中完成追赶与超越必不可少的条件。
经过三个篇章,我就完成了这个系列的文章。在写作本文的过程中,有许多热心读者给了我关心与支持。我相信大家都是希望中国的软件行业能够以这次禁用Matlab事件为契机,获得一次重要的调整与发展的机会。虽然新闻的热点会过去,但中国科技行业面临的打压却一直在持续。按最新的情况分析,中美之间的对抗并没有得到缓解,而是不断扩大,越来越激烈。谁也无法预测这场对抗会在什么时候结束,但是我们每个人能做的就是坚持做好自己的事,直到胜利来临!
视频:TED演讲_沃尔夫拉姆_用计算机教给孩子真正的数学
背景简介:本文作者陶卓彬,毕业于解放军理工大学,曾在军队技术部门从事软件开发十余年,并多次获得军队科技进步奖。现在北京某大学校企从事教育开发工作。长期关注互联网、软件领域课题。本文于2020年7月24日年发表于微信公众号 跟陶叔学编程 (禁用Matlab,美国又给我们创造一次机会?(下)法道),风云之声获授权转载。
责任编辑:陈昕悦