最近は子供のお稽古のひとつに「プログラミング」があるそうです。
これはプログラミイングという技工が世の中で一般的に認知されたことを意味します。
又、必要不可欠な教養のひとつにプログラミングがなりつつあるとも言えます。
エンジニアの端くれである私としてもどれくらいが子供がプログラミンできるものなのか単純に興味があり、子供にプログラミングさせてみることにしました。
しかし、いざ始めようとすると色々と悩むことがありました。
『どのブログラミンク言語が子供には最適なのか?』
『子供にプログラミングを教える際の問題は何か?』
など子供にプログラミングさせるにあたり色々解決すべき事前課題があります。
色々と調べた結果と実際に子供にプログラミングさせて分かったこと、及びおすすめの子供用プログラミング言語を記事にしたいと思います。
子供にプログラミングを教えようと考えている方は参考にしてください。
スポンサーリンク
photo credit: Reese, Hacker. via photopin (license)
プログラミングとは何か?
子供にプログラミングを教える必要性の大前提としてプログラミングとはそもそもなんでしょうか?
プログラミングと聞くとコーディング、つまりソースコードを書くイメージが強いと思います。
これは狭義で、もう少し大義に捉えるとプログラミングの本質が見えてきます。
プログラミングの本質は、
『人が困っている問題を、高性能でバグも少なく、メンテナンスに優れたアプリケーションをすぐに作って解決すること』
です。
つまり、コーディング以外の設計(どんな機能にするの?、どんな画面にするの?、どんな技術使うの?、どんなアルゴリズム使うの?、プログラム内部構造はどうする?、など)やテスト(予定通りの性能が出ているの?、使いやすいの?、バグはないの?、など)の作業も含めてプログラミングです。
アプリケーションによる問題解決のすべての作業がプログラミングとも言えます。
まさに
『プログラミングとは想像を創造に変換する作業』
とも言えます。
子供がプログラミングするメリット
photo credit: Workshop ITAKE am 29.4.2013 via photopin (license)
プログラミングを子供に教えるメリットとは何でしょう?
プログラミングを幼少期に学んだからといって、ビル・ゲイツやスティーブ・ジョブズやザッカーバーグのように子供がなるとは考えていません。
プログラミングを通じて自分で想像(イメージ)したものを創造(設計してコーディング)するキッカケ・経験になればラッキーぐらいに考えています。
想像したものを創造する作業は、多くの仕事の基本動作ですから経験しておいて損はもちろんありません。
プログラミングでは特に”想像”が重要てす。
どこまで想像できるかにより出来上がるアプリケーション品質が大きく変わります。
例えば、問題解決手段を何個想像できるかで解決時間と解決の質が変わります。
もっと簡潔なコーディングが可能なのに無駄なコーディングをしているかもしれません。(他の機能で代替できる)不必要な機能を、無駄に作っているかもしれません。例外的な使われ方の想像が足りなかったためにバグが混入しているかもしれません。
想像するとはどうゆう事なのかその意味を少しでも子供達に理解してもらえればと考えています。
エンジニア職でない方はプログラミングの必要性(効能)がイメージしにくと思います。以下書籍がプログラミングの必要性を分かり易く説いており、おすすめです。
しかし本当に子供に味わってほしいのは、
一番味わって欲しいのは自分が想像したものが創造した形になった時の喜びです!
他の人が自分が想像、創造したアプリケーションを使って喜んでくれる姿です。
子供用プログラミング言語としてはどんなものがあるのか?
photo credit: Scratch Screen via photopin (license)
子供にプログラミングを教える際に、いきなりObjective-cやswiftやC#やjavaなどのプログラミング言語を使わせるのはハードルが高いです。
これらのプログラミング言語はコーディングのために事前に覚えることが多く、簡単に始める事ができません。覚える前に子供が飽きてしまいます。
この問題点を考慮して子供が簡単に始められるプログラミング言語が色々と作られています。
子供用プログラミング言語の一番の特徴は命令記載をビジュアル化して極力キーパンチを少なくしたビジュアルプログラミング環境になっている点です。
代表的な子供用プログラミング言語(プログラミング環境)とその特徴を紹介します。
MOONBlock
MOONBlockは株式会社ユビキタスエンターテインメント (UEI) の秋葉原リサーチセンターが開発したビジュアルプログラミング環境です。
純国産のプログラミング環境です。
生い立ちとしては同社が開発しているHTML5 + JavaScript ベースのゲームエンジンであるenchant.jsをビジュアルプログラミング化したことが発端となっています。
このような生い立ちがあるため、MOONBlockについてはブラウザベースで動作します。そのためOSを選びません。
また、ゲームエンジンが発端であるため、キャラクター(オブジェクト)がどのように振る舞うかをキャラクター別にプログラミングしていきます。
通常のビジュアルプログラミングが処理の流れ(フローチャート)をビジュアル化しているのに比較して、MOONBlockでは振る舞いを定義する点(現実世界の模倣)で、子供に分かり易いメリットがあります。
又、MOONBlock、enchant.jsについては学校教育にも導入されており、実績もあります。
強いてデメリットをあげると、ネイティブアプリではないため動作が少しもっさりしている点とマウス操作が前提のため子供が親しんだタブレット等での操作に難がある点です。
Scratch
Scratch Overview from ScratchEd on Vimeo.
ScratchとはMITメディアラボが開発したビジュアルプログラミング環境です。
子供用のビジュアルプログラミング環境といえばまず最初にでてくるぐらい有名です。
基本的には処理の流れをブロックのように組み合わせていくことでプログラミングができます。
使用者が多いため情報量も多く様々なサンプルソースを見つけれます。各OS用のネイティブアプリとともにWEBアプリケーションもリリースされているため動作環境としても操作としても困ることがありません。日本語にも対応しているため問題ありません。
デメリットはなく、子供用のビジュアルプログラミング環境としては王道と言えます。
Viscuit
NTTで開発されたビジュアルプログラミング環境です。
MOONBlockやScratchがブロックを組み合わせてプログラム構造を作るのに対して、Viscuitはブロック構造ではなく変化前後のイメージを実際に書くことでその変化に合わせてアニメーションを作ります。
実際に動くものを短時間で直感的に作れる点で子供の興味を一番ひきつけやすいです。
まずコンピュータを初めて触って自分の思い通りに動くものをつくるファースト・ステップとしては最適なプログラミング環境だと言えます。
Viscuitでコンピュータに慣れてからScratchなでにステップアップしていくとスムーズかもしれません。
子供用プログラミング言語の問題点
photo credit: Business Baby Pointing via photopin (license)
幼稚園と小学校低学年の子供にまず初めにScratch(スクラッチ)を触らせてみましたが、色々とプログラミング以前の問題にぶつかりました。
マウス操作が難しい
画面を直接触って操作することがコンピューター操作の基本になっている現代の子供にとって、マウスとキーボードの操作は苦行です。
直感的操作できないので、その操作に苦労していました。
特にビジュアルプログラミングでは命令ブロックの部品をマウスでドラック&ドロップする事が多いため、上手に部品が配置できず苦労していました。
何を作ったらよいか分からない
そもそも子供は情報のインプット量が少ないので、想像する事に限界があります。
何をプログラミングして作ったらよいのかアイディア出しが難しいです。
サンプルプログラムで色々と遊んだ後にさて何を作るかと悩んでしまいます。
覚えることがたくさんある
ビジュアルプログラミング言語とはいえ、コーディングのための命令ブロックはそれなりあります。
命令ブロックの理解が前提となりますが、事前に覚える事がたくさんあるのは子供にとって負担です。
子供用プログラミング言語はLightbotがおすすめ
子供用プログラミング環境の問題を書きましたが、これら問題を解決しているプログラミング環境を見つけました。
それがLightbotです。
Lightbotは命令ブロックを組み合わせて、画面上のロボットを移動させ、全ての色付きタイルの上でロボットの頭を光らせるとレベルクリアになります。
「それってプログラミングなの?、ゲームじゃないの?」という声が聞こえてきそうです。
その通りです。一見するとゲームみたいです。
しかし、動かしてみるとプログラミングに必要な基本命令セットが一通り揃っている事に気付きます。
レベルが進むに従い、関数や繰り返しや条件分岐などプログラム構造は複雑化していきます。
レベル5まで進むと、おそらく「これはゲームじゃない!、プログラミングだ!」と叫ぶと思います。
なお、lightbotには4〜5歳用の「lightbot-jr」と5〜9歳用の「lightbot」があります。5〜9歳用になるとプロシージャの数が最大2つになることや、条件分岐などが使えるようになります。まず、「lightbot-jr」でlightbotに慣れ、更に難易度の高いものを子供が求めたら「lightbot」にステップアップするのがよいです。
目的が明確である。
Lightbotの目的は、命令ブロックを組み合わせてロボットを移動させ、全ての色付きのタイルの上でロボットの頭を光らせる事です。全てのレベルでこの目的は変わりません。
目的はたったひとつ。
ロボットの頭のライトをタイルの上で光らせるだけです。
Lightbotを奥深いものにしているのはロボットをゴールに導く事ではなく、すべての色付きタイルの上でロボットの頭を光らせる点です。
色付きタイルへの到達方法はプログラミング次第で変わります。
最短コースを通すことでプログラム量を減らす事もできますし、ロボットに無駄な動作はさせるものの同じ命令プロシージャを使い回してプログラミング量を減らす事も出来ます。
明確な目的があるので何をプログラミングするかで子供が悩むことがありません。
タップ操作でプログラミングできる。
LightbotはiOS、Androidのネイティヴアプリとしてリリースされています。つまり操作の基本はタップやスワイプになります。
タップ操作のため、操作方法を教えなくてもすぐに子供達はLightbotの操作ができるようになります。
マウス操作のようにプログラミング以外の操作で苦労する必要がなく、プログラミングに子供達が集中できます。
覚える命令ブロックが少ない。
基本動作はたった5個の命令ブロックのみ覚えれば問題ありません。
あとは最大2個のプロシージャ(関数)とタイルの色により分岐がでてきますが、これは命令というよりは命令ブロックをどう配置するかにより決まるため、得に意識しなくてもレベルを進める内に自然と理解できます。
たった5個ですがこの命令ブロックも初級レベルのときにひとつひとつその活用方法についてステップアップして学べるようになっているため、事前に覚える必要はありません。
高度なアルゴリズム構築にも対応
繰り返し(リカーシブコールとして動作)や条件分岐などプログラムの基本制御命令が準備されています。
また、複数命令ブロックをひとかたまりにして関数化(ブロシージャ化)もできます。
ブロシージャ定義は最初はひとつだけですが、途中からは2つまで定義できるようになります。
まこのブロシージャを活用して使用命令ブロックを減らし、プログラム構造を最適化することわ求められます(規定より少ないブロックで処理するとボーナスがもらえます)。
レベル別にステップアップして学べる。
最初は前に進むだけですが、途中からは回転による方向転換、ジャンプで階段昇降など動作の幅が出るとともに頭を光らせると昇降するタイル、ワープするタイル、頭を光らせると色が変わるタイルなど動作の幅を広げるギミックも増えてきます。
レベルが進むに従い処理は難しくなります。レベル5を過ぎると大人でも簡単には解けなくなります。
まとめ
プログラミングというとコーディングがメインと成りがちですが、そもそものその本質である問題解決のための想像と創造を子供達に体験してもらうことが一番大事です。
想像を創造し、困った人に貢献する喜びを知って欲しい事です。
今度の週末は、子供と一緒にLightbotでプログラミングしてみてはどうでしょうか!