興味の矯正法:「面白い」とはどういうことか

とあるオープンソース・ソフトウェアで世界的に有名になったプログラマーが講演会で、「情熱格差」という表現を使っていた。そのプログラマーによれば、世の中の人の99%はITに興味がない。プログラマであっても、ほとんどは使うばかりで、まさかプログラミング言語を作ろうなんて思わない。なんで彼らは楽しさが分からないんだろうと思うと同時に、この位置エネルギーの格差が重大な行動の差を生み出しているとのことだった。彼は大学に入るまで、言語に対するそれだけの情熱が異常だと気づかなかったらしい。


さて、この手の逸話を聞くたびに私を含めた多くの人の心に浮かぶのは、「私にはそんなに打ち込めるものが存在しない」という不安だ。「好きこそものの上手なれ」とは言われても、自分の好きなものが大して存在しない。とりあえず生活ができるように、とりあえず別に苦ではない業務に従事しているだけだ。あるいはやりたいことがない間はそれがいい、と言われたからそうしているだけだ。

これらの場面にある中心課題は、興味の矯正法であると私は解釈する。

このスキルは、物質が豊かになり、多くの人が多少手を抜いても何とか生きていけるようになった現在において、極めて大切な生活術だろう。ザッカーバーグのスピーチが気に入った人は生きがい(sense of purpose)を人に与え自分が感じるためのスキル、フリークアウトの社長のインタビューを思い起こした人は飽きないためのスキルだと考えてもらって構わない。

この話題について考えるようになったのは、専攻が関係している。私は今は計算機科学をかなり好きで専攻しているが、当初コンピュータの原理を学び始めたときの感想は正直「なんだこのアホみたいにつまらん内容は」だった。始めてからおよそ2年は、(計算機科学で最も重要な2つと呼ばれる)アルゴリズムとデータ構造なんてものは既に学ぶ価値のない「置物」で、単に関数で呼び出して使うだけの出来合いのものだと思っていた。冗談ではない。本気でそう思っていたのである。

何故たかが新しい要素を入れる操作の速度をO(n)からO(log n)にするために、冗談なぐらい面倒な手順を踏んで、ミスしやすくて一々確認が必要でイラッとする微妙な添字の操作( i だとか i - 1だとか 2 * i - 1 だとか)をしなければならないのか全く分からない、こんなものに貴重な時間を費やすのは馬鹿げていると思っていた。しかもそんな議論が一つ要素を取り出すとか全ての要素を順番に整頓するとか、every single one of operationに付いてくるのだから、溜まったもんじゃないと思っていた。

そんな当時の私の興味は、完全にアプリケーションに偏っていた。具体的にはゲーム、Webサイトのフロントエンド、スマホアプリの類だ。そんなアルゴリズムやらデータ構造やらは「もうできている」のだから、あとはそれを使って「役に立つ」ものを作りたい、そんな意識でいた。

そんな私を変えるきっかけになったのは、コンピュータネットワークの初回授業だった。海外でPhDを取った講師が「君はどういうところに興味があってこの授業を取ったんだい」と問いかけてきた。私は「Webサイトを作っているので、Ajaxのような非同期通信のしくみに興味があります」と答えた。彼の返答は衝撃的だった。「そうですか。私は、そういうところに全く興味がないんですよ。私が興味あるのは、もっと低レベルな、ビットを生で操作するとか、そういったところだけです

ここまで真正面に、あなたの興味分野について自分は興味が全くないと言われたのは初めてだった。それと同時に、今まで別の教授とのやりとりをする中で少しずつ感じていた違和感が、より明確な形になっていくのを感じた。なぜ、自分より遥かに見識があるはずの人たちが、揃いも揃って私の興味を持っているところではなく、私が何の価値もないと思っているところに真剣に取り組んでいるのか?たかだかビットを1つ2つ操作できただけで喜んだりしているのか?

「面白い」という感覚は連続的だが、仮に無理矢理ぶった切ると2種類になる(身も蓋もない)。ひとつは反射的にあ、これいいなと思ったときの感覚。もう一つは、思考を集中させれば、あるいは運が良ければ、対象に価値があり動機を見いだせる感覚だ。前者を天然の興味(自動的興味)、後者を人工の興味(手動的興味)と呼ぶことにしよう。「興味をもたせる」と言ったときの興味は、人工の興味だ。

我々は、自己認識ではまるで自分たちの興味は天然の興味だけで構成されていると思いこんでいる。それは完全に誤りで、人工の興味は存在し、そして制御できる人工の興味こそが、今感じている「なんだかやりたいことが見つからない」を打破することができる

さて、回想に戻るに…自分がコンピュータ・サイエンスの中心主題に関する無関心を、まずは人工の興味に、そして天然の興味にまで推移させていけたのは、根本的には人と本との出会いがあったからだと思われる。

人の話をする。

私は、ゆるふわな情報系学科に入ったのだが、2〜3人だけガッチガチに数学に明るい生徒が同期に存在した。私には彼らの反応が面白かった(天然の興味)。彼らは私が理解できない数学の概念についてどう直観的なイメージが構築できるか議論しており、初めて習ったはずの手法について「あの手法は実は…」と教科書外の知識を披露し、全く見たことのない手法を即座にどう理解するかをデモンストレーションしてくれた。私はそれらを見ながら、自分が興味のない数学に、興味があったらどのように振る舞うのか、そしてそこにどのような趣(人工の興味)が生じるのかを学んだ。いまは彼らの誰とも離れてしまったが、未だにあいつらだったらどう考えるだろうか、と思いを巡らせたりすることがある。つまり手動的興味とは、興味を持って取り組んでいる他人の行動に似た様式で行動するなかで、無関心から少しずつ離れることも意味するのだろう。

本の話をする。

R言語にここまで入れ込むことになったのは、完全にHadley Wickhamの影響である。彼が書いた本を3冊かそれ以上、チュートリアルを含めると無数に読んだが、彼は私の周りにいる誰ともR言語の捉え方が異なった。R言語に対する彼の解釈は非常に面白く(天然の興味)、自分の中で文法に対する意識が変容していくのを感じた。


ただ実際には、もっとフェーズは細かいように思う(天然の興味 7 6 5 4 3 2 1 人工の興味)。強制的に学ばざるをえない環境に入るのは、そのようにある程度手動で興味を持てるようになったあとのフェーズでは非常に役に立つ。また、他人からもらった興味だけでは、大して長くは続かない。これは今後も丁寧に観察すべきテーマに思う。


英語力と恐怖

英語について考えるとき、10年前くらいにプレステ2で発売された「デメント」というホラーゲームのことを思い出す。主人公が西洋風の古城を探索しながら謎を解いていくゲームである。dementedは「発狂した」を意味する形容詞で、作中では色々とネジがぶっ飛んだような敵が追跡者として登場する。

デメントには、「パニック」というゲームシステムが存在する。主人公は臆病者で、敵が急に空から降ってきたみたいな予想外の出来事が起こると、パニックを起こしてプレイヤーのキー操作をまともに受け付けなくなる。ゲームバランス上、パニックを起こしてなかったらもう少しまともに対応できるだろという、まさにその局面でパニックを起こすので、大変いら立たしい。だがパニックにならないようにそのイベントを起こす方法もあるので、それを見つけられるかがゲーム攻略を有利にすすめる鍵になっている。

僕のこれまでの留学期間における英語は、ほぼ常にそのデメントで言うパニック状態であったような気がしている。

理系留学生の中には、帰国子女で元来強者のものも居るが、それとは別に「たいして英語は上手くないが確かに相手に伝わっている」タイプの英語を話す人が多い。これは情報の伝達レベルのコミュニケーションで済む理系分野の学生に多い英語で、幼少期にきちんとしたトレーニングを受けていない私のような英語弱者にとっては一つのロールモデル類型である。

彼らの特徴は、まず落ち着いていること。デメントで言えば完全に平静を保ちながら歩行している状態に相当する(デメントでは、走るだけで少しパニック度が向上する)。自分の英語に強いアクセントがあること、知識不足で自分の意見に間違いが含まれているかもしれないこと、相手の話が一部聞き取れておらず見当外れなことを言いかねないこと、自分の話すスピードが遅すぎて相手を苛立たさせるかもしれないこと、などに対する恐怖が一切ない。たまに聞き取れると全然大したレベルじゃないことを言っているだけだったりするのだが、自信を持っていかにもその発言が聞く価値があるかのように話すので、聞いている側はそのペースに呑まれる。おそらく聞いている側に「俺はこれだけ堂々と話しているのだから、これで分からなかったらお前のせい」というプレッシャーを心理的に与えているのかと思う。

次に、羞恥心でパフォーマンスを下げないこと。こちらの人間の会話を聞いていると、本当に全く謝らないので驚く。たとえば知識のミスをEメールで指摘する。すみませんという定型句ではなく、Thank you for bringing the matter to our attentionのように極めてポジティブな表現が返ってくることが多い。共同開発をしていて相手のコーディングミスでバグが発生したことを柔らかに指摘すると、Now it worksのように修正結果だけに言及する。同様にして、自分の達成事項のうちネガティブな部分に対する言及はほとんどなされない。たぶん彼らからすると僕(典型的な日本人)の情報伝達様式は謝り過ぎで、自分たちが作ったソフトウェアの限界について言及したスライドを見せた時に「これはスライドでは外しておこう」と薦められる事もあった。

以上の2つは仮に英語が上手くなったあとでも有効である。ただ、見ているに、ほとんどの人は伝わるようになったところでやめる。人間、満足したらそれ以上は目指さないのだろう。局所最適解。








米国大学院の計算機科学修士課程の意義について


修士課程について

恐ろしいことに、日本でのんびり修士に進学するゾ〜電情にしようかな計数にしようかな〜とかしている学生のほとんどは、海外大学院は入る時に修士課程(1.5-3年)に入るか博士課程(3-7年)に入るかを決めるということを知らない(僕も知らなかった)。そしてその「修士課程(Master)」と「博士課程(PhD)」が日本とは異質であることも知らない。

ものすごく単純化して言えば、海外のCS修士課程生は単なる金ヅルである。

ふざけたぐらいに高い授業料を払い、低い学内ヒエラルキー(英語喋れず学部生のクラブ的コミュニティに入れない、教授とのコネクションを作れる期間が短く大抵の教授からは空気)に甘んじ、たった10コしか授業を取れず、PhDと研究に打ち込む教授からは(ああ、彼らはゲストでしょ?)のような侮蔑の匂いをかすかに感じ、博士課程生と比べるとめっちゃ取りにくい奨学金と格闘する。

修士課程とはその苦境の代わりに、高給かつ知的好奇心が満たされるような技術職(ソフトウェアエンジニア等...データサイエンティストは語学の壁がある)に数年間応募できる(し、訓練されているから二桁ギリギリ行くぐらいの確率で着地できる)挑戦権を得る契約である。高給ってどれくらいかというと日本円で初任給が年収1000万超えることが多い。ソースは某おぐにゃん氏のツイートから。ネットで調べてもそれくらいで出てくるかと思われる。日本でそんな初任給のエンジニアは存在しない(自営業で数千万行ってる特殊な人たちは存在するが、外れ値)。


一方で博士課程(3−7年)は大学の新入社員である。彼らは否応なしにTeaching Assistantとして働かされ、慣れてくると教授なしで講義を任され、大学の主要機能である研究実施と論文執筆に勤しみ、大学から生活できるぐらいの給料を貰う。社割の代わりに講義は無料。研究に役立ちそうならガンガン取っていい。彼らの目的は基本的に大学研究者になるか企業のリサーチャーになることであり、講義は必修を適当に済ませ新しい知識を生み出すほうに全力を注ぐ。

この違いと、そしてこの全く異なる2つを大学院に入る時に決める、ということを忘れてはならない。

(誤解を招きかねないので強調しておきたいが、教授たちは実のところ修士課程生であるか博士課程生であるかはそれほど気にしていない。修士課程生でも研究系授業で教授を面白がらせる結果を出したり、講義で断トツの成績を取って優秀なTAとして業務を楽にしてくれたりすると、何の差別もなく気にかけてくれるようになる。単純に、彼らにとって講義を行うのは単に業務の一貫で、彼らは自分たちの研究を促進してくれる存在なら誰でも大切にするというだけの話だろう。そもそも修士課程生の一部は博士課程落ちで、トランスファーを狙って教授と研究したがっている人たちだったりもするのだ。現に知人のなかでも修士課程を終えそのまま博士にトランスファーする人も居る。このケースに限れば日本と似ているとも言える)


巷の多くの留学体験記はPhD課程生によって書かれたものなので博士課程進学を勧めている。なのでここで私が薦めるのは実にめずらしい海外  修士  課程進学である。

以下のパラグラフは多分に私の偏見が含まれており、学部時代の友人ですら賛成しないと言っているが、私はこう思っているので掲載する。

東大の修士課程は研究を体験してみることが存在意義になっている。だが進学する学生の大半は実際のところ研究者になろうとは考えていない。修士を終えたら日本企業でエンジニア、あるいは非専門職で働こうと思っている。博士落ちを除けば、アメリカの修士課程は先程述べた挑戦権を購入することが存在意義になっていると思う。これは移民制度が特定分野の優秀な労働力を取り込むことを前提にしている点を考えれば納得である。 日本の(一部の外れ値を除けば)ぬるい修士を終えて日本企業でエンジニアあるいは非専門職として働くのと、アメリカの修士を死に体で終えてAmazonGoogleFacebookAppleの本社でエンジニアとして働く(あるいは働くことを夢見ながらもう少し小さいところで働く)のとどちらが楽しいだろうか。それは個人の嗜好次弟だ。だから一度自分の心に従って比較してみてほしい。(あるいはスタートアップで一攫千金を夢見るのもいいだろうーーVisaの問題が絡んで更に大変になる気はするが。)

第2学期感想


今学期は4つの授業を取った。


アルゴリズムの解析 (Analysis of Algorithm)

大学院レベルのアルゴリズム入門授業。漸近記法、二分木から始まり、ソート、貪欲法、動的計画法、グラフ探索、bipartite maching、最大流問題、複雑性クラスを扱うのはたぶんセオリー通り。

特殊なのは、そこでとどまらず、線形計画法・整数計画法の定式化、双対問題への変換、それとハッシュの仕組みまで扱ったこと。ここまで内容を詰め込んだアルゴリズムの授業は初めて見た気がする。TAすら「先学期別の教授で取ったが、グラフで終わった」と言っていた。それぐらい詰まってた。お陰で、日本の大学でも似た授業をやっていたが、より統一的に理解できたと思う。

教授はハーバードPhDの優秀な方で、授業中の発言でミスをしないようにものすごく気をつけていた。数えてたけど1学期中に2回しかミスしていないと思う(授業中に訂正していた)。最大流(Max-flow)問題は重要な問題だからこの分野でのimprovementはすぐにニュースになると話しているときメッチャ活き活きしててあーアルゴリズムってこういう人が研究するんだなァという印象であった。

宿題は鬼だった。まず仕様が雑。TA曰く毎年変えてるらしく、おそらく教科書からコピペしてコピペが不完全だからいくつか曖昧な点が残っているのかと思われる。引用されたコードが間違っていてerrataを探すのも慣れた。あと、いくつかの問題はどう考えても難しすぎてまともに解けなかった。しかもTAがヒントを与えるのは教授に禁止されているようで、最終課題は教授に直に2回聞きに行って2回目(※〆切2時間前)にやっとヒントをくれた。これは効果的な教育法ではないと思う。

講義はめちゃくちゃ早い。講師が質問あるかと聞いてもたいてい質問なしで進むので、最初は英語力不足で僕だけが理解できていないのかと思っていたけれど、中間試験がどうやらトップ5に入っていたことから考えると、たぶんみんな質問すら考えつく時間がなかったのかと思われる。先学期取ったクラスメイトに聞いてみたら「(英語は聞き取りやすいのに)グラフ以降の話はマジで何言ってるのか全然わからなかった」と言っていた。

そんな感じでストレスフル極まりなかったが、講義の説明自体は大変素晴らしかった。特に動的計画法最小全域木の説明は教科書よりよっぽど分かりやすかったと思う。講義受けてから(というより、宿題をこなしてから)グラフがそれほど怖くなくなった。コーディングインタビューの良い練習になったと思う。


ベイジアン統計(Bayesian Statistics)

10とか20とかしかデータ行がない状態で、いかに破綻のない確率的な推論をするか、を扱う講義。この授業だけはCSではなく統計学部。

医者と臨床データを扱ったとき、ディープラーニングが全く上手く行かないことに非常に強い興味を持った。データ数が少なすぎるのだ。そしてコロンビアにはDavid Bleiという超ウルトラ有名なBayesian Statisticsの研究者(引用数一万8000超)がいて、彼とピザを食べる会で出会った時にディープラーニングとか興味ないんですか?と聞いたら興味ないと言っていて驚いたのだ。詳しく聴くともう少しニュアンスがあった。彼曰く、自分は何にでも興味がある、もちろんニューラルネットワークにも興味はある、しかし優先順位というものがあり、いま興味がある研究課題だけで手一杯(だいぶ前なので多少曖昧である)。一方、彼の指導するPhD生が今年ディープラーニングベイジアン統計を組み合わせたモデルを提唱していたりするので、医療が残る限り今後もこの分野は手法として有効で有り続けると踏んだ。問題意識はそんなところだ。

コロンビア統計学科には Andrew Gelman というベイズ統計学の超大家がいて、当然ながら教科書は彼の書いたBaysian Data Analysis だった。面白かったのは学部生(複数)からの教科書の評価が悪かったことだった。彼らから見るとしょっちゅう「*.*節を参照せよ」と飛ばされるし、説明がたまにいまいちパッとしなかったりで不満らしい。僕も5章以降はまともに読まなかった(というより読んだけど印象に残っていない)。

ただ載っている実例はどれも面白かった。特に2.7節の「腎臓ガンの死亡率分布」の例は全データ分析者が見ておくべきぐらいの価値があると思った。「死亡率が高い地域」がカリフォルニア以外に集中しているが、不思議なことに死亡率が「低い」地域もカリフォルニア以外に集中している。蓋を開けてみたら他州は小さい街ばかりでレアイベントの確率が高く評価されていた、ではどういう推論ならば妥当か、としてガンマ分布/ポワソン分布を使ってそこそこ妥当な数値を算出するというもの。

なぜこれが面白いと感じたかというと、僕はベイズ統計と言ったら単に「データを集めるのが高価すぎてできない」(田んぼ12コで限界)というユースケースで使うものだと思っていたが、1000人の人口で1人が稀な病気で亡くなった(罹患率0.1%)というような変えようのない数値自体にも取り組む方法を与えたと思ったから。医療統計と相性が良いとは思っていたがこれほどとは。

講師は授業で扱う内容のコンテキストを説明するのがとにかく下手な人で、授業後に宿題を解いてて「ああこれのことを言っていたのか」となることが常だった。矢継ぎ早に話すもんだから、他の学生もあまり理解しながらノート取れてなかったと思う。予習?他で追われてて無理です。

ただ、この授業で良いなと思ったのは宿題で扱うほぼ全ての問題についてアプローチを授業中に説明することである。教授レベルに統計知識のある人が宿題レベルの問題にどうアプローチするのか非常に面白かったし、いくつかの手法は僕のような統計初心者からするとout-of-boxだった。

アルゴリズムとも共通するが、「教科書に書いてあること」をわざわざ講師が説明することは、形式的な話の場合は結構意味がある。というのも大抵その手の教科書は破壊的に読みにくく、記号の表記を変えたり説明の順番を変えたりしながら2度、3度通すと理解できたりするからだ。講師も「たぶんこっちの表記のほうがわかりやすい」とあえて教科書と異なる記法を用いることが度々あり、その点で有用だった。

この授業は、僕の人生の中でほぼ唯一期末試験が上手く行った気がする。今学期はTAをやっていたおかげで、百名以上の生徒答案を見て、どういう回答が点数付きやすいか理解できた。試験中、問題文がよく分からないとき、ティールの自伝に出てきた「落ちてくるナイフを落ち着いてつかむ」という表現を思い出しながら、気持ちを立て直し既知事項から推論していた。


Operating System 2

この授業だけは取ってちょっと後悔した。コロンビア大学の OS 1 の授業は、大学内でも悪名高い難易度を誇ることで有名である。CPUスケジューラーを書く課題では、この課題に必要な知識を整理したTAのブログポストが存在するぐらいだ。僕はその授業で先学期Aを取ったのでちょっと調子に乗っており、「まあ2も行けるやろ、1の続編だし」と軽い気持ちで向かってしまったのであった。

海外の大学において、同じ名前を冠したクラスであっても 1 と 2 は全く別物だ。たとえ同じ講師であっても。1は単に実装力とコミットメントが試されるが、2はそれに加えて発想力が試される。そしてクラスのスケジュールの関係上、2週間目に良い研究テーマを思いついていなければもうその授業は終わっていると言っていい(実際、僕以外にも「ああ、何があったのか、手に取るように分かるな.....」と思うような発表はあった)。

まず、チームメイト探しに困窮した。最初の2週間で2−4人で自由にチームビルディングしろとの教授のお達しがあり、公式の掲示板にチームメイト募集をかけるも誰も反応しない。後々判明したのだが過半数のチームは既に授業を取る時点でチームビルディングを済ませており、わずか9−10人ほどがチームをどう組むかという戦いになっていた。OSでTAをしていた優秀な学部生に個人的にメールを送るも「なんかいい研究テーマ思いつかないからドロップするつもり、メンゴメンゴ」と断られ(実際彼は履修しなかった)、チームビルディング最終日に残った3人(全員1人チーム)でチームビルディングを要請するもコダワリの強い学部生氏Bが「ごめん、俺友人以外のプログラマ信用できないんだよね、友人抜けたから俺一人でやるわ」と謎の理由により1人チームを選択、結果的に残った一人のみと組むことになった(ちなみにその離脱した彼は最終プレゼン日に居たのにプレゼンしなかったのでどうなったのか不明)。

そしてそのチームメイトが忙しい子であまり貢献できず、理解のための時間もとれず、何とか実装を試すも様々な設定トラブルに見舞われたようでタスクを与えてもこなせず、ほぼ僕一人で全てこなし結果的にボロボロの期末レポートとプレゼンをして終わった。


この授業の失敗は、とにかく「代替となる別のクラス探しを途中で打ち切ったこと」にある。卒業のためには1つ研究レベルのクラスを取らなければならず、実はもう一つの候補授業が存在した。だがOS2が最初の説明でそこそこ面白そうだったので、もう片方の候補授業の初回に行かなかったのだ(その授業を取った友人曰く「研究テーマ思いつかなければ別に提出しなくてもいいよ、別ので補おう」という更に柔軟な方針だったらしい)。その候補授業は1人での研究が基本の授業だったので、もし両方の授業を取っていれば、チームビルディングの失敗を察して離脱できたのではないかと思われる。プランBの大切さを思い知った学期であった。結果的に成績は A - だった。これでも凌いだほうだと自分ではホッとしている。

済んだことを悔やんでも仕方がないので、知識として何を学んだのかを振り返る。僕が選んだテーマはRaspberry Pi 3上での遅延評価というものだ。最初は遅延改善だったのだが、リソースを考慮して単なるmeasurement studyにした。Raspberry Pi 3はクレジットカード・サイズの非力なマシンで、仮想マシンとは比較的縁遠い。だが世の中にはこのRPI3でクラウドを作りたいという人たちがいて、先行研究には50台以上のパイを繋いで仮想ネットワークのテストベッドにする、ということをしている人たちが居た。AWSとは比べ物にならないほど安い。クラウドとなると仮想マシンを使うのは定石であり、もしRPI3上でも充分な速度で仮想マシンが動くのならばそれを活かした新しいユースケースが考えられる。Type-1 virtualizationは既にいくらか報告があるがType-2 virtは珍しい。僕の問題意識はそんなところだった。

しかし、ネット上では仮想マシンを動かすためのソフトウェア(KVM)をRPI3上で動かすことに成功した人がまるでいなかった。RPI2ではいくつか報告があったのだが、RPI3は2とは起動過程が異なり成功しない。ということで「どうすればKVMが動くのか」について数ヶ月かけてカーネルパニックを散々見つつ色々試したのであった。結果として、カーネル開発者たちとのメールを通して開発プロセスがどうなっているのかが想像付くようになった。

そして、 OS 1 は本当に入門だったんだな(あれだけ鬼のように難しくても)と思うに至った。具体的には I/O の勉強が全然足りてない。ioctl()を使ってデバイスファイルごしに操作したりするのは良い経験になった。




C++ライブラリの設計(Design Using C++)

C++という言語でライブラリを作る授業。講師がなんとあのC++を開発したBjarne Stroustrup氏本人で、彼が今取り組んでいるモダンなC++仕様について講義で色々話を聞くことができた。彼がたまに語るベル研究所時代の思い出話は面白かった。

3人チームだったのだが、この授業はチームメイトが最高に良かった。まず、講師の制約が面白かった。「修士学生3人のチームは許さない。学部生を必ず1人入れること」。彼曰く、heterogeneousなチームのほうが最終結果がよくなるらしい。実際にこれは僕らのケースでもアタり、僕は中国人の友人と使いやすいMatrix LibraryかGraph Libraryでも作ろうかと話していたのだが、掲示板で見つかった学部生のWebやりたいという強い要望によりWeb App Frameworkを作ることになった。恐ろしいことに、Web App Frameworkを作り初めてから1ヶ月後、授業でBoost開発者が作ったMatrix Libraryの設計に関する話があり、Graph Libraryの課題が出された。もしあのままMatrix Libraryを作っていたとすると...考えただけで怖くなる話である。

その学部生は非常にリーダーシップのある子で、コンセプトを決めたらすぐにタスクを割り振り、非常に円滑に進んでいった。僕は前述のOSで心を苦しめていたこともありC++に熱中し、ライブラリもガンガン調べて追加し、結果として103 commits / 887,380 ++ / 354,683 -- という最大貢献者になった。結果として「Pythonのように自動ローディングを行えるWeb App Framework」という特殊なしくみを備えたものが完成し、performance(RPI3の遅延評価の経験が役立った)も非常に良い結果が出、最終プレゼンではBjarneから Compete with yourselfとのお言葉を貰い、採点者であるTAも満足げだった。結果はチームメイト全員Aで、全員で昼食を共にし、正門前で写真を取り(その学部生は今年卒業)、Great results, great teamとの友人談、大変思い出に残る授業となった。


総括

これだけ書いてもまだまだ書き足りないことに驚いた。何にせよ濃い授業たちであった。GPAとしてはOSがAマイナスであとの3つがAということで、この学期の平均GPAは3.91となった。

さて、学部生のLinkedInを見ていてアッと思うことがあった。彼らは卒業までに30コマ近くの授業を履修する。僕は先学期から合わせてたかが8コマ取っただけだが、生まれ変わったように感じる。アメリカのTrainingのすごさに驚く。Stanfordとかの留学生の話を聞いているともっとヤバイ気もする(もちろん授業によるが)。

東大の理情、京大の情報もTrainingとしては同じくらいヤバイところだが、比べると残念ながら企業との連携、あとクラブ化ができていない。こっちのTAはどいつもこいつもGoogleFacebookAppleインターンしており、自分の書くコードや知識に関して強い責任と向上心を持っている。議論掲示板は企業の勧誘プラットフォームとアカウント情報を共有している。インターンした学生たちは優秀な友人たちをごく自然な流れでリクルーターに紹介する。彼らにとってFacebookは"isnt as prestigious as you think"らしい。

飛び級や楽単も少ない。楽単自体は悪いことではない。現に僕が組んだ学部生はスタートアップを始めてかなり成功している。飛び級はメッチャいいことだ。大学院生だけに授業を限定する理由なんて何もない。現にOS1の僕のチームメイトは学部2年生だった。