原文参阅 # 比较图形化硬件编程渠道

MicroBlocks 中文主页现已上线,欢迎体验: MicroBlocks

前言

我用过大多数图形化硬件编程渠道,或许比这个范畴的大多数产品司理用过的产品要多。

这不是什么值得夸耀的工作,它不过意味着我糟蹋比他人更多的时刻在形形色色的编程渠道上,意味着我迟迟没有遇到真实的好产品。

咱们之所以打造自己的体系,是因为不想把时刻用来学习他人的糟糕主意 — Alan Kay

不幸的是,通常而言,这就是核算机教育的意义。学习者花费许多时刻,学到的仅仅体系规划者的糟糕主意。

教育者花费许多努力,所做的,仅仅部分抵消了糟糕的体系所起的负面影响 — Alan Kay

幸运的是, John Maloney 为这个范畴带来了曙光,完毕了我在不同渠道之间流离失所的生活。

图形化编程

在有伟人膀子能够站立的国际,短视却仍然是一个问题 — Alan Kay

图形化编程,几乎彻底征服了儿童编程这个范畴,以至于当咱们议论儿童编程时,基本是在议论图形化编程。

这个范畴有真实巨大的人物: Seymour Papert、 Cynthia Solomon、Alan Kay、Mitchel Resnick、Natalie Rusk、John Maloney…

有真实超卓的著作: 《Mindstorms》、《终身幼儿园》、《A Computer for Children of All Ages》…

也有真实超卓的项目: Etoys、Scratch、Snap!、GP blocks、MicroBlocks …

至于主流范畴的产品平均水平为何如此之低,的确是个谜…

这个范畴的先驱们有着明晰的认知论和愿景,这个范畴的超卓见解远不止 “拼搭积木能够减少语法过错”。 但很可惜,这些 powerful ideas 大多未被今天的教育者和体系规划者所了解。人们乃至满足于 Blockly 这样退化的东西。Live programming 是 Scratch 力量源泉之一,这需求强壮虚拟机(VM)的支撑,仅仅将积木翻译到代码远远起不到增进了解的作用。关于这个话题,我在CodeLab 纪事做了更细致的评论。

图形化硬件编程范畴,需求真实强壮的虚拟机(以及与之协同的图形 IDE)来支撑建构主义风格的教育。但现在这个范畴很少意识到虚拟机的作用,只逗留在对积木的关注上。

图形化硬件编程

We make, not just to have, but to know. — Alan Kay

确切的说,咱们需求进行物理核算(physical computing)。咱们需求收集物理国际的信息并对物理国际施加影响。 — 给老杨的礼物

硬件编程的乐趣在于,咱们能够让主意,经由代码和运转它的硬件材料,作用在实际国际之上。这样一来,咱们的思想,便有了物理的身体。

《理想国》里说:「言语是一种比蜡还容易随意伪造的材料」, 它如此灵敏,能够用来与朋友逗趣,用来表达你的思想,用来发明诗篇与小说;编程就像言语,它同样能够用来表达你的主意,用来与朋友逗趣,以及,用来表达和发明。它让你与人间的万物沟通,你能够用它指挥一台飞行器,制作一个别感游戏。或许在朋友生日那天,在 Ta 进门的一刻,将手中的魔杖一挥,在空中齐截个字母 L 的轨迹,瞬间,点亮房间里彩色的灯火。 在 CodeLab,你将轻松做出这样的魔杖,并对周围的国际施以魔法。假如你愿意,能够将 CodeLab 看作霍格沃茨(Hogwarts)。 — 关于 CodeLab

今天当教育范畴评论STEM/STEAM/创客(Maker)/物理核算时,或多或少都与硬件编程有关。

在图形化硬件编程范畴,超卓的项目极少,上一个值得被批判的项目是微软的 MakeCode,此外的大多数体系连明晰的规划理念都没有,仅仅 A 抄 B,B 抄 C,通常连同糟糕的主意一起抄,东拼西凑,不值一驳。迄今为止,真实做到超卓的项目只要 MicroBlocks。

本文将评论 MicroBlocks 相较于其他渠道超卓的当地。在此我只关注那些能够增强用户的体系特性,具体而言我关注以下的特性:

  • 可了解性
  • 开放性
  • 低门槛、高天花板、宽围墙
  • 对建构主义教育风格的支撑

其间我把可了解性放在第一位, 可了解性协助咱们更好地思考和发明。成为 Maker 的重要意义之一是: 借助发明的进程来了解国际:

To know the world one must construct it. –Pavese

We make, not just to have, but to know. — Alan Kay

The challenge is not building it but understanding it — Bret Victor 《Seeing Spaces》

假如一个别系要为发明精神服务,它有必要能被个别彻底了解。 — Smalltalk 背面的规划准则

欢迎批判

非常欢迎读者的批判。

本文的方针是供给一份相似 “评测和挑选指南” 的材料,期望能够为较真的用户挑选编程渠道供给根据理性的依据。也期望这份材料能经受住资深用户、教育者、硬件工程师和黑客们的批判。

这篇文章很或许存在事实性过错,过错的产生或许有以下原因:

  • 我对评测的渠道不行熟悉,对功用特性有所遗漏
  • 因为各个渠道都在不断更新,有许多改善正在产生(比如我之前指出“根据积木翻译的 Python 协程代码会误导初学者”,Makeblock 就做了很超卓的改善)。

假如我的评测有任何事实性的过错,或许某些渠道现已做出了相关改善,欢迎读者邮件指正: wuwenjie718@gmail.com,来信的论说若是充沛,我将更改本文,使其更接近事实。这份列表现在仅仅 v1.0 版本,它将继续更新。

假如你期望有更多的图形化硬件编程渠道归入比较,也欢迎奉告我。

ps: 我自知对 MicroBlocks 有很强的情感偏好(尽管我以为这种喜爱是根据理性的), 在写作本文的时候,我企图克制这种情感倾向,期望它不会引起我对其他渠道的成见(若期望这篇文章有说服力,尽量保持中立是必要的)。举个比如, 我在我的电脑上(MacOS 12.3.1 M1)试着连接 micro:bit 运转 hello world, 在 Mind+ 和 Kittenbot 渠道都没有成功,但我没有因此在相关评测项目上马上给它们低分。因为这有或许是我的电脑体系太小众(大多数人用 Windows),以至于没有被注重,导致测验不行充沛。我到这些渠道的用户社区看了用户的反应,发现它们不大会遇到我的问题。我也让我的朋友在 windows 下测验,他们反应都不错,最后在上手简易程度上我仍然给了 Mind+ 和 Kittenbot 高分。

比较渠道

本文挑选了一些我自己运用过、且有一定影响力的图形化硬件编程渠道(至少以此为卖点之一)。

  • 慧编程
  • Maker IDE
  • kittenbot
  • MakeCode
  • MicroBlocks
  • Mind+
  • Mixly
  • Scratch(MIT)

图形化硬件编程渠道的比较

比较的渠道比较多,请左右滑动表格。

慧编程(Makeblock) Maker(编程猫) KittenBot MakeCode MicroBlocks Mind+ Mixly Scratch(MIT)
可了解性 一起支撑灌入式与交互式
交互式编程
Live programming
(仅在线形式) (仅舞台形式) (仅实时形式)
实时 debug
复杂积木的可了解性
(引擎盖下)
数据可视化
从板子回传积木到编程环境
在运转时了解体系状态
在用户环境中了解体系底层 ✔ (开启高档形式)
低门槛 开箱可用性 (支撑网页,依靠插件) (支撑网页,依靠插件 300+MB) (支撑网页,依靠插件) (纯网页) (纯网页) (支撑网页,依靠插件) (支撑网页) (支撑网页,依靠插件)
跨渠道 (不支撑 Linux, 需求社区插件)
上手简易程度
高天花板 积木丰厚度
可扩展性
多任务才干
支撑离线运转
离线形式支撑广播(消息)
宽围墙 支撑板子的数量
支撑的传感器/执行器数量
用户引入新硬件的自由度
支撑 “一次编程 多板运转”

注: 在下个版本(v2.0) 中,我会具体解说每个比较项的意义。

结语

你无法用提出问题的思想解决问题。 — 爱因斯坦

当时的图形化硬件编程范畴,与我几年前写作 两种硬件编程风格的比较 时比较,并没有什么大的前进,整个范畴都想让渠道支撑灌入式和交互式编程,尽管我们称呼这两种才干的方法各有不同(在线/离线,实时形式/上传形式,舞台形式/代码形式…)。但现在只要 John Maloney 的 MicroBlocks 做到了让两者无缝融合,从而让渠道更好地支撑 Maker 们探究和发明。获得这种我们朝思暮想的特性的方法,并不是沿着”将翻译积木成代码”的老路前进,也不是让积木简略地调用代码。”你无法用提出问题的思想解决问题”。正确的做法,是需求一个强壮的虚拟机。这当然极端不易,假如你看过 John Maloney 的阅历,会发现,他在这个方向上现已思考和探究了数十年。

我想引用 Hacker News 上的一位用户对 MicroBlocks 的评价,在专业工程师中很有代表性:

Excellent summary. The “oh wow this feels different” aspect of MicroBlocks comes after you try it. It makes programming microcontrollers as interactive and hands-on as building electrical circuits from discrete components. Your changes are immediate. And the live data graphing from sensors feels like a graphic voltmeter or oscilloscope. For physical computing it’s simply the best learning tool I’ve ever encountered (note I’m an EE major, not CS). All those “real” programming languages now fall short in my view. I’m hooked. — kgiori

FAQ

我过去有 Scratch 经历,想让虚拟国际的人物与实际国际互动,有什么主张吗?

Microbit More是我看到过与 Scratch 结合得最好的硬件扩展,比 MIT Media Lab 规划的扩展要超卓许多,也远胜其他公司的扩展。

作者是 Alan Kay 的一个学生,也是 Smalltalk 用户, 所以他能很好地了解 Scratch 的规划理念(Scratch 最初是在 Smalltalk 里规划的),从而规划出与之协调一致的插件,彻底跟随 Scratch 的哲学。现在 CodeLab 布置的 Scratch 现已将其集成进去了,我们能够免费运用,Microbit More 的开箱可用性很好,很适合新手。

MicroBlocks 不能翻译出代码吗?这是不是它不如其他体系的一个依据?

渴望将积木翻译成代码,仅仅 “积木是代码的薄薄包装,代码是本质,积木是表层” 这一糟糕规划理念的诉求。我现已在 CodeLab 纪事 做了评论。

如有需求,MicroBlocks 当然能够翻译成代码(并且它的确以文本形式存储,你能够用文本编辑器查看保存项目的文本代码),高档用户如有需求,体系乃至能够向用户显现积木所对应的虚拟机指令和字节码 (实时编译),但 John Maloney 故意隐藏了引擎盖下的完结细节,这对用户进行发明和了解体系协助不大,要求用户在不同的心理模型中切换,通常会分散注意力,极大增加学习难度,尤其关于初学者而言。CodeLab 纪事 里也有相关评论。

假如你的体系无法在图形层面进行深入的编程,需求用户了解代码才干进行更深度的工作。那只说明该体系图形化才干太弱,这是一个规划缺陷,而不是支撑 “将积木翻译成代码” 的理由。

在 MicroBlocks 中,积木与其文本表示(代码)是一体的两面,因为超卓的全体规划,这两者现已做到了高度一致,以至于用户只运用积木就几乎能完结所有文本代码能做的工作,包含编写扩展插件!

MicroBlocks 或许是 Etoys(Alan Kay 领导的项目) 之后,图形化编程体系走得最远的比如。

你自己会怎么给这些渠道归纳打分?

我自己心中的排序是:

MicroBlocks >> MakeCode > Makeblock >>> …

MicroBlocks 一骑绝尘并不令人惊奇,John Maloney 几乎是这个方向的开创者,并且在这个范畴探究了数十年。微软团队有丰厚的编译器经历,在既有的技能结构里几乎做到了极致。令我震惊的是 Makeblock(慧编程),他们几年来克服了非常多的难题,并且解决方案非常超卓,为增强可了解性做出了很大努力(多任务、广播消息)。但很惋惜的是,MakeCode 和 Makeblock 起点并不是 Powerful Idea: 把积木看作底层体系(MicroPython/C++)的薄薄外衣。这是个弱小的主意(由 Blockly 引入),在这个主意之上再怎么努力优化,获得的发展都是非常有限的。

唯有构建强壮的虚拟机(和 IDE)才干追上 John 获得的颠覆性前进。

Point of View Is Worth 80 IQ Points — Alan Kay

假如我想规划相似 MicroBlocks 这样的体系,要怎么做?

关于有志于规划相似 MicroBlocks 这类体系的架构师(我自己曾经便是,在看到巨大距离后,我就加入了 MicroBlocks,与 John 同事),以下是一些主张。

因为核算的特质之一是它总是能够模仿其他可核算的东西。所以的确有或许根据 MicroPython+Blockly 构建出相似 MicroBlocks 的体系(兼得灌入式和交互式的才干),因为 MicroPython 现已包含了一个健壮的虚拟机(VM),也许能够作为起点。接下来要考虑的是编程界面(IDE, 积木是其间一部分)怎么与虚拟机交互,怎么发动和中止程序?怎么盯梢程序的运转状态,以便显现图形反应(例如用发光边框显现正在运转的积木)?怎么处理并行任务?怎么通过点击运转单块积木?怎么打断正在运转的程序?怎么从硬件里获得程序?怎么获得硬件的运转时信息?怎么从过错中康复?…

(消息)通讯是要害。这是一个相当不容易独自一人想明白的范畴,乃至连 John Maloney 也不是独自想明白的,John 从 Smalltalk/Squeak 里获得了架构的大部分内容(Smalltalk 一直是 Live programming 灵感的源头之一,另一个是 Lisp ),MicroBlocks 便是站在伟人(Smalltalk)膀子上才看得更远。

假如你想越过 Smalltalk,直接从 MicroBlocks 的架构里学习,The MicroBlocks Virtual Machine 、 The MicroBlocks IDE 或许是你需求的材料,但缺少对 Smalltalk 的了解,或许会导致难以看到这些规划背面的理念,从而导致了解上的困难。

参阅

  • 两种硬件编程风格的比较
  • 给老杨的礼物
  • Squeak News 采访 John Maloney
  • “好奇心和决心的结合”: 与 John Maloney 的对话
  • what is microblocks
  • The Early History Of Smalltalk
  • Smalltalk 背面的规划准则
  • MicroBlocks: Scratch and Smalltalk-inspired MCU VM for live embedded programming
  • CodeLab 纪事
  • 关于 CodeLab
  • Blockly
  • MakeCode
  • OLED Display driver written 100% in MicroBlocks !
  • 慧编程
  • Maker IDE
  • kittenbot
  • MakeCode
  • MicroBlocks
  • Mind+
  • Mixly
  • Scratch(MIT)
  • Etoys
  • Snap!
  • GP blocks
  • Microbit More