Snap! は子どもから大人まで、本格的なCS研究にも使えるプログラミング言語
Λ Snap – An inviting programming language for kids and adults for CS study

UC BerkeleyとSAPが提供するSnap!は、ブロックを組み合わせてプログラムを作るビジュアル言語。子どもにも扱いやすい「低い床」から、ファーストクラス手続きや継続といった高度な概念までカバーする「天井なし」の設計で、本格的なコンピュータサイエンス教育に使える。Wordleや3Dシミュレーション、ニューラルネットワークのデモまで、コミュニティによる多彩なプロジェクトが公開されている。
Snap! は、子どもにも大人にも広く親しみやすく、同時にコンピュータサイエンスの真剣な研究のためのプラットフォームでもあるプログラミング言語です。
HNでの議論
109- aspizu
Scratchは私が初めてプログラミングを学んだ方法です。Scratchでどんどん野心的なプロジェクトを作っていましたが、ある時点でエディタ自体が主な戦いの相手になりました。プロジェクトが約10,000ブロックに達すると、ひどく動作が重くなり、Scratchの限界を回避するための設計に多くの時間を費やすことになりました。
それが最終的にgoboscriptを作るきっかけになりました:https://github.com/aspizu/goboscript
私はScratchのおかげでキャリアを築いたプログラマーの一人で、今年https://ente.comにソフトウェアエンジニアとして入社しました。Scratchは私にコーディングを教えてくれ、間接的には実際のエンジニアリングの一端も教えてくれたのかもしれません。
- sinuhe69
SnapはScratchよりも表現力が高く強力になるように設計されています。しかし、デバッグが非常に苦痛だと感じます。例えば、変数やブロックの名前を変更すると、呼び出し側に「穴」ができることがありますが、システムがエラーを報告するかしないかは場合により、しかも黙って失敗します。Snapは私の意見ではより不安定で、チームは既存の機能を磨いたり、システムをより堅牢で安定させることよりも、新機能を追加することに熱心なようです。
- andrewla
私はこのようなグラフィカルなプログラミング環境やScratchがあまり好きではなく、なぜこんなに魅力的に感じないのか、はっきりとは説明できません。
大きな理由の一つは、ある程度まではこれでプログラミングを学べるということです。しかし、これでソフトウェアエンジニアリングを学ぶことは絶対にできません。
- Dwedit
タイプできない名前は必ず問題になります。
- brian_harvey
ビジュアルプログラミングはソフトウェアエンジニアリングの学習に役立たないと不満を言うコメント投稿者へのメモ:
その通り、あなた方は私たちの対象読者ではありません。私たちが狙っているのは、大学でコンピュータサイエンスを専攻するつもりのない人たちですが、何がそんなに話題になっているのか興味を持っている人たちです。彼らは高校の代数を履修しているので、変数とは何か、関数とは何かを知っています。(関数をデータとして扱うことを知っている必要はありませんが、それを教えたいと思っています。)最近では、おそらく小学校でScratchを使ったことがあるので、ブロックの構文やスプライトとは何かを教える必要はありません。
私たちのクラスを出てすぐにソフトウェアエンジニアの職に就く人は誰もいません。後でそれを学ぶ機会はいくらでもあります。ありがたいことに頻繁に起こることですが、私たちのコースがきっかけで大学で専攻を変えることになれば、なおさらです。
彼らは(少なくともまだ)ハッカーではありません。つまり、機械に遭遇したら分解してみたくなるような人たちではありません。
ああ、追伸:ブロック言語がソフトウェアエンジニアリングに優れている点が一つあります。それは、任意の長さの名前(単語間のスペースも含む)を付けられることです。名前を一度入力するだけで済むので、手続きに「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(MIT Media LabのLifelong Kindergarten Groupのプロジェクト)を拡張して再実装したもので、自分自身のブロックを作成できます。また、ファーストクラスのリスト、ファーストクラスの手続き、ファーストクラスの継続も備えています。これらの追加機能により、高校生や大学生向けの本格的なコンピュータサイエンス入門に適しています。