編集部記:Mark EngelbergはCrunch Networkのコントリビューターである。Mark Engelbergは数学、コンピューターサイエンスの教師で発明家だ。ThinkFunの元プログラマーでもある。彼は6歳以上の子供たちがロジカルシンキングのスキルを習得するためのCodeMasterを開発した。NASAで仮想現実のプログラマーを務め、Hubble Space Telescopeの修繕ミッションにも携わった。
何かの専門家になるためには10年ほど熱心に勉強することが必要だと広く言われている。研究によると必要な年数は分野ごと、そして個人ごとに異なる。いずれにしろ、一つだけ明確なことがある。専門家になるためには時間がかかるということだ。
そこに問題がある。大学に入学し、コンピューターサイエンスを学ぶことを選択したほとんどの学生は、コンピューターサイエンスに関する予備知識が全くない、あるいはほんの少ししかない。また多くの大学では1年の時に一般的な内容の中核となる必修科目を受講することを求める。そのため、学生がコンピューターサイエンスに触れることになるのは1年目の後半か2年目以降となる。
つまり、学生は大学で3年から4年程度しか価値あるレベルの専門的な内容を吸収する時間がない。それでは時間が足りない。その問題に加え、多くの学生は最初の1年を終えた後は社会経験を求めインターンシップを行いたいと考えている。これはどこかで何かを犠牲にしなければならないような不都合な事態を引き起こす。
コンピューターサイエンスの学部は選択を迫られている。コンピューターサイエンスが何かという大枠が理解できるように基本的なスキルを教えることに注力するか、あるいは企業にとって即戦力となるようなスキルがつくように技術的なトレーニングに注力するかだ。どのコンピューターサイエンスの教授に話を聞いても、学部の中、さらにはコンピューターサイエンスを教える者たちのコミュニティーの中でこの問題に関する幅広く苦しい議論が多くなされていることが分かるだろう。
他の学部はどのようにこの問題を解決しているのだろうか?多くの学問は、学生が小学校から学んできた英語、数学、科学の知識を活用することができる。例えば、機械工学を専攻する学生は、微積分学を通じて数学を習得する機会があり、物理学も学んでいるだろう。大学に入るまで事前にそのような数学や科学の教養がない場合、機械工学者になるためには何年必要となるかを想像してみてほしい。コンピューターサイエンスの学部が直面している問題を身近に感じることができるだろう。
また、多くの学問は大学院や仕事をしながらもさらにそれを追究することが求められるが、コンピューターサイエンスにはそれがない。コンピューターサイエンスの分野は、市場が求める専門性と学生が企業に就職するまでに身につける専門性のレベルの乖離が大きいと言えるだろう。
大学は市場が大学に求めるレベルにまで学生を持っていくために必要なコンピューターサイエンス教育のための時間もリソースも足りないということだ。
でも、ちょっと待てよ。コンピューターサイエンスもエンジニアリングの領域なのだから、コンピューターサイエンスも他の科学やテクノロジーに関する学問のように、大学前までに学ぶ数学や科学の教育が役立つのではないのか、と疑問に思う人もいるだろう。残念ながら、そうはならない。 学校で学ぶ数学教育の最高峰と位置付けられる微積分学は、コンピューターサイエンティストが必要とする数学の分野とは最も関連が薄い分野なのだ。コンピューターサイエンティストに必要なのは豊富な離散数学の教養であり、この領域を学校で学ぶことは多少あるかないかだ。
また、大学はコンピューターサイエンスを専攻する学生に十分な教育を施すのに苦戦する中、さらにコンピューターサイエンスの入門編だけでも学びたいと思う学生数の増加にも対応しなければならない。コンピューターサイエンスの講義に強い大学は、この需要に追いつくことに苦戦している。コンピューターサイエンスの基本を教える講義はすぐに埋まってしまい、多くの学生は受講することができない。大学は全ての学生に対応しようとしても、どこかで折り合いを付けざるを負えないのだ。
例えばスタンフォード大学では、入門コースにペアプログラミングのアプローチを採用することを発表した。学生が二人組で学ぶことが素晴らしいアイディアだからということではなく、単純に大量のプログラムを採点する仕事量を削減できる方法を探していたからだ。二人組のプログラミング授業なら仕事量は半減する。
私の地元の大学におけるコンピューターサイエンスの講義の大半は、コンピューターサイエンスを専攻している学生しか受講することができない。コンピューターサイエンスを専攻するための競争は激しくなっていて、学生が1年目からコンピューターサイエンスの講義を受けられる機会は多くない。このようなことが続けば、専門的に学ぶ学生しかコンピューターサイエンスの知識を習得できず、他の学問を専攻する学生がコンピューターサイエンスを学ぶ機会はほとんどなくなる。
つまり、大学は市場が大学に求めるレベルにまで学生を持っていくために必要なコンピューターサイエンス教育のための時間もリソースも足りないということだ。この問題を明示することで、本質的な解決方法は一つしかないことが分かるだろう。コンピューターサイエンスをより早い段階から学べるようにすることだ。大学で学ぶ多くのコンピューターサイエンスと離散数学の内容は高校で学べるようにする。少数の高校で受講できるプログラミングの入門コースは中学校で学べるようにする。さらには中学校で触れるようなカジュアルで遊びの要素のあるプログラミングやコンピューター処理の考え方は、小学校で触れられるようにするということだ。
そうすれば学生がコンピューターサイエンスを学べる唯一の場所が大学に限定されず、大学がボトルネックではなくなるだろう。そして、大学のコンピューターサイエンスのカリキュラムは事前教養があることを前提に、学生が大学卒業までに真に専門的な教養を身につけられるようカリキュラムを見直すことができるだろう。
[原文へ]