14日(土)に、小中学生向けプログラミングスクール「TENTO」にて、ソフトウェア開発にあたって基礎となる知識に関する講義を行ってきました。

この目的・模様はTENTO公式Facebookやブログ「TENTO – BLOG : プロトコルってこういうことさ!(エンジニアがやってきた)」でも伝えられております。そんな中ではありますが、小中学生に対してソフトウェア開発に関する講義はあまり試みが無い事ですので、私からもこのブログエントリを通じて実践した内容をお伝えしようと思います。

内容は「準備の進め方」「実際の講義の状況」そして「反省点」の3つに分けてお話しします。自分自身のノートとして、そして情報教育についての知見を求められている方の参考になれば幸いです。

また、作成した資料はGitHub “koemu/tento_docs/http_for_begginer/01/” にアップしております。あわせてご覧ください。

■準備の進め方

今回、講義で取り上げたお話は「HTTPの基本」でした。

そして、伝えたい事は1点「インターネット上での通信は、プロトコルが決められているから成り立っている!」です。

プログラムを書く楽しさを知りつつある・知っている若いTENTOの生徒さん(以下、TENTOメイト)たちに、僕から何を伝えればいいのか?悩んだ結果の選択です。プログラミングテクニックやミドルウェアの使い方を教えても良かったのですが、それは吸収の早い彼らの事ですから、要領さえ掴んでしまえば自分自身ですいすいとやり遂げてしまう事でしょう。

さて、今、僕は「要領さえ」と言いました。実は、1年以上の期間、TENTOメイトの皆さんを見ていてその部分をもっと鍛えられたら良いコードを書けるのではと感じていました。その要領を掴むためには、プログラミングの基礎となる「仕組み」の知識を学ぶ事が良いと僕は考えました(※1)。そこで、現代のインターネットを駆使したプログラミングには無くてはならない「HTTP」の仕組みを伝える事が良いのではないか、という見解を得ました。

しかし、大学の講義のようにまともにHTTPの話をしてしまっては、小中学生であるTENTOメイトの皆さんには退屈で仕方ない事でしょう。僕もそんな講義は受けたくありません(!)。そこで、次の3点に留意してレジュメを作る事にしました。

  • 答えに到達するまでの「道筋」を自分で考える。その上で、自らがプログラムを設計する際に求められる思考の流れを理解の一助にする。仮説実験授業のやり方に似ているかもしれませんが、完全ではありません。3章・4章・6章で採用。
  • 実際にてを動かして反応を体感しつつ、それが実際のプログラミングの時にリンクできる要素を入れる。2章・5章で採用。
  • TENTOメイトの中でも、コードが書ける子を対象に絞る。

今回の講義を通じて、彼らのプログラミングスキルが高まらなくては意味がありません。だからこそ、講義が終わってからすぐにでも知識の転移が始まるよう、配慮しました。

■実際の講義の状況

講義は90分、途中で10分程度の休憩を入れています。

講師は僕1人、TAは基本的に入れずに(途中少しだけお願いしました)進めています。

出席したTENTOメイトは6人です。小学6年生〜中学2年生で構成されています。うち、2人(Mac使い)はTENTOプレゼン大会でWebアプリケーションを発表するプログラミングスキルを持っています。残る4人(Windows使い)はそこまで行きませんが、Pythonのコーディングを学びつつあるという状況です。

TENTOメイトさんとのインタラクションは、会話・ホワイトボード・そしてTENTOメイトの1人が作ったインスタントメッセージングサービス(※2)を使いました。インスタントメッセージングサービスのタイムラインは、第5章の演習時以外はプロジェクタに出しっぱなしにしました。これで、講師からテキストベースで伝える連絡ばかりでなく、TENTOメイトさんから講師に対する「声」を受け取れるようにしました。これは、声でのインタラクションには慣れてはいないけど、Twitterなどのテキストベースのメディアには親しみのある彼らにとって、講師と自分をつなぐインタフェースになってくれたものと思います。そして、私にとっても講義のライブ感を支える道具になりました。

講義は、終始静かに進みました。

第3章・第4章は、5〜10分の時間を取って実際に演習をやってみました。第3章で失敗したのが、みんな意外に書けないのです。今はメールもWeb化してしまっていて、メーラーの設定を通じてPOP3やSMTPという言葉を知る機会さえ無くなっていたため、HTTP以外のプロトコルを知らないのです。第4章は多くの子はかけていたのですが、「では発表しましょう!」と持って行くと、みんな”し〜ん”としてしまうのです…。内容はあってるんですが、発表する事が怖いという気持ちがあるのだと思います。多分、学校でそう言う経験をしたのでしょう(僕もそうだったのでそこは責めませんでした)。

第5章は今回のメインイベントです。実際にTelnet(※3)を使ってHTTPプロトコルを自分で叩いてもらいます。叩く先は、話が単純になるよう、僕がnode.jsを使って書いた簡易HTTPサーバに向いています。さすが普段プログラミングに慣れているだけあって、大きくつまづく子はいませんでした。ただ、HTTPプロトコルの構造が自分のプログラミング活動に転移(※4)できている事そうでない子が分かれ始めていることも、わかりました。なお、TAさんに少し支援いただいた部分は、ここになります。

第6章は皆さん疲れ始めていたので、演習はやらずに答えの解説だけに留めました。ただ、第5章でHTTPステータスの存在を知りましたので、数値に意味がある事は理解していたようです。

最後に、資料とは別に簡易的にPythonで組んだHTTPクライアント、及びWireshark(※5)を利用してPythonプログラムの動きの解析を実演しました。これを通じて、第5章で自分自身でやっていた事を、処理系のライブラリが裏でこなしている事を理解しはじめる子もいました。

なお、授業中・授業後の質問は、先ほどのインスタントメッセージングサービスをトリガーにして行っていました。

■反省点

講義後、TENTOの方々・TAの皆さんとお話をさせていただきました。その中で、課題がいくつか見えてきました。

  1. ある程度Webアプリのコードを書いていないと実感が沸きづらい子がいた
  2. TENTOメイトの子たちの反応をどのように受け取って行くのか
  3. 継続して実施するにはどうすればいいのか

1は、対策として「Webサーバ側のコードを書いてもらう会を1つ前にやるとどうか」という提案をいただきました。というのも、理解が深まっている子はサーバ側のコードを書いた事がある子という共通点がありました。知識を転移させるための導線をもっと設計する必要があることがわかりました。

2は、目の前では反応が薄くて最初ヒヤヒヤしたのですが、インスタントメッセージングサービスやTwitterを見ると意外に活き活きしたコメントを見たのでした。わかる人には何となく想像できるかもしれませんが、意識は実は「内」にちゃんと秘めていたのです。それを、講師へ伝えやすい環境を作る必要がある事を痛感しました。

3は、これだけで終わってたらどうしようもないということです。私も、できれば月1回以上、TENTOメイトの子たちがその後どのような形で知識を転移させてよりプログラミングスキルを高めているか、調査して行く必要性を感じています。効果がわからなければ、この講義の意義はわかりません。また、継続する場合でも、この情報が必要になります。

最後に、良かったと言っていただけた点を3つほど。

  • 教室に緊張感が生まれた
  • 体系的な知識を伝える場が生まれた
  • 現場のプロフェッショナルと接する機会があった

普段の教室は、いつも接しているTENTOメイト同士やTAの方々と、一人一人和気あいあいとやっていらっしゃいます。その中で、教室の半分の人だけでしたが、講師のもとで同じ事を習っている状況は、普段と違って緊張感があったそうです。

こうして、意図したもの・意図せず派生したもの、それぞれひっくるめて価値を提供できた事を、大変嬉しく思います。また、それはTENTOの方々・TAの皆さんの協力あってできた事です。

■おわりに

今回、TENTO初の試みである講義形式の教室の内容について、 「準備の進め方」「実際の講義の状況」そして「反省点」の3点に分けてお話ししました。この中で、教えるなら原理・原則に近い部分を、そして実習を通じて体得する事で普段のプログラミング活動に知識を転移しやすくすることを心がけている事をお伝えしました。

いつもお話ししていますが、TENTOで学んだ子の中で、職業としてプログラマになる子は一部でしょう。それは、TENTOを創設されたお二人も同様におっしゃられています。

時々、プログラマの人で「コードで世界を変える!」と言われる方がいます。その点は同意しています。でも、それ以上に僕が考えるのは、プログラマが持つ「モデリング」の力が世の中の仕組みを変える事ができる、ということです。また、それこそが若い時にプログラムを学ぶメリットであると、私は言いたいのです。

プログラムに限らず、ルールや仕組みにはモデルが存在 or モデル化でき、その根底には原理・原則が横たわっています。その事を若い頃から知っていれば、いつか社会で価値を提供する側に立った時に、他の人よりもより多くの価値を提供する素地が出来上がっているのではと、僕は信じています。なぜなら、ルールや仕組みも、また人が作っているからです。

今回は、TENTOの竹林さんからのお声がけ・ご支援を通じて実現する事ができました。また、講義を進めるにあたり協力いただいた全ての方に感謝致します。どうもありがとうございました。

※資料を流用される方への連絡

資料はWindowsベースで書かれていますが、Macでも同じ事は実施可能です。なお、サーバはLinuxサーバである事を前提に作っています。URLは、ご自身で立てられたサーバのアドレスに変えて利用してください。

※1 ちょうど、今日公開された「天才プログラマ兼経営者 登 大遊が語るエンジニアに伝えたいこと」という記事中でも、登さんが「一方、最初はものすごい量の勉強をしないといけないが一生変わらないものはなにか。それが低レイヤーだ。」と述べていました。L2まで下る事はできませんでしたが、自分自身が見据えていた点はそんなには外していなかったのかなと考えています。

※2 実は、インスタントメッセージングサービスを使うことは当日に決まりました。僕が「チャットっぽい何かいい方法ないかねー」と話しをした時に、あるTENTOメイトさんから「彼のプログラムを使おう!」と提案があり、いきなり採用しました。開発した彼にとってもなかなか無い本番サービスの機会でしたので、よかったかもしれません。

※3 Windows 7 以上はTelnetクライアントが標準で入っていません。なお、「プログラムと機能」から追加する事で利用できます。

※4 HTTPステータスの存在意義・数値の意味や、URLは単にファイルの位置ではなくてプログラムがパスの意味を解釈して初めて成立している、などです。

※5 Wiresharkを使うと悪用できるのではと懸念する方もいると思います。とはいえ、これだけ知識のある子たちですから、言わなくてもいつかはWiresharkを使う事になるでしょう。ですから、そうなる前に、僕たちプロが自分が価値を提供するための必要な使い方を伝えておく事が大切だと考えています。