L'Undergraduation

Envie de créer une startup ? Faites-vous financer par Y Combinator.


Mars 2005

(Certaines parties de cet essai sont nées de réponses à des questions d'étudiants qui m'ont écrit.)

Récemment, j'ai reçu plusieurs e-mails d'étudiants de premier cycle en informatique me demandant quoi faire à l'université. Je ne suis peut-être pas la meilleure source de conseils, car j'étais spécialisé en philosophie à l'université. Mais j'ai suivi tellement de cours d'informatique que la plupart des étudiants en informatique pensaient que j'en étais un. J'étais certainement un hacker, du moins.

Le Hacking

Que devriez-vous faire à l'université pour devenir un bon hacker ? Il y a deux choses principales que vous pouvez faire : devenir très bon en programmation, et en apprendre beaucoup sur des problèmes spécifiques et intéressants. Ces deux choses s'avèrent équivalentes, car l'une vous pousse à faire l'autre.

La façon d'être bon en programmation est de travailler (a) beaucoup (b) sur des problèmes difficiles. Et la façon de vous forcer à travailler sur des problèmes difficiles est de travailler sur un projet très captivant.

Il y a de fortes chances que ce projet ne soit pas un devoir de cours. Mon ami Robert a beaucoup appris en écrivant des logiciels réseau lorsqu'il était étudiant de premier cycle. L'un de ses projets était de connecter Harvard à l'Arpanet ; elle avait été l'un des nœuds originaux, mais en 1984, la connexion était morte. [1] Non seulement ce travail n'était pas pour un cours, mais parce qu'il y consacrait tout son temps et négligeait ses études, il a été renvoyé de l'école pendant un an. [2] Tout s'est arrangé à la fin, et maintenant il est professeur au MIT. Mais vous serez probablement plus heureux si vous n'allez pas à cet extrême ; cela lui a causé beaucoup d'inquiétude à l'époque.

Une autre façon d'être bon en programmation est de trouver d'autres personnes qui sont bonnes dans ce domaine, et d'apprendre ce qu'elles savent. Les programmeurs ont tendance à se regrouper en tribus selon le type de travail qu'ils font et les outils qu'ils utilisent, et certaines tribus sont plus intelligentes que d'autres. Regardez autour de vous et voyez sur quoi les gens intelligents semblent travailler ; il y a généralement une raison.

Certaines des personnes les plus intelligentes autour de vous sont des professeurs. Donc, une façon de trouver un travail intéressant est de vous porter volontaire comme assistant de recherche. Les professeurs sont particulièrement intéressés par les personnes qui peuvent résoudre pour eux des problèmes fastidieux de type administration système, c'est donc un moyen de mettre un pied dans la porte. Ce qu'ils craignent, ce sont les tire-au-flanc et ceux qui gonflent leur CV. Il est trop courant qu'un assistant entraîne une augmentation nette du travail. Vous devez donc faire comprendre que vous entraînerez une diminution nette.

Ne vous découragez pas s'ils disent non. Le rejet est presque toujours moins personnel que le rejeté ne l'imagine. Passez simplement au suivant. (Cela s'applique aussi aux rencontres.)

Méfiez-vous, car bien que la plupart des professeurs soient intelligents, tous ne travaillent pas sur des sujets intéressants. Les professeurs doivent publier des résultats inédits pour faire avancer leur carrière, mais la concurrence est plus forte dans les domaines de recherche plus intéressants. Ce que font les professeurs moins ambitieux, c'est donc de produire une série d'articles dont les conclusions sont inédites parce que personne d'autre ne s'en soucie. Vous feriez mieux de les éviter.

Je n'ai jamais travaillé comme assistant de recherche, donc je me sens un peu malhonnête de recommander cette voie. J'ai appris à programmer en écrivant mes propres choses, en particulier en essayant de faire de la rétro-ingénierie sur SHRDLU de Winograd. J'étais aussi obsédé par ce programme qu'une mère par son nouveau-né.

Quels que soient les inconvénients de travailler seul, l'avantage est que le projet est entièrement le vôtre. Vous n'avez jamais à faire de compromis ou à demander la permission à quiconque, et si vous avez une nouvelle idée, vous pouvez simplement vous asseoir et commencer à la mettre en œuvre.

Dans vos propres projets, vous n'avez pas à vous soucier de la nouveauté (comme les professeurs) ou de la rentabilité (comme les entreprises). Tout ce qui compte, c'est la difficulté technique du projet, et cela n'a aucune corrélation avec la nature de l'application. Les applications « sérieuses » comme les bases de données sont souvent triviales et ennuyeuses techniquement (si jamais vous souffrez d'insomnie, essayez de lire la littérature technique sur les bases de données) tandis que les applications « frivoles » comme les jeux sont souvent très sophistiquées. Je suis sûr qu'il existe des entreprises de jeux qui travaillent sur des produits avec plus de contenu intellectuel que la recherche des neuf dixièmes inférieurs des départements d'informatique universitaires.

Si j'étais à l'université maintenant, je travaillerais probablement sur le graphisme : un jeu en réseau, par exemple, ou un outil d'animation 3D. Quand j'étais étudiant de premier cycle, il n'y avait pas assez de cycles pour rendre le graphisme intéressant, mais il est difficile d'imaginer quelque chose de plus amusant à travailler maintenant.

Les Mathématiques

Quand j'étais à l'université, beaucoup de professeurs croyaient (ou du moins souhaitaient) que l'informatique était une branche des mathématiques. Cette idée était la plus forte à Harvard, où il n'y avait même pas de spécialisation en informatique avant les années 1980 ; jusqu'alors, il fallait se spécialiser en mathématiques appliquées. Mais c'était presque aussi grave à Cornell. Quand j'ai dit au redoutable professeur Conway que j'étais intéressé par l'IA (un sujet brûlant à l'époque), il m'a dit que je devrais me spécialiser en mathématiques. Je ne suis toujours pas sûr s'il pensait que l'IA nécessitait des mathématiques, ou s'il pensait que l'IA était absurde et qu'une spécialisation rigoureuse me guérirait de telles ambitions stupides.

En fait, la quantité de mathématiques dont vous avez besoin en tant que hacker est bien moindre que ce que la plupart des départements universitaires aiment admettre. Je ne pense pas que vous ayez besoin de beaucoup plus que les mathématiques du lycée plus quelques concepts de la théorie de la computation. (Vous devez savoir ce qu'est un algorithme en n^2 si vous voulez éviter d'en écrire.) À moins que vous ne prévoyiez d'écrire des applications mathématiques, bien sûr. La robotique, par exemple, est entièrement mathématique.

Mais bien que vous n'ayez pas littéralement besoin de mathématiques pour la plupart des types de hacking, dans le sens de connaître 1001 astuces pour différencier des formules, les mathématiques valent vraiment la peine d'être étudiées pour elles-mêmes. C'est une source précieuse de métaphores pour presque tout type de travail. [3] J'aurais aimé étudier plus de mathématiques à l'université pour cette raison.

Comme beaucoup de gens, j'ai été maltraité mathématiquement étant enfant. J'ai appris à considérer les mathématiques comme une collection de formules qui n'étaient ni belles ni liées à ma vie (malgré les tentatives de les traduire en « problèmes à énoncé »), mais qui devaient être mémorisées pour réussir les tests.

L'une des choses les plus précieuses que vous pourriez faire à l'université serait d'apprendre ce qu'est vraiment la mathématique. Ce n'est peut-être pas facile, car beaucoup de bons mathématiciens sont de mauvais professeurs. Et bien qu'il existe de nombreux livres populaires sur les mathématiques, peu semblent bons. Les meilleurs auxquels je puisse penser sont ceux de W. W. Sawyer. Et bien sûr, Euclide. [4]

Tout

Thomas Huxley a dit : « Essayez d'apprendre quelque chose sur tout et tout sur quelque chose. » La plupart des universités visent cet idéal.

Mais qu'est-ce que « tout » ? Pour moi, cela signifie tout ce que les gens apprennent en travaillant honnêtement sur des problèmes difficiles. Tout travail de ce type a tendance à être lié, en ce sens que les idées et les techniques d'un domaine peuvent souvent être transplantées avec succès à d'autres. Même à d'autres qui semblent assez éloignés. Par exemple, j'écris des essais de la même manière que j'écris des logiciels : je m'assois et je produis une version 1 boiteuse aussi vite que je peux taper, puis je passe plusieurs semaines à la réécrire.

Travailler sur des problèmes difficiles ne suffit pas en soi. Les alchimistes médiévaux travaillaient sur un problème difficile, mais leur approche était si fallacieuse qu'il y avait peu à apprendre en l'étudiant, sauf peut-être sur la capacité des gens à se tromper eux-mêmes. Malheureusement, le type d'IA que j'essayais d'apprendre à l'université avait le même défaut : un problème très difficile, abordé avec une désinvolture et des techniques désespérément inadéquates. Audacieux ? Plutôt frauduleux.

Les sciences sociales sont aussi assez fallacieuses, car elles sont tellement influencées par les modes intellectuelles. Si un physicien rencontrait un collègue d'il y a 100 ans, il pourrait lui enseigner de nouvelles choses ; si un psychologue rencontrait un collègue d'il y a 100 ans, ils se lanceraient simplement dans une dispute idéologique. Oui, bien sûr, vous apprendrez quelque chose en suivant un cours de psychologie. Le fait est que vous apprendrez plus en suivant un cours dans un autre département.

Les départements qui en valent la peine, à mon avis, sont les mathématiques, les sciences dures, l'ingénierie, l'histoire (surtout l'histoire économique et sociale, et l'histoire des sciences), l'architecture et les classiques. Un cours d'introduction à l'histoire de l'art peut être utile. La littérature moderne est importante, mais la façon d'en apprendre davantage est simplement de lire. Je n'en sais pas assez sur la musique pour me prononcer.

Vous pouvez ignorer les sciences sociales, la philosophie et les divers départements créés récemment en réponse aux pressions politiques. Beaucoup de ces domaines parlent de problèmes importants, certes. Mais la façon dont ils en parlent est inutile. Par exemple, la philosophie parle, entre autres choses, de nos obligations les uns envers les autres ; mais vous pouvez en apprendre plus à ce sujet auprès d'une grand-mère sage ou d'E. B. White que d'un philosophe universitaire.

Je parle ici par expérience. J'aurais probablement dû être offensé quand les gens ont ri de Clinton pour avoir dit : « Cela dépend de ce que le mot 'est' signifie. » J'ai suivi environ cinq cours à l'université sur ce que le mot « est » signifie.

Une autre façon de déterminer quels domaines valent la peine d'être étudiés est de créer le graphique des abandons. Par exemple, je connais beaucoup de gens qui sont passés des mathématiques à l'informatique parce qu'ils trouvaient les mathématiques trop difficiles, et personne qui ait fait l'inverse. Les gens ne font pas des choses difficiles gratuitement ; personne ne travaillera sur un problème plus difficile à moins qu'il ne soit proportionnellement (ou au moins log(n)) plus gratifiant. Donc, les mathématiques valent probablement plus la peine d'être étudiées que l'informatique. Par des comparaisons similaires, vous pouvez créer un graphique de tous les départements d'une université. En bas, vous trouverez les sujets avec le moins de contenu intellectuel.

Si vous utilisez cette méthode, vous obtiendrez à peu près la même réponse que celle que je viens de donner.

Les cours de langue sont une anomalie. Je pense qu'ils sont mieux considérés comme des activités parascolaires, comme les cours de poterie. Ils seraient bien plus utiles s'ils étaient combinés avec un séjour dans un pays où la langue est parlée. Sur un coup de tête, j'ai étudié l'arabe en première année. C'était beaucoup de travail, et les seuls avantages durables ont été une étrange capacité à identifier les racines sémitiques et quelques aperçus sur la façon dont les gens reconnaissent les mots.

Les cours d'art plastique et d'écriture créative sont des jokers. Habituellement, on ne vous apprend pas grand-chose : vous travaillez (ou ne travaillez pas) sur ce que vous voulez, puis vous vous asseyez et offrez des « critiques » des créations des uns et des autres sous la vague supervision de l'enseignant. Mais l'écriture et l'art sont tous deux des problèmes très difficiles sur lesquels (certaines) personnes travaillent honnêtement, donc ils valent la peine d'être faits, surtout si vous pouvez trouver un bon professeur.

Les Emplois

Bien sûr, les étudiants universitaires doivent penser à plus que simplement apprendre. Il y a aussi deux problèmes pratiques à considérer : les emplois et les études supérieures.

En théorie, une formation généraliste n'est pas censée fournir une formation professionnelle. Mais tout le monde sait que c'est un peu un mensonge. Les hackers de chaque université acquièrent des compétences pratiques, et non par accident.

Ce que vous devriez apprendre pour obtenir un emploi dépend du type que vous voulez. Si vous voulez travailler dans une grande entreprise, apprenez à hacker Blub sur Windows. Si vous voulez travailler dans une petite entreprise cool ou un laboratoire de recherche, vous ferez mieux d'apprendre Ruby sur Linux. Et si vous voulez créer votre propre entreprise, ce qui, je pense, sera de plus en plus courant, maîtrisez les outils les plus puissants que vous puissiez trouver, car vous serez dans une course contre vos concurrents, et ils seront votre cheval de course.

Il n'y a pas de corrélation directe entre les compétences que vous devriez acquérir à l'université et celles que vous utiliserez dans un emploi. Vous devriez viser un peu plus haut à l'université.

Lors des entraînements, un joueur de football américain peut soulever 136 kg au développé couché, même s'il n'aura peut-être jamais à exercer une force aussi importante au cours d'un match. De même, si vos professeurs essaient de vous faire apprendre des choses plus avancées que ce dont vous aurez besoin dans un emploi, ce n'est peut-être pas seulement parce qu'ils sont des universitaires, détachés du monde réel. Ils essaient peut-être de vous faire muscler votre cerveau.

Les programmes que vous écrivez en cours diffèrent de trois manières critiques de ceux que vous écrirez dans le monde réel : ils sont petits ; vous partez de zéro ; et le problème est généralement artificiel et prédéterminé. Dans le monde réel, les programmes sont plus grands, ont tendance à impliquer du code existant, et vous obligent souvent à comprendre quel est le problème avant de pouvoir le résoudre.

Vous n'avez pas à attendre de quitter (ou même d'entrer) l'université pour acquérir ces compétences. Si vous voulez apprendre à gérer du code existant, par exemple, vous pouvez contribuer à des projets open-source. Le type d'employeur pour lequel vous voulez travailler sera aussi impressionné par cela que par de bonnes notes aux devoirs de cours.

Dans les projets open-source existants, vous ne pratiquez pas beaucoup la troisième compétence, celle de décider quels problèmes résoudre. Mais rien ne vous empêche de démarrer de nouveaux projets personnels. Et les bons employeurs seront encore plus impressionnés par cela.

Quel genre de problème devriez-vous essayer de résoudre ? Une façon de répondre est de demander ce dont vous avez besoin en tant qu'utilisateur. Par exemple, je suis tombé sur un bon algorithme de filtrage de spam parce que je voulais arrêter de recevoir du spam. Maintenant, ce que je souhaiterais avoir, c'est un client de messagerie qui empêcherait d'une manière ou d'une autre ma boîte de réception de se remplir. J'ai tendance à utiliser ma boîte de réception comme une liste de tâches. Mais c'est comme utiliser un tournevis pour ouvrir des bouteilles ; ce que l'on veut vraiment, c'est un décapsuleur.

Les Études Supérieures

Qu'en est-il des études supérieures ? Devriez-vous y aller ? Et comment entrer dans une bonne ?

En principe, les études supérieures sont une formation professionnelle à la recherche, et vous ne devriez pas y aller à moins de vouloir faire de la recherche une carrière. Et pourtant, la moitié des personnes qui obtiennent un doctorat en informatique ne se lancent pas dans la recherche. Je ne suis pas allé aux études supérieures pour devenir professeur. J'y suis allé parce que je voulais en apprendre davantage.

Donc, si vous êtes principalement intéressé par le hacking et que vous allez aux études supérieures, vous trouverez beaucoup d'autres personnes qui sont également hors de leur élément. Et si la moitié des gens autour de vous sont hors de leur élément de la même manière que vous, êtes-vous vraiment hors de votre élément ?

Il y a un problème fondamental en « informatique », et il se manifeste dans des situations comme celle-ci. Personne n'est sûr de ce que la « recherche » est censée être. Une grande partie de la recherche est du hacking qui a dû être compressé sous la forme d'un article académique pour produire un quantum de publication supplémentaire.

Il est donc un peu trompeur de demander si vous vous sentirez à l'aise aux études supérieures, car très peu de gens se sentent tout à fait à l'aise en informatique. Le domaine entier est mal à l'aise dans sa propre peau. Le fait que vous soyez principalement intéressé par le hacking ne devrait donc pas vous dissuader d'aller aux études supérieures. Soyez simplement averti que vous devrez faire beaucoup de choses que vous n'aimez pas.

La première sera votre thèse. Presque tout le monde déteste sa thèse au moment où il la termine. Le processus tend intrinsèquement à produire un résultat désagréable, comme un gâteau fait de farine complète et cuit pendant douze heures. Peu de thèses sont lues avec plaisir, surtout par leurs auteurs.

Mais des milliers avant vous ont souffert en écrivant une thèse. Et à part cela, les études supérieures sont proches du paradis. Beaucoup de gens s'en souviennent comme de la période la plus heureuse de leur vie. Et presque tous les autres, y compris moi, s'en souviennent comme d'une période qui l'aurait été, s'ils n'avaient pas eu à écrire une thèse. [5]

Le danger avec les études supérieures est que vous ne voyez pas la partie effrayante au début. Les programmes de doctorat commencent comme la deuxième partie de l'université, avec plusieurs années de cours. Ainsi, au moment où vous faites face à l'horreur d'écrire une thèse, vous êtes déjà engagé depuis plusieurs années. Si vous abandonnez maintenant, vous serez un décrocheur des études supérieures, et vous n'aimerez probablement pas cette idée. Quand Robert a été renvoyé des études supérieures pour avoir écrit le ver Internet de 1988, je l'ai énormément envié d'avoir trouvé un moyen de s'en sortir sans le stigmate de l'échec.

Dans l'ensemble, les études supérieures sont probablement meilleures que la plupart des alternatives. Vous rencontrez beaucoup de gens intelligents, et votre procrastination morose sera au moins un puissant lien commun. Et bien sûr, vous avez un doctorat à la fin. J'avais oublié cela. Je suppose que cela vaut quelque chose.

Le plus grand avantage d'un doctorat (outre le fait d'être la carte syndicale du monde universitaire, bien sûr) est peut-être qu'il vous donne une certaine confiance de base. Par exemple, les thermostats Honeywell de ma maison ont l'interface utilisateur la plus atroce. Ma mère, qui a le même modèle, a passé diligemment une journée à lire le manuel d'utilisation pour apprendre à faire fonctionner le sien. Elle a supposé que le problème venait d'elle. Mais je peux me dire : « Si quelqu'un avec un doctorat en informatique ne peut pas comprendre ce thermostat, il doit être mal conçu. »

Si vous voulez toujours aller aux études supérieures après cette recommandation équivoque, je peux vous donner des conseils solides sur la façon d'y entrer. Beaucoup de mes amis sont maintenant professeurs d'informatique, donc j'ai des informations de l'intérieur sur les admissions. C'est assez différent de l'université. Dans la plupart des universités, ce sont les responsables des admissions qui décident qui est admis. Pour les programmes de doctorat, ce sont les professeurs. Et ils essaient de bien faire, car les personnes qu'ils admettent vont travailler pour eux.

Apparemment, seules les recommandations comptent vraiment dans les meilleures écoles. Les tests standardisés ne comptent pour rien, et les notes pour peu. L'essai est surtout une occasion de vous disqualifier en disant quelque chose de stupide. La seule chose à laquelle les professeurs font confiance, ce sont les recommandations, de préférence de personnes qu'ils connaissent. [6]

Donc, si vous voulez entrer dans un programme de doctorat, la clé est d'impressionner vos professeurs. Et de mes amis qui sont professeurs, je sais ce qui les impressionne : pas seulement le fait d'essayer de les impressionner. Ils ne sont pas impressionnés par les étudiants qui obtiennent de bonnes notes ou qui veulent être leurs assistants de recherche pour pouvoir entrer aux études supérieures. Ils sont impressionnés par les étudiants qui obtiennent de bonnes notes et qui veulent être leurs assistants de recherche parce qu'ils sont réellement intéressés par le sujet.

Donc, la meilleure chose que vous puissiez faire à l'université, que vous vouliez entrer aux études supérieures ou simplement être bon en hacking, est de découvrir ce que vous aimez vraiment. Il est difficile de tromper les professeurs pour qu'ils vous laissent entrer aux études supérieures, et impossible de tromper les problèmes pour qu'ils vous laissent les résoudre. L'université est l'endroit où faire semblant cesse de fonctionner. À partir de ce moment, à moins que vous ne vouliez travailler pour une grande entreprise, ce qui est comme revenir au lycée, la seule voie à suivre est de faire ce que vous aimez.

Notes

[1] Personne ne semblait s'en soucier, ce qui montre à quel point l'Arpanet (qui est devenu Internet) était peu important jusqu'en 1984.

[2] C'est pourquoi, lorsque je suis devenu employeur, je ne me souciais pas des moyennes générales (GPA). En fait, nous recherchions activement des personnes qui avaient échoué à l'école. Nous avons un jour affiché des posters autour de Harvard disant : « Vous venez d'être renvoyé pour de mauvais résultats en cours parce que vous avez passé tout votre temps à travailler sur un projet personnel ? Venez travailler pour nous ! » Nous avons réussi à trouver un jeune qui était dans ce cas, et c'était un excellent hacker.

Quand Harvard renvoie des étudiants de premier cycle pour un an, ils doivent trouver un emploi. L'idée est de leur montrer à quel point le monde réel est horrible, afin qu'ils comprennent la chance qu'ils ont d'être à l'université. Ce plan s'est retourné contre eux avec le gars qui est venu travailler pour nous, car il s'est plus amusé qu'à l'école, et a gagné plus cette année-là grâce aux stock-options que n'importe lequel de ses professeurs en salaire. Ainsi, au lieu de revenir repentant à la fin de l'année, il a pris une autre année sabbatique et est parti en Europe. Il a finalement obtenu son diplôme vers l'âge de 26 ans.

[3] Eric Raymond dit que les meilleures métaphores pour les hackers se trouvent dans la théorie des ensembles, la combinatoire et la théorie des graphes.

Trevor Blackwell vous rappelle de suivre des cours de mathématiques destinés aux étudiants en mathématiques. « Les cours de