小学生とゲームを作ってみた、あるいはノンプログラマーズ・プログラミングガイド
★娘とゲームを作ってみた
今はいい時代になったなぁと思うことは色々あるけれど、小学生向けプログラミング教材がタダで転がっているのもその一つだ。
梅雨入り後の日曜日、雨でどこにも行く気がしなかったので、小学5年生とプログラミングの真似事をしてみた。
まずはMoonblockというのをやってみた。
子供用なので、もちろんコードは書かなくていい。
替わりに、アイコンを表すブロック、アイコンの振る舞いを表すブロックを組み合わせてロジックを表現する。
振る舞いブロックというのは、「クリックしたところに移動する」とか、「別のアイコンにあたった時に音を出す」などなど。
これ、やってみると、立派なプログラミングである。
写真の黒い所がロジックを書くゾーンで、右上の実行ゾーンでは、作ったロジックの通りにアイコンが動く。逆に言えば、作ったロジックの通りにしか動かない。「出現する」という振る舞いを定義し忘れたら何も出てこないし、設定を間違えると無限ループ風にアイコンが出現して、描画が追いつかなくなったりする。
一方で、少ないブロックを組み合わせるだけでも、工夫次第で立派なゲームになる。親子でアイディアを出しながら、落ちてくる爆弾を避けながらハートを集めるゲームを作り、タイムを競った。
プログラミング独特の面白さ、難しさって、
・コンピュータは人間が指示したとおりに動く
・「指示を出す局面」と「実行する局面」が明確に分かれている
・(例え意図通りじゃなくても)指示したとおりにしか、動かない
・命令の振る舞い方を、試しながらよく理解する必要がある
・ループ、分岐、変数定義などを駆使すると、複雑な指示を実現できる
といったあたりだと思うのだが、この辺がうまく体感できるようにできている。
Moonblock以外にも教育用のプログラミング体験ゲームもいくつかあるようだ。アルゴロジックという、ロボットを操作するロジックを作るゲームもやってみたが、かなり面白い。
(どちらかというと親の方がハマってしまう)
★読み書きソロバン⇒英語会計プログラミング
もちろん、読み書きソロバンが大事なのは今も昔も変わらない。今後も変わらないだろう。しかし社会人になる頃には、それに加えて「英語会計プログラミング」が学んでおくべき教養になる。
この3つは単に「仕事をうまくこなすための知識、技術」としても、お役立ち度1級だと思うが、それ以上に、「学んだ人の考え方の枠組みを変える力」を持っていると思う。
そして学ばないと、単に知識がないだけでなく、仕事上の大きなブラックボックスを抱えることになってしまう。つまり、他者とのコミュニケーションがかなりしにくくなる。「教養」というのはそういうものだ。
僕自身はこの3つを一通りかじったが、どれも「プロとして飯を食う武器になる」という程にはならなかった(特に英語はヒドイ)。が、一通りかじって良かったとは思っている。
英語や会計を学ぶ事の大事さは世の中にあふれているので、この記事ではプログラミングに絞って、もう少し続けたい。
僕は、全ての人がプロとしてプログラミングが出来るようになった方がいい、とは全く思っていない。必要もないし、現実的でもない。そして僕自身も、プログラマーだったのは、正味2年間にすぎない。それでも、「短い間でもプログラミングに真剣に取り組んだ事は、僕のキャリアにとって決定的に重要だった」と思っている。
だからウチの会社では、新入社員には最低1年、プログラミングの仕事をしてもらう。正直言うと、ウチの会社のビジネスモデルでは、わざわざ用意しないとプログラミングの仕事はない。だが、良いコンサルタントになるためには必須だと思っているから、苦労して用意する。
★プログラミングから学んだこと
普通の社会人にとって、プログラミングを通じて学べることってなんだろうか?
僕はこんな風に考えている。
・仕事の手順の組み立て方
・情報の整理の仕方
・物事をモデル化して理解、表現する力
・物事を階層に分けて考える癖
・手順を工夫すれば、少ないリソースでも済むという実感
・業務プロセスの中で、情報がどう生まれ、加工され、保管されるか
・複雑な事を塊に分け、インターフェイスだけで繋げる工夫
・システムに得意なこと、簡単にできる事を知る
・正規化、冗長化のメリット・デメリット
などなど。
どれも「頭を使う技法」として大事そうなのだが、いざ身につけようとすると、大変むずかしい。プログラミングを真剣に学ぶと、これらを実現するための思考法みたいなものが身につく。経験ない人に説明するのは非常に難しいのだけれども。
そして謙虚さ。
僕は、本当にいいプログラマーは謙虚だと思う。
どんなに自分のロジックに自信があっても、バグは無慈悲に発生する。
「システムが動かないので、他人を巻き込んで大騒ぎしたが、実は自分のロジックが誤っていた」という泣きたくなるような経験は、プログラマーであれば一度は経験したことがあるのではないだろうか。
「プログラムは、自分が組んだようにしか動かない」という当たり前のことが、「何かが上手くいかないなら、まずは自分を疑え」という、ツライ教訓を教えてくれる。
僕は、「学校では実学だけを学べば良い」という意見には強く反対する。でも、プログラミングが単なる実学(即戦力になるためのスキル)ではないからこそ、高校あたりで教えた方がいいと思っている。
※僕個人としては、会社でプログラミングを教わる前に「カルネージハート」という、ロボットをプログラミングする対戦ゲームにハマったので、文系でもスムーズにプログラマーになれました。他にもカルネージハートでプログラミングを学んだ人、いませんかね。
※ムーンブロック開発元である清水亮さんの「教養としてのプログラミング講座」は、プログラミング経験がない人向けに、とてもオススメです。
彼は僕が書いたことをもっと進めて「経営者の仕事は、他者をプログラミングすることである」と言っていて、大変説得力があります。
※タイトルの「ノンプログラマーズ」というのは、「ノンデザイナーズ・デザインブック」からもらいました。こちらも大変良い本です。
こういう、その道のプロが、全くの未経験者に肝だけ説明する、という本はためになるし、読み物として単純に面白いですね。