プログラミング
現代的なMUDで子供にコーディングを教える
Teaching my kid to code with a modern MUD (tau.dev)
要約
筆者は8歳の娘に、現代的なMUD(テキストベースの多人数参加型ゲーム)である「Canon」を使ってコーディングを教えている。Canonは、プレイヤーがゲーム内のあらゆる要素を作成、検査、変更できるウェブベースのプラットフォームであり、HyperCardのような直感的な操作性と学習しやすさを目指している。このシステムは、子供たちが創造性を発揮し、プログラミングの基本を楽しく学べるように設計されている。
全文翻訳
8歳の娘がビデオゲームを作りたいと言っています。彼女はこのアイデアに夢中です。ビデオゲームをプレイするのも好きですが、それは同じではありません。世界を体験すること、たとえ世界を征服することさえも、受動的すぎます。彼女は世界を作りたいのです。そこで私は、彼女がゲームを作れるゲームを作りました。テキストと画像、そして小さな新しいスクリプト言語でできたマルチプレイヤーの世界で、彼女は何でも分解して仕組みを理解することができます。私はView Sourceが信頼できる教師だった時代に初めてコーディングを学びました。そして、彼女も同じ経験をするに値すると考えています。
このゲームには多くの制限があります。言語であるCantは、あまり良い言語とは言えませんが、それは意図的なものです。しかし、それはまた、非常に楽しいものにもなりました。私はこれを「Canon」と名付けました。
Canonは、古いインターネットのクラシックなMUDに現代的なウェブベースのアプローチを取り入れたものです。知らない方のために説明すると、World of WarcraftがMMORPGを大手スタジオのジャンルにするずっと以前、私たちはテキストベースのMUD(およびMUCK、MUSH)を持っていました。プレイヤーは純粋な文字でできた広大な領域で冒険や交流ができました。私はこれらの想像上の場所を探求するのに数え切れないほどの時間を費やしました。私はその精神で、現代の聴衆により親しみやすいと感じられるものを作りたいと思いました。
Canonは、良いMU*(Multi-User Dimension)とは何か、そして良い学習環境とは何かについて、強い意見を持っています。Canonのすべての部屋、オブジェクト、インタラクションはプレイヤーによって作成され、すべて検査、コピー、変更が可能です。娘はそれを気に入っています。もしあなたがロールプレイングやテキストアドベンチャーに興味がある大人、あるいはtelnetや初期のウェブの時代にノスタルジアを感じるなら、あなたも気に入るかもしれません。しかし、まず、レシピブログ風に、どうやってここまで来たのかをお話ししましょう。
心の自転車のためのトレーニングホイール
HyperCardを覚えていますか?もし覚えていなくても、Mystを覚えていますか?(もしそれも覚えていないなら、若いということ、おめでとうございます。少しお付き合いください。)Bill Atkinsonは1985年にLSDトリップの後、HyperCardを思いつきました。私は1989年に、小学4年生のコンピューターラボでそれに触れ、私の心は拡大しました。
HyperCardはこう機能します:カードがあります。つまり、それだけです。それが天才なのです。カードがあり、それらにコンピューターのものを置くことができます。ボタン、テキスト、画像、ビデオ。カードは積み重ねられます。HyperCardアプリは「スタック」と呼ばれます。わかりますか?そして、それらのボタンや画像、その他のもの:それらをクリック可能にすることができます。そして、それらにスタック内のカード間を移動するように指示できます。それはUXとしての「選んで冒険する本」です。(もしこれがウェブサイトに似ているように聞こえるなら、そう、その通りです。HyperCardは初期の本格的なハイパーメディアのインスタンスの1つであり、Tim Berners-LeeによるWorld Wide Webの開発に影響を与えました。)
on mouseUp go to card id 123 end mouseUp
これは有効なHyperTalk、HyperCardの基盤となるプログラミング言語です。しかし、ボタンをクリックしてカードに移動するような最も基本的なインタラクションでは、HyperTalkを知る必要すらありません。シンプルなGUIエディタを使ってそれらを配線できます。ボタンをクリックできれば、HyperCardを使えます。そしてHyperCardを使えれば、HyperCardをプログラムできます。
このことについて、私は一連の投稿を書くことができます。しかし、今あなたに伝えたい2つのことは次のとおりです。
HyperCardは魔法でした。HyperCardはひどかったです。
多くの点でHyperCardスタックは良いアプリではありませんでした。それらはカードのメタファーによって大きく制約されていました。それらはMacOSのビジュアル言語の入力要素を使用しましたが、通常のネイティブMacOSアプリケーションのように感じることはなく、また感じることもできませんでした。HyperTalkは後にAppleScriptによって繰り返される同じ間違いを犯しました:プログラミング言語を自然言語のように見せようとしたため、どちらのようにもうまく機能しませんでした。実際のプログラマーにとっては、フラストレーションのたまる力不足の環境でした。
しかし、それらの同じ欠点と制約が、2つの熱心なグループに魔法のようなアクセス可能性をもたらしました:非プログラマーと好奇心旺盛な子供たち。最初のグループは大量のものを生み出しました。Internet Archiveには数千ものスタックがプレイ可能なコレクションとしてあります。もしあなたが初期のウェブを覚えているなら、サムネイルを見るだけでも親しみを感じるはずです。ゲーム!ジン!ファンダム!マニフェスト!なぜかポルノ!ウェブの前には、Macと何か伝えたいことがある人々がフロッピーディスクでスタックを交換していました。
私は2番目のキャンプに属しました。9歳の時、私は小学校のMacintosh SEでHyperCardを見つけ、ほとんどのコンピュータープログラムとは異なり、HyperCardのすべてが編集可能であることをすぐに発見しました。私は最初に思いついたもの、つまり2つの粗雑に描かれたプレイヤーが登場するStreet Fighterスタイルの格闘ゲームを作り始めました。アーティストによる再現。残念ながら、オリジナルのスタックは時の彼方に失われました。それは私の両親の地下室にある死んだフロッピーディスクの箱のことです。
私はプログラミングについては何も知りませんでしたし、ましてやスプライトのような高度なゲーム開発の概念についても知りませんでした。しかし、ボタンをカードにリンクできることは知っていました。そこで、私はそうしました。夢中になった子供だけが持つことができる決意をもって、私はプレイヤーの動きと位置のあらゆる可能な組み合わせに対して個別のカードを描き、ボタンを「コントロール」としてそれらの間を移動するために使用しました。私はハンマーを見つけ、釘だけでゲームを作る方法を見ることができました。
あなたはカード154にいます。プレイヤー1は象限2にいて、アイドル状態です。プレイヤー2は象限3にいて、防御しています。プレイヤー1が「攻撃」ボタンを押した場合、カードへ移動...
放課後に何週間も残業しました。しかし、それは機能しました。私はゲームを作りました。自分の作品をプレイすることができました。私はキャリア全体でその高揚感を追い求めてきました。
しかし、それは始まりに過ぎませんでした。Bill Atkinsonが行った本当に賢いことの1つは、GUIでHyperCardの動作を編集すると、対応するコードが自動的に生成されるようにしたことです。私の骨の折れるクリック&リンクプロジェクトの途中で、エディタの「Script…」ボタンに気づき、その意味を理解し、コピー&ペーストのHyperTalkスニペットと、開発をスピードアップするために数百枚のカードすべてに体系的な命名規則を使用して開発を始めました。終盤に、コンピューターの先生(私たちはクラスを「コンピューター」と呼んでいたと確信しています)が私のやっていることに気づき、引き出しからHyperCardリファレンスマニュアルを引っ張り出してくれました。これが私が技術マニュアルを最初から最後まで読んだ経験でした。
何年も後…
私は娘にHyperCardを学ばせようとはしません。私は少しトロルパパですが、そこまで意地悪ではありません。しかし、私はHyperCardを若いニックにとって非常に啓発的なものにした創造的な自由と機械的な制約の魔法の組み合わせを再現したかったのです。
Canonに必要なもの:
即時的な満足感。画面に何かを置くと、すぐにゲームの一部になります。
View Source。ゲーム内のすべては、ゲーム自身のツールで構築され、自由に編集/コピー/分解可能であるべきです。
最も単純なインタラクションのためのGUI。
GUIから生のコードを書くまでのスムーズな学習曲線。
楽しいゲームメカニクスを幅広く構築し、基本的なプログラマーの思考方法を教えるのに十分なコードの力。
しかし、初心者がプリミティブのセット全体を把握できる程度に限定されています。
即時的な満足感
テキストベースの世界の素晴らしい点は、「ここに[何か]があります」と入力するだけで何でも追加できることです。構築方法には制約がありますが(派手な3Dビジュアライゼーションや印象的にリアルな物理エンジンはありません)、構築できるものには無限の自由があります。
Canonは3つの要素で構成されています:
プレイヤー
部屋
アイテム
プレイヤーと部屋はどちらもテキストの説明であり、オプションで画像も含まれます。どちらかを作成するには、「これはどのように見えるか?」という質問に答えるだけです。
View source
アイテムはそれ以外のすべてです。それらもテキストの説明と画像なので、アイテムを好きなように味付けできます:無生物、ペット、NPC、呪文の効果、乗り物、ドア、クエストマーカー、メッセージなど。しかし、テキストと画像に加えて、アイテムはCantを介してアクションと状態でも構成されます。
それはこのようになります:
item "Hooded Lantern" {
describe "An iron lantern with a hinged hood."
on "light" {
narrate "{player}'s {item} swings open and warm light spills out."
}
}
これで、プレイヤーが点灯できるランタンを生成するのに十分です。
もう少し複雑なアイテム、マジック8ボールを見てみましょう:
item "Magic 8-Ball" {
describe "A prophetic billiard ball. Give it a shake?"