Onder-afstuderen

Wil je een startup beginnen? Krijg financiering van Y Combinator.


Maart 2005

(Delen van dit essay begonnen als antwoorden op studenten die me met vragen mailden.)

Onlangs heb ik verschillende e-mails ontvangen van computerwetenschappen-studenten die vroegen wat ze moesten doen op de universiteit. Ik ben misschien niet de beste bron van advies, want ik was filosofie-major op de universiteit. Maar ik volgde zoveel CS-vakken dat de meeste CS-majors dachten dat ik er een was. Ik was zeker een hacker, in ieder geval.

Hacken

Wat moet je doen op de universiteit om een goede hacker te worden? Er zijn twee hoofdzaken die je kunt doen: heel goed worden in programmeren, en veel leren over specifieke, coole problemen. Deze blijken equivalent te zijn, omdat elk je ertoe aanzet het andere te doen.

De manier om goed te worden in programmeren is (a) veel werken (b) aan moeilijke problemen. En de manier om jezelf te laten werken aan moeilijke problemen is om te werken aan een zeer boeiend project.

De kans is groot dat dit project geen studieopdracht zal zijn. Mijn vriend Robert leerde veel door netwerksoftware te schrijven toen hij student was. Een van zijn projecten was om Harvard te verbinden met het Arpanet; het was een van de oorspronkelijke knooppunten geweest, maar tegen 1984 was de verbinding verbroken. [1] Niet alleen was dit werk niet voor een vak, maar omdat hij er al zijn tijd aan besteedde en zijn studie verwaarloosde, werd hij een jaar van school gestuurd. [2] Het kwam uiteindelijk allemaal goed, en nu is hij professor aan MIT. Maar je zult waarschijnlijk gelukkiger zijn als je niet zo ver gaat; het bezorgde hem destijds veel zorgen.

Een andere manier om goed te worden in programmeren is om andere mensen te vinden die er goed in zijn, en te leren wat zij weten. Programmeurs hebben de neiging zich te sorteren in stammen volgens het type werk dat ze doen en de tools die ze gebruiken, en sommige stammen zijn slimmer dan andere. Kijk om je heen en zie waar de slimme mensen aan lijken te werken; daar is meestal een reden voor.

Sommige van de slimste mensen om je heen zijn professoren. Dus een manier om interessant werk te vinden is om je aan te melden als onderzoeksassistent. Professoren zijn vooral geïnteresseerd in mensen die vervelende systeembeheer-achtige problemen voor hen kunnen oplossen, dus dat is een manier om binnen te komen. Wat ze vrezen zijn flapdrollen en cv-oplichters. Het komt maar al te vaak voor dat een assistent resulteert in een netto toename van werk. Je moet dus duidelijk maken dat je een netto afname zult betekenen.

Laat je niet ontmoedigen als ze nee zeggen. Afwijzing is bijna altijd minder persoonlijk dan de afgewezene denkt. Ga gewoon verder naar de volgende. (Dit geldt ook voor daten.)

Pas op, want hoewel de meeste professoren slim zijn, werken niet allemaal aan interessante dingen. Professoren moeten nieuwe resultaten publiceren om hun carrière te bevorderen, maar er is meer concurrentie op interessantere onderzoeksgebieden. Dus wat minder ambitieuze professoren doen, is een reeks papers uitbrengen waarvan de conclusies nieuw zijn omdat niemand anders erom geeft. Je kunt deze beter vermijden.

Ik heb nooit als onderzoeksassistent gewerkt, dus ik voel me een beetje oneerlijk als ik die route aanbeveel. Ik leerde programmeren door mijn eigen dingen te schrijven, met name door te proberen Winograd's SHRDLU te reverse-engineeren. Ik was net zo geobsedeerd door dat programma als een moeder met een nieuwe baby.

Wat de nadelen van alleen werken ook mogen zijn, het voordeel is dat het project helemaal van jou is. Je hoeft nooit compromissen te sluiten of toestemming te vragen, en als je een nieuw idee hebt, kun je gewoon gaan zitten en beginnen met implementeren.

In je eigen projecten hoef je je geen zorgen te maken over nieuwheid (zoals professoren doen) of winstgevendheid (zoals bedrijven doen). Het enige dat telt, is hoe technisch moeilijk het project is, en dat heeft geen correlatie met de aard van de toepassing. "Serieuze" toepassingen zoals databases zijn vaak technisch triviaal en saai (als je ooit last hebt van slapeloosheid, probeer dan de technische literatuur over databases te lezen), terwijl "frivole" toepassingen zoals games vaak erg geavanceerd zijn. Ik weet zeker dat er gamebedrijven zijn die producten ontwikkelen met meer intellectuele inhoud dan het onderzoek in de onderste negen tienden van de universitaire CS-afdelingen.

Als ik nu op de universiteit zat, zou ik waarschijnlijk aan graphics werken: een netwerkspel, bijvoorbeeld, of een tool voor 3D-animatie. Toen ik student was, waren er niet genoeg cycli om graphics interessant te maken, maar het is moeilijk voor te stellen dat er nu iets leukers is om aan te werken.

Wiskunde

Toen ik op de universiteit zat, geloofden veel professoren (of wensten ze op zijn minst) dat computerwetenschappen een tak van wiskunde was. Dit idee was het sterkst aan Harvard, waar tot de jaren 80 geen CS-major bestond; tot dan moest men toegepaste wiskunde studeren. Maar het was bijna net zo erg aan Cornell. Toen ik de angstaanjagende professor Conway vertelde dat ik geïnteresseerd was in AI (een hot topic toen), zei hij dat ik wiskunde moest studeren. Ik weet nog steeds niet zeker of hij dacht dat AI wiskunde vereiste, of dat hij dacht dat AI onzin was en dat het studeren van iets rigoureus me van zulke domme ambities zou genezen.

In feite is de hoeveelheid wiskunde die je nodig hebt als hacker veel minder dan de meeste universitaire afdelingen graag toegeven. Ik denk niet dat je veel meer nodig hebt dan middelbare school wiskunde plus een paar concepten uit de rekentheorie. (Je moet weten wat een n^2 algoritme is als je ze wilt vermijden.) Tenzij je natuurlijk van plan bent wiskundige toepassingen te schrijven. Robotica, bijvoorbeeld, is allemaal wiskunde.

Maar hoewel je wiskunde niet letterlijk nodig hebt voor de meeste soorten hacken, in de zin van het kennen van 1001 trucjes voor het differentiëren van formules, is wiskunde zeer de moeite waard om op zichzelf te bestuderen. Het is een waardevolle bron van metaforen voor bijna elk soort werk.[3] Ik wou dat ik meer wiskunde had gestudeerd op de universiteit om die reden.

Zoals veel mensen, werd ik wiskundig misbruikt als kind. Ik leerde wiskunde te zien als een verzameling formules die noch mooi waren, noch enige relatie hadden met mijn leven (ondanks pogingen om ze te vertalen naar "word problems"), maar die gememoriseerd moesten worden om goed te presteren op tests.

Een van de meest waardevolle dingen die je op de universiteit zou kunnen doen, is leren waar wiskunde echt over gaat. Dit is misschien niet gemakkelijk, omdat veel goede wiskundigen slechte docenten zijn. En hoewel er veel populaire boeken over wiskunde zijn, lijken er weinig goed te zijn. De beste die ik me kan bedenken zijn die van W. W. Sawyer. En natuurlijk Euclides. [4]

Alles

Thomas Huxley zei: "Probeer iets over alles te leren en alles over iets." De meeste universiteiten streven dit ideaal na.

Maar wat is alles? Voor mij betekent het alles wat mensen leren in de loop van eerlijk werk aan moeilijke problemen. Al dit werk blijkt gerelateerd te zijn, in die zin dat ideeën en technieken uit het ene veld vaak succesvol naar andere kunnen worden overgebracht. Zelfs naar andere die behoorlijk ver weg lijken. Ik schrijf bijvoorbeeld essays op dezelfde manier als ik software schrijf: ik ga zitten en produceer een zwakke versie 1 zo snel als ik kan typen, en besteed dan enkele weken aan het herschrijven ervan.

Werken aan moeilijke problemen is op zichzelf niet genoeg. Middeleeuwse alchemisten werkten aan een moeilijk probleem, maar hun aanpak was zo nep dat er weinig van te leren viel, behalve mogelijk over het vermogen van mensen om zichzelf te misleiden. Helaas had het soort AI dat ik op de universiteit probeerde te leren dezelfde fout: een heel moeilijk probleem, onbewust benaderd met hopeloos ontoereikende technieken. Gedurfd? Dichter bij frauduleus.

De sociale wetenschappen zijn ook behoorlijk nep, omdat ze zo sterk worden beïnvloed door intellectuele modes. Als een natuurkundige een collega van 100 jaar geleden zou ontmoeten, zou hij hem enkele nieuwe dingen kunnen leren; als een psycholoog een collega van 100 jaar geleden zou ontmoeten, zouden ze gewoon in een ideologische discussie belanden. Ja, natuurlijk leer je iets door een psychologieklas te volgen. Het punt is dat je meer leert door een klas in een andere afdeling te volgen.

De waardevolle afdelingen, naar mijn mening, zijn wiskunde, de exacte wetenschappen, techniek, geschiedenis (vooral economische en sociale geschiedenis, en de geschiedenis van de wetenschap), architectuur en de klassieken. Een overzichtscursus kunstgeschiedenis kan de moeite waard zijn. Moderne literatuur is belangrijk, maar de manier om erover te leren is gewoon door te lezen. Ik weet niet genoeg over muziek om het te zeggen.

Je kunt de sociale wetenschappen, filosofie en de verschillende afdelingen die onlangs als reactie op politieke druk zijn opgericht, overslaan. Veel van deze velden bespreken zeker belangrijke problemen. Maar de manier waarop ze erover praten is nutteloos. Filosofie bespreekt bijvoorbeeld, onder andere, onze verplichtingen jegens elkaar; maar je kunt hier meer over leren van een wijze grootmoeder of E. B. White dan van een academische filosoof.

Ik spreek hier uit ervaring. Ik had waarschijnlijk beledigd moeten zijn toen mensen lachten om Clinton die zei: "Het hangt ervan af wat de betekenis van het woord 'is' is." Ik volgde ongeveer vijf colleges over de betekenis van "is".

Een andere manier om erachter te komen welke velden de moeite waard zijn om te bestuderen, is door de dropout-grafiek te maken. Ik ken bijvoorbeeld veel mensen die van wiskunde naar informatica zijn overgestapt omdat ze wiskunde te moeilijk vonden, en niemand die het tegenovergestelde deed. Mensen doen geen moeilijke dingen zonder reden; niemand zal aan een moeilijker probleem werken, tenzij het proportioneel (of tenminste log(n)) lonender is. Dus waarschijnlijk is wiskunde de moeite waard om te bestuderen boven informatica. Door vergelijkbare vergelijkingen kun je een grafiek maken van alle afdelingen op een universiteit. Onderaan vind je de onderwerpen met de minste intellectuele inhoud.

Als je deze methode gebruikt, krijg je ongeveer hetzelfde antwoord als ik zojuist gaf.

Taalcursussen zijn een anomalie. Ik denk dat ze beter beschouwd kunnen worden als buitenschoolse activiteiten, zoals pottenbakcursussen. Ze zouden veel nuttiger zijn in combinatie met enige tijd wonen in een land waar de taal wordt gesproken. Op ingeving heb ik Arabisch gestudeerd als eerstejaars. Het was veel werk, en de enige blijvende voordelen waren een vreemd vermogen om Semitische wortels te identificeren en enkele inzichten in hoe mensen woorden herkennen.

Studio kunst en creatieve schrijfcursussen zijn wildcards. Meestal leer je niet veel: je werkt (of werkt niet) gewoon aan wat je wilt, en zit dan rond met "crits" van elkaars creaties onder het vage toezicht van de leraar. Maar schrijven en kunst zijn beide erg moeilijke problemen waar (sommige) mensen eerlijk aan werken, dus ze zijn de moeite waard, vooral als je een goede leraar kunt vinden.

Bazen

Natuurlijk moeten universiteitsstudenten meer nadenken dan alleen over leren. Er zijn ook twee praktische problemen te overwegen: banen en graduate school.

In theorie is een liberale opleiding niet bedoeld om baan training te bieden. Maar iedereen weet dat dit een beetje een leugen is. Hackers op elke universiteit leren praktische vaardigheden, en niet per ongeluk.

Wat je moet leren om een baan te krijgen, hangt af van het soort dat je wilt. Als je in een groot bedrijf wilt werken, leer dan hoe je Blub op Windows hackt. Als je bij een cool klein bedrijf of onderzoekslaboratorium wilt werken, kun je beter Ruby op Linux leren. En als je je eigen bedrijf wilt starten, wat ik denk dat steeds gebruikelijker zal worden, beheers dan de krachtigste tools die je kunt vinden, want je zult in een race verwikkeld zijn met je concurrenten, en zij zullen je paard zijn.

Er is geen directe correlatie tussen de vaardigheden die je op de universiteit moet leren en die je in een baan zult gebruiken. Je moet op de universiteit iets hoger mikken.

Bij trainingen kan een footballspeler 300 pond bankdrukken, ook al hoeft hij nooit zoveel kracht uit te oefenen in de loop van een wedstrijd. Evenzo, als je professoren je dingen proberen te leren die geavanceerder zijn dan wat je nodig hebt in een baan, kan dat niet alleen komen omdat ze academici zijn, losgezongen van de echte wereld. Ze proberen misschien je hersenen te laten trainen.

De programma's die je in colleges schrijft, verschillen op drie cruciale punten van de programma's die je in de echte wereld zult schrijven: ze zijn klein; je kunt vanaf nul beginnen; en het probleem is meestal kunstmatig en vooraf bepaald. In de echte wereld zijn programma's groter, bevatten ze vaak bestaande code en vereisen ze vaak dat je uitzoekt wat het probleem is voordat je het kunt oplossen.

Je hoeft niet te wachten om (of zelfs maar te beginnen met) de universiteit te verlaten om deze vaardigheden te leren. Als je bijvoorbeeld wilt leren omgaan met bestaande code, kun je bijdragen aan open-source projecten. Het soort werkgever waar je voor wilt werken, zal daar net zo van onder de indruk zijn als van goede cijfers voor studieopdrachten.

In bestaande open-source projecten krijg je niet veel oefening in de derde vaardigheid, het beslissen welke problemen op te lossen. Maar er is niets dat je ervan weerhoudt om je eigen nieuwe projecten te starten. En goede werkgevers zullen daar nog meer van onder de indruk zijn.

Welk soort probleem moet je proberen op te lossen? Een manier om dat te beantwoorden is door te vragen wat je nodig hebt als gebruiker. Ik stuitte bijvoorbeeld op een goed algoritme voor spamfiltering omdat ik wilde stoppen met het ontvangen van spam. Nu zou ik graag een maillezer willen die op de een of andere manier voorkomt dat mijn inbox volloopt. Ik gebruik mijn inbox vaak als een todo-lijst. Maar dat is als het gebruiken van een schroevendraaier om flessen te openen; wat je echt wilt, is een flesopener.

Graduate School

Hoe zit het met graduate school? Moet je gaan? En hoe kom je binnen bij een goede?

In principe is graduate school een professionele training in onderzoek, en je zou er niet naartoe moeten gaan, tenzij je onderzoek als carrière wilt doen. En toch gaat de helft van de mensen die een PhD in CS behalen niet de onderzoeks in. Ik ging niet naar graduate school om professor te worden. Ik ging omdat ik meer wilde leren.

Dus als je voornamelijk geïnteresseerd bent in hacken en je gaat naar graduate school, zul je veel andere mensen vinden die zich ook buiten hun element voelen. En als de helft van de mensen om je heen zich op dezelfde manier buiten hun element voelt als jij, ben je dan echt buiten je element?

Er is een fundamenteel probleem in "computerwetenschappen", en het komt naar voren in situaties als deze. Niemand weet zeker wat "onderzoek" zou moeten zijn. Veel onderzoek is hacken dat in de vorm van een academisch paper moest worden geperst om nog een kwantum publicatie te genereren.

Dus het is nogal misleidend om te vragen of je je thuis zult voelen op de graduate school, omdat heel weinig mensen zich helemaal thuis voelen in computerwetenschappen. Het hele veld is ongemakkelijk in zijn eigen vel. Dus het feit dat je voornamelijk geïnteresseerd bent in hacken, mag je er niet van weerhouden om naar de graduate school te gaan. Wees alleen gewaarschuwd dat je veel dingen zult moeten doen die je niet leuk vindt.

Nummer één zal je proefschrift zijn. Bijna iedereen haat zijn proefschrift tegen de tijd dat ze ermee klaar zijn. Het proces produceert inherent een onaangenaam resultaat, zoals een cake gemaakt van volkorenmeel en twaalf uur gebakken. Weinig proefschriften worden met plezier gelezen, vooral niet door hun auteurs.

Maar duizenden voor jou hebben het schrijven van een proefschrift doorstaan. En afgezien daarvan is graduate school dicht bij het paradijs. Veel mensen herinneren het zich als de gelukkigste tijd van hun leven. En bijna alle anderen, inclusief ik, herinneren het zich als een periode die dat wel zou zijn geweest, als ze geen proefschrift hadden hoeven te schrijven. [5]

Het gevaar met graduate school is dat je het enge deel niet van tevoren ziet. PhD-programma's beginnen als college deel 2, met verschillende jaren aan colleges. Dus tegen de tijd dat je de horror van het schrijven van een proefschrift onder ogen ziet, ben je al enkele jaren bezig. Als je nu stopt, ben je een graduate school-dropout, en dat idee zul je waarschijnlijk niet leuk vinden. Toen Robert van de graduate school werd gestuurd voor het schrijven van de Internet worm van 1988, benijdde ik hem enorm omdat hij een uitweg vond zonder het stigma van falen.

Over het algemeen is graduate school waarschijnlijk beter dan de meeste alternatieven. Je ontmoet veel slimme mensen, en je sombere uitstelgedrag zal op zijn minst een krachtige gemeenschappelijke band zijn. En natuurlijk heb je aan het einde een PhD. Dat was ik vergeten. Ik neem aan dat dat iets waard is.

Het grootste voordeel van een PhD (naast dat het de vakbondskaart van de academische wereld is, natuurlijk) is misschien wel dat het je enig basisvertrouwen geeft. De Honeywell thermostaten in mijn huis hebben bijvoorbeeld de meest afschuwelijke UI. Mijn moeder, die hetzelfde model heeft, heeft ijverig een dag besteed aan het lezen van de gebruikershandleiding om de hare te leren bedienen. Ze ging ervan uit dat het probleem bij haar lag. Maar ik kan bij mezelf denken: "Als iemand met een PhD in computerwetenschappen deze thermostaat niet kan begrijpen, moet deze slecht ontworpen zijn."

Als je na deze dubbelzinnige aanbeveling nog steeds naar graduate school wilt, kan ik je solide advies geven over hoe je binnenkomt. Veel van mijn vrienden zijn nu CS-professoren, dus ik heb het inside-verhaal over toelatingen. Het is heel anders dan de universiteit. Op de meeste universiteiten beslissen toelatingsfunctionarissen wie er binnenkomt. Voor PhD-programma's doen de professoren dat. En ze proberen het goed te doen, want de mensen die ze toelaten, zullen voor hen werken.

Blijkbaar doen alleen aanbevelingen er echt toe op de beste scholen. Gestandaardiseerde tests tellen voor niets, en cijfers voor weinig. Het essay is grotendeels een gelegenheid om jezelf te diskwalificeren door iets doms te zeggen. Het enige dat professoren vertrouwen, zijn aanbevelingen, bij voorkeur van mensen die ze kennen. [6]

Dus als je een PhD-programma wilt volgen, is de sleutel om je professoren te imponeren. En van mijn vrienden die professoren zijn, weet ik wat hen imponeert: niet alleen proberen ze te imponeren. Ze zijn niet onder de indruk van studenten die goede cijfers halen of hun onderzoeksassistent willen zijn om naar de graduate school te kunnen gaan. Ze zijn onder de indruk van studenten die goede cijfers halen en hun onderzoeksassistent willen zijn omdat ze oprecht geïnteresseerd zijn in het onderwerp.

Dus het beste wat je op de universiteit kunt doen, of je nu naar de graduate school wilt gaan of gewoon goed wilt worden in hacken, is uitzoeken wat je echt leuk vindt. Het is moeilijk om professoren te misleiden om je naar de graduate school te laten gaan, en onmogelijk om problemen te misleiden om je ze te laten oplossen. De universiteit is waar doen alsof ophoudt te werken. Vanaf dit punt, tenzij je voor een groot bedrijf wilt werken, wat neerkomt op terugkeren naar de middelbare school, is de enige weg vooruit door te doen wat je liefhebt.

Noten

[1] Niemand leek er iets op tegen te hebben, wat aantoont hoe onbelangrijk het Arpanet (dat de Internet werd) was in 1984.

[2] Daarom gaf ik, toen ik werkgever werd, niet om GPAs. Sterker nog, we zochten actief naar mensen die van school waren gestuurd. We hingen ooit posters rond Harvard op met de tekst: "Ben je net van school gestuurd omdat je slecht presteerde in je colleges omdat je al je tijd besteedde aan een eigen project? Kom bij ons werken!" We slaagden erin een jongen te vinden die dat had gedaan, en hij was een geweldige hacker.

Als Harvard studenten een jaar lang schorst, moeten ze banen zoeken. Het idee is om hen te laten zien hoe vreselijk de echte wereld is, zodat ze begrijpen hoe gelukkig ze zijn om op de universiteit te zijn. Dit plan werkte averechts uit voor de jongen die bij ons kwam werken, omdat hij meer plezier had dan hij op school had gehad, en dat jaar meer verdiende met stockopties dan zijn professoren met salaris. Dus in plaats van berouwvol terug te kruipen aan het einde van het jaar, nam hij nog een jaar vrij en ging naar Europa. Hij studeerde uiteindelijk af rond zijn 26e.

[3] Eric Raymond zegt dat de beste metaforen voor hackers te vinden zijn in verzamelingenleer, combinatoriek en grafentheorie.

Trevor Blackwell herinnert je eraan om wiskundelessen te volgen die bedoeld zijn voor wiskunde-majors. "'Wiskunde voor ingenieurs'-lessen waren vreselijk. Sterker nog, elke 'x voor ingenieurs' is vreselijk, waar x wiskunde, recht, schrijven en visueel ontwerp omvat."

[4] Andere sterk aanbevolen boeken: What is Mathematics? , door Courant en Robbins; Geometry and the Imagination door Hilbert en Cohn-Vossen. En voor degenen die geïnteresseerd zijn in grafisch ontwerp, Byrne's Euclid.

[5] Als je het perfecte leven wilde hebben, zou het ding om te doen zijn om naar de graduate school te gaan, in het geheim je proefschrift in het eerste of tweede jaar te schrijven, en je dan de volgende drie jaar gewoon te vermaken, terwijl je hoofdstuk voor hoofdstuk uitbrengt. Dit vooruitzicht zal de monden van graduate studenten doen watertanden, maar ik ken niemand die de discipline heeft gehad om het voor elkaar te krijgen.

[6] Een vriend-professor zegt dat 15-20% van de graduate studenten die ze elk jaar toelaten "long shots" zijn. Maar wat hij bedoelt met long shots zijn mensen wiens aanvragen in alle opzichten perfect zijn, behalve dat niemand in het toelatingscomité de professoren kent die de aanbevelingen hebben geschreven.

Dus als je naar een PhD-programma wilt gaan, is de sleutel om ergens op een universiteit te gaan met echte onderzoeksprofessoren. Anders zul je voor toelatingscommissies een risicovolle weddenschap lijken, hoe goed je ook bent.

Wat impliceert een verrassend maar blijkbaar onvermijdelijk gevolg: kleine liberal arts colleges zijn gedoemd. De meeste slimme middelbare scholieren overwegen op zijn minst om de wetenschappen in te gaan, zelfs als ze er uiteindelijk voor kiezen om dat niet te doen. Waarom naar een universiteit gaan die hun opties beperkt?

Dank aan Trevor Blackwell, Alex Lewin, Jessica Livingston, Robert Morris, Eric Raymond, en verschillende anonieme CS-professoren voor het lezen van concepten van dit essay, en aan de studenten wiens vragen het begonnen.