この記事は、はてなエンジニア Advent Calendar 2017 の19日目の記事です。
昨日の記事は, id:papix の「「雑に文章を書く」活動と, そこから得たもの - Masteries」でした.
僕には今、小6と小4と二人の子どもがいるのですが、2年ほど前から子どもたちに Scratch を使ってプログラミングを教えています。そこから得た知見などを書いてみます。(最近はサボってるのでごめんよ子どもたちよ)
Scratch とは
説明も不要なくらい有名になってますが、Scratchとは、MITメディアラボが開発している子ども向けのビジュアルプログラミング言語です。アラン・ケイのスクイークをベースに開発されています。
ブロックのように命令を組み合わせてマウスでプログラミングでき、マウスだけでも簡単なプログラムは作れるので児童にプログラムの基本概念を教えるのによい(とされている)。
Scratch 2.0 はFlashプレーヤーを搭載したブラウザだけで動くので、今すぐあなたもプログラミングできます。この記事の中にも動くプログラムを幾つか埋め込んでいるので是非試してみてください。
なぜ子どもにプログラミングを教えるか
義務教育でプログラミングが必須授業だとか、AI社会に向けて、とか色々言われています。が、割とどうでもよくて、僕は子どもと共通言語ができる、自分のやっている仕事を子どもに理解してもらえる、というのが大きいと感じています。
我が家での導入
プログラミングスクールの体験会に参加
Scratch自体はエンジニアなら触れば大体わかると思いますが、子どもにどういうテンション、カリキュラムで教えるのか、を体験するために、無料体験会に参加してみました。
PC触るのも初めての子どもを対象にしていたので、すごくわかりやすいテキストを写経するだけの簡単なものでしたが、子どもが熱中し、できたものを自分で作り上げたものとして誇らしげにしている様が印象的でした。
書籍の購入
子どもが読めるテキストを購入しました。教えるテキストとして、また自分の理解のために。ある程度進んだら、本を与えると自分で勝手にプログラムを作る、本を発展させて自分で作りたいものを考えるようになるといいですね。
阿部先生の本。アラン・ケイのメッセージも載っててグッときます。Scratch1.4ベースですが最初に読ませる本としてはベストでは。2冊目。Scratch2.0ベースになってるし、2冊目として高度化した内容。この2冊は最初に買う本としておすすめです。その他の書籍の紹介
(我が家では)子ども受けはイマイチだったものの、面白かった本も紹介します
ヴォーダマンの本。前半Scratch、後半Pythonという構成。Scratchで学んで手続き型プログラミングって、Pythonでも一緒だよ、という主旨だけど子どもはタイピングできなくて詰む。こちらはもう少し高度な内容。一冊かけてシューティングゲームを作る。基本~応用初級くらいまでが学べる。Scratch でアルゴリズムを学べる。線形探索とかソートのアルゴリズムをScratchで学べる。自分は面白く読んだけど、子どもに読ませるのは少し先かな。do it yourself
本で基礎を学んで、なんとなく「何でもできる」感を感じてもらったら、あとは好きに作らせるといいですね。音を鳴らすもいい、カメラを使うもいい、Scratchでできることに限界を感じたら、もっと高級な言語を学ばすなり、ロボティクスにいくなり、どっちに行っても楽しいです!(子どもも親も)プログラミング教育最高。
やってみる
前置きが長くなりましたが、Scratchプログラミングの例として fizzbazz を書いてみましょう。
https://scratch.mit.edu/projects/194480042/#editor
Perl ならこんな感じですね
my $i = 1; my $serif = ''; while (1) { $serif = $i . '! '; if ($i % 15 == 0) { $serif = $serif . 'fizzbuzz'; } elsif ($i % 3 == 0) { $serif = $serif . 'fizz'; } elsif ($i % 5 == 0) { $serif = $serif . 'buzz'; } print $serif . "\n"; sleep(1); $i++; }
一緒じゃん、ということで、子どもに手続き型プログラミングを教えるのに Scratch は最初の一歩に良いなと思っています。
とにかく、マウス(トラックパッド)の操作さえ教えれば、キーボードをほぼ触らずにプログラミングが組めるのは画期的で、参入障壁が低いです。
メッセージング
Scratch の基本は手続き型プログラミングですが、スプライトのクローンでオブジェクトも作れるぞ!(ちょっと違う)
そして複数のスプライトとその間のメッセージ通信ができるぞ!(ただしブロードキャストのみ)
リミックス
GitHubのソーシャルコーディング、素晴らしいですね!Scratchでもソーシャルコーディングできる!
クリエイティブ・コモンズの継承ライセンスで公開、リミックスができます。リミックスツリーというビューがあり、ビジュアライズされます。他の人の作ったプログラムに自由に改変を加えて発表でき、それがさらにという循環が生まれます。
自分の作ったプログラミングが公開できて、コメントがもらえたり、forkして新しいプログラムが生まれるという体験をローティーンでできるのはすごい!僕も実際コメントをもらったりforkされたことがありましたが、ちょっと感動がありました。
- リミックスの例:スターウォーズ
- https://scratch.mit.edu/projects/2694407/remixtree/
- 最初ただの3Dスクロールデモだったのに、リミックスでシューティングゲームになっててすごい
いろいろやってみた
というわけで、Scratch が楽しいので、勉強がてら自分でも Scratch ブログを始めてみました。
まだ記事数は少ないですし最近更新も滞っていますが、興味ある方は是非読んでいただければと思います。
oniscratch.hatenablog.com
おすすめ記事
- 複数のクローンされたスプライト同士のあたり判定 - 大西Scratch日記
- 簡単なシューティングゲームを作って、複数のクローンされたスプライト同士の当たり判定を考えました
- 変数のスコープ - 大西Scratch日記
- クローンにおける変数のスコープについて調べました
- Scratchでタイピング練習ソフト - 大西Scratch日記
- Scratchから本格的なプログラミング言語に移行するためにはタイピングを教えないと!というわけで作りました
- Scratchには「押されたキーコードを取得」することができないので、26分岐するおもしろコードになってますがご笑覧ください
- ゼルダが楽しいので草を燃やすプログラムを書いた - 大西Scratch日記
- ゼルダにはまってプログラミングをしなくなった子どもの気を引くために作ったやつです
その他いろいろやってます!見てください!&アドバイスください!
Scratch の発展・今後
Scratch2MCPI
みんな大好きマインクラフトでプログラミングを勉強しよう!ラズパイで Mincraft Pi を動かして、Scratch でプログラミングできます!子どもの興味を引く「自作PC(ラズパイ)」「マイクラ」「Scratch」で完全勝利ですね
Scratch 3.0
Flashで動作していた Scratch が HTML5, WebGL といった標準化技術で使えるようになるぞ!
Appendix
教育
- http://techkidscamp.jp/
- 子ども向けのプログラミング講座。キャンプとスクールやってる
- 教材の一部を公開している http://techkidscamp.jp/scratch/
- ホーム - 京都クリエイティブワークショップ
- 見たことある人がやってる
サイトなど
- http://www.kodomonokagaku.com/magazine/programming/
- 子供の科学による教材。これも Tech Kids 監修
- 【旧版】Scratch 1.4入門 (全15回) - プログラミングならドットインストール
- ドットインストールのScratch講座
- スクラッチ(Scratch)とは
- 教材のPDFを公開している
- 第1回 オブジェクト指向プログラミング | 日経クロステック(xTECH)
- Scratch で OOP とか並列処理、分散プログラミングなどを学ぶ!マニアックですごい
- Scratch普及のリーダー・阿部和広さんインタビュー 前編 | Device Plus - デバプラ
- 阿部先生のインタビュー
最後に
駆け足になりましたが、プログラミングは楽しいですよね、それを子どもに教えるのもまた楽しい。未来の日本のために、我が子の未来のために、自己満足のために、子どもとの対話のために、プログラミングを教えましょう!
あなたの知見も教えてください!