オンデマンド教育怖い

まんじゅう怖い。ここらでちょっと、茶が怖い<はい、ここ笑うところ
古典落語はネタは知っていても落ちを知っている人は少ないんだよなー。「あたまやま」とか「時そば」とか。何かわけのわかんないグルーブに引きずられているうちに、かなりしょうもない落ちでスパンと落ちるのが落語の楽しさです。


閑話休題
例えばコンピュータにおいて、「学問」の領域はとんでもない勢いで増えています。別にコンピュータじゃなくてもいいんだけど、例えば「材料工学」なんてのにおいてはまずは基礎となる物理と化学と高分子化学の話をやっつけてからじゃないとスタートラインに立てないとか道筋がだいぶありますが、コンピュータの場合新しい技術やその基礎理論がものすごい勢いで増えている(その上、「最先端が最良」であるということが多い)ので、勢い「目的があって、それを実現するのに必要な技術を見つけ、それを学習する」という方法論がよく取られます。なにせ、基礎からやっていったら時間がいくらあっても足りないので。
これをここでは「オンデマンド(On demand:必要な時に必要なだけ)教育」と呼びましょう。
すると、ですね。
例えば「データベースを使う」という目的があってSQLの使い方をつまみ食いしてテーブルを作ってクエリーを投げる、なんてなことをしても8割方うまくはいくのですが、容量がとんでもなくでかくなってくると、なぜかパフォーマンスがでない、なぜだろうと悩むことになります。というのも、DBの多くはselectする際のwhere句に当たる部分はインデックス化しておくという常識があって、この常識はSQLのリファレンスを見ているだけでは判らないのです。かと言って、無節操にインデックスを張ると、insertするのに数秒待たされるなんてことにもなりかねません。「何のために」「どういうリスクがあって」という基礎知識に当たる部分はリファレンスからでは読み取れなかったりします。
似たような例はたくさんあります。C言語において可能な限り局所変数で処理を完結させ、副作用を残さないなんてのは現代における最低限の要件ですが、ところで「局所変数」って何なのかを判っていないと256x256の大きさを持つ二次元配列を局所変数に持つなんてことをやりかねません。「スタックフレーム」という構造を知っている人からすると背筋が寒くなる話ですが、目的のためにまったく動かないプログラム(もしくは、特定の環境では動かない。組込とか)が出来上がったりします。
他にも、「リングキュー」や「スタック」というデータ構造を知らないでUIを作ったりすると、特定の画面でだけ起こる遷移の不具合が起こったり、PCのメモリ構造を知らないで「ループは展開すると速くなる」と何万行にも渡る似たような作業を繰りかえしてみたり、数えはじめると切りがありません。
初歩の初歩から順を追って教えていくことが現実的ではない(例えばコンピュータでこれをやろうとすると圧倒的に時間が足りない)現代において、「本当ならば知ってなければならないはずの基礎」みたいなものをすっ飛ばして現世の利益だけを求めようとすると、ほとんどの場合うまくいくのに、あるところでとんでもない穴に陥るような気がしてならないのです。


もちろん、オンデマンド教育自体を否定するわけには行きません。最初に挙げたとおり、コンピュータに対する学問はものすごい勢いで増えていて、それの応用例も一瞬で実現されて、そしてそれを知っていないと実務に影響するという現実があります。
むしろ、ある項目が「どの基礎理論に依存するのか」という依存関係ツリーをたどっていく作業がうまくできないと、先ほど書いたとんでもないところで落とし穴にハマる気がしています。そして、依存関係ツリーを上位から(現世側から)たどっていって学習するコストと、依存関係ツリーをあらかじめ用意しておいて下位から(基礎理論から)たどっていって学習するコストでは圧倒的に後者の方が安くつきます。というのも、人間の短期記憶は結構当てにならないので、

  • Aを知るためにはBをあらかじめ知っておく必要がある
  • Bを知るためにはCとDをあらかじめ知っておく必要がある
  • Cを学習する
  • Dを学習する
  • Bを学習する
  • Aを学習する

という手順でやっていくと、Dを学習し終わったあたりで「ところで何でこんなことやってるんだっけ?」と我に返ってしまい、元の目的があやふやになってしまう傾向があります。これは、外部記憶にメモしておいても実はあまり変化はありません。
なので、オンデマンド教育によって学習している人は

  • 依存関係ツリーを的確に検索する能力
  • 依存関係ツリーを元に順番にこなしつづける精神力(基礎理論はたいがいつまんないので)
  • 元の目的を常に忘れないという精神力

が、要求されるのです。


ここ15年くらい、ずっとコンピュータの教育に関わっていますが、この間に流行のようなものが色々ありました。昔は「マシン語を使ってVRAMに転送」というのがはやった時期もありましたし、「行列演算」がはやった時期もありましたし、「VM」がはやった時期もありました。最近のトレンドは「物理演算」と「並列化」と「シェーダー」かな?
なるべく初期の段階で依存関係ツリーを明示して、「だからここから進む」ということを指示した上でわざと壁にぶつからせて、それに対する「依存関係ツリー」を自分でさがさせるような方法論をあとから教え込むということをしていますが、最初期の段階での依存関係ツリーがどんどん大きくなっていっている気がします。行列くらい使えて当たり前。VMの構造くらい知ってて当たり前。マシン語はともかく、シェーダーのためにメモリアクセスとレジスタの関係を知ってて当たり前。
当たり前の数が増えるのに、教育期間自体は特に変わっていないとなると、依存関係ツリーを圧縮するか、どこかを削ぎ落とすしかないと考えられます。
何よりも、「オンデマンド教育」をしている限り、「依存関係ツリー」がとんでもなく長くなっていって「じゃ、もういいや。現世で使うところだけ知ってれば」という結論になるのがもっとも怖いです。


紫堂恭子の漫画に「癒しの葉」という作品があります。紫堂恭子は教員資格も持っている元教育者で、文学的なストーリー展開以上に啓蒙的な話をしたがる傾向があるのですが、その中にこんな一節があります。

お前たちがインスタントな理解を望んでいるなら
こう答えるしかない
足し算もできない子どもに天文学をどう教える?
天を見上げて美しさや不思議さを感じたり
時間をかけて星々を観察することから始まるのではないのかね?
知ることにも順序があるのだ
今のお前たちには無理だよ

早急な奇跡を 目に見える幻を求めてはならぬ
今日この日を限りにだ!

「癒しの葉」を携えて聖地フローンズ島からやってきた聖者サナトールの言葉です。「癒しの葉」の正体が何なのかは、是非最後まで読んでみてください。我々も、迷いながらいきましょう。