SOUS-GRADUATION
OriginalMars 2005
(Des parties de cet essai ont commencé comme des réponses à des étudiants qui m'ont écrit avec des questions.)
Récemment, j'ai reçu plusieurs e-mails d'étudiants en informatique me demandant quoi faire à l'université. Je ne suis peut-être pas la meilleure source de conseils, car j'étais étudiant 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, au moins.
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 apprendre beaucoup sur des problèmes spécifiques et intéressants. Cela s'avère équivalent, car chacun 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 faire travailler sur des problèmes difficiles est de travailler sur un projet très engageant.
Il y a de fortes chances que ce projet ne soit pas un devoir de classe. Mon ami Robert a beaucoup appris en écrivant des logiciels réseau quand il était étudiant. L'un de ses projets était de connecter Harvard à l'Arpanet ; c'était l'un des nœuds originaux, mais en 1984, la connexion avait disparu. [1] Non seulement ce travail n'était pas pour un cours, mais parce qu'il a passé tout son temps dessus et a négligé ses études, il a été expulsé de l'école pendant un an. [2] Tout s'est équilibré à la fin, et maintenant il est professeur au MIT. Mais vous serez probablement plus heureux si vous ne poussez pas cela à l'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 le sont, 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 faire du bénévolat en tant qu'assistant de recherche. Les professeurs sont particulièrement intéressés par les personnes qui peuvent résoudre des problèmes ennuyeux de type administration système pour eux, donc c'est un moyen de mettre un pied dans la porte. Ce qu'ils craignent, ce sont les personnes peu fiables et celles qui gonflent leur CV. Il est trop courant qu'un assistant entraîne une augmentation nette du travail. Donc, vous devez faire comprendre que vous signifierez une diminution nette.
Ne soyez pas découragé s'ils disent non. Le rejet est presque toujours moins personnel que ce que le rejeté imagine. Passez simplement au suivant. (Cela s'applique aussi aux rencontres.)
Attention, 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 novateurs pour faire avancer leur carrière, mais il y a plus de concurrence dans des domaines de recherche plus intéressants. Donc, ce que font les professeurs moins ambitieux, c'est produire une série de papiers dont les conclusions sont novatrices parce que personne d'autre ne s'en soucie. Vous feriez mieux d'éviter cela.
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 des choses de mon propre chef, en particulier en essayant de rétroconcevoir le SHRDLU de Winograd. J'étais aussi obsédé par ce programme qu'une mère avec un 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 à l'implémenter.
Dans vos propres projets, vous n'avez pas à vous soucier de la nouveauté (comme le font les professeurs) ou de la rentabilité (comme le font 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 vous souffrez un jour d'insomnie, essayez de lire la littérature technique sur les bases de données) tandis que les applications "futiles" comme les jeux sont souvent très sophistiquées. Je suis sûr qu'il y a des entreprises de jeux qui travaillent sur des produits ayant plus de contenu intellectuel que la recherche dans les neuf dixièmes inférieurs des départements d'informatique universitaires.
Si j'étais à l'université maintenant, je travaillerais probablement sur des graphiques : un jeu en réseau, par exemple, ou un outil pour l'animation 3D. Quand j'étais étudiant, il n'y avait pas assez de cycles disponibles pour rendre les graphiques intéressants, mais il est difficile d'imaginer quelque chose de plus amusant à travailler maintenant.
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 majeure en informatique avant les années 1980 ; jusqu'alors, il fallait se spécialiser en mathématiques appliquées. Mais c'était presque aussi mauvais à 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 une absurdité et que se spécialiser dans quelque chose de rigoureux me guérirait de telles ambitions stupides.
En fait, la quantité de mathématiques dont vous avez besoin en tant que hacker est bien inférieure à ce que la plupart des départements universitaires aiment admettre. Je ne pense pas que vous ayez besoin de beaucoup plus que des mathématiques de 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] Je souhaite avoir étudié plus de mathématiques à l'université pour cette raison.
Comme beaucoup de gens, j'ai été maltraité mathématiquement en tant qu'enfant. J'ai appris à considérer les mathématiques comme un ensemble de formules qui n'étaient ni belles ni avaient de rapport avec ma vie (malgré des tentatives de les traduire en "problèmes de mots"), mais qui devaient être mémorisées pour bien réussir aux tests.
L'une des choses les plus précieuses que vous pourriez faire à l'université serait d'apprendre ce que sont vraiment les mathématiques. Cela peut ne pas être facile, car beaucoup de bons mathématiciens sont de mauvais enseignants. Et bien qu'il existe de nombreux livres populaires sur les mathématiques, peu semblent bons. Les meilleurs auxquels je pense 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 ce travail a tendance à être lié, en ce sens que des idées et des 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 produis une version 1 médiocre aussi vite que je peux taper, puis je passe plusieurs semaines à la réécrire.
Travailler sur des problèmes difficiles n'est pas, en soi, suffisant. Les alchimistes médiévaux travaillaient sur un problème difficile, mais leur approche était si fausse 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 des techniques désespérément inadéquates. Audacieux ? Plutôt proche de la fraude.
Les sciences sociales sont également assez fausses, car elles sont tellement influencées par des 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 (en particulier 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 est simplement de lire. Je ne sais pas assez sur la musique pour en parler.
Vous pouvez sauter les sciences sociales, la philosophie et les divers départements créés récemment en réponse à des pressions politiques. Beaucoup de ces domaines parlent de problèmes importants, c'est certain. Mais la façon dont ils en parlent est inutile. Par exemple, la philosophie parle, entre autres, de nos obligations les uns envers les autres ; mais vous pouvez en apprendre davantage à ce sujet auprès d'une grand-mère sage ou d'E. B. White que d'un philosophe académique.
Je parle ici d'expérience. Je devrais probablement être offensé lorsque les gens se moquaient de Clinton pour avoir dit "Cela dépend de ce que signifie le mot 'est'." J'ai suivi environ cinq cours à l'université sur ce que signifie "est".
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 de nombreuses personnes qui sont passées des mathématiques à l'informatique parce qu'elles trouvaient les mathématiques trop difficiles, et personne qui a fait le contraire. Les gens ne font pas de 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, probablement, les mathématiques valent plus la peine d'être étudiées que l'informatique. Par des comparaisons similaires, vous pouvez établir 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 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 des cours de poterie. Ils seraient beaucoup plus utiles s'ils étaient combinés avec un certain temps passé 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 étaient 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 en studio et d'écriture créative sont des jokers. En général, vous n'apprenez pas grand-chose : vous travaillez (ou ne travaillez pas) sur ce que vous voulez, puis vous vous asseyez pour offrir des "critiques" des créations 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 cela vaut la peine d'être fait, surtout si vous pouvez trouver un bon enseignant.
Emplois
Bien sûr, les étudiants 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 éducation libérale 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é apprennent des compétences pratiques, et pas 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 sympa ou un laboratoire de recherche, vous feriez mieux d'apprendre Ruby sur Linux. Et si vous voulez créer votre propre entreprise, ce que je pense sera de plus en plus courant, maîtrisez les outils les plus puissants que vous pouvez trouver, car vous allez être en compétition avec vos concurrents, et ils seront votre cheval.
Il n'y a pas de corrélation directe entre les compétences que vous devriez apprendre à l'université et celles que vous utiliserez dans un emploi. Vous devriez viser légèrement plus haut à l'université.
Lors des entraînements, un joueur de football peut soulever 300 livres, même s'il n'a 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 qui sont 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 soulever des poids avec votre cerveau.
Les programmes que vous écrivez en classe 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, impliquent souvent du code existant, et nécessitent souvent que vous déterminiez 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 apprendre 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 dans les devoirs de classe.
Dans les projets open-source existants, vous n'obtenez pas beaucoup de pratique sur la troisième compétence, décider quels problèmes résoudre. Mais rien ne vous empêche de commencer de nouveaux projets de votre propre initiative. Et les bons employeurs seront encore plus impressionnés par cela.
Quel type de problème devriez-vous essayer de résoudre ? Une façon de répondre à cela est de demander ce dont vous avez besoin en tant qu'utilisateur. Par exemple, j'ai découvert un bon algorithme pour le filtrage de spam parce que je voulais arrêter de recevoir du spam. Maintenant, ce que je souhaite avoir, c'est un lecteur de mail qui empêche 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 choses à faire. Mais c'est comme utiliser un tournevis pour ouvrir des bouteilles ; ce que l'on veut vraiment, c'est un ouvre-bouteille.
École supérieure
Qu'en est-il de l'école supérieure ? Devriez-vous y aller ? Et comment entrer dans une bonne école ?
En principe, l'école supérieure est une formation professionnelle en recherche, et vous ne devriez pas y aller à moins que vous ne souhaitiez faire de la recherche comme carrière. Et pourtant, la moitié des personnes qui obtiennent un doctorat en informatique ne vont pas dans la recherche. Je ne suis pas allé à l'école supérieure 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 à l'école supérieure, vous trouverez beaucoup d'autres personnes qui sont également hors de leur élément. Et si la moitié des personnes 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 dans "l'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. Beaucoup de recherches sont du hacking qui a dû être compressé sous la forme d'un article académique pour produire un quantum de publication de plus.
Il est donc un peu trompeur de demander si vous vous sentirez chez vous à l'école supérieure, car très peu de gens se sentent vraiment chez eux en informatique. L'ensemble du domaine est mal à l'aise dans sa propre peau. Donc, le fait que vous soyez principalement intéressé par le hacking ne devrait pas vous dissuader d'aller à l'école supérieure. 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 a fini. Le processus tend à produire un résultat désagréable, comme un gâteau fait de farine de blé entier et cuit pendant douze heures. Peu de thèses sont lues avec plaisir, surtout par leurs auteurs.
Mais des milliers de personnes avant vous ont souffert en écrivant une thèse. Et à part cela, l'école supérieure est proche du paradis. Beaucoup de gens s'en souviennent comme la période la plus heureuse de leur vie. Et presque tous les autres, y compris moi, s'en souviennent comme une période qui aurait été, s'ils n'avaient pas eu à écrire une thèse. [5]
Le danger avec l'école supérieure est que vous ne voyez pas la partie effrayante au départ. Les programmes de doctorat commencent comme la deuxième partie de l'université, avec plusieurs années de cours. Donc, au moment où vous faites face à l'horreur d'écrire une thèse, vous êtes déjà plusieurs années dedans. Si vous abandonnez maintenant, vous serez un abandonné de l'école supérieure, et vous n'aimerez probablement pas cette idée. Quand Robert a été expulsé de l'école supérieure pour avoir écrit le ver Internet de 1988, je l'ai énormément envié d'avoir trouvé un moyen de sortir sans le stigma de l'échec.
Dans l'ensemble, l'école supérieure est probablement meilleure que la plupart des alternatives. Vous rencontrez beaucoup de gens intelligents, et votre morosité procrastinatrice sera au moins un puissant lien commun. Et bien sûr, vous avez un doctorat à la fin. J'ai oublié cela. Je suppose que cela vaut quelque chose.
Le plus grand avantage d'un doctorat (en plus d'être la carte de syndicat de l'académie, bien sûr) peut être qu'il vous donne une certaine confiance de base. Par exemple, les thermostats Honeywell dans ma maison ont l'interface utilisateur la plus atroce. Ma mère, qui a le même modèle, a passé 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 penser "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 à l'école supérieure 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 en informatique, donc j'ai l'histoire interne sur les admissions. C'est très différent de l'université. Dans la plupart des universités, les agents d'admission décident qui est accepté. Pour les programmes de doctorat, ce sont les professeurs qui le font. Et ils essaient de bien le 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 principalement une occasion de vous disqualifier en disant quelque chose de stupide. La seule chose en laquelle les professeurs ont 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 d'après mes amis qui sont professeurs, je sais ce qui les impressionne : pas seulement 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 à l'école supérieure. Ils sont impressionnés par les étudiants qui obtiennent de bonnes notes et qui veulent être leurs assistants de recherche parce qu'ils s'intéressent vraiment au sujet.
Donc, la meilleure chose que vous puissiez faire à l'université, que vous souhaitiez entrer à l'école supérieure 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 à l'école supérieure, et impossible de tromper les problèmes pour qu'ils vous laissent les résoudre. L'université est l'endroit où la tromperie cesse de fonctionner. À partir de ce moment, à moins que vous ne souhaitiez travailler pour une grande entreprise, ce qui revient à revenir au lycée, le seul moyen d'avancer est de faire ce que vous aimez.
Notes
[1] Personne ne semble s'en être soucié, 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 GPA. En fait, nous recherchions activement des personnes qui avaient échoué à l'école. Nous avons même mis des affiches autour de Harvard disant "Venez-vous d'être expulsé pour avoir mal réussi vos 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 avait été dans ce cas, et c'était un excellent hacker.
Lorsque Harvard expulse des étudiants pendant un an, ils doivent trouver des emplois. L'idée est de leur montrer à quel point le monde réel est horrible, afin qu'ils comprennent à quel point ils ont de la chance d'être à l'université. Ce plan a échoué avec le gars qui est venu travailler pour nous, car il s'est amusé plus qu'il ne l'avait fait à l'école, et a gagné plus cette année-là grâce aux options d'achat d'actions que n'importe lequel de ses professeurs en salaire. Donc, au lieu de revenir en rampant repentant à la fin de l'année, il a pris une autre année de congé et est allé en Europe. Il a finalement obtenu son diplôme vers 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 'mathématiques pour ingénieurs' étaient terriblement mauvais. En fait, tout cours 'x pour ingénieurs' est mauvais, où x inclut les mathématiques, le droit, l'écriture et le design visuel."
[4] D'autres livres hautement recommandés : Qu'est-ce que les mathématiques ?, par Courant et Robbins ; Géométrie et imagination par Hilbert et Cohn-Vossen. Et pour ceux qui s'intéressent au design graphique, Euclide de Byrne.
[5] Si vous vouliez avoir la vie parfaite, la chose à faire serait d'aller à l'école supérieure, d'écrire secrètement votre thèse dans la première ou la deuxième année, puis de simplement profiter des trois années suivantes, en écrivant un chapitre à la fois. Cette perspective fera saliver les étudiants en doctorat, mais je ne connais personne qui ait eu la discipline de le faire.
[6] Un ami professeur dit que 15 à 20 % des étudiants en doctorat qu'ils admettent chaque année sont des "longs shots". Mais ce qu'il entend par longs shots, ce sont des personnes dont les candidatures sont parfaites à tous égards, sauf que personne dans le comité d'admission ne connaît les professeurs qui ont écrit les recommandations.
Donc, si vous voulez entrer à l'école supérieure dans les sciences, vous devez aller à l'université quelque part avec de vrais professeurs de recherche. Sinon, vous apparaîtrez comme un pari risqué pour les comités d'admission, peu importe à quel point vous êtes bon.
Ce qui implique une conséquence surprenante mais apparemment inévitable : les petites universités d'arts libéraux sont condamnées. La plupart des étudiants du secondaire intelligents envisagent au moins d'entrer dans les sciences, même s'ils choisissent finalement de ne pas le faire. Pourquoi aller dans une université qui limite leurs options ?
Merci à Trevor Blackwell, Alex Lewin, Jessica Livingston, Robert Morris, Eric Raymond, et plusieurs professeurs d'informatique anonymes pour avoir lu des brouillons de ceci, et aux étudiants dont les questions ont été à l'origine de cela.