computer science

コンピュータ科学(CS)の教育にも現代化が必要だ

次の記事

ゲームではなくコミュニケーションの会社に–ミクシィ新社長の森田氏

編集者注記: Jay Borensteinスタンフォード大学のコンピュータ科学の講師で、FacebookのOpen Academyのファウンダ。

このところ、大学で十分な数の技術者が生産されない、と嘆く声が多い。シリコンバレーではとくにそうだ。合衆国労働省の予想では、2020年にはコンピュータ科学(computer science, CS)を専攻した学卒者への新規求人が140万口あり、しかし実際の卒業者はその30%しかいない、という。しかし実は、それよりももっと問題なのは、CSを専攻して卒業した者の多くに、企業ですぐに役に立つ実践的なスキルがないことだ。つまり、CSの学士や修士と、実際のソフトウェアエンジニアは、まったく違う物、なのだ。

大学のCSの課程には、ソフトウェア開発の実習もある。しかしそれはあくまでも教材の一環だから、職業としてのソフトウェア開発のいろんな側面は学生たちに伝わらない。まず、実際のソフトウェア開発のプロジェクトは、クラスの実習よりも大規模で時間も長い。現実のソフトウェア開発では、相当量の既存のコードも理解して使いこなせなければならない。さらに現実の世界では、プロジェクト管理や人間関係の要素がソフトウェア開発にも影響を及ぼす。そしてシステムは、技術を評価する先生ではなく、ユーザの満足度で評価が決まる。

この問題に対するベストソリューションは、学生をオープンソースのコミュニティに触れさせることによって、重要な基礎を与える大学のCS教育と、本物の仕事や作品が備える実践性とを結びつけることだ。

CSの学生たちをオープンソースに触れさせることは、彼らをソフトウェア産業の、どくどくと脈打つ心臓の部分に放り込むことになる。オープンソースの世界では誰もが開発に参加して新しいインフラや設計を一から作っていく。しかも、誰からも強制されずに自発的に。また大学での実習と違ってオープンソースの世界では、自分が行う寄与貢献(コントリビューション)が各エコシステムに直接の影響を与える。

学生たちをオープンソースの世界に慣れさせて、活発にコントリビューションをやらせることによって、CSの課程が実践的な職業教育にもなり、自分が勉強していることや書いているコードなどに、学生自身が現実感を持てるようになる。

学生たちをオープンソースの世界に触れさせるとは、単にそういう話をして、リンクを紹介して、「やってみたら」と言うことではない。ちゃんと、正規のカリキュラムを確立して、教師の役割、学生のやるべきこと、そしてアシスタントのベテランオープンソーサーにやってほしいことを、シナリオとして具体化しなければならない。アシスタントは、人気の高いオープンソースプロジェクト、MongoDBMozilla、Open Badge、Ruby on Rails、SocketIOなどのメンテナを実際にやっている人がよい。このやり方は、今ぼくがここで思いつきを書いているのではなくて、いくつかの大学がすでに実践しており、以下のような成果を上げている:

  • 教育現場にエキスパートがいる: 大学のCSの先生が(ぼくもそうだが)同時にオープンソースプロジェクトのエキスパートであることは稀だ。だからアシスタントの形でプロジェクトのエキスパートを教育現場に連れてくれば、学生たちが得るものも大きく、しかも勉強に対して現実味のあるフィードバックが得られる。たとえばほとんどのオープンソースプロジェクトでは、残っているバグは難しいのばかりだ。そんな難関のバグを学生とエキスパートが一緒になって解決努力に取り組めば、ものすごく貴重でしかも現実性の高い学習経験になる。
  • チームワークを体験: 学生たちを、個人ではなく数名ずつのチームに編成してオープンソースプロジェクトへのコントリビューションにあたらせる。その過程をエキスパートがガイドする。ふつうの大学のふつうのカリキュラムには、(成績評価が難しいので)チームワークが完全に抜け落ちていることが多い。だからこそ、この新しいオープンソース体験は重要な…現実世界への応用性も高い…学習体験となる。
  • 達成感が得られる: オープンソースをカリキュラムに含めると、学生たちにソフトウェア開発の現実を体験させ、また自分たちのコントリビューションでそのプロジェクトのステートが実際に変わった(前進した)ことを体感できる。
  • 集中力が育つ: たぶんいちばん重要なのは、学生たちが具体的なプロジェクトに集中して自己のスキルを構築し、しかもそれが、卒業後にはすぐに会社などで役に立つことだ。医学部の学生にはインターンのあとに臨床実習が義務付けられているが、それとほぼ同じ現実的な過程をCSの学生たちが体得できる。その現実体験の記憶は、会社の業務の理解も早める。

大学のカリキュラムにオープンソースを導入することには、教育以外のメリットもある。それは、オープンソースの精神に中毒性(やみつきになること)があることだ。人間は集団的な生物なので、オープンソースにおける国境なき大規模なコラボレーションと、何かを変えようとする集団的意思力は、学生たちを明るく元気にする。未来のCS教育は壁のない教室で行われるようになり、卒業したその日から仕事ができる人材を数多く育てる、とぼくは信じてやまない。

[原文へ]
(翻訳:iwatani(a.k.a. hiwa))