学部卒業
Original2005年3月
(このエッセイの一部は、私に質問を書いてきた学生への返信として始まりました。)
最近、コンピューターサイエンスの学部生から、大学で何をすべきかについて何通かのメールをもらいました。私はそのアドバイスの最良の情報源とは言えないかもしれません。なぜなら、私は大学では哲学を専攻していたからです。しかし、私はコンピューターサイエンスの授業をたくさん取ったので、ほとんどのコンピューターサイエンスの専攻生たちは私がそうだと思っていました。少なくとも私はハッカーだったと言えるでしょう。
ハッキング
良いハッカーになるために大学で何をすべきですか? 主に2つのことができます。プログラミングに非常に長けること、そして特定の魅力的な問題について多くを学ぶことです。これらは実は同等のものです。なぜなら、それぞれが他方を行うよう促すからです。
プログラミングが上手になる方法は、(a)たくさん(b)難しい問題に取り組むことです。そして、難しい問題に取り組むようにさせるのは、魅力的なプロジェクトに取り組むことです。
この プロジェクトは、おそらく授業の課題ではないでしょう。私の友人のロバートは、学部生のときにネットワークソフトウェアを書くことで多くを学びました。彼のプロジェクトの1つは、ハーバード大学をアーパネットに接続することでした。ハーバード大学はもともとのノードの1つでしたが、1984年までにその接続は失われていました。[1] これは授業の課題ではなく、彼がそれに時間を費やしすぎて勉強を軽視したため、1年間退学処分を受けました。[2] 結局うまくいきましたが、彼はそのときかなり心配していました。そのような極端なことはしないほうがよいでしょう。
プログラミングが上手になる別の方法は、プログラミングが上手な人を見つけて、彼らの知識を学ぶことです。プログラマーは、自分の仕事の種類やツールの使用に応じて部族に分かれる傾向があり、ある部族はより賢明です。周りを見渡して、賢明な人々が何に取り組んでいるかを確認してください。その理由はたいてい存在します。
周りで最も賢明な人の一部は教授です。したがって、研究アシスタントとして自発的に参加するのは、興味深い仕事を見つける1つの方法です。教授は、面倒なシステム管理タイプの問題を解決できる人に特に興味があります。それは足を踏み入れる方法です。ただし、教授が恐れているのは、無責任な人や履歴書を盛るためだけの人です。アシスタントが結果的に仕事の増加につながることが多いのです。したがって、あなたが仕事の減少につながることを明確にする必要があります。
断られても落胆しないでください。拒否は、拒否された人が想像するよりもはるかに個人的ではありません。次の人に移動するだけです。(デートにも当てはまります)
ただし注意が必要です。ほとんどの教授は賢明ですが、すべてが興味深い仕事をしているわけではありません。教授は自分の経歴を進めるために新しい結果を発表する必要がありますが、より興味深い研究分野では競争が激しくなります。そのため、野心の少ない教授は、誰も気にしていない結論の連続論文を発表しています。これらは避けるべきです。
私は研究アシスタントとして働いたことがないので、その方法をお勧めするのは少し気が引けます。私はWinogradのSHRDLUをリバースエンジニアリングしようとすることで、プログラミングを学びました。私はその プログラムに赤ん坊のように夢中でした。
一人で働くことの欠点はありますが、プロジェクトが完全に自分のものであるという利点があります。妥協する必要もなく、誰の許可も求める必要もありません。新しいアイデアがあれば、すぐに実装を始めることができます。
自分のプロジェクトでは、新規性(教授の場合)や収益性(企業の場合)を気にする必要はありません。重要なのは技術的にどれだけ難しいかということだけで、アプリケーションの性質とは無関係です。データベースのような「重要な」アプリケーションは多くの場合、技術的に単純で退屈です(不眠症に悩まされたい場合は、データベースの技術文献を読んでみてください)。一方、ゲームのような「軽い」アプリケーションは非常に洗練されていることがよくあります。大学のコンピューターサイエンス部門の下位9割の研究よりも、ゲーム会社の製品の方が知的内容が豊かだと確信しています。
私が大学生だったら、おそらくグラフィックスに取り組むでしょう。ネットワークゲームや3Dアニメーションツールなどです。私が学部生のころは、グラフィックスを面白くするのに十分なサイクルがありませんでしたが、今では最も楽しいことに取り組めると思います。
数学
私が大学にいたときは、多くの教授が(少なくとも願っていた)コンピューターサイエンスは数学の一分野だと信じていました。この考えは、1980年代まで独自のコンピューターサイエンス専攻がなかったハーバード大学で最も強かったですが、コーネル大学でもほとんど同じでした。私がAI(当時の話題)に興味があると恐ろしい教授のConwayに言ったとき、彼は私に数学を専攻するよう言いました。彼がAIには数学が必要だと考えていたのか、それともAIは無意味だと考え、堅実な専攻をすれば治るだろうと考えていたのかはよくわかりません。
実際、ハッカーに必要な数学の量は、ほとんどの大学部門が認めたがるよりはるかに少ないです。計算理論からの数個の概念に加えて、高校レベルの数学以上は必要ないと思います。(n^2アルゴリズムが何かを知っていれば、それを書くのを避けられます)ただし、数学アプリケーションを書く予定の場合は別です。ロボット工学など、数学がすべてです。
しかし、ほとんどのタイプのハッキングには数学が文字通り必要ではありませんが(微分公式を1001個覚える必要はありません)、数学を自分の目的のために学ぶことは非常に価値があります。ほとんどあらゆる種類の仕事に対するメタファーの豊かな源泉なのです。[3] 大学で数学をもっと勉強しておけばよかったと思います。
多くの人と同じように、私も子供のころ数学的虐待を受けました。数学は、生活とは無関係な(「言葉の問題」に翻訳しようとしても)暗記しなければならない公式の集まりだと考えるようになりました。
カレッジで最も価値のあることの1つは、数学が本当のところどうなっているかを学ぶことです。これは簡単ではありません。なぜなら、優れた数学者の多くが悪い教師だからです。そして、数学に関する人気のある本も多数ありますが、良いものは少ないようです。私が思いつくのは、W. W. Sawyerの本です。そしもちろん、ユークリッドの本です。[4]
すべて
トーマス・ハックスリーは「すべてのことについて少しずつ学び、ある1つのことについて徹底的に学べ」と言いました。ほとんどの大学はこの理想を目指しています。
しかし、「すべて」とは何でしょうか。私にとっては、人々が真面目に難しい問題に取り組んで学んだすべてのことを意味します。そのような仕事はすべて関連しています。ある分野のアイデアや技術は、見かけ上全く異なる分野にも成功裏に移植できることがよくあります。例えば、私はエッセイを書くときに、ソフトウェアを書くのと同じように取り組みます。つまり、できるだけ早く1次バージョンを書き上げ、その後数週間をかけて書き直します。
難しい問題に取り組むだけでは十分ではありません。中世の錬金術師たちも難しい問題に取り組んでいましたが、その方法があまりにも不適切だったため、その研究から学べることはほとんどありませんでした。ただし、人々が自分を欺くことができるということは学べるかもしれません。残念ながら、私が大学で学ぼうとしていたAIも同じ欠陥を持っていました。非常に難しい問題に、絶望的に不適切な手法で取り組んでいたのです。大胆?それよりも詐欺に近いかもしれません。
社会科学分野も比較的当てにならないのは、知的な流行に大きく影響されるからです。物理学者が100年前の同僚に会えば、新しいことを教えることができますが、心理学者が100年前の同僚に会えば、イデオロギーの議論に陥ってしまうでしょう。はい、もちろん、心理学の授業を受ければ何かは学べるでしょう。ただし、別の学部の授業を受けた方が、もっと多くのことを学べるのです。
私の意見では、価値のある学部は数学、理系科学、工学、歴史(特に経済史、社会史、科学史)、建築学、古典学です。美術史の概論講義も価値があるかもしれません。現代文学は重要ですが、それを学ぶ最良の方法は単に読むことです。音楽については、私には十分な知識がありません。
社会科学、哲学、最近の政治的圧力に応えて新設された様々な学部は飛ばしてかまいません。これらの分野は確かに重要な問題について話しています。しかし、その話し方は役に立ちません。例えば、哲学は私たちの義務について論じますが、大学の哲学者よりも賢明な祖母やE.B.ホワイトから、もっと多くのことを学べるでしょう。
私はこの経験から話しています。クリントンが「'is'の意味は何かによる」と言ったときに、人々が笑ったのを見て、私も少し傷つきました。大学では、'is'の意味について5つほど授業を受けました。
学部の価値を判断する別の方法は、「脱落グラフ」を作ることです。例えば、数学から計算機科学に移った人は多数いますが、その逆はほとんどいません。人々は無意味に難しいことをしたりはしません。より報酬の大きい問題に取り組むのです。したがって、数学の方が計算機科学よりも価値があると考えられます。同様の比較を通して、大学の全学部のグラフを作ることができます。一番下には知的内容が最も乏しい学部があるはずです。
この方法を使えば、私が先ほど述べたのとほぼ同じ答えが得られるでしょう。
言語の授業は例外です。それらは陶芸の授業のような課外活動と考えるべきです。その言語が話されている国に滞在する時間があれば、はるかに役立つでしょう。冗談で1年生のときにアラビア語を学びましたが、それ以外の恩恵は、セム語の語源を識別できるようになったことと、人々が単語をどのように認識するかについての洞察くらいでした。
スタジオアートと創作文芸の授業は予測不可能です。通常、あまり教えられません。好きなことを自由に取り組み(または取り組まず)、教師の曖昧な監督の下で互いの作品について「批評」し合うだけです。しかし、書くことと絵を描くことは非常に難しい問題で、(一部の)人々が真面目に取り組んでいるので、特に良い教師が見つかれば、それらの授業に価値があるでしょう。
仕事
もちろん、大学生には学習以外にも考慮しなければならない2つの実用的な問題があります。それが仕事と大学院進学です。
理論上、教養教育は職業訓練を目的としていません。しかし、皆がそれは少し嘘だと知っています。ハッカーたちは、偶然ではなく、実践的なスキルを学んでいます。
就職したい仕事に応じて、何を学ぶべきかは異なります。大企業で働きたい場合は、WindowsでBlubをハックする方法を学びます。クールな小さな会社や研究所で働きたい場合は、Linuxでルビーを学ぶのがよいでしょう。そして自分で会社を立ち上げたい場合は、最強のツールを習得することが重要です。あなたは競争相手との競争に勝たなければならないからです。
大学で学ぶべきスキルと、実際の仕事で使うスキルは直接的な相関関係はありません。大学では少し高めのレベルを目指すべきです。
フットボール選手がトレーニングで300ポンドのベンチプレスをするのは、実際のゲームではそれほどの力を発揮する必要がないからです。同様に、教授が大学で学ぶべき内容をより高度なものにしているのは、単に学者が現実世界から遊離しているからではなく、あなたの脳を鍛えようとしているのかもしれません。
授業で書くプログラムは、実世界で書くプログラムとは3つの重要な点で異なります。それらは小さいこと、最初から書き始められること、そして問題が人工的で予め決まっていることです。実世界では、プログラムはより大きく、既存のコードを扱うことが多く、問題自体を見つけ出す必要があることが多いのです。
カレッジを出る前(あるいは入る前)から、これらのスキルを学ぶ必要はありません。既存のコードを扱う方法を学びたい場合は、オープンソースプロジェクトに貢献することができます。あなたが働きたい雇用主は、クラスの課題の良い成績と同じくらい、それを評価するでしょう。
既存のオープンソースプロジェクトでは、3番目のスキル、つまり解決すべき問題を決めるというスキルを十分に練習することはできません。しかし、自分のプロジェクトを立ち上げるのを妨げるものはありません。そして、良い雇用主はそれをさらに高く評価するでしょう。
どのような問題に取り組むべきですか? その答えを見つける1つの方法は、ユーザーとしてあなたに何が必要かを尋ねることです。例えば、私はスパムをストップさせたいと思ったので、スパムフィルタリングの良いアルゴリズムを見つけました。今、私が欲しいのは、somehow私のインボックスが溢れ上がるのを防ぐメールリーダーです。私はよくインボックスをToDoリストとして使っています。しかし、それはネジ回しでボトルを開けるようなものです。本当に必要なのはボトルオープナーです。
大学院
大学院に行くべきですか? そして、優秀な大学院にどのように入学できますか?
原則として、大学院は研究の専門的な訓練であり、研究者としての職を望む場合にのみ行くべきです。しかし、コンピューターサイエンスの博士号を取得した人の半数以上が研究に従事していません。私は教授になるために大学院に行ったわけではありません。私は単に、もっと学びたかったからです。
したがって、主にハッキングに興味があり大学院に行く場合、同じように居心地の悪い人がたくさいるでしょう。そして、あなたと同じように居心地の悪い人が周りの半分いるのであれば、本当にあなたは居心地が悪いのでしょうか?
「コンピューターサイエンス」には根本的な問題があり、このような状況で表面化します。「研究」とは何をすべきかが誰にもよくわかっていません。多くの研究は、論文の形式に押し込められたハッキングにすぎません。
したがって、大学院で居心地よく感じられるかどうかを尋ねるのは少し誤解を招きます。なぜなら、コンピューターサイエンスの分野で本当に居心地よく感じている人はほとんどいないからです。この分野全体が自分の皮膚に合っていないのです。ですから、主にハッキングに興味があるからといって、大学院に行くのを避ける必要はありません。ただし、あなたの好きでないことをたくさんしなければならないことを覚悟しておく必要があります。
その1番目が博士論文です。ほとんどの人は、それが完成したときには自分の博士論文が嫌いになっています。この過程は本質的に不快な結果を生み出す傾向があり、まるで全粒粉と12時間焼いたケーキのようです。博士論文を楽しんで読む人は少ないです。特に、その著者自身でさえも。
しかし、あなたより前に何千人もの人が博士論文を書き上げてきました。それ以外は、大学院は天国に近いものです。多くの人が、人生で最も幸せな時期だったと覚えています。そして、私を含む残りの人の大半も、博士論文を書かなければよかったと覚えています。[5]
大学院の危険は、恐ろしい部分が最初から見えないことです。博士課程は、数年間の授業という形で大学の続きから始まります。したがって、博士論文を書く恐怖に直面するまでに、すでに数年が経っています。今やめたら、大学院中退者になってしまい、それはおそらく気に入らないでしょう。1988年のインターネットワームを書いたためにロバートが大学院から追放されたとき、私は彼が失敗の烙印を押されずに抜け出せたことを羨ましく思いました。
全体としては、大学院は多くの代替案よりも良いでしょう。多くの賢明な人々に出会え、憂鬱な先延ばしは少なくとも強力な絆になるでしょう。そして当然、最終的には博士号が得られます。それを忘れていました。それはきっと何か価値があるはずです。
博士号の最大の利点(もちろん、学界の組合員証でもあるのですが)は、ある程度の自信を与えてくれることかもしれません。例えば、私の家のハネウェルのサーモスタットは最悪のUIです。同じモデルを持つ私の母は、懸命に取扱説明書を1日かけて読んで、自分のを操作する方法を学びました。彼女は問題は自分にあると思っていました。しかし私は「コンピューターサイエンスの博士号を持つ人間でさえこのサーモスタットが理解できないのなら、それは間違いなく設計が悪いに違いない」と考えることができます。
この曖昧な推奨の後でも、大学院に行きたいと思っているなら、入学する方法についての確かな助言をあげることができます。私の友人の多くがコンピューターサイエンスの教授になっているので、入学試験の内部事情を知っています。それは大学とはかなり違います。ほとんどの大学では、入学審査官が誰を合格させるかを決めます。博士課程では、教授たちが決めます。そして、彼らが入学させる人々は自分たちのために働くことになるので、慎重に行います。
最高の大学では、推薦状が本当に重要だそうです。標準化されたテストはまったく意味がなく、成績もほとんど意味がありません。エッセイは主に自分で愚かなことを言って失格になる機会です。教授たちが信頼しているのは、できれば自分の知っている人からの推薦状だけです。[6]
したがって、博士課程に入学したい場合、教授に印象を与えることが鍵となります。そして、教授になっている私の友人から分かるのは、単に印象を与えようとするのではなく、本当に興味があることを示すことが重要だということです。成績が良いだけの学生や、博士課程に入るためにリサーチアシスタントになりたがる学生には、彼らは感銘を受けません。彼らが感銘を受けるのは、成績が良く、その分野に本当に興味があるからリサーチアシスタントになりたがる学生です。
したがって、大学院に入りたいか、単にハッキングが上手になりたいかに関わらず、あなたが本当に好きなことを見つけることが最も大切です。教授を欺いて大学院に入れるのは難しく、問題を欺いて解決するのは不可能です。大学は、偽りが通用しなくなる場所です。これからは、大企業で働くつもりがない限り、前に進むためには、あなたの愛することをするしかありません。
注釈
[1] 誰も気にしていなかったようで、1984年時点でアーパネット(後のインターネット)がいかに重要ではなかったかがわかります。
[2] これが、私が雇用主になったときに、GPAに関心がなかった理由です。実際、私たちは学校で失敗した人を積極的に探していました。ハーバード大学の周りにポスターを掲示して「クラスの成績が悪かったために退学処分を受けたが、自分のプロジェクトに時間を費やしていた人は、私たちのところで働いてください!」と呼びかけたことがあります。そうして、退学処分を受けた学生を見つけ、彼は素晴らしいハッカーでした。
ハーバード大学が学部生を1年間退学処分にするのは、現実の世界がいかに厳しいかを示すためです。そうすれば、大学に在籍していることがいかに幸運かを理解するはずです。しかし、私たちのところで働いた学生の場合、学校よりも楽しく、株式オプションから得た収入が教授の年俸を上回っていたため、1年後に後悔して戻ってくるどころか、さらに1年休学してヨーロッパに行きました。彼は最終的に26歳くらいで卒業しました。
[3] エリック・レイモンドによると、ハッカーにふさわしい比喩は集合論、組合せ論、グラフ理論にあるそうです。
トレバー・ブラックウェルは、数学専攻向けの授業を受けるよう勧めています。「工学生向けの『数学』の授業はひどかった。実際、『工学生向けの』というタイトルがついた授業は、数学、法律、文章、デザインなど、何でも駄目です」と言っています。
[4] その他の強くお勧めの本は、クーラントとロビンズの『数学とは何か?』、ヒルベルトとコーン=フォッセンの『幾何学と想像力』です。 デザインに興味がある人には、バーンズのユークリッドをお勧めします。
[5] 完璧な人生を送るには、大学院に進学し、最初の1、2年で博士論文を書き上げ、その後3年間は楽しむだけでいいというのが一番良い方法です。これを聞いて大学院生の口が水を含むでしょうが、私は誰もこれを実行できた人を知りません。
[6] ある教授の友人によると、毎年受け入れる大学院生の15-20%は「長shot」だそうです。ここでいう「長shot」とは、推薦状を書いた教授が入試委員会の誰にも知られていないため、リスクが高いと見なされる人のことです。
したがって、理系分野の大学院に入りたいなら、研究教授がいる大学に行く必要があります。そうしないと、いくら優秀でも入試委員会から危険な賭けと見なされてしまいます。
これは意外な結論ですが、必然的な帰結だと言えます。つまり、小規模な文系の大学は行き詰まるということです。 ほとんどの優秀な高校生は、最終的に理系を選ばなくても、少なくとも検討はします。 なぜ、自分の選択肢を狭めてしまう大学に行くのでしょうか。
トレバー・ブラックウェル、アレックス・ルーイン、ジェシカ・リビングストン、ロバート・モリス、エリック・レイモンド、匿名の CS 教授の方々に、このドラフトを読んでいただき、ありがとうございます。また、この記事のきっかけとなった学生の皆さんにも感謝しています。