人を教えるということ

先月末に、Hack For Japanの活動の一環として、石巻で高校生にプログラミングを教えてきた*1。情報教育については、以前にも体を使った情報教育一生役立つコンピュータスキルという投稿で考えを述べたことがあるが、どちらも一般論について述べたに過ぎず、実際にプログラミングを教えるということは考えたこともなかった。

結果から言うと、今回の経験は素晴らしいものだった。最初は人を教えたつもりだったが、実は自分がこの教えるという経験を経て、多くを教えられていた。

座学と実践のコンビネーション

今回は事前にインストラクションを書いたWikiが用意されていた。そこに書かれているとおりに、エディタで打ち込み、プログラムをビルドすれば中盤までの課題は解けるようになっている。ただし、コピペ禁止をグランドルールとしたので、参加した生徒たちは、インストラクションを見ながら、自分でコードを打ち込まなければいけない。また、インストラクションの中ではコードは解説とともに分散して書かれているので、エディタでどのようにコードを書くかは生徒ごとに異なる。

おそらく、ここで教えるべきことは、プログラミングの基礎とともに、コメントの概念であり、言語*2でのコメントの書き方である。また、改行やインデントについても教えなければいけない。ただ、これはいわゆる座学としての知識であり、知識だけでは、その知識を活用することはできない。なぜ、それが必要なのかを理解してもらわなければいけない。

この「なぜ」の部分も教えることはできる。実際に、今回はそれを伝えた。しかし、終了後の講師の振り返りでは、その部分は自分たちで気づかせる仕組みも必要だったのではないかとの反省があった。

つまり、課題を解く中で、ペアプログラミングやコードレビューのようなことを体験してもらうことで、必然的に可読性や可搬性の高いコードの必要性に気づくことになる。ここで、座学として学ぶ知識が組み合わされる。

一緒に参加している別の生徒の作ったコードを自分のコードの中に取り入れる。そのときに「お前のコード何やってんのかわかんないんだけど」というようなやりとりが発生することで、可読性の高いコードの重要性がわかる。

また、初日の課題で書いたコードを二日目の午後に再度使うようなことも良いアイデアだ。自分で自分の書いたコードが何をやっているのかわからなくなる参加者も出るだろう。そこでコメントの意味を知る。

デバッグのテクニックとしてのコメントも座学と実践を組みわせて理解する。いくらエディタにアンドゥ機能があったとしても、元のある程度までは動いていたコードにさえ戻せなくなるという痛い経験を経て、コメントの使い方も知る。この延長線上にバージョン管理がある。

リーンスタートアップ的な

このような基本的なことを教える。しかも、短時間で効率的に教えるという経験は自分の歴史、もっと壮大に言うならば、コンピュータープログラミングの進化を再度たどりつつ、それを若い世代に伝えていくということになる。講師である大人たちにとっても、それは貴重な経験だ。

短時間で効率的に、というのは参加した生徒たちの最終課題にも言える。今回は2日半という短い期間で、最終的には1人づつゲームアプリケーションを完成させるという高い目標を掲げた。しかも、大人たちに混じって発表する枠を確保してしまった。

勝手に大人たちがこのようなお膳立てをしてしまったという側面はあるが、しかし、生徒たちもこのプレッシャーを楽しんでいたようだ。

この厳しい時間的な制約の中では、如何にしてその目標を達成するかが重要となる。避けなければいけないのは、未完成のまま発表の時間を迎えることだ。すると、最初から完璧なものを求めるのではなく、「小さく始めて、大きく育てる」というアジャイル的な発想が必要となる。

柔軟に変化する要求*3に対応しつつ、納期に間に合わせる。ただ、ぶれることの無いように、コアとなるコンセプトは死守する。そのためには、まずアイデアを紙に書き出し、そこに自分の創りあげたいゲームの基本コンセプトを書き留める。

今回は習ったばかりの技術を使うことになるので、時間以外に大きな制約要因になるものは、やりたいことを実現する技術である。それは習ったことか、もしくは短時間で習得できるものか。講師のアドバイスなども参考にしながら、追加する機能は変化していく。あるときには妥協であり、あるときには異なる機能としての実現である。どのような場合にも、迷ったら彼らの手元には自分が書いたコンセプトがある。

最後に中途半端に時間が残ったときに、その短時間で追加できることは何かを考える。

大げさに言うならば、まるでリーンスタートアップのような経験を生徒と講師は経たことになる。

教えたつもりが、教えられた。

撤収しようとしている講師たちに、「ここはいつまで使っていても良いですか?」と聞いてきていた生徒たち。
ありがとう。楽しかった。またやろう。

リーン・スタートアップ  ―ムダのない起業プロセスでイノベーションを生みだす

リーン・スタートアップ ―ムダのない起業プロセスでイノベーションを生みだす

*1:[http://blog.hack4.jp/2012/08/it-boot-camp.html:title=石巻IT Boot Camp]

*2:今回はLUA

*3:この場合は自分の作りたいものであるが