Loading...

学部生

Original

2005年3月

(このエッセイの一部は、私に質問を送ってきた学生への返信として始まりました。)

最近、コンピュータサイエンスの学部生から、大学で何をすべきかというメールをいくつか受け取りました。私は大学で哲学を専攻していたので、アドバイスの最良の源ではないかもしれません。しかし、私は非常に多くのCSの授業を受けたため、ほとんどのCS専攻の学生は私がCS専攻だと思っていました。少なくとも、私は確かにハッカーでした。

ハッキング

良いハッカーになるために大学で何をすべきでしょうか? [1] 2つの主なことがあります:プログラミングが非常に得意になること、そして特定のクールな問題について多くを学ぶことです。これらは相互に駆動し合うため、同等であることがわかります。

プログラミングが得意になる方法は、(a) たくさん働くこと、(b) 難しい問題に取り組むことです。そして、難しい問題に取り組むように自分を促す方法は、非常に魅力的なプロジェクトに取り組むことです。

このプロジェクトは、クラスの課題ではない可能性が高いです。私の友人ロバートは、学部生のときにネットワークソフトウェアを書くことで多くを学びました。彼のプロジェクトの1つは、ハーバードをアルパネットに接続することでした;それは元々のノードの1つでしたが、1984年までに接続は途絶えていました。[[1]] この作業はクラスのためのものではなく、彼がそれに全ての時間を費やし、学業を怠ったため、彼は1年間学校を追い出されました。[[2]] 結局はすべてがうまくいき、今では彼はMITの教授です。しかし、あなたはその極端な状況に行かない方が幸せかもしれません;それは当時彼に多くの心配を引き起こしました。

プログラミングが得意になる別の方法は、他の優れた人々を見つけて、彼らが知っていることを学ぶことです。プログラマーは、行う仕事の種類や使用するツールに応じて部族に分かれる傾向があり、ある部族は他の部族よりも[2] 賢いです。周りを見て、賢い人々が何に取り組んでいるのかを見てください;通常、そこには理由があります。

あなたの周りの最も賢い人々の中には教授がいます。したがって、興味深い仕事を見つける1つの方法は、研究助手としてボランティアをすることです。教授は特に、彼らのために面倒なシステム管理の問題を解決できる人に興味を持っていますので、それは足がかりを得る方法です。彼らが恐れているのは、フレークや履歴書を膨らませる人々です。助手が結果的に仕事の純増をもたらすことは非常に一般的です。したがって、あなたが純減をもたらすことを明確にする必要があります。

彼らがノーと言っても気にしないでください。拒絶は、拒絶された側が想像するほど個人的ではないことがほとんどです。次に進んでください。(これはデートにも当てはまります。)

注意してください、ほとんどの教授は賢いですが、すべての教授が興味深いことに取り組んでいるわけではありません。教授はキャリアを進めるために新しい結果を発表する必要がありますが、より興味深い研究分野にはより多くの競争があります。したがって、あまり野心的でない教授が行うことは、他の誰も気にしないために結論が新しい一連の論文を出すことです。これらを避ける方が良いでしょう。

私は研究助手として働いたことがないので、そのルートを勧めるのは少し不誠実に感じます。私は自分のものを書くことでプログラミングを学びました。特に、ウィノグラードのSHRDLUを逆エンジニアリングしようとすることで学びました。私はそのプログラムに新しい赤ちゃんを持つ母親のように夢中でした。

自分で働くことの欠点は何であれ、利点はプロジェクトがすべて自分のものであることです。妥協したり、誰かの許可を求めたりする必要はなく、新しいアイデアがあれば、ただ座って実装を始めることができます。

自分のプロジェクトでは、新規性(教授が気にすること)や収益性(ビジネスが気にすること)を心配する必要はありません。重要なのは、プロジェクトが技術的にどれだけ難しいかであり、それはアプリケーションの性質とは無関係です。「真剣な」アプリケーションであるデータベースは、技術的にはしばしば些細で退屈です(不眠症に悩んでいる場合は、データベースに関する技術文献を読んでみてください)が、「軽薄な」アプリケーションであるゲームは、しばしば非常に洗練されています。私は、大学のCS学部の下の9割の研究よりも、より知的な内容を持つ製品に取り組んでいるゲーム会社があると確信しています。

もし私が今大学にいたら、グラフィックスに取り組むでしょう:例えば、ネットワークゲームや3Dアニメーションのツールです。私が学部生だった頃は、グラフィックスを面白くするためのサイクルが十分ではありませんでしたが、今は取り組むのがこれ以上楽しいことは想像できません。

数学

私が大学にいたとき、多くの教授は(または少なくとも願っていた)[3] コンピュータサイエンスが数学の一分野であると信じていました。この考えはハーバードで最も強く、1980年代までCS専攻は存在しませんでした;それまでは応用数学を専攻しなければなりませんでした。しかし、コーネルでもほぼ同じでした。恐ろしいコンウェイ教授にAIに興味があると伝えたとき、彼は私に数学を専攻すべきだと言いました。彼がAIに数学が必要だと思っていたのか、AIが無意味だと思っていて、厳密な何かを専攻することで私の愚かな野望を治すと思っていたのか、今でもわかりません。

実際、ハッカーとして必要な数学の量は、ほとんどの大学の学部が認めたがらないほど少ないです。私は、高校の数学に加えて計算理論のいくつかの概念を知っていれば十分だと思います。(n^2アルゴリズムが何かを知っていなければ、それを書くのを避けることはできません。)もちろん、数学アプリケーションを書くつもりでない限り。ロボティクスは、例えば、すべて数学です。

しかし、ほとんどの種類のハッキングに対して文字通り数学が必要ではない一方で、数式を微分するための1001のトリックを知るという意味では、数学はそのためだけに学ぶ価値があります。ほとんどの仕事に対する比喩の貴重な源です。[[4]] その理由で、大学でより多くの数学を学んでおけばよかったと思います。

多くの人と同様に、私は子供の頃に数学的に虐待されました。私は数学を、美しさもなく、私の生活との関係もない公式の集まりとして考えるようになりました(「言葉の問題」に翻訳しようとする試みにもかかわらず)、しかし、テストで良い成績を取るためには暗記しなければなりませんでした。

大学でできる最も価値のあることの1つは、数学が本当に何であるかを学ぶことです。これは簡単ではないかもしれません。なぜなら、多くの優れた数学者は悪い教師だからです。そして、多くの人気のある数学の本がありますが、良いものはほとんどありません。私が考えられる最良のものはW. W. ソーヤーのものです。そしてもちろん、ユークリッドです。[[5]]

すべて

トーマス・ハクスリーは「すべてについて何かを学び、何かについてすべてを学ぼう」と言いました。ほとんどの大学はこの理想を目指しています。

しかし、すべてとは何でしょうか?私にとって、それは人々が誠実に難しい問題に取り組む過程で学ぶすべてのことを意味します。そのようなすべての仕事は、ある分野からのアイデアや技術が他の分野に成功裏に移植できることが多いため、関連しています。たとえそれがかなり遠くに見えるものであっても。例えば、私は[6] エッセイを書くのと同じようにソフトウェアを書く:私は座って、できるだけ早くダメなバージョン1を吹き出し、その後数週間かけて書き直します。

難しい問題に取り組むことは、それ自体では十分ではありません。中世の錬金術師は難しい問題に取り組んでいましたが、彼らのアプローチはあまりにも偽善的で、研究することから学べることはほとんどありませんでした。人々が自分自身を欺く能力についてかもしれません。残念ながら、私が大学で学ぼうとしていたAIの種類も同じ欠陥を持っていました:非常に難しい問題で、希望のない不十分な技術で軽々しくアプローチされていました。大胆ですか?詐欺に近いです。

社会科学もかなり偽善的です。なぜなら、知的[7] ファッションの影響を受けすぎているからです。もし物理学者が100年前の同僚に会ったら、彼は新しいことをいくつか教えることができるでしょう;もし心理学者が100年前の同僚に会ったら、彼らはただイデオロギー的な議論に入るでしょう。はい、もちろん、心理学の授業を受けることで何かを学ぶでしょう。要点は、他の学部の授業を受けることでより多くを学ぶことができるということです。

私の意見では、価値のある学部は数学、ハードサイエンス、工学、歴史(特に経済史と社会史、科学の歴史)、建築、古典です。美術史の調査コースは価値があるかもしれません。現代文学は重要ですが、それを学ぶ方法はただ読むことです。音楽については十分に知りません。

社会科学、哲学、そして最近の政治的圧力に応じて作られたさまざまな学部はスキップできます。これらの分野は確かに重要な問題について話しています。しかし、彼らがそれについて話す方法は無駄です。例えば、哲学は、他者に対する私たちの義務について話しますが、賢い祖母やE.B. ホワイトから学ぶ方が、学問的な哲学者から学ぶよりも多くを学べます。

私はここで経験から話しています。人々がクリントンが「それは「is」という言葉の意味による」と言ったときに笑ったとき、私はおそらく侮辱されるべきでした。私は「is」の意味について大学で約5つの授業を受けました。

どの分野が学ぶ価値があるかを見極める別の方法は、中退グラフを作成することです。例えば、私は数学からコンピュータサイエンスに切り替えた多くの人々を知っていますが、数学が難しすぎると感じたためであり、逆のことをした人は誰もいません。人々は無償で難しいことをしません;誰も、比例して(または少なくともlog(n))報酬が多くない限り、より難しい問題に取り組むことはありません。したがって、おそらく数学はコンピュータサイエンスよりも学ぶ価値があります。同様の比較を通じて、大学内のすべての学部のグラフを作成できます。最下部には、知的内容が最も少ない科目が見つかります。

この方法を使用すれば、私が今言ったのとほぼ同じ答えが得られます。

語学コースは異常です。私はそれらを陶芸クラスのような課外活動として考える方が良いと思います。言語が話されている国に住む時間と組み合わせると、はるかに役立ちます。気まぐれで、私は1年生のときにアラビア語を学びました。それは多くの作業であり、唯一の持続的な利益は、セム語の語根を特定する奇妙な能力と、人々が単語を認識する方法についてのいくつかの洞察でした。

スタジオアートや創作ライティングのコースはワイルドカードです。通常、あまり教えられません:あなたはただ自分が望むものに取り組む(または取り組まない)だけで、そして教師のあいまいな監督の下でお互いの創作物に「批評」を提供するために座っているだけです。しかし、ライティングとアートはどちらも非常に難しい問題であり、(一部の)人々が誠実に取り組んでいるので、特に良い教師を見つけられれば、やる価値があります。

仕事

もちろん、大学生は学ぶこと以上のことを考えなければなりません。考慮すべき実際的な問題が2つあります:仕事と大学院です。

理論的には、リベラル教育は職業訓練を提供することはないはずです。しかし、誰もがこれは少しの嘘であることを知っています。すべての大学のハッカーは実用的なスキルを学び、偶然ではありません。

仕事を得るために学ぶべきことは、あなたが望む仕事の種類によります。大企業で働きたいなら、Windowsで[8] Blubをハッキングする方法を学びましょう。クールな小さな会社や研究所で働きたいなら、LinuxでRubyを学ぶ方が良いでしょう。そして、自分の会社を始めたいなら、私はそれがますます一般的になると思いますが、見つけられる最も強力なツールをマスターしてください。なぜなら、あなたは競争相手とのレースにいるからで、彼らがあなたの馬になるからです。

大学で学ぶべきスキルと仕事で使うスキルの間には直接的な相関関係はありません。大学では少し高めを目指すべきです。

ワークアウトでは、フットボール選手は300ポンドをベンチプレスするかもしれませんが、試合中にそのような力を発揮する必要がないかもしれません。同様に、教授があなたに仕事で必要な以上に高度なことを学ばせようとする場合、それは彼らが学問的で現実世界から切り離されているからだけではないかもしれません。彼らはあなたに脳でウェイトを持ち上げさせようとしているかもしれません。

授業で書くプログラムは、実世界で書くものと3つの重要な点で異なります:それらは小さい;ゼロから始めることができる;そして問題は通常人工的で予め決まっています。実世界では、プログラムは大きく、既存のコードを含む傾向があり、しばしば問題を解決する前に何が問題なのかを理解する必要があります。

これらのスキルを学ぶために大学を出る(または入る)まで待つ必要はありません。例えば、既存のコードに対処する方法を学びたいなら、オープンソースプロジェクトに貢献できます。あなたが働きたい雇用主は、それをクラスの課題での良い成績と同じくらい印象的に思うでしょう。

既存のオープンソースプロジェクトでは、解決すべき問題を決定するという3つ目のスキルをあまり練習できません。しかし、自分自身の新しいプロジェクトを始めることを妨げるものは何もありません。そして、良い雇用主はそれにさらに感銘を受けるでしょう。

どのような問題に取り組むべきでしょうか?それに対する1つの答えは、ユーザーとして何が必要かを尋ねることです。例えば、私はスパムを止めたかったので、スパムフィルタリングの良いアルゴリズムを見つけました。今、私が望むのは、何らかの方法で受信トレイが埋まらないようにするメールリーダーです。私は受信トレイをTODOリストとして使用する傾向があります。しかし、それは瓶を開けるためにドライバーを使うようなものです;本当に欲しいのは瓶オープナーです。

大学院

大学院はどうでしょうか?行くべきですか?そして、良い大学院に入るにはどうすればよいですか?

原則として、大学院は研究の専門的な訓練であり、研究をキャリアとして行いたいのでなければ行くべきではありません。しかし、CSでPhDを取得する人の半分は研究に進みません。私は教授になるために大学院に行きませんでした。もっと学びたかったから行きました。

したがって、もしあなたが主にハッキングに興味があり、大学院に行くなら、あなたと同様に自分の要素から外れている他の多くの人々に出会うでしょう。そして、周りの半分の人々があなたと同じように自分の要素から外れているなら、あなたは本当に自分の要素から外れているのでしょうか?

「コンピュータサイエンス」には根本的な問題があり、こうした状況で表面化します。「研究」とは何かが誰にも確信が持てません。多くの研究は、学術論文の形式に詰め込まれなければならなかったハッキングであり、もう1つの量の出版を生み出すためのものです。

したがって、大学院で自分が居心地が良いかどうかを尋ねるのは少し誤解を招くことです。なぜなら、コンピュータサイエンスにおいて本当に居心地が良い人は非常に少ないからです。全体の分野が自分の皮膚の中で不快です。したがって、あなたが主にハッキングに興味があるという事実は、大学院に行くことを妨げるべきではありません。ただし、あなたが好きではない多くのことをしなければならないことを警告しておきます。

最初のものはあなたの論文です。ほとんどの人は、論文を書き終える頃にはそれを嫌っています。このプロセスは、全粒粉で作られ、12時間焼かれたケーキのように、不快な結果を生み出す傾向があります。ほとんどの論文は、特にその著者によって、喜んで読まれることはありません。

しかし、あなたの前に何千人もの人々が論文を書く苦しみを経験しました。そして、それを除けば、大学院は天国に近いです。多くの人々はそれを人生で最も幸せな時期として覚えています。そして、ほとんどの残りの人々、私を含めて、論文を書かなければならなかったら、素晴らしい時期だったと覚えています。[[5]]

大学院の危険は、怖い部分を最初に見ることができないことです。PhDプログラムは、数年間の授業を伴う大学のパート2として始まります。したがって、論文を書く恐怖に直面する頃には、すでに数年が経過しています。今辞めたら、あなたは大学院中退者になり、その考えはおそらく好きではないでしょう。ロバートが1988年のインターネットワームを書いたために大学院を追い出されたとき、私は彼が失敗の汚名なしに抜け出す方法を見つけたことを非常に羨ましく思いました。

全体として、大学院はおそらくほとんどの代替案よりも良いです。多くの賢い人々に出会い、あなたの憂鬱な先延ばしは少なくとも強力な共通の絆となるでしょう。そしてもちろん、最後にはPhDがあります。それを忘れていました。それは何かの価値があると思います。

PhDの最大の利点(もちろん学問の組合カードであることを除いて)は、いくつかの基準となる自信を与えてくれることかもしれません。例えば、私の家のハネウェルのサーモスタットは、最もひどいUIを持っています。私と同じモデルを持つ母は、彼女のものを操作する方法を学ぶために、一生懸命に1日をかけてユーザーマニュアルを読みました。彼女は問題が彼女にあると思っていました。しかし、私は「コンピュータサイエンスのPhDを持つ誰かがこのサーモスタットを理解できないなら、それは悪く設計されているに違いない」と考えることができます。

このあいまいな推薦の後でも大学院に行きたい場合、入学する方法についての確かなアドバイスを提供できます。私の友人の多くは現在CSの教授なので、入学についての内部の話を知っています。大学とはかなり異なります。ほとんどの大学では、入学担当者が誰が入学するかを決定します。PhDプログラムでは、教授が決定します。そして、彼らはそれをうまく行おうとします。なぜなら、彼らが入学させる人々は彼らのために働くことになるからです。

どうやら、最良の学校では推薦状だけが本当に重要です。標準化されたテストは何の価値もなく、成績もほとんど価値がありません。エッセイは、愚かなことを言って自分を失格にする機会です。教授が信頼する唯一のものは、推薦状であり、できれば彼らが知っている人からのものです。[[6]]

したがって、PhDプログラムに入学したい場合、鍵は教授に印象を与えることです。そして、教授である友人から、彼らを印象づけるものを知っています:単に彼らを印象づけようとすることではありません。彼らは良い成績を取る学生や、大学院に入るために彼らの研究助手になりたい学生には感銘を受けません。彼らは、良い成績を取り、トピックに本当に興味があるために彼らの研究助手になりたい学生に感銘を受けます。

したがって、大学でできる最良のことは、大学院に入学したい場合でも、単にハッキングが得意になりたい場合でも、自分が本当に好きなことを見つけることです。教授を騙して大学院に入るのは難しく、問題を騙して解決させるのは不可能です。大学は、偽りが通用しなくなる場所です。この時点から、もし大企業で働きたいのでなければ、高校に戻るようなもので、前進する唯一の方法は、自分が[7] 愛することをすることです。

ノート

[[1]] 誰も気にしなかったようで、1984年までアルパネット(後のインターネット)がどれほど重要でなかったかを示しています。

[[2]] これが、私が雇用主になったときにGPAを気にしなかった理由です。実際、私たちは学校を辞めた人々を積極的に探しました。私たちはかつてハーバードの周りに「自分のプロジェクトに全ての時間を費やして、クラスで悪い成績を取って追い出されたばかりですか?私たちのために働きませんか!」というポスターを掲示しました。私たちは、実際にそうだった子を見つけ、彼は素晴らしいハッカーでした。

ハーバードが学部生を1年間追い出すと、彼らは仕事を見つけなければなりません。このアイデアは、彼らに現実の世界がどれほどひどいかを示し、大学にいることがどれほど幸運であるかを理解させることです。この計画は、私たちのために働きに来た男に逆効果をもたらしました。なぜなら、彼は学校で過ごしたよりも楽しい時間を過ごし、その年にストックオプションから得た金額は、彼の教授の給料よりも多かったからです。したがって、年の終わりに悔い改めて這い戻る代わりに、彼はもう1年休んでヨーロッパに行きました。彼は最終的に約26歳で卒業しました。

[[3]] エリック・レイモンドは、ハッカーにとって最良の比喩は集合論、組合せ論、グラフ理論にあると言います。

トレバー・ブラックウェルは、数学専攻向けの数学の授業を受けるように思い出させます。「『エンジニアのための数学』の授業はひどかった。実際、数学、法律、ライティング、視覚デザインを含む『エンジニアのためのx』はすべてひどい。」

[[4]] 他に強く推奨される本:クーラントとロビンズのWhat is Mathematics?;ヒルベルトとコーン=フォッセンのGeometry and the Imagination。そして、グラフィックデザインに興味がある人のために、[8] バーンのユークリッド。

[[5]] 完璧な人生を送りたいなら、大学院に行き、最初の1年か2年で秘密裏に論文を書き、その後の3年間は楽しむことが最良の方法です。1章ずつ少しずつ出していく。この見通しは大学院生の口を水にさせますが、実行するための規律を持っている人は知りません。

[[6]] ある教授の友人は、彼らが毎年入学させる大学院生の15〜20%が「長期的なショット」であると言います。しかし、彼が長期的なショットと言うのは、入学委員会の教授が推薦状を書いた人を誰も知らないという点で、すべての面で完璧な申請者のことです。

したがって、科学の大学院に入学したい場合は、実際の研究教授がいる大学に通う必要があります。そうでなければ、あなたは入学委員会にとってリスクのある賭けに見えるでしょう。どれだけ優れていても。

これは驚くべきですが、明らかに避けられない結果を示唆しています:小さなリベラルアーツ大学は運命づけられています。ほとんどの賢い高校生は、最終的に選ばないとしても、少なくとも科学に進むことを考えます。なぜ選択肢を制限する大学に行くのでしょうか?

感謝 トレバー・ブラックウェル、アレックス・ルーイン、ジェシカ・リビングストン、ロバート・モリス、エリック・レイモンド、そしてこの草稿を読んでくれた数人の[9] 匿名のCS教授に感謝します。