帕拉卡(Paracraft)编程教育的30!(上)

。Seymour Papert发明的LOGO语言,承载了计算机先驱们关于编程教育的理念和期望。

Scratch是编程教育的2.0。作为Seymour Papert的学生和思想的继承者,Mitch Resnick创造的Scratch以图形化编程的方式让编程对儿童更形象有趣,其提出的终身幼儿园让计算机先驱们关于编程教育的理念更容易为大众所理解。

Paracraft(帕拉卡)则是编程教育的3.0。Paracraft的3D动画编程通过空间的搭建和丰富好玩的作品的创造,让青少年们真正接触到编程的核心思维,真正做到了丰富的玩,丰富的学,学会高效的思考,高效的学习。

从1.0到3.0,其一以贯之的核心思想都是“学会编程,学会学习!”。这里包含了两个层面的理解:

软件的先驱,Small Talk的作者Alan Kay认为编程是去操作个人对世界的感知。注意,这里Alan用了感知这个词,而不是思想。用感知这个词是非常准确的,说明Alan是把编程看作是根本的思考,而不是一般的思考。在编程里,基于对世界的感知而形成的抽象模型是思考的基础。

小海龟(LOGO)编程语言的作者Seymour Papert,与Alan Kay有很多的合作,也有着非常类似的理解。

他认为计算机或者软件编程的核心力量来自于两个方面,其一是表达(representational capacity)世界的能力(在Paracraft教育里,我们把这个能力理解为建模的能力),其二是即时改变这种表达的能力(responsiveness )(在Paracraft教育里,我们理解为验证模型,获得反馈,并改变模型的能力,也就是debug的过程)。

由此,我们看到编程的的两个特征,一是编程一定是基于理解的,再就是编程一定是导向创造的。

基于理解,是因为编程首先的就是要对某个领域进行抽象建模。抽象模型代表了我们对那个领域的理解。并且编程提供了做实验来验证这个理解或者说抽象模型的方式,可以快速获得反馈,形成更好的理解,进行改进。

另外,软件总是在创造的。软件创造的本质是对每一个新的领域进行数字化。数字化以后,就能够突破自然的物理局限,比如时空的局限,造成连接。所以新的软件总是带来根本的突破性的创新,让整个行业突然发生巨变。

这就是为什么技术能够改变世界推动历史进步的背后的原因。比如我们看到的软件对商业的改变,对新闻的改变等等,这就是数字化进程。

所以,我们看到今天软件无处不在,并且以更快的速度渗透到我们生活的方方面面,其实这背后在进行的就是数字化过程,其核心,这里再重复一遍,就是对更多的领域进行数字化建模,变成数字化的软件,人们可以通过软件去操作这些数字化模型,从而实现了人与人之间基于这些模型的连接与交互。

比如现在我们大家都熟悉的电商网站,各种商品被数字化,并且按照不同的类别展示在网站上,每个商品都有可以详细查看的细节,包括图片。还有其他客户的点评也被数字化并展示在相关商品下面。

商家也被数字化,可以查看商家的其他商品,向商家咨询。自己购买下单的过程,被数字化成了订单,商家与买家通过订单进行各种交互,如退换货退款等等。买家下单后库存数减少。

商家可以进货增加更多的商品。买家还可以查看自己所有的历史订单。这些是大家现在都已经很熟悉的电商网站。我们看到电商软件需要对商品买卖做数字化,这个数字化就是要对商品买卖有好的理解并且用模型表达出来,比如商家模型,买家模型,商品模型(如sku,名字,描述,库存等),订单模型等等。通过这些模型连接到各方的人,通过这些模型进行交互。

不光这些我们平常生活中比较熟悉的具体的实体可以被抽象建模,就是抽象的事物也可以被建模。比如电商订单里商家与买家间的交互,其中的退换货退款的申请和处理是相当复杂的过程。

单看这些行为的结果,不过是改变订单的状态,也就是说改变订单这个抽象模型里的相关数值。一般来说对模型的值的改变,程序员都是直接封装成指令,但是因为这些交互非常复杂,并且这些交互的方式可能因为业务的更改而经常更改,由程序员直接写在代码里是很容易出错的,也不方便更新。

面对这样的复杂性,虽然是抽象的对订单的交互行为,也可以进行抽象建模,用模型来规范和简化操作。

所以可以看到对于简单的系统,我们可以直接的用一些指令的顺序执行去完成,不太需要额外的抽象模型。但是对于复杂的系统,我们往往需要设计更多的抽象模型,这些抽象模型就成为新的生命中心,之前看似很复杂甚至杂乱无章的交互可以围绕这些生命中心来进行。

因为这些生命中心的出现,如果用信息系统里熵的概念,可以说复杂的无序的系统变得更有序,实现了熵减,但我们更倾向于使用生命这个词,因为这并不是简单的一般人认为的“顺序”的有序。

在这里我们也可以看到面向复杂的系统,抽象模型是很好的处理复杂系统的方式。其实我们面对很多貌似复杂的问题时,空间思维,或者更核心的,空间感知,才是主要的我们解决问题的方法。所谓的逻辑思维只是空间感知后附带的部分,就好像编程里抽象模型建好后的各个指令(函数)内部的顺序逻辑一样。

软件编程里的KISS(Keep It Simple, Stupid!)原则,可以在这个基础上去理解。即当系统比较简单的时候,没有必要去额外的设计什么抽象模型,那会让软件没有必要的复杂。因为系统很简单,即使没有抽象模型作为交互的中心,人脑也可以直接快速的理解整个系统。或者有更好的简单的模型的时候,不要使用复杂的模型。

所以,可以看到,编程正是一种面向复杂系统非常高效的思维方式,这个思维方式是以抽象建模为核心的,也就是以空间感知能力为核心的。

而人类对周边世界的“理解”,其实也就是抽象建模的过程。大脑以这些抽象模型为中心,得以进行高效的并行运算,做到现在最强大的计算机都无法做到的面对复杂系统的处理能力。

这种以空间感知和抽象建模为核心的思维方式,是我们处理复杂系统的一切思维方式的基础,比如我们常说的复杂系统的诊断能力(debug,医生诊断疾病等),解决问题能力,独立思考能力,拆解与综合能力等等。

而通过这些抽象建模进行数字化,比如电商,突破了时空的物理局限,对购物这个领域带来了根本性的变革。而数字化的进程,就是不断的对人类社会的各个领域重复这个过程。这正是今天软件变得愈发的无处不在影响到我们生活的方方面面背后的原因。所以,也可以说,软件编程是在帮助我们更深入本质的理解这些不同的领域。

学习正是要去理解周边的世界,其实也是一个抽象建模的过程,一个创造知识的过程,形成的抽象模型正是我们一般说的知识。而这个抽象模型是否正确,又需要不断的通过实践来检验和修正。所以高效的学习,正是大胆的提出对某个领域的理解的抽象模型,然后快速的去获得反馈快速的迭代改进。这个正是软件编程的过程!学习,也是与空间的交互。

这些软件先驱们对软件编程的本质理解的非常清楚,所以对编程教育具有的巨大的教育意义抱有极大的期望,他们认识到学习编程,是学习一种很核心的非常高效的思维方式,同时也是在学习如何高效的学习。这就是这些软件先驱们还有以皮亚杰为代表的的建构主义教育家们理解的编程教育的意义。

皮亚杰在观察儿童们的学习几十年后,得出这样的结论。小海龟(LOGO)编程语言的作者Seymour Papert也认为孩子是天然的拥有这样的严肃的通过实验进行科学研究的能力的,就像那些顶尖的科学家一样,这个能力在大人看来是“玩耍”的过程。

如果去仔细观察孩子们怎么学习的,或者是能回忆起自己年纪非常小的时候是怎么学习的,能有同样的结论。

玩,从本质上看,往往是基于对空间的兴趣,是对空间的探索。在空间的探索中,孩子们构建对于周边世界的认识,并不断的通过“玩耍”这种实验的方式去验证和改进自己的认识。

在我们观察学生学习Paracraft的过程中,我们发现年纪越小的孩子越会做实验,去尝试某种方块的各种用法,搞清楚其所有属性。而大一些的孩子则习惯了问老师。更大一些的孩子不光是习惯了问老师,而且期待老师给直接的答案。当老师引导他们去自己寻找答案时,这些孩子还会有一些不高兴。年纪更大的成人则连问题都没有,他们只是期待老师上课,或者等着老师上完课后布置作业。

所以Mitch Resnick提出的终身幼儿园的理念,认为学校应该像幼儿园一样,孩子们都在搭建东西,创造东西,都在玩。我们则认为比幼儿园更好玩。Paracraft是要建立玩地而不是幼儿园,让孩子真正的充分的玩起来。

这些软件编程的先驱和教育家们对软件编程的理解,促成了Seymour Papert发明LOGO编程语言。所以我们可以认为LOGO是编程教育的1.0.

这是基于这些思想的对编程教育的第一次尝试,在那个时代,是巨大的进步,影响了很多的今天的优秀的程序员。

我在美国读书研究生院里做互联网教育研究时的一位同事,一家7个程序员,包括他们的父母和他们5兄弟。他听说我小时候学过LOGO编程,立即很兴奋,问我有什么体验。可惜我说不出来很多。

只有第一印象,觉得这个学编程挺有意思的,有一点神奇,也能够感受到LOGO编程传递出来的那种数学的“力量”。

但是,给我们上课的老师,按照上课的方式来教我们,而不是Papert所设想的让小孩自己去探索去玩的学习,所以并没有更多的深入,有更多的体验。只是感觉到新鲜有趣以后就戛然而止了。

记得那个老师后面就跟我们讲些计算机科学的概念,什么变量,什么不同数据类型之类的,感觉就变得枯燥起来。那个老师也没有讲多少,简单的让我们能编几个计算类的小程序就完了,让我感觉自己的逻辑思维还不错,搞这个东西没什么难度,如此而已。是不是和今天的很多编程教育很像?

如果这位老师知道我们这些小孩是如何学打乒乓球,滑旱冰,游泳的,估计他就不会那样教了。我们就是一大群小孩好长时间大家就玩那个东西,乒乓球或者滑旱冰,都能深入进去,都能有相当丰富的体验。

所以虽然有LOGO这样的饱含了软件先驱和教育家们的理念创造的编程语言, 也能够引起孩子们刚上手时那种兴奋的感觉,但在这样的教学方式下,并没有起到软件先驱和教育家们所设想的教育的效果。

这是不是很像今天的很多编程教育?那些拿着国外的Scratch,脱离Scratch的作者的教育理念,用上课,作业,考试来教编程的,能够写一点简单的代码就仿佛学好了编程一样,其实都脱离了Scratch背后的教育理念和相应的学习方式。我知道的不少小孩上这样的课学习编程后反而对编程产生了极度的排斥心理。

随着软件的愈发普及,师承自Seymour Papert的Mitch Resnick创造了Scratch。Scratch的主要贡献其一是让对儿童可能有一定难度的写代码的过程变成了更直观的指令搭建的过程,其二是青少年们可以通过编程去控制2D的动画世界,可以去创作很多孩子们喜欢的故事或者游戏。

其三是Scratch的官方网站让青少年们可以在上面发布他们的作品,成为青少年分享交流作品的平台。Scratch倡导的终身幼儿园的理念也是对Seymour Papert, Alan Kay和皮亚杰的思想的一次较好的表达。

真正完美体现软件先驱和建构主义教育家的理念,能够承载他们对编程教育的巨大期望,让青少年通过学习编程,学会高效思考高效学习的是Paracraft,我们认为这是编程教育的3.0时代。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注