Snap!:让编程学习从低门槛到无上限
Λ Snap – An inviting programming language for kids and adults for CS study

Snap! 是由 UC Berkeley 和 SAP 共同推出的可视化编程平台,专为儿童和成人设计,既适合初学者入门,也支持深入的计算机科学探索。它通过积木式编程降低学习门槛,同时提供构建自定义模块的能力,让创意无限延伸。从动画制作到物理模拟,从游戏开发到人工智能实验,Snap! 汇聚了全球用户的丰富项目,涵盖教育、科研与娱乐多个领域。无论是学生、教师还是技术爱好者,都能在这里找到灵感,动手创造属于自己的数字世界。
Snap! 是一个对儿童和成人都极具吸引力的编程语言,同时也是严肃研究计算机科学的平台。
HN 评论区
109- aspizu
Scratch 是我学习编程的起点。我在里面构建的项目越来越宏大,但到了某个阶段,编辑器本身成了我主要的对抗对象。一旦项目达到大约 10,000 个积木块,运行就会变得极其卡顿,我最终不得不花大量时间去绕过 Scratch 的限制。
这也正是我最终决定开发 goboscript 的原因:https://github.com/aspizu/goboscript
我是那些职业生涯归功于 Scratch 的程序员之一。今年,我加入了 https://ente.com 担任软件工程师。Scratch 教会了我如何写代码,或许也在某种程度上间接教会了我一些现实世界的工程经验。
- sinuhe69
Snap 的设计目标是比 Scratch 更具表现力和功能更强大。但我发现调试它们非常痛苦。例如,更改变量或积木块的名称,可能会在调用位置产生“空洞”,但系统有时能报错,有时却不能,只能静默失败。在我看来,Snap 更不稳定(flaky),而且团队似乎更热衷于添加新功能,而不是打磨现有功能或让系统更健壮、更稳定。
- andrewla
我并不喜欢这类图形化编程环境,比如 Scratch,我也说不清为什么我觉得它们如此缺乏吸引力。
很大一部分原因是,你确实能在一定程度上从中学习编程。但你绝对无法从中学习软件工程。
- Dwedit
任何无法直接打出来的名字都会是个问题。
- brian_harvey
给那些抱怨图形化编程无助于学习软件工程的评论者提个醒:
没错,你们不是我们的目标受众。我们针对的是那些不会在大学主修计算机科学,但好奇这到底是怎么回事的人。他们学过高中代数,所以知道什么是变量,什么是函数。(他们不必知道函数即数据,但我们希望教会他们这一点。)如今,他们可能在小学就用过 Scratch,所以我们不必再教他们积木块的语法,或者什么是角色(sprite)等。
没人会直接从我们的课程毕业就去做软件工程师的工作。如果(正如令人欣慰地经常发生的那样)他们因为我们的课程而改变了大学专业的选择,他们以后会有 plenty 的机会去学习那些。
他们还不是(或者至少目前还不是)那种意义上的黑客——即那种一见到机器就本能地想把它拆开的黑客。
哦,附言,从某种意义上说,积木语言对软件工程更好:你可以给事物起任意长的名字(包括单词间的空格),因为你只需要输入一次名字,所以你可以给过程起自文档化的名字,比如“convert upper case to lower case letters”,而不是丑陋的“convUcLc”。
- thrtythreeforty
我觉得 HN 在这个例子里不应该自动将“λ”大写。匿名函数是 λ,不是 Λ。
- pamelafox
我通常不是基于积木的编程的狂热粉丝,但我在 UC Berkeley 工作期间曾与 Snap 团队合作过,他们为基于积木的编程及其“函数优先”的方法提出了非常有说服力的论据。
在那里,我协助开发了这套针对 Snap 的中学课程:
https://bjc.berkeley.edu/bjc-r/course/sparks.html
尝试一种既有趣又遵循“函数优先”的方法真的很有趣——我后来也为一个“函数优先”的 Python 课程重新制作了类似的项目。
- stymaar
对于那些好奇它与 Scratch 有何区别的人,答案在关于页面:
> About Snap!
> Snap!(前身为 BYOB)是一种可视化的、拖放式编程语言。它是 Scratch(麻省理工学院媒体实验室终身幼儿园小组的项目)的扩展重实现,允许你“构建自己的积木块”。它还具有一等列表、一等过程和一等延续。这些新增功能使其适合为高中生或大学生提供严肃的计算机科学入门。