CodeLab Wiki

Turn the world into your playground.(把世界变为你的娱乐场。)

构建自己的可编程空间,让学习和娱乐在此发生。


目录


CodeLab Scratch

Scratch是什么?

Scratch 是MIT媒体实验室(Media Lab)终身幼儿园小组(Lifelong Kindergarten group) 特别为全球8-16岁孩子开发的免费项目,希望孩子(同样也欢迎我们成年人)在有趣友好的Scratch环境中,通过编程,自由交互式地创作媒体作品,如故事、动画、游戏,并将完成后的作品分享给线上社区中的所有人。

Scratch对于CodeLab意味着什么?

为什么要学编程? 如何学习编程?计算机对个人意味着什么?

针对这些问题,Scratch是一个探索的起点。

首先,Scratch自身就是一份既有说服力又对所有人开放友好的答案。打开Scratch主页,区别于印象中技术人员在黑色屏幕上写下的一行行代码,一块块彩色积木般的语言单元列队一旁等待被组合与摆弄;另一侧的“舞台”上,则等着向我们演示刚刚摆弄积木的效果。不会编程也无妨,先随意玩起来,社区里有大量不同类型、不同难易程度的作品,我们不仅可以从外部欣赏,还能钻到作品背后,研究作者的积木是如何拼搭组合的,手痒的话还能借过来,在此基础上继续发挥。作品之外,还有Scratch Wiki,也是学习本领的好地方。最终完成的大小作品都可以分享到社区内,从此自己也汇入想法、创意的循环中。

Scratch不是横空出世的,它只是当下流经我们,与我们在此刻交汇。如果拧开它背后的门踏进去,没走多远,很快就会遇上Seymour Papert等一群人。在计算机曾经还是庞然大物、远未以个人电脑(personal computer, PC)的样貌走入千家万户时,他们就已预见到计算机在未来的普及,洞察到计算机在儿童教育中可供挖掘的深厚潜能。基于LISP编程语言,他们特意为孩子开发了LOGO语言,让孩子也能与计算机交流,如几何画图、写诗、控制虚拟或实体“小乌龟”的运动、开发小游戏与软件等等,使计算机成为帮助他们思考与学习的有力工具。作为一名数学家,面对包括儿童与成人在内、普遍的对数学的“恐惧”,Seymour Papert等人以数学为例,用思想和行动向我们展示,如何通过计算机为孩子构建Mathland,帮助他们感受数学的乐趣与力量,自由地亲近数学。对此,Alan Kay在其名为The Center of "Why"的演讲中,这样讲到:

This completely blew my mind! I thought this was the best idea anyone ever had for what the computer was really good for, and I immediately started to think about a computer like the Flex machine, but for children.(我姑且译为:Seymour的这一洞见使我茅塞顿开!关于计算机的真正益处,这是个前所未有的好主意。我由此立即转换方向,开始为孩子,构思像Flex这样的计算机。)

Alan Kay以上说出的不只是自己的心声,至少也是Mitch Resnick的。曾是科技记者的他,因Seymour Papert的一次演讲而深受感召,转投Seymour门下成为他的博士生,这才有了我们现在讨论的Scratch。很遗憾,在我们知道Seymour Papert之前,他已于2016年去世。但至少还有他的一本书(他其实也还有别的书,但在此我们先聚焦在这后一本),《因计算机而强大:计算机如何改变我们的学习与生活》(中文版)(原版 Mindstorms: Children, Computers and Powerful Ideas)。这本书对于CodeLab和我个人都有重要的意义,这页已写下以及将要写下的内容,都始自这本书。围绕它和Seymour Papert,我们已有很多话想说,还有更多的话尚藏在他们的思想与工作中,等待我们去发现与提炼。当前这页的焦点并不在他们身上,且当作引子,留待以后。

从上文引用的Alan Kay的话,或许就能预见到,这又是以Scratch为起点可以追溯的另一条重要线索。个人电脑(PC)概念的提出、Smalltalk编程语言、以及图形交互界面(Graphical User Interface, GUI),可能最常被用来概括Alan Kay的工作,而这三者都与他对适合儿童使用的计算机的思考直接相关。最具体地体现这些工作、和Scratch渊源最近的,应该就是他们为孩子提供的Etoys(仍可以下载安装使用)这一媒体形式丰富的创作环境。Scratch显然深受其影响,而且最早的版本也是用相同的Squeak语言创作的。并列于Seymour Papert,Alan Kay是CodeLab的另一高频关键词。在此引用,同样只是为了说明Scratch对于CodeLab的第二层意义,即溯源的起始点之一。此目的既已达到,其余的也就先按下不表。

(种瓜这篇写于2017年的有关Scratch前世今生的文章,非常具体地体现了我们所谓的溯源。)

最后,从实际的功用角度考虑,Scratch当下对于CodeLab还有另一意义:即它是与其他事物联通的重要枢纽,对用户友好的可编程空间的控制中心。至此,也就引出了CodeLab Scratch。

CodeLab Scratch又是怎么回事?

如果说Scratch为孩子提供了基于编程、多媒体的创作与表达环境,CodeLab则将创作之地从Scratch内部转移至我们每个人实际身处的三维空间内,由此将Scratch从二维的创作环境转变成了构建三维可编程空间的核心工具之一。这种转变,首先是看待Scratch的视角发生了变化;同时技术上,以Scratch为一个核心节点,基于计算机这个载体,通过有线或无线的通信方式(如USB、WiFi、蓝牙等),纳入更多的节点(其他的软硬件,如Micro:bit、Vector机器人、Kano魔杖、Tello无人飞机、智能家居设备、Python等),从而构建出一个开放又灵活的系统。系统中的Scratch,其原有功能被完整地保留;同时因为它亲切友好的编程环境,又成为可编程空间用户交互界面的不二之选。

CodeLab Scratch也内含线上社区,鼓励大家分享自己的scratch作品以及基于scratch联通其他软硬件所做的创意作品。给大家看一个具体的例子:收工吃饭文档说明页, CodeLab Scratch项目页)。

此外,种瓜前段时间还开发了用于探索Scratch社区海量作品的工具,CodeLab Insight。利用它,我们可以分析整理社区中这些横向种类丰富、纵向难度有别的作品。那些吸引孩子、适合他们模仿学习的作品,可能就是个性化的学习素材。

以上就是基于Scratch本身,CodeLab对其所做的不同思考与增强,即CodeLab Scratch


CodeLab Adapter

CodeLab Adapter 是由CodeLab构建的基础项目(v2是最新版本),致力于连接万物,无论是软件还是硬件,无论是 AI、开源硬件、现实世界的物体、还是虚拟世界的动画角色,在CodeLab Adapter的驱动下,皆可彼此互动。

前面讲的CodeLab对Scratch的增强,即赋予它的与更广泛事物连接通信的能力就是基于Adapter实现的。在此可以做一个简单的类比,我当前写下的存储在某台电脑上的文字,可以被远方不知何处的你用自己电脑中的浏览器打开,即使我们不懂其中具体的技术原理和实现方法,也知道我们之间的这种连接是通过互联网实现的。类似的,Scratch与其他事物(无论是虚拟摸不到的软件还是实实在在的硬件物体)的联通与交流是通过Adapter完成的;我们前面谈论的以Scratch以及它所能联通的事物为一个个核心节点的开放系统的建立,也是基于Adapter。如果想了解CodeLab Adapter的设计理念、目前可以接入的事物、以及使用方法,可以移步Adapter主页细览。

如果说篇首的图片是CodeLab“玩具”家族的集体亮相,下面就是其中一些的单飞时刻。

Micro:bit —— 物理硬件

在CodeLab,Micro:bit的地位恐怕与Scratch不相上下。Scratch是存在于我们浏览器中的创作环境,本质是虚拟的软件系统;来自英国BBC的Micro:bit则是一个小小的可装在口袋里的物理计算机,是我们能真实拿在手里把玩的硬件。相似的是,Micro:bit也是特别为孩子设计的开源项目,除了这个小家伙外,围绕编程与自由创作,官网上还有丰富且免费的学习资源供孩子以及老师任意使用。根据自己的程度或偏好,孩子可以选择用图形化的MakeCode编辑器或是Python编辑器为Micro:bit编程,完成自己的小项目。

至于Adapter与Micro:bit以及Scratch三者的关系,可以参考种瓜在CodeLab Adapter深度连接micro:bit生态这篇文章中的论述,他在最后做了如下总结:

通过深度连接micro:bit生态,我们能做什么,我想到以下三点:

  1. 为micro:bit社区引入CodeLab Adapter的所有能力:AI、IoT、开源硬件、脑电波、眼动仪...
  2. 为CodeLab Adapter引入micro:bit生态里的内容和套件
  3. 最后为Scratch生态引入以上两者

如何将一个多个Micro:bit接入Adapter,这里有详细的教程案例分享

Teachable Machine —— AI

由谷歌团队开发制作并在线上公开供所有人使用的Teachable Machine,可以根据我们提供的图片或声音资料以及身体姿势,快速生成机器学习模型,之后再被自由运用于个人的项目创作中。

如何接入Adapter,如何实现与Scratch的互动创作,请看这里

Vector —— 机器人

Vector与Cozmo是种瓜的心头好机器人,由美国前Anki公司设计与制造。

这篇教程会向你演示如何将Vector接入Adapter,实现它与其他小伙伴的交互。

Python —— 编程语言

Python是当下最主流的编程语言之一,也是许多孩子和成人学习编程时的首选。如Micro:bit项目就同时支持图形化编程语言MakeCode和文本性的Python,孩子可以根据自己的偏好,自由选择任意一种在线编辑器对Micro:bit编程,官网上也分享了分别使用这两种编程语言完成的趣味项目,供孩子在做中学习。巧的是,因为Adapter的开发者——种瓜同学自己对Python的偏好,Adapter本身就是用Python编写的,所以Python与Scratch的联通从Adapter被编写出就自然存在了。进一步,通过为Scratch编写EIM(Everything is message)插件,实现Scratch与Python相互间信息的传递。这样做的目的,一方面是利用Python增强Scratch的能力,另一方面是为想要从Scratch过渡至Python的学习者提供帮助。

如何实现Scratch与Python之间信息的流通,下面这些教程与项目可供参考:

Yeelight彩光灯 —— 智能家居设备

在此并非是要专门介绍Yeelight彩光灯,只是以其为代表,向大家展示如何通过Adapter与Home Assistant把智能家居设备接入进来,孩子通过Scratch编程就可以对其进行控制。CodeLab办公室内如门窗、灯光等设备,目前就是这样被接入的,通过Scratch可直接控制其开与关、升与降,同时还可以作为Scratch项目的创作元素在作品中调用和展示。

Raspberry Pi —— Adapter的家

Our mission is to put the power of computing and digital making into the hands of people all over the world.(我们的使命是将计算与数字创作的力量交至世界人民的手中。)

这是树莓派的使命与目标,请到它的主页看看他们都是怎么做的吧。

树莓派是一个手掌大小的计算机,在CodeLab,它是Adapter的家,24小时工作不停,这样我们的门窗、灯光就可以始终待命,随时响应控制指令,通常会通过拼搭Scratch积木发出。


CodeLab Neverland

至此,大家多少应该可以理解,以Scratch为起点,基于Adapter,CodeLab将编程与创作的环境从二维的屏幕世界延展到了我们实际身处的三维空间中,CodeLab当前的办公室正是这样被设计并命名为Neverland

年前的时候,Neverland已向孩子免费开放,每周的周二、周四下午以及周六全天,预约后即可前来,最多可以容纳10个孩子。当下受疫情的影响,暂时不能继续开放,待疫情结束,仍向孩子敞开,感兴趣的家长可以关注我们的消息。


CodeLab Share

写到这里,感觉“分享”是这一切背后最核心的关键词。在这个部分,如果将CodeLab看作一个点,接下来则是希望由这个点出发,进一步向四周散射出去。

主题1:做自己智识结构的建筑师

又要搬出Seymour Papert与他的Mindstorms这本书,因为是主题1的出处。每个人的兴趣、现有智识结构或背景基础不同,学习时应该有不同的路径选择。在Mindstorms这本书中,Seymour试图向我们说明基于计算机强大的模拟能力,我们有机会向孩子提供个性化的学习和思考工具。CodeLab相信这一点,Adapter连接的一切也以此为目的,希望为孩子提供多样化的编程学习的入门路径。

此外,在最近我们自己的学习过程中,也一再发现和验证,大小领域,总能找到适合自己的学习资源。因此,我们想把其中自己亲测过的好的部分罗列在下。这样做的目的不仅是为了分享和推荐,这些毕竟只是沧海一粟,大家很可能会有更多更好更适合自己的收藏。下面这些资源更像是我们的论据,用来强调,对于学习,很多时候我们可能不用死磕,基于计算机与互联网,我们其实有丰富的替代性或补充性选择。相比精进,这一点对于所谓万事开头难的那个开头,可能尤为重要,下面的资源也因此多是入门性质的。另外,因为数学、物理等学科与计算机的亲缘关系,这些领域相关的内容也一并列出。

图书/文档

  • 《因计算机而强大:计算机如何改变我们的学习与生活》 原版公开pdf:Mindstorms: Children, Computers and Powerful Ideas

    这本书唤醒和刷新了我对思考、学习、计算机的认识,也改变了我的生活。No.1

  • The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal

    似乎偏爱以历史性的角度认识一个领域,特别是由一个个丰满的人物联结而成的历史,这本书简直就是上世纪计算机发展史中的英雄人物群像,精彩迷人。

  • 《编码:隐匿在计算机软硬件背后的语言》

    正是这本书带给我的、显著区别于另外一本的阅读体验,使我意识到一个领域的入门路径其实并列有多种选择,或许不用硬着头皮,可能只是放下手里的再找一本适合自己的就行了。

  • 《编程真好玩》

    当孩子从游戏玩家变身游戏创作者:这本书是一个孩子的家长推荐给我们的,作者通过引领小读者用Scratch制作一个个趣味游戏教孩子学习编程,那位小朋友就是跟着这本书自学的。我和另一个来CodeLab玩的小朋友也都亲测过,是很好的书。

  • 简明Python教程

    这是A Byte of Python的中文版,点击链接即可在线阅读。一本入门性的小书,清晰明了。

  • Think Python 2e 中文版

    之前阅读过一小部分,讲得清楚明白,最近想再完整地看一遍,巩固疏通一下对Python与编程累积的认识。这两本关于Python的书都好在:一简短,二免费公开供所有人阅读。我对这后一本的期待值可能更高一些,因为作者在前言里的交代,他的侧重点是编程而不是编程语言,书的原标题也曾是How to Think Like a Computer Scientist。(网上这本书的中文版至少有两个,我选择了其中一个)

  • Introduction to Networking

    关于网络的设计与架构,这是我找到且看过的、面向非技术背景读者的最好的讲解,图文并茂、详略得当、清晰晓畅。(链接点开就是这本小书的pdf)

  • Calculus Made Easy

    这真的是经典微积分入门教材了(一百多年前写作出版的)。卷首格言“What one fool can do, another can. ”直白、诙谐又有力,特别能解“数学难学”这样的毒、镇“我不够聪明”这样的痛。当下的归当下,未来的留给未来。经作者明智的筛选与安排,初学者目之所及清晰明了。一步步,作者稳稳地把我们引至书的结尾,面对未来更深处,使我们有了基本的准备与信心。入门教材之典范。

课程/内容网站

  • Elements of AI

    这是芬兰赫尔辛基大学与Reaktor合作推出的以AI为主题的系列公开课程,第一期AI入门(Introduction to AI)已可以注册学习。无论是内容的讲解还是课程展开的形式,都清晰友好,又是一个值得学习的范例。

  • Basecs

    这是Medium上的一个博客,就计算机科学中基本的概念做图文并茂的讲解,在这里,非技术背景的我读到了对编译器与解释器最清楚的介绍。

  • Explain That Stuff

    这是一个科普网站,所有文章都出自一人之手,文章主题偏重物理、科技、工程与环境。作者从日常生活出发,讲解详尽又清楚易懂,可读性很高。

    网站上,作者也根据英国的科学教育大纲,把文章按主题分类并按难易程度进阶组织,供老师教学参考使用,具体可见Teaching guide一栏。

  • Better Explained

    关于数学,好的讲解应该具备怎样的特点?直白的语言、贴近生活的类比、直观图形化、交互式演示,这个网站遵循自己的ADEPT方法努力使数学更亲切友好。

  • 3Blue1Brown

    3Blue1Brown是Youtube上一个著名的数学频道,同样显著区别于我们一般教课书式的讲解,激发了我解决自己的一个历史性难题的信心与动机。

  • Physics classNameroom

    这间线上物理教室提供优质的物理教材:文字讲解 + 练习题 + 交互性的演示。前段时间在此温习了振动与波,作者也总是结合日常生活中的现象和例子类比与讲述,清楚明白。当时就心生感慨,头脑里的不明不白总是自己最清楚,如果高中的时候能像现在这样有意识自己主动上网搜索资源补充学校学习的不足,肯定会学得更好。这也是为什么我们要做这个主题的分享。

  • Explorable Explanations

    MathBox

    两个网站,第一个是一群人自发地聚在一起探索如何交互性、趣味性地解释某一个概念或问题,网站上分享的都是相互独立的作品;第二个则是个人博客中分享的一例报告与演示,关于如何图形化地解释数学概念。他们并没有围绕某一主题提供系统或入门性的内容,并列放在这里,主要是想呈现基于计算机的媒体属性,他们探索与实践的表达方式。

主题2:The Dream Machine

前面说Scratch是CodeLab溯源的起点之一,下面列出的就是CodeLab向外延申的重要线索。不同于上个系列都是完整阅读或深度使用过的,以下这些多是我们当前目之所及正在或计划以后追溯的源头。

  • 《因计算机而强大:计算机如何改变我们的学习与生活》 原版公开pdf:Mindstorms: Children, Computers and Powerful Ideas

  • Thinking about Thinking about Seymour

    2017年MIT媒体实验室在Seymour去世后举办的纪念活动(点击链接可以观看众人演讲、讨论的视频,其中包括Alan Kay以及Mitch Resnick)。

  • LogoMemos

    围绕Logo与教育,Seymour与实验室同事写下的一系列文章集合。

  • LogoThings

    由Cynthia Solomon整理建立的、关于Logo历史的网页。

  • 《终身幼儿园》

    Scratch项目主创、终身幼儿园小组组长Mitch Resnick的同名书。

  • Alan Kay Wikia

    Alan Kay Media Center

    这两个网页都志在搜集并汇总Alan Kay相关的所有资料,如写过的文章、做过的演讲,第一个网页上也有讲计划要涵盖第二个网页内的全部内容。既然这样,依然将第二个网页罗列在此的原因是,Alan Kay Media Center只是后一个网站中的一个项目而已,网站上的其他内容也有阅读价值,如作者的这篇学术论文Vision and Reality of Hypertext and Graphical User Interface

  • Squeakland

    E-toys的网站。

  • The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal

  • Computer Lib/Dream Machines

    这是1974年Ted Nelson做(自写自画自出版)给大众的书,动机是“EVERYBODY SHOULD UNDERSTAND COMPUTERS”。他并非技术背景出身,但着迷于计算机,并坚持认为所有人都应该也都可以搞懂计算机,他做这本书也是试图验证这一点。如今,作者当年试图解决的问题依然存在,个人计算机以及智能手机虽已大量普及,但很多时候我们都只是现成软件的使用者。那我们为什么就不能满足于只是做一个现成软件的使用者呢?借用前面引用的Alan Kay评价Seymour Papert的话,因为关于计算机真正益处的最好想法不是这样的呀。

  • BYTE Magazine

    这是美国上世纪末期(1975-1998)非常有影响力的微型计算机杂志,点击链接后都可以免费阅读或下载,像Smalltalk、Logo都有特刊系统介绍,平面设计也很棒,特别是看多了当前的扁平极简风之后。

  • Bret Victor's references

    最后这个无疑是主题2的压轴项,这个页面上列出的所有文章或书籍恐怕都值得一读或再读,也是前面一些资源的出处。由Bret Victor收集和上传,且仍在更新中。