全ての授業をハッカソンにしてしまおう

(訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。)

イギリス国外の読者のみなさんへ。イギリスの10年生はアメリカでの8年生(日本での中学2~3年生)にあたります。

今年は例年と違うことをやってみたいと思っていました。そこである実験をしてみました。大きな失敗に終わる可能性もあったし、実際に失敗しかけたのですが、とにかく私の心は決まっていました。説明しましょう。

GCSE(一般中等教育修了試験)向けのコンピュータサイエンスの授業では、それぞれPythonがインストールされたマシンがWindowsネットワークに接続されており、教えることは簡単でした。生徒たちはIDLEを使ってスクリプトを書き、Microsoft Wordで課題を作成することになっていました。その他、試験に必要なことは全て学習し、Pythonを習得し、試験審査委員会に提出する課題も作成します。でも私は何となくしっくりこなかったのです。

物理と化学を教えるのは数年前にやめてしまいました。試験問題を作るための工場で働いているような気がしたからです。理科も、理科を教えることも大好きでしたが、試験でより高い評価をとらせなくてはならないという重圧のせいで、教え方にも影響が出てきました。嫌いになってきたのです。一般教育修了上級レベルのクラスの生徒が光の粒子性についての質問をしてきた時のことは、はっきり覚えています。その時、私は出来るなら脱線してでも、単一光子の回折の奇異について授業をしたい気持ちで一杯になりました。そして続けて、重力場の光子への影響についてのアインシュタインのエレベーターの思考実験の話をし、それからシュレーディンガーの猫の話にちょっと触れてもいいなあ、などとも頭をよぎりました。しかし実際には、来月に定期試験が控えていること、それに向けて消化しなくてはならない授業内容があることについて、とてもよく認識していたので、気が重いまま元々の授業計画に従ったのです。新しく見つけた情熱を傾けられる分野で、同じ轍を踏むのはイヤでした。そう、コンピューティングです。

私はハッカーではなく、教師です。コーディングの経験は3年しかありませんし、日々、まだこんなにも学ぶことがあるいう事実に圧倒されています。ある日はJavaScriptの新しいライブラリをねじ伏せて思い通りに使いこなせた自分を神のように感じます。別の日には、どんなに頑張ってもどんなに検索してもEmacsでinitファイルがエラーだらけでパースできず、自分がまるっきり初心者だと感じます。もし、もっと若い頃にコンピューティングと出会っていれば、Hacker Newsのトップページの記事に目を通しても、10個のうち1個以上の記事を理解できだろうと残念に思うのです。

生徒たちには私が逃した経験をさせたいと思いました。自分たちがハッカーだと感じられるようになってほしい。自分たちは特別で、学校中で自分たちだけが、コンピュータとソフトウェアがどのように動作するのかについての秘密を知っていると思ってもらいたい。他の生徒たちが困惑顔で眺めているのを尻目に、マシンの前に座ってキーボードをカチャカチャとタイプして見せてほしいのです。

そこで9月、新10年生の一番最初のコンピュータサイエンスの授業から、この試みに着手しました。最初は少しずつです。数週間かけて、まず課題に向けての初歩的な内容を書かせました。フローチャートを描かせ、小さな疑似コードとPythonの関数をいくつか書かせました。これはかなり標準的な授業内容で、普通にイギリス国内のGCSEのコンピュータサイエンスのクラスで行われているようなものです。しかし、コードやイメージ、そしてコンテンツが出揃ったのを機に、これを一旦中止しました。それからの4週間はワークフローに集中しました。ここからの12回の授業はコンピュータサイエンスのシラバスを無視し、コードも書かず、構文、アルゴリズムやコンピュータサイエンス理論についても学びませんでした。

代わりに生徒たちが学んだのは、例えばOpenStackのサーバでUbuntuの仮想マシン(VM)のインスタンスを起動する方法、PuTTYを用いてVMにアクセスするやり方、新たにスーパーユーザを作成する方法、ファイルシステム周りの扱い、apt-getを使ってソフトウェアをインストールし、アップデートする方法、.bashrcファイルを編集してエイリアスを作成し、メインネットワークに存在するWindowsのホームフォルダをマウントできるようにすることなどです。

次にEmacsの学習に移りました。基礎的なコマンドをいくつか教え、ファイルを開いたり保存したりなど、操作方法を少し覚えさせ、python-modeでスクリプトを書かせ、別のバッファのインタプリタでそのスクリプトを実行させたりしました。Markdownによる記述方法や、彼らにとっては得体のしれない、私がREADME.mdと呼ばせているファイルの中にリンクやイメージを作成する方法なども学びました。

最後にGitHubのアカウントをセットアップしました。彼らのために作成したリポジトリをフォークして、彼らのVMを取得し、ファイルを追加し、変更をコミットしてそれらの変更をGitHubに反映させました。

楽な道のりではありませんでした。最初は大混乱になり、生徒たちの顔からは笑顔が消えました。特にパスワードは悪夢でした。OpenStackサーバに1つ、仮想マシン用に1つ、そしてGitHub用にもう1つずつ必要だったのですが、ある生徒が“qwertyuiop1234567890”というパスワードを使用しているのを見て、私は思わず大声を出してしまいました。次に大声を出したのは、別の生徒が私にこう言った時です。「GitHubって馬鹿ですね。間違ったパスワードで3回ログインに失敗すると、一時的にIPアドレスをブロックするんですよ」。これはセキュリティのための機能でバグではないということを、Snapchat世代から14歳に対して教えるのは大変でした。VMに関しても初期に起こる問題があり、多くのインスタンスは削除しなくてはならず、新しいイメージが作成され、新しいインスタンスが起動されました。生徒たちにとってみれば、Windowsのクライアントマシン上に最適なツールがあり、それで文章を書いたりマウスで操作したりできるのに、ターミナルでEmacsを使用しなくてはならないことに抵抗感がありました。Gitでもmergeエラーを含めて多々問題にぶつかりましたが、それらの問題を忍耐強く解決していきました (リポジトリをバックアップして、複製し、またファイルを追加しただけで解決した場合もよくありました(私はgitの権威ではありませんからね))。

ある時、生徒たちが全然ついてきていないと感じました。夜、横になっても眠れず、自分は一体何をしでかしたのだろうと悩みました。イギリス中のコンピュータサイエンスの教師の中で、クラスの生徒全員を一気にこの科目にうんざりさせたのは私だけに違いないと思ったりもしました。もう生徒たちは持ち直せないのではないか、私の授業でまた1時間も価値の見出せないツールを使い、理解できない指示を聞かなくてはならないと、彼らが恐怖に怯えているのではないか不安でした。

そこで、ハッカソンが解決策になったのです。クラスの生徒のうち数人は2年間のコーディング経験がありました。そしてMLH LaunchHackのことを聞いて、行きたいと言い出したのです。私は大急ぎで遠征を計画しました。クラス内に行きたいという女子生徒が4人いましたので、同行してくれる女性の引率が必要でした。そこで、メールで依頼しました。

一緒に引率してくださる女性の方はいますか? ロンドンで、ティーンエイジャーと、徹夜で24時間コーディングします。多分、無料のピザが振る舞われます。

無料のピザが効いて、同行者が見つかりました。

MLHJoe Nashには感謝しきれません。18歳以下でも参加できるよう尽力してくれたのです。ハッカソンは素晴らしく、それだけでもブログ記事を書くに値するでしょう。3人の生徒はコーディングが捗りプログラムを組むことが出来ました。一方、残りの生徒たちは、しばらく混乱した様子で座っていました。しかし私がCodeacademyを見せると、気を取り直し学習し始めました。それも、私たちを包む雰囲気のおかげでした。画面いっぱいにIDEを開き、ものすごい速さでスクリプトを書いているハッカーたちに囲まれていたのです。ハッカソンで得られたことは、一流のことでした。無料の食べ物や飲み物もありましたが、全てのことが生徒たちを支え、夢中にさせていました。一緒に来てくれた国語教師でさえも、その空気にのみこまれていました。彼女は最初の2時間はヒマつぶしとして、授業用に詩を書いていましたが、気付くと、彼女もCodeacademyを利用していました。しかも、およそ18時間も続けて利用するという記録を達成していました。それに飽きると、今度はLearn Python the Hard wayを始めていたのです。

私も多少は手伝いましたが、生徒たちは全員、何かしら動くものを構築しました。不眠の24時間が過ぎると、彼らはハッカーたちに現在の彼らのアプリを見せ、他の生徒が構築したものを見ました。

私の次のコンピュータサイエンスの授業は、最高でした。生徒たちは今やハッカーです。彼らの新しく発見された情熱は、クラスの残りの生徒たちに対しても感染したのです。残りの生徒たちは、突然次のハッカソンに行きたがりました。彼らは自分たちのVMを起動し、Puttyでログインし、作業を始めました。コンピュータサイエンスを履修していない生徒も連れて、ランチタイムにまでやってくるようになりました。中でも、一人の少年の様子は面白いものでした。EmacsでPythonスクリプトを素早く書き、その両脇にいる友人たちはHackerTyper上で彼と競り合っていたのです。

私のクラスの生徒たちは今や、コーディングしEmacsで宿題のプログラムを作成しています。そしてGitHubで私にPull Requestを通して提出してきます。成績を付けることは簡単になってきました。私はdiffをとることが出来ますし、コメントを付けてリクエストを受け入れることが出来るのです。しかしそれ以上に、私の生徒は今や、少数のエリートのグループに属しています。彼らはLinuxを使います。ターミナルを使います。Emacsとgitを使います。彼らが作業のためにコンピュータの前に座っていると、他の生徒たちは解読できないテキストで埋まったスクリーンを困惑した様子で眺め、マウスを動かす動作がないことに困惑していました。もはや彼らはただのコンピュータサイエンスの生徒たちではありません。彼らは自分たちのことをハッカーと呼び、その呼び名に誇りを持っています。

次はどうしましょう。私たちはまだOpenStackにいくつかの課題を感じています。例えばActiveDirectoryとの連携や、Webコンソールを使うのではなく、SSH接続で外部アクセスすることです。それらの問題を解決できれば、私は早めにスタートできるでしょう。7年生にはLinuxを使ってnanoでスクリプトを書くこと、8年生にはEmacsを使ってmarkdownを学ぶこと、9年生にはgitを使ってGitHub上でプログラムを投稿することを教える予定です。時間はかかりますが、私は実行することに決めました。

もちろんこれはシラバスには載っていませんし、試験にもバージョン管理やターミナルのテキストエディタについては出題されないでしょう。私は気にしません。時間の投資は、価値あるものです。私の授業は、今では通常の授業ではなく、小さなハッカソンのようになりました。生徒たちは以前よりやる気があり独立心があるように見えます。彼らに課す課題も、彼らが既に達成した全てのことと比べて、つまらないものであるようです。記事の中で、1年以上前に私は“ハッカーの素養”を育てたかったと書きました。そして今、その小さな工程に私はいます。私は、育て始めているのです。