在Codelab的实习是短暂却十分难忘的。这次实习是我的第一次实习,它和我所以为的实习应该有的样子大有不同。这个过程当中我觉得获益良多,感慨也很多。但张口闭口说自己获益良多感慨良多,并没有什么实际的意义,于是便写了这篇博文,希望简单记录一下这段时光,同时也正好是个机会让我好好反思自己到底获了什么益,感慨了些什么。

先说说我对Codelab的印象吧。

澳洲大学的暑假有将近3个月长,若是每天都待在家里,肯定是受不了的。正在琢磨假期要干什么的时候,收到了朋友David的邀请,问有没有兴趣一起去实习。David的爸爸手下的公司正在做一个叫“龙眼”的项目,听说是一个和IOT有关的教育项目。David和龙眼的“负责人”文杰之前就认识,据David说,文杰是一个很厉害的人。有实习的机会对我一个刚学完大一的人来说实在是求之不得,更何况能够向一个“很厉害”的师傅学习,这实在是太好的机会了。

实习的第一天,心情很激动,也有一点紧张,毕竟是第一次上班。到了公司,公司的人给我和David介绍了公司目前在做的几个项目。得知我们确定想要加入龙眼项目之后(虽然那时候我对龙眼在做的事情仍然一头雾水),我们被带到了另一层楼的一间“办公室”。

“办公室”之所以打引号,是因为这里着实不像是一间办公室。房间里遍地摆放着各种各样的物件,大多是电器设备。另外还能看到一些乐高积木,以及一些熟悉的开发板,比如Arduino,还有一些我叫不出名字的东西。房间中央有四张可升降的桌子拼在一起,形成一个很大的平面。房间门口印着一个大大的logo:Codelab Club。

这里不是办公室,这里更像是一个给孩子的乐园。或者说,不单单是给孩子的,因为我感觉我也被房间里的各种设备所吸引。这就是我对Codelab的第一印象。

文杰给我们做了一个详尽的展示。房间里的所有设备都被文杰接入到了一个他所写的,名叫Adapter的程序上。所有设备通过消息相互通信,而Adapter就是作为所有消息的中转站。也就是说,空间中的东西都能够互相交互,你可以挥动一个魔法杖来让灯泡熄灭,又或是打一个响指来升起窗帘。在看演示的时候还不知道Adapter具体是什么,只是觉得这里的一切实在是太酷了。

后来我才知道,Codelab和David他爸爸的公司并不是一回事。Codelab是一个非盈利组织,最初由文杰创办,只是文杰把他所写的Adapter授权给公司去商业化,才有了之前说到的“龙眼”项目。商业公司自然是必须要盈利的,这也是“龙眼”项目需要重点考虑的东西。但Codelab作为一个非盈利组织,他们希望做的事情和商业公司其实是有很大区别的。

Codelab的正式员工只有文杰和柳青两个人, 所以其实要说对Codelab的印象,必然要说说对文杰和柳青的印象。文杰给我的第一感觉是:博览群书,有想法有主见,而且热衷于讨论。仅仅是在实习的第二天,这种感受就已经足够强烈。那天我和David还有文杰第一次一起去吃午饭,David和文杰从下楼便开始聊,一直聊到吃完饭回去,从AI聊到动物,然后又聊到生物领域,甚至是哲学。我也并非不想加入讨论,只是感觉自己肚子里的知识太少,很难参与进去,加之我本身不太善于表达,便只好默默地在一边听。

Codelab是一个鼓励分享讨论的地方,是一个让你畅所欲言的场所,这是我对这里的第二个印象。这种印象随着实习的推进,便越来越深。如果你来这里实习,你会发现这里每天都必定会有自发的讨论,而且一聊起来就会聊很久。可能我们中的哪个人从哪篇文章看到了值得深思的内容,便可以立刻引发一场讨论。柳青给我的印象和文杰非常相似,从他们的讨论便可以看出他们的知识储备以及思考的深度。David本身也是一个很有主见的人,因此也常常参与讨论,至于我在这些讨论中可能更多地扮演一个聆听者的角色吧。

其实对于Codelab的讨论,即便不参与,只是在一边听,在一边思考,也能收获许多。也是在聆听这些讨论的过程中,我深感自己的孤陋寡闻,感觉自己的见识实在太少,思考得也太少。但没有关系,既然意识到自己的不足,就抓紧完善就好了。实际上,文杰和柳青都是非常希望大家一起讨论的,想说什么就说什么,也不必有什么顾虑。

文杰和柳青对于一些观念有着很高的认可,因此你也可以看到Codelab在很多方面都在贯彻那些他们所认可的观念。他们都非常有自己的想法,并且期望能够真正地做一些有意义的事情。这大概是我对Codelab的第三个印象吧。

在Codelab实习的时间过得很快,我也越来越喜欢这个地方,以至于离开的时候还有一点不舍。办公室里面就只有四个人,我感觉我们就像一个团队一样,一起学习,一起分享。

接下来说一下我在Codelab了解到的一些东西。

在Codelab有一本书被我们戏称为“Codelab圣经”,这本书叫做《mindstorms》,作者是Seymour Papert。当初并不知道这本书的内容,只是觉得文杰和柳青好像对于这本书所提到的东西非常看重,这本书对于Codelab来说似乎非常重要。平时在讨论的时候也常常能够听到Seymour这个名字。正如在加入一个公司之前要先理解公司的理念一样,这本书本该在实习刚开始的时候就抓紧阅读,这样的话对于Codelab的理念可能会有更加清晰的认识。

在春节放假的时候,我向文杰借了这本书,谁知道受疫情影响,澳洲实施了入境限制,不得不提前返回,书也没来得及还回去。说来也有些惭愧,书借了也有段时间了,却只起了个头。但仅仅是读完引言和前言,我已经能够粗略的感受到一点Seymour所想要表达的东西了。

《mindstorms》的中文书名是:“因计算机而强大”,副标题是:“计算机如何改变我们的思考与学习”。结合书的引言和序言,我个人的理解是,这本书探讨计算机能够给孩子的思维方式和心智造成什么样的影响,又或者说,计算机的存在是否能够改变我们理解事物的方式,从而使我们“因计算机而强大”。它所关注的是计算机在教育上的应用。

在引言中,Seymour就已经提到,他认为每个人都应该学习编程,就像每个人都能学会怎么和周围的人说话一样,学会如何和电脑对话。然后再通过和电脑对话,学习各种不同的知识。其中提到的一个例子就是通过使用LOGO语言,学习几何知识。孩子们编程的过程,也就是他们自己动手实践的过程,他们在这个过程当中构筑自己的知识。这是一种建构式的学习。文中还说过一句话:“让孩子对电脑编程,而不是电脑对孩子编程”,可以看出Seymour支持主动建构知识,反对灌输式的课堂。

对于引言中所提到的这些,我个人是非常认可的。事实上,我曾经也怀疑过大学里的Lecture是不是一种非常低效的教学方式。我感觉在过去的一年大学学习里,可能八成的知识都是我通过自己看资料(当然包括学校提供的),自己实践来构建的,这似乎也某种程度上体现了建构主义的正确性。

由于《mindstorms》也才刚看了开头,就不做过多的讨论了,或许看完以后会写一篇读后感吧。

另外还有两个在Codelab常常被提到的名字,一个是Alan Kay,还有一位是Brat。Alan Kay曾说过“The big idea is messaging”,显然文杰对此深有感触,这个思想也贯彻了他所设计的Adapter。另外Brat所在做的Dynamicland也是文杰非常向往的圣地。

对于Dynamicland在做的事情,常听文杰和我们讲述,只是听来听去也还是听了个一知半解。直到后来文杰从美国带回了Dynamicland的官方资料,我才终于对Dynamicland有了一个比较清楚的认识。了解了Dynamicland在做的事情,我是非常感慨的。在思考的总是小部分的人,而绝大多数的人只是安于现状。在我们的印象中,电脑就应该有一个屏幕,应该有一个键盘。但或许很少有人会想,这可能并不是一种最好的交互方式。Brat所做的东西确实令人眼前一亮,他的想法令人赞叹。

然后简单说说我在Codelab做了些啥吧。

虽然实习期间一直是文杰在带着我和David,但我和David实际上是在“龙眼”项目实习,而不是真正意义上的Codelab实习生,所以我们要做的事情可能还是以“龙眼”项目的相关事务为主吧。“龙眼”简单来说就是把Adapter商业化,或者说,把Codelab这样的创造空间复制很多很多份,给到国内的中小学。

由于“龙眼”项目需要配套相关的教学套件,加上这一方面的工作对编程技术的要求没有那么高,因此我和David主要做的就是套件上的探索。而我在实习期间捣鼓的最多的就是micro:bit的一些相关套件。最开始主要就是按照每盒套件里面的说明去玩。对于micro:bit的基本玩法熟悉了以后,便开始尝试结合micro:bit和Adapter,做一些好玩的东西。在我的博客里也有记录其中的一些。

micro:bit玩得差不多之后,又玩了另外一个叫做M5的产品,也是类似micro:bit这样的产品。其实玩过这两款产品之后,我觉得它们是非常适合用于小朋友的STEAM教育的。一方面在于其易于上手,即便是低年级的小朋友玩也不会觉得费劲,可以迅速的跟着做出一些成果出来。另一方面在于它们可拓展性很强,配套的传感器数不胜数,可以适应孩子不同的需求,让他们自由地构筑自己想要的东西。

micro:bit和Adapter结合的话还是非常有意思的,至少当初我玩得挺开心的:) 或许将来有小朋友来Codelab,也可以试试给他们玩玩micro:bit,带他们先做一些简单好玩的项目入门,再把空间留给孩子们,让他们去联想更多的可能性。另外柳青之前有说过,把Codelab的所有东西的摆放分一下类,我觉得挺好的。同类的东西放在一起,让小朋友选择感兴趣的东西来玩,就像当初我和David来实习的时候,选择感兴趣的项目一样。现在各种物件都是随意摆放,虽然种类很丰富,但小朋友可能看了也不太有头绪。

其实在整个实习的过程中,文杰很少说直接给我们派发某项任务,更多时候是让我们自己去“玩”,去探索。文杰之前和我们提到过,其实有很多人曾经给他发过邮件说想要到Codelab来做,但都不太合适。因为如果要来Codelab,首先至少要对Codelab的理念足够清晰,并且有着相似的志向。来到Codelab不应该是由他人给你分配任务,而更应该是自己思考能够做点什么。

最后是想好好总结一下收获。

在Codelab的实习和想象中是完全不同的。可能一般来说,实习都是等上级分配任务,然后完成任务。但在Codelab似乎并不是这样。文杰在我们来的第一天就问我们对房间里的哪些东西感兴趣,可以自己选择去做那一方面的事情,整个实习的过程非常自由。

我本以为实习应该是每天当码农,学习编程本领,但实际上这次实习主要收获的并不是技术上的东西,而是思想与见识层面的东西。

和早早便出国学习的David不同,我从小到大接受的是国内的应试教育。不知道是不是应试教育的影响,即便在大学,我在学习的时候也很少会自发的去思考,比如说我为什么要学这些东西,学这些东西可以做些什么有意思的事情。我的学习是成绩驱动的,换句话说,我脑子里只有“我要好好掌握这些知识,考试的时候好拿高分”这样的观念。但经过这次实习,这种观念不复存在了。我开始对自己学的东西有所思考,换句话说,我觉得我的学习不像以往那么的盲目,而是开始有想做的事,有想学的内容。

在Codelab,每一次听大家的讨论都让我有更广阔的见识。文杰也是一个非常乐于分享的人,他喜欢和我们讲非常多IT领域中有意思的东西,比如Dynamicland,AI,黑客技术等等。这些东西很酷,我才发现计算机领域其实有着这么多有趣的事情可以做,可以去学习和探索,而现在的我实际上是多么的无知。如果说学习写代码只是为了应付学校或是公司交付的任务,那实在有些可悲了。因此,我的阅读书单增加了长长的一大串,我变得很想学习更多。

我似乎开始渴望用学到的编程技术去做一些有意思的事情,开始每天刷知乎,开始时不时浏览GitHub。毫无疑问,我对学习编程的兴趣极大地提升了,我觉得这是非常难得的收获。

另外,Codelab常常讨论到的Seymour以及建构主义,对于我自己的学习方式似乎也有所启发。学习应当是一个主动建构的过程,而不是被动接受的过程。将来我或许应该尝试更多的实践,尝试项目制的学习方式,在实践的过程中了解新的东西,或许会是更加高效的学习方式。

最后

很幸运能有机会在暑假来到Codelab,认识了文杰和柳青。我真的学习到很多,视野开拓了很多。我希望能像Codelab的各位一样,始终保持一个乐于思考的习惯,然后把平时的一些思考记录在博客里。不知道这个习惯能坚持多久呢:) 也许将来还会有机会再次到Codelab学习吧,等我有更多的知识储备后再来的话,或许会有更多的收获,也能做一些更有意义的事情。