学部時代
Original2005年3月
(このエッセイの一部は、質問を寄せてくれた学生への返信として始まりました。)
最近、コンピュータサイエンスの学部生から大学で何をすべきかという質問をいくつか受けました。私は大学では哲学専攻だったので、アドバイスをするのに適任ではないかもしれません。しかし、私は多くのCSの授業を受け、ほとんどのCS専攻は私がCS専攻だと思っていました。少なくとも、私は間違いなくハッカーでした。
ハッキング
優れたハッカーになるために大学で何をすべきでしょうか? 2つの主なことがあります。プログラミングを非常に得意になり、特定のクールな問題について多くを学ぶことです。これらは同等であることが判明します。なぜなら、それぞれが互いにやる気を起こさせるからです。
プログラミングをうまくやる方法は、(a) たくさん (b) 難しい問題に取り組むことです。そして、難しい問題に取り組ませる方法は、非常に魅力的なプロジェクトに取り組むことです。
このプロジェクトは、授業の課題ではない可能性が高いです。私の友人ロバートは、学部生のときにネットワークソフトウェアを書くことで多くのことを学びました。彼のプロジェクトの1つは、ハーバードをアーパネットに接続することでした。ハーバードは当初のノードの1つでしたが、1984年までに接続は途絶えていました。[1] この作業は授業のためのものではなかっただけでなく、彼はすべての時間を費やし、学業を怠ったため、1年間学校から追放されました。[2] 結局はすべてうまくいき、今ではMITの教授です。しかし、あなたはそこまで極端なことをしなければ、おそらくもっと幸せになるでしょう。それは当時彼に多くの心配をもたらしました。
プログラミングをうまくやるもう1つの方法は、優れたプログラマーを見つけて、彼らの知識を学ぶことです。プログラマーは、行う仕事のタイプと使用するツールに応じて、部族に分類される傾向があり、一部の部族はより賢いです。周りを見回して、賢い人たちが何に取り組んでいるかを見てください。通常、理由があります。
あなたの周りの最も賢い人の中には、教授もいます。興味深い仕事を見つける1つの方法は、研究助手としてボランティアをすることです。教授は、特に退屈なシステム管理タイプの問題を解決できる人に興味を持っているので、それは足を踏み入れる方法です。彼らが恐れているのは、フレークと履歴書のパッダーです。アシスタントが仕事の純増加をもたらすことは、あまりにも一般的です。そのため、あなたは純減になることを明確にする必要があります。
彼らがノーと言ったとしても、落胆しないでください。拒否は、拒否された人が想像するよりも、ほとんどの場合、個人的なものではありません。次のものに進みましょう。(これはデートにも当てはまります。)
注意してください。ほとんどの教授は賢いですが、すべての人が興味深いことに取り組んでいるわけではありません。教授は、キャリアを前進させるために、新しい結果を発表する必要がありますが、より興味深い研究分野では競争が激しくなります。そのため、野心のない教授が行うことは、誰も気にしないため、結論が新しい一連の論文を発表することです。あなたはそれらを避ける方が良いでしょう。
私は研究助手として働いたことがないので、そのルートを勧めるのは少し不誠実だと感じています。私は、特にウィノグラードのSHRDLUを逆アセンブルしようとして、自分でものを書くことでプログラミングを学びました。私はそのプログラムに、母親が新しい赤ちゃんに夢中になっているように夢中になっていました。
一人で働くことの欠点は何であれ、利点は、プロジェクトがすべてあなた自身のものであるということです。あなたは妥協したり、誰かの許可を求めたりする必要はなく、新しいアイデアがあれば、座って実装を開始することができます。
独自のプロジェクトでは、教授のように新しさについて心配する必要も、ビジネスのように収益性について心配する必要もありません。重要なのは、プロジェクトが技術的にどれほど難しいかであり、それはアプリケーションの性質とは相関関係がありません。データベースのような「深刻な」アプリケーションは、技術的にはしばしば些細で退屈です(不眠症に苦しんでいる場合は、データベースに関する技術文献を読んでみてください)。一方、「軽薄な」アプリケーションであるゲームは、しばしば非常に洗練されています。大学CS部門の下位9分の1の研究よりも、知的コンテンツが多い製品に取り組んでいるゲーム会社がそこにあることは間違いありません。
もし私が今大学にいるなら、おそらくグラフィックに取り組むでしょう。たとえば、ネットワークゲームや3Dアニメーション用のツールです。私が学部生の頃は、グラフィックを面白くするのに十分なサイクルがありませんでしたが、今、それよりも楽しいものを見つけるのは難しいでしょう。
数学
私が大学にいた頃、多くの教授は、コンピュータサイエンスは数学の一分野であると信じていました(または少なくともそう願っていました)。この考えはハーバードで最も強く、1980年代まではCS専攻すらありませんでした。それまでは、応用数学を専攻する必要がありました。しかし、コーネルでもほとんど同じでした。私は恐ろしいコンウェイ教授に、AI(当時ホットな話題)に興味があると伝えたとき、彼は数学を専攻すべきだと私に言いました。彼はAIが数学を必要とすると思ったのか、それともAIはナンセンスであり、厳密なものを専攻することで、そのような愚かな野心から私を治すことができると思ったのか、今でもわかりません。
実際、ハッカーとして必要な数学の量は、ほとんどの大学部門が認めているよりもはるかに少ないです。計算理論のいくつかの概念に加えて、高校の数学以上のものは必要ないと思います。(n^2アルゴリズムが何かを知っておく必要があります。そうしないと、それらを書いてしまうからです。)もちろん、数学アプリケーションを書く予定がない限り。たとえば、ロボット工学はすべて数学です。
しかし、ほとんどの種類のハッキングに数学が文字通り必要ない一方で、公式を微分するための1001のトリックを知るという意味では、数学はそれ自体のために学ぶ価値があります。それは、ほとんどの種類の仕事のための比喩の貴重な源です。[3] 大学で数学をもっと勉強していればよかったと思います。
多くの人と同じように、私は子供の頃、数学的に虐待されました。私は数学を、美しくも私の生活とは関係のない(「文章題」に翻訳しようとしたにもかかわらず)、テストで良い成績を取るために暗記する必要のある公式の集まりだと考えるようになりました。
大学でできる最も価値のあることの1つは、数学が実際に何であるかを学ぶことです。これは簡単ではないかもしれません。なぜなら、優れた数学者の多くは、悪い教師だからです。そして、数学に関する人気のある本はたくさんありますが、良い本はほとんどないように思えます。私が思いつく最高のものは、W. W. ソーヤーのものです。そしてもちろんユークリッドです。[4]
すべて
トーマス・ハクスリーは、「すべてについて何かを学び、何かについてすべてを学ぼう」と言いました。ほとんどの大学はこの理想を目指しています。
しかし、すべてとは何でしょうか?私にとって、それは、人々が難しい問題に正直に取り組む過程で学ぶすべてのことです。そのようなすべての作業は、ある分野のアイデアや技術を他の分野にうまく移植できるため、関連する傾向があります。非常に遠いように見えるものも含めて。たとえば、私はエッセイをソフトウェアを書くのと同じように書きます。私は座って、できるだけ早くタイプして、ひどいバージョン1を吹き出し、その後数週間かけて書き直します。
難しい問題に取り組むだけでは十分ではありません。中世の錬金術師は難しい問題に取り組んでいましたが、彼らのアプローチはあまりにも偽物だったので、それを研究しても学ぶことはほとんどありませんでした。おそらく、人々が自分自身を欺く能力について学ぶこと以外には。残念ながら、私が大学で学ぼうとしていたAIには、同じ欠陥がありました。非常に難しい問題であり、ひどく不十分な技術で軽々しくアプローチされました。大胆?詐欺に近い。
社会科学もかなり偽物です。なぜなら、それらは知的流行の影響を大きく受けているからです。物理学者が100年前の同僚に会った場合、彼は彼にいくつかの新しいことを教えることができます。心理学者がある100年前の同僚に会った場合、彼らは単にイデオロギー的な議論に巻き込まれるでしょう。 もちろんです。心理学の授業を受ければ、何かを学ぶでしょう。ポイントは、別の学科の授業を受けた方がもっと学ぶということです。
私の意見では、価値のある学科は、数学、ハードサイエンス、工学、歴史(特に経済史と社会史、および科学史)、建築、古典です。美術史の概論は価値があるかもしれません。現代文学は重要ですが、それについて学ぶ方法は、単に読むことです。音楽については、あまり詳しくないので、わかりません。
社会科学、哲学、そして政治的な圧力に応じて最近作成されたさまざまな学科は、スキップできます。これらの分野の多くは、確かに重要な問題について話しています。しかし、彼らがそれらについて話す方法は役に立ちません。たとえば、哲学は、他のものに対する私たちの義務について話しますが、あなたは賢い祖母やE. B. ホワイトから、学術的な哲学者よりも多くを学ぶことができます。
私はここで経験から語っています。人々がクリントンが「'is'という言葉の意味は何ですか?」と言ったときに笑ったとき、私はおそらく怒るべきでした。私は大学で「is」の意味について約5つの授業を受けました。
どの分野が学ぶ価値があるかを判断するもう1つの方法は、ドロップアウトグラフを作成することです。たとえば、私は数学が難しすぎて、コンピュータサイエンスに転向した人がたくさんいますが、逆をした人はいません。人々は無料で難しいことをしません。誰かがより難しい問題に取り組むのは、それが比例して(または少なくともlog(n))よりやりがいがある場合だけです。したがって、おそらく数学はコンピュータサイエンスよりも学ぶ価値があります。同様の比較によって、大学のすべての学科のグラフを作成できます。一番下には、知的コンテンツが最も少ない科目があります。
この方法を使用すると、私がちょうど与えたものとほぼ同じ答えが得られます。
言語コースは異常です。私はそれらを陶芸教室のような課外活動として考えた方が良いと思います。言語が話されている国でしばらく住むことと組み合わせると、はるかに役立ちます。気まぐれで、私は1年生のときにアラビア語を学びました。それは多くの作業であり、永続的な利点は、セム語の語根を識別する奇妙な能力と、人々が単語をどのように認識するかについての洞察だけでした。
スタジオアートと創作コースはワイルドカードです。通常、あなたはあまり教えられません。あなたはただあなたが望むものを作り(または作らない)だけで、その後、教師の漠然とした監督の下で、互いの創作の「批評」を提供するために座ります。しかし、執筆と芸術はどちらも、(一部の)人々が正直に取り組む非常に難しい問題なので、特に優れた教師を見つけられる場合は、それを行う価値があります。
仕事
もちろん、大学生は学習以上のことを考える必要があります。考慮すべき2つの実際的な問題もあります。仕事と大学院です。
理論的には、教養教育は職業訓練を提供するものではありません。しかし、誰もがこれが少し嘘であることを知っています。すべての大学のハッカーは、偶然ではなく、実践的なスキルを学びます。
あなたが仕事を得るために学ぶべきことは、あなたが望む仕事のタイプによって異なります。大企業で働きたい場合は、BlubをWindowsでハッキングする方法を学びましょう。クールな小さな会社や研究室で働きたい場合は、Ruby on Linuxを学ぶ方が良いでしょう。そして、自分で会社を設立したい場合は、ますます一般的になると思いますが、見つけられる最も強力なツールを習得してください。なぜなら、あなたは競合他社と競争するレースに参加することになり、彼らはあなたの馬になるからです。
大学で学ぶべきスキルと、仕事で使用するスキルとの間に直接的な相関関係はありません。大学では少し高い目標を定めるべきです。
トレーニングでは、フットボール選手は、ゲーム中にそのような力を発揮する必要がない場合でも、300ポンドのベンチプレスを行うことがあります。同様に、教授があなたが仕事で必要とするよりも高度なものを学ばせようとする場合、それは彼らが現実世界から切り離された学者であるだけではないかもしれません。彼らはあなたの脳でウェイトリフティングをさせようとしているのかもしれません。
授業で書くプログラムは、現実世界で書くプログラムとは3つの重要な点で異なります。それらは小さく、最初から始めることができ、問題は通常人工的で事前に決定されています。現実世界では、プログラムはより大きく、既存のコードを伴う傾向があり、多くの場合、問題を解決する前に問題を特定する必要があります。
これらのスキルを学ぶために、大学を卒業する(または大学に入学する)まで待つ必要はありません。たとえば、既存のコードを扱う方法を学びたい場合は、オープンソースプロジェクトに貢献できます。あなたが働きたいと思うような雇用主は、授業の課題の成績と同じくらい感銘を受けるでしょう。
既存のオープンソースプロジェクトでは、3番目のスキル、つまり解決する問題を決定することについては、あまり練習できません。しかし、あなた自身の新しいプロジェクトを開始するのを止めるものは何もありません。そして、良い雇用主は、それにもっと感銘を受けるでしょう。
どのような問題を解決しようとするべきでしょうか?その答えの1つは、ユーザーとして何が欲しいかを尋ねることです。たとえば、私はスパムを止めたかったため、スパムフィルターの優れたアルゴリズムに出くわしました。今、私が欲しいのは、何らかの形で受信トレイが一杯になるのを防ぐメールリーダーです。私は受信トレイをTODOリストとして使用しがちです。しかし、それはドライバーを使ってボトルを開けるようなものです。本当に欲しいのはボトルオープナーです。
大学院
大学院はどうでしょうか?行くべきですか?そして、良い大学院にどうやって入るのですか?
原則として、大学院は研究の職業訓練であり、研究をキャリアとして行いたい場合にのみ行くべきです。そして、それでもCSの博士号を取得した人の半分は、研究には行きません。私は教授になるために大学院に行きませんでした。私はもっと学びたかったので行きました。
そのため、主にハッキングに興味があり、大学院に行く場合は、同様に自分の要素から外れている人がたくさんいることに気づくでしょう。そして、あなたの周りの人々の半分があなたと同じように自分の要素から外れている場合、あなたは本当に自分の要素から外れているのでしょうか?
「コンピュータサイエンス」には根本的な問題があり、このような状況で表面化します。誰も「研究」が何であるべきか確信していません。多くの研究は、出版のもう1つの量子を生み出すために、学術論文の形に詰め込まなければならなかったハッキングです。
そのため、大学院で落ち着くかどうかを尋ねることは、少し誤解を招く可能性があります。なぜなら、コンピュータサイエンスで完全に落ち着いている人はほとんどいないからです。その分野全体が自分の肌に不快感を感じています。そのため、主にハッキングに興味があるという事実は、大学院に行くのを思いとどまらせるべきではありません。ただ、あなたが嫌いなことをたくさんする必要があることを警告しておきます。
ナンバーワンはあなたの論文です。ほとんどの人は、論文を終えるまでに、自分の論文を嫌います。そのプロセスは本質的に、全粒粉で12時間焼いたケーキのように、不快な結果を生み出す傾向があります。論文は、特に著者によって、喜びを持って読まれることはほとんどありません。
しかし、あなたより前に何千人もの人々が論文を書く苦しみを経験してきました。そして、それとは別に、大学院は楽園に近いものです。多くの人が、それを人生で最も幸せな時間として覚えています。そして、私を含めて、残りのほとんどの人は、論文を書かなければならなかったら、そうだっただろうと覚えています。[5]
大学院の危険は、怖い部分を事前に見ないことです。博士課程は、数年間の授業で、大学パート2として始まります。そのため、論文を書く恐怖に直面するまでに、すでに数年が経過しています。今やめた場合、あなたは大学院のドロップアウトになり、おそらくその考えは好きではないでしょう。ロバートが1988年のインターネットワームを書いたために大学院から追放されたとき、私は失敗の汚名を着ずに抜け出す方法を見つけた彼を非常にうらやましく思いました。
全体として、大学院はほとんどの選択肢よりもおそらく優れています。あなたは多くの賢い人々に会い、あなたの憂鬱な先延ばしは、少なくとも強力な共通の絆になるでしょう。そしてもちろん、あなたは最後に博士号を取得します。それを忘れていました。それは何か価値があると思います。
博士号の最大の利点(もちろん、学術界の組合員証以外)は、ある程度の基本的な自信を与えてくれることかもしれません。たとえば、私の家のハネウェルサーモスタットは、最もひどいUIを持っています。同じモデルを持っている私の母親は、勤勉に1日かけてユーザーマニュアルを読んで、自分のサーモスタットの操作方法を学びました。彼女は問題が自分にあると思っていました。しかし、私は「コンピュータサイエンスの博士号を取得した人がこのサーモスタットを理解できない場合、それは間違いなくひどく設計されているに違いない」と考えることができます。
このあいまいな推奨事項の後でも、まだ大学院に行きたい場合は、入学する方法について確実なアドバイスを提供できます。私の友人の多くは現在CS教授なので、入学に関する裏話を知っています。それは大学とはかなり違います。ほとんどの大学では、入学事務局が誰が合格するかを決定します。博士課程では、教授が決定します。そして、彼らはそれをうまくやろうとします。なぜなら、彼らが受け入れる人は、彼らのもとで働くことになるからです。
どうやら、最高の学校では、推薦状だけが本当に重要です。標準化されたテストは何も意味がなく、成績はほとんど意味がありません。エッセイは、主に愚かなことを言って自分を失格にする機会です。教授が信頼しているのは推薦状だけで、できれば知っている人からの推薦状です。[6]
そのため、博士課程に入学したい場合は、教授に感銘を与えることが重要です。そして、教授である私の友人たちから、彼らに感銘を与えるもの、つまり彼らに感銘を与えようとするだけではないことを知っています。彼らは、良い成績を取ったり、大学院に入学するために研究助手になりたい学生には感銘を受けません。彼らは、良い成績を取って、そのトピックに本当に興味を持っているため、研究助手になりたい学生に感銘を受けます。
そのため、大学でできる最善のことは、大学院に入学したい場合でも、ハッキングをうまくやりたい場合でも、本当に好きなものを理解することです。教授をだまして大学院に入学させるのは難しく、問題をだまして解決させるのは不可能です。大学は、偽物が機能しなくなる場所です。この時点から、大企業で働くことを望まない限り、それは高校に戻るようなものです。前進する唯一の方法は、あなたが愛することをすることです。
注記
[1] 誰も気にしているようには見えません。これは、アーパネット(インターネットになった)が1984年までどれほど重要ではなかったかを示しています。
[2] これが、私が雇用主になったとき、GPAを気にしなかった理由です。実際、私たちは積極的に学校を中退した人を探していました。私たちはかつてハーバードの周りに「授業で成績が悪くて追放されたばかりですか?それは、自分のプロジェクトにすべての時間を費やしていたからです。来て、私たちのために働いてください!」というポスターを貼りました。私たちは、追放された子供を見つけることができ、彼は素晴らしいハッカーでした。
ハーバードが学部生を1年間追放すると、彼らは仕事を見つけなければなりません。その考えは、彼らに現実世界がどれほどひどいものかを示すことで、大学にいることがどれほど幸運か理解させることです。この計画は、私たちのもとで働くようになった男に対しては裏目に出てしまいました。なぜなら、彼は学校にいるよりも楽しんでいたからです。そして、彼はストックオプションから、彼の教授の誰よりもその年に多くの収入を得ました。そのため、彼は1年の終わりに反省して這い戻ってくる代わりに、もう1年間休みを取り、ヨーロッパに行きました。彼は結局26歳頃に卒業しました。
[3] エリック・レイモンドは、ハッカーにとって最高の比喩は、集合論、組み合わせ論、グラフ理論にあると言っています。
トレバー・ブラックウェルは、数学専攻向けの数学の授業を受けるように思い出させてくれます。 「'エンジニアのための数学'の授業はひどく吸い込まれました。実際、'x for engineers'はすべてひどいです。ここでxには、数学、法律、執筆、視覚デザインが含まれます。」
[4] その他、強くお勧めする本:What is Mathematics?、コーラントとロビンズ著; Geometry and the Imagination、ヒルベルトとコーン・フォッセン著。 そして、グラフィックデザインに興味のある人のために、Byrne's Euclid。
[5] 完璧な人生を送りたい場合は、大学院に行って、最初の1、2年でこっそりと論文を書き、その後3年間はただ楽しんで、1回に1章ずつ発表するだけです。この見通しは大学院生の口を水で満たしますが、それをやり遂げるほどの規律を持っている人は誰も知りません。
[6] ある教授の友人は、毎年受け入れる大学院生の15〜20%は「ロングショット」であると言っています。しかし、彼がロングショットと呼ぶのは、推薦状を書いた教授を入学委員会の誰も知らないことを除いて、すべての点で完璧なアプリケーションを持っている人です。
そのため、科学の大学院に入学したい場合は、本物の研究教授がいる大学に通う必要があります。そうでなければ、あなたはどれほど優れていても、入学委員会にとって危険な賭けのように見えるでしょう。
これは、驚くべきことですが、明らかに避けられない結果を意味します。小さなリベラルアーツカレッジは運命づけられています。ほとんどの賢い高校生は、最終的に選択しなくても、少なくとも科学分野への進学を検討しています。彼らの選択肢を制限する大学に行くのはなぜでしょうか?
謝辞 この原稿を読んでくれたトレバー・ブラックウェル、アレックス・ルウィン、ジェシカ・リビングストン、ロバート・モリス、エリック・レイモンド、そしていくつかの匿名のCS教授に感謝します。そして、このエッセイを始めるきっかけとなった質問をしてくれた学生に感謝します。