December 2015

Volume 30 Number 13

ちょっとひと言 - 高等教育のリファクタリング

David Platt | December 2015

David Platt1991 年に C 言語で 16 ビットの Windows SDK を使用して学生にソフトウェア開発を教えてから四半世紀が経ちました。講義のテーマは、年を重ねるたびに絶えず進化し、Win32、COM、Microsoft .NET Framework、Microsoft Azure と変化してきました。しかし、私 (と同僚) の講義の進め方は、7 年前に大不況が起こり、初めて教育が開発予算削減の対象になるまで、ほとんど変わりませんでした。この経済危機では、それまでの講義の進め方だけでなく、業界における教育機関の役割全体を見直すことさえ強いられました。

プログラマに対するソフトウェア開発の教育は、本来、具体的な事実を特定の順番で伝えることが中心でした。「最初にこの関数を呼び出したら、次にこの関数を呼び出す。RegisterWindowClass。CreateWindow。それから、これまでで一番のお気に入りの CoMarshalInterThreadInterfaceInStream」というように。学生たちは、1,000 ページものマニュアルからそのような内容を教師が取り上げて説明する講義を喜んで受講していました。そうでなければ、マニュアルすべてを自力で読むことになるからです。

しかし、この知識伝達はほぼ完全に一方通行です。テクノロジが進化し、こうした知識伝達を、生身の人間が行う必要がなくなりました。たとえば、Microsoft Virtual Academy や Pluralsight などのビデオは、はるかに低コストでこの役割の大半を果たします。映画が演劇よりも多くの観客に見てもらえるように、ビデオの方が教室での講義よりも多くの学生に知識を伝達します。

良質で効果的な教育には、まだまだ生身の教師が必要ですが、ビデオと教室での教師の役割は異なります。教室では今までのように「何を」や「どうやって」は教えず、「なぜ」、「これが他の物事にどのように関連するのか」、「ここからどこに向かうのか」という疑問や、もっと一般的な「それは何だったか」という疑問を解決するために、ぜいたくな対面講義の時間を取っておきます。

そのため、私は教室での講義の指導過程を変更しました。何も返さない一方的な呼び出し (void 呼び出し) を減らし、学生がビジネス ロジックに新しいテクノロジを取り入れるのを助ける時間を増やします。「コードを見せてごらん。モジュール境界をどこに置くべきだろう。その理由はわかるかな。どのようなテストをすべきだろう。どのようなユーザーがいて、そのユーザーのニーズを明らかにするにはどうしたらよいかな」。これは、これまでとはまったく違う種類の教育と学習です。

私には、この転換を行う優れた仲間がいます。ハーバード大学医学大学院では、今年度の 1 年生のクラスから、カリキュラムに対して似たような調整を行っています。現代の医学の授業では、教師が「皆さん、脳神経は主に 12 対存在し、嗅神経、視神経、動眼神経.....」とまくしたてることはしません。代わりに、学生は講義外で教育ビデオを見て、このような基本的な事実を覚えます。教授は、講義の時間を実際問題の分析に費やします。たとえば、「ミスタースポックが疑いを持ったときのように、患者の左まゆがつり上がったまま下りません。このような場合、最初にどの脳神経を検査しますか。その理由は何ですか。検査はどのように始めますか。他には何を検査しますか。その理由は何ですか。スミスくん、混乱しているようだね。脳神経がどうなっているか忘れてしまったのかな。ジョーンズさん、助けてあげてください」というように。この一部始終は、bit.ly/1S7UR2G (英語) でご覧になれます。

ところで、この中で「学生の集中力はあまり長くは続かないので、ビデオは 5 ~ 8 分になっています」と示されていました。私はこの事実に驚いていますが、あなたはどうですか。現在のコンピューターおたくの集中力が、これより長く続くのか、それとも短いのかはわかりません。

私は、ユーザー エクスペリエンスの講義で実践モデルを使用します。この講義は、あんな機能やこんな機能 (たとえば色のグラデーション) を実装するためのものではありません。ユーザーの満足度や生産性を高めるために実装すべき機能を判断するための講義です。私は、クライアントがコース実習で実際の設計プロジェクトに取り組むのではない限り、社内の講義を受け持つことはほとんどありません。公開講義の学生には、独自のプロジェクトを持ち込むように推奨しています。持ち込まない学生には、私がプロジェクトを割り当てます。

このコラムの初回 (msdn.com/magazine/ee309884) に、「悪いコンピューター プログラムとは、ユーザーがより機械的になることを求める」と書きました。しかし、最高のプログラムとは、コンピューターの能力をうまく発揮できるようにコンピューターを使用し、人間にしかできないことは人間が行うように、人間用に道筋を空けておくプログラムです。

教育もこのように進化する必要があり、優れた人間の教師はこのことに気付き始めています。学生の頭に細かい事実を詰め込むことも教育の 1 つです。記憶した事実をうまく利用するように学生を促すことは、まったく別の教育で、より満足度の高い教育です。


David S. Platt は、ハーバード大学の公開講座や世界中の会社で .NET のプログラミングの講師をしています。『Why Software Sucks...and What You Can Do About It』(Addison-Wesley Professional、2006 年) や『Microsoft .NET テクノロジ ガイド』(日経BPソフトプレス、2001 年) などの、11 冊のプログラミング関連の書籍の著者でもあります。2002 年には、マイクロソフトから Software Legend に指名されました。David は、8 進法で数える方法を学べるように、娘の 2 本の指をテープで留めるかどうか悩んでいるところです。連絡先は rollthunder.com (英語) です。