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