GRADUAÇÃO
OriginalMarço de 2005
(Partes deste ensaio começaram como respostas a alunos que me escreveram com perguntas.)
Recentemente, recebi vários e-mails de alunos de ciência da computação perguntando o que fazer na faculdade. Eu talvez não seja a melhor fonte de conselhos, porque fui estudante de filosofia na faculdade. Mas fiz tantas aulas de CS que a maioria dos alunos de CS achava que eu era um. Eu certamente era um hacker, pelo menos.
Hacking
O que você deve fazer na faculdade para se tornar um bom hacker? Existem duas coisas principais que você pode fazer: se tornar muito bom em programação e aprender muito sobre problemas específicos e interessantes. Isso acaba sendo equivalente, porque cada um impulsiona você a fazer o outro.
A maneira de ser bom em programação é trabalhar (a) muito (b) em problemas difíceis. E a maneira de se fazer trabalhar em problemas difíceis é trabalhar em algum projeto muito envolvente.
As chances são de que esse projeto não será uma tarefa de classe. Meu amigo Robert aprendeu muito escrevendo software de rede quando era um graduando. Um de seus projetos foi conectar Harvard à Arpanet; tinha sido um dos nós originais, mas em 1984 a conexão havia morrido. [1] Não apenas esse trabalho não era para uma aula, mas porque ele passou todo o seu tempo nisso e negligenciou seus estudos, foi expulso da escola por um ano. [2] No final, tudo se igualou, e agora ele é professor no MIT. Mas você provavelmente será mais feliz se não for a esse extremo; isso lhe causou muita preocupação na época.
Outra maneira de ser bom em programação é encontrar outras pessoas que são boas nisso e aprender o que elas sabem. Programadores tendem a se agrupar em tribos de acordo com o tipo de trabalho que fazem e as ferramentas que usam, e algumas tribos são mais inteligentes do que outras. Olhe ao seu redor e veja no que as pessoas inteligentes parecem estar trabalhando; geralmente há uma razão.
Algumas das pessoas mais inteligentes ao seu redor são professores. Então, uma maneira de encontrar trabalho interessante é se voluntariar como assistente de pesquisa. Os professores estão especialmente interessados em pessoas que podem resolver problemas tediosos de administração de sistemas para eles, então essa é uma maneira de conseguir uma oportunidade. O que eles temem são pessoas descompromissadas e que inflacionam currículos. É muito comum que um assistente resulte em um aumento líquido de trabalho. Então você tem que deixar claro que você significará uma diminuição líquida.
Não se desanime se eles disserem não. A rejeição é quase sempre menos pessoal do que o rejeitado imagina. Apenas passe para o próximo. (Isto se aplica a encontros também.)
Cuidado, porque embora a maioria dos professores seja inteligente, nem todos eles trabalham em coisas interessantes. Os professores têm que publicar resultados novos para avançar em suas carreiras, mas há mais competição em áreas de pesquisa mais interessantes. Então, o que professores menos ambiciosos fazem é produzir uma série de artigos cujas conclusões são novas porque ninguém mais se importa com elas. É melhor evitar esses.
Eu nunca trabalhei como assistente de pesquisa, então me sinto um pouco desonesto recomendando esse caminho. Eu aprendi a programar escrevendo coisas minhas, particularmente tentando reverter o SHRDLU de Winograd. Eu estava tão obcecado por esse programa quanto uma mãe com um novo bebê.
Quaisquer que sejam as desvantagens de trabalhar sozinho, a vantagem é que o projeto é todo seu. Você nunca precisa comprometer ou pedir permissão a ninguém, e se você tiver uma nova ideia, pode simplesmente sentar e começar a implementá-la.
Em seus próprios projetos, você não precisa se preocupar com novidade (como os professores fazem) ou lucratividade (como as empresas fazem). Tudo o que importa é quão difícil o projeto é tecnicamente, e isso não tem correlação com a natureza da aplicação. Aplicações "sérias" como bancos de dados são frequentemente triviais e monótonas tecnicamente (se você já sofreu de insônia, tente ler a literatura técnica sobre bancos de dados) enquanto aplicações "frívolas" como jogos são frequentemente muito sofisticadas. Tenho certeza de que existem empresas de jogos por aí trabalhando em produtos com mais conteúdo intelectual do que a pesquisa nos nove décimos inferiores dos departamentos de CS universitários.
Se eu estivesse na faculdade agora, provavelmente trabalharia em gráficos: um jogo de rede, por exemplo, ou uma ferramenta para animação 3D. Quando eu era um graduando, não havia ciclos suficientes para tornar gráficos interessantes, mas é difícil imaginar algo mais divertido para trabalhar agora.
Matemática
Quando eu estava na faculdade, muitos dos professores acreditavam (ou pelo menos desejavam) que a ciência da computação era um ramo da matemática. Essa ideia era mais forte em Harvard, onde não havia nem mesmo um curso de CS até a década de 1980; até então, era necessário se formar em matemática aplicada. Mas era quase tão ruim em Cornell. Quando eu disse ao temido Professor Conway que estava interessado em IA (um tópico quente na época), ele me disse que eu deveria me formar em matemática. Ainda não tenho certeza se ele achava que IA exigia matemática, ou se ele achava que IA era uma bobagem e que se formar em algo rigoroso me curaria de tais ambições estúpidas.
Na verdade, a quantidade de matemática que você precisa como hacker é muito menor do que a maioria dos departamentos universitários gosta de admitir. Não acho que você precise de muito mais do que matemática do ensino médio mais alguns conceitos da teoria da computação. (Você precisa saber o que é um algoritmo n^2 se quiser evitar escrevê-los.) A menos que você esteja planejando escrever aplicações matemáticas, é claro. Robótica, por exemplo, é toda matemática.
Mas enquanto você não precisa literalmente de matemática para a maioria dos tipos de hacking, no sentido de conhecer 1001 truques para diferenciar fórmulas, a matemática vale muito a pena estudar por si mesma. É uma fonte valiosa de metáforas para quase qualquer tipo de trabalho.[3] Eu gostaria de ter estudado mais matemática na faculdade por essa razão.
Como muitas pessoas, fui maltratado matematicamente quando criança. Eu aprendi a pensar na matemática como uma coleção de fórmulas que eram nem belas nem tinham qualquer relação com minha vida (apesar das tentativas de traduzi-las em "problemas de palavras"), mas que tinham que ser memorizadas para ter um bom desempenho nos testes.
Uma das coisas mais valiosas que você poderia fazer na faculdade seria aprender sobre o que a matemática realmente se trata. Isso pode não ser fácil, porque muitos bons matemáticos são maus professores. E embora haja muitos livros populares sobre matemática, poucos parecem bons. O melhor que consigo pensar são os de W. W. Sawyer. E, claro, Euclides. [4]
Tudo
Thomas Huxley disse: "Tente aprender algo sobre tudo e tudo sobre algo." A maioria das universidades visa a esse ideal.
Mas o que é tudo? Para mim, significa tudo o que as pessoas aprendem no curso de trabalhar honestamente em problemas difíceis. Todo esse trabalho tende a estar relacionado, na medida em que ideias e técnicas de um campo podem frequentemente ser transplantadas com sucesso para outros. Mesmo outros que parecem bastante distantes. Por exemplo, eu escrevo ensaios da mesma forma que escrevo software: eu me sento e produzo uma versão 1 ruim o mais rápido que consigo digitar, depois passo várias semanas reescrevendo.
Trabalhar em problemas difíceis não é, por si só, suficiente. Alquimistas medievais estavam trabalhando em um problema difícil, mas sua abordagem era tão falsa que havia pouco a aprender estudando-a, exceto possivelmente sobre a capacidade das pessoas de se iludirem. Infelizmente, o tipo de IA que eu estava tentando aprender na faculdade tinha a mesma falha: um problema muito difícil, abordado de forma alegre com técnicas desesperadamente inadequadas. Ousado? Mais próximo de fraudulento.
As ciências sociais também são bastante falsas, porque são muito influenciadas por modas intelectuais. Se um físico encontrasse um colega de 100 anos atrás, ele poderia ensinar algumas coisas novas; se um psicólogo encontrasse um colega de 100 anos atrás, eles apenas entrariam em uma discussão ideológica. Sim, claro, você aprenderá algo ao fazer uma aula de psicologia. O ponto é que você aprenderá mais ao fazer uma aula em outro departamento.
Os departamentos que valem a pena, na minha opinião, são matemática, as ciências duras, engenharia, história (especialmente história econômica e social, e a história da ciência), arquitetura e os clássicos. Um curso introdutório em história da arte pode ser valioso. A literatura moderna é importante, mas a maneira de aprender sobre isso é apenas ler. Eu não sei o suficiente sobre música para dizer.
Você pode pular as ciências sociais, filosofia e os vários departamentos criados recentemente em resposta a pressões políticas. Muitos desses campos falam sobre problemas importantes, certamente. Mas a maneira como falam sobre eles é inútil. Por exemplo, a filosofia fala, entre outras coisas, sobre nossas obrigações uns com os outros; mas você pode aprender mais sobre isso com uma avó sábia ou E. B. White do que com um filósofo acadêmico.
Falo aqui por experiência. Eu provavelmente deveria ter ficado ofendido quando as pessoas riram de Clinton por dizer "Depende do que o significado da palavra 'é' é." Eu fiz cerca de cinco aulas na faculdade sobre o que o significado de "é" é.
Outra maneira de descobrir quais campos valem a pena estudar é criar o gráfico de desistência. Por exemplo, conheço muitas pessoas que mudaram de matemática para ciência da computação porque acharam a matemática muito difícil, e ninguém que fez o oposto. As pessoas não fazem coisas difíceis gratuitamente; ninguém trabalhará em um problema mais difícil a menos que seja proporcionalmente (ou pelo menos log(n)) mais recompensador. Então, provavelmente a matemática vale mais a pena estudar do que a ciência da computação. Por comparações semelhantes, você pode fazer um gráfico de todos os departamentos em uma universidade. Na parte inferior, você encontrará os assuntos com menos conteúdo intelectual.
Se você usar esse método, obterá aproximadamente a mesma resposta que acabei de dar.
Os cursos de idiomas são uma anomalia. Acho que eles são melhor considerados como atividades extracurriculares, como aulas de cerâmica. Eles seriam muito mais úteis quando combinados com algum tempo vivendo em um país onde a língua é falada. Por um capricho, estudei árabe como calouro. Foi muito trabalho, e os únicos benefícios duradouros foram uma habilidade estranha de identificar raízes semíticas e algumas percepções sobre como as pessoas reconhecem palavras.
Cursos de arte em estúdio e de escrita criativa são cartas na manga. Geralmente, você não aprende muito: você apenas trabalha (ou não trabalha) no que quiser, e depois fica por aí oferecendo "críticas" às criações uns dos outros sob a supervisão vaga do professor. Mas escrever e arte são ambos problemas muito difíceis que (algumas) pessoas trabalham honestamente, então vale a pena fazer, especialmente se você conseguir encontrar um bom professor.
Empregos
Claro que os alunos universitários têm que pensar em mais do que apenas aprender. Também há dois problemas práticos a considerar: empregos e pós-graduação.
Em teoria, uma educação liberal não deve fornecer treinamento para empregos. Mas todo mundo sabe que isso é um pouco uma mentira. Hackers em todas as faculdades aprendem habilidades práticas, e não por acaso.
O que você deve aprender para conseguir um emprego depende do tipo que você quer. Se você quer trabalhar em uma grande empresa, aprenda a hackear Blub no Windows. Se você quer trabalhar em uma empresa pequena e legal ou laboratório de pesquisa, será melhor aprender Ruby no Linux. E se você quer começar sua própria empresa, o que eu acho que será cada vez mais comum, domine as ferramentas mais poderosas que você puder encontrar, porque você estará em uma corrida contra seus concorrentes, e eles serão seu cavalo.
Não há uma correlação direta entre as habilidades que você deve aprender na faculdade e aquelas que usará em um emprego. Você deve mirar um pouco mais alto na faculdade.
Em treinos, um jogador de futebol pode levantar 300 libras, mesmo que ele nunca precise exercer nada parecido com essa força no decorrer de um jogo. Da mesma forma, se seus professores tentarem fazer você aprender coisas que são mais avançadas do que você precisará em um emprego, pode não ser apenas porque eles são acadêmicos, distantes do mundo real. Eles podem estar tentando fazer você levantar pesos com seu cérebro.
Os programas que você escreve nas aulas diferem em três maneiras críticas dos que você escreverá no mundo real: eles são pequenos; você começa do zero; e o problema geralmente é artificial e predeterminado. No mundo real, os programas são maiores, tendem a envolver código existente e muitas vezes exigem que você descubra qual é o problema antes de poder resolvê-lo.
Você não precisa esperar para sair (ou mesmo entrar) na faculdade para aprender essas habilidades. Se você quiser aprender a lidar com código existente, por exemplo, pode contribuir para projetos de código aberto. O tipo de empregador para o qual você quer trabalhar ficará tão impressionado com isso quanto com boas notas em tarefas de classe.
Em projetos de código aberto existentes, você não tem muita prática na terceira habilidade, decidir quais problemas resolver. Mas não há nada que impeça você de começar novos projetos próprios. E bons empregadores ficarão ainda mais impressionados com isso.
Que tipo de problema você deve tentar resolver? Uma maneira de responder a isso é perguntar o que você precisa como usuário. Por exemplo, eu descobri um bom algoritmo para filtragem de spam porque queria parar de receber spam. Agora, o que eu gostaria de ter era um leitor de e-mails que de alguma forma impedisse minha caixa de entrada de se encher. Eu costumo usar minha caixa de entrada como uma lista de tarefas. Mas isso é como usar uma chave de fenda para abrir garrafas; o que se quer realmente é um abridor de garrafas.
Pós-Graduação
E quanto à pós-graduação? Você deve ir? E como você entra em uma boa?
Em princípio, a pós-graduação é um treinamento profissional em pesquisa, e você não deve ir a menos que queira fazer pesquisa como carreira. E ainda assim, metade das pessoas que obtêm PhDs em CS não vão para a pesquisa. Eu não fui para a pós-graduação para me tornar professor. Fui porque queria aprender mais.
Então, se você está principalmente interessado em hacking e vai para a pós-graduação, encontrará muitas outras pessoas que estão igualmente fora de seu elemento. E se metade das pessoas ao seu redor estiver fora de seu elemento da mesma forma que você, você realmente está fora de seu elemento?
Há um problema fundamental em "ciência da computação", e ele aparece em situações como esta. Ninguém tem certeza do que "pesquisa" deve ser. Muita pesquisa é hacking que teve que ser comprimido na forma de um artigo acadêmico para render mais um quanta de publicação.
Então, é meio enganoso perguntar se você se sentirá em casa na pós-graduação, porque muito poucas pessoas estão realmente em casa na ciência da computação. Todo o campo é desconfortável em sua própria pele. Então, o fato de que você está principalmente interessado em hacking não deve impedi-lo de ir para a pós-graduação. Apenas esteja avisado de que você terá que fazer muitas coisas que não gosta.
O número um será sua dissertação. Quase todo mundo odeia sua dissertação quando termina. O processo tende a produzir um resultado desagradável, como um bolo feito de farinha de trigo integral e assado por doze horas. Poucas dissertações são lidas com prazer, especialmente por seus autores.
Mas milhares antes de você sofreram ao escrever uma dissertação. E além disso, a pós-graduação é quase um paraíso. Muitas pessoas lembram dela como o período mais feliz de suas vidas. E quase todos os outros, incluindo eu, lembram dela como um período que teria sido, se não tivessem que escrever uma dissertação. [5]
O perigo da pós-graduação é que você não vê a parte assustadora de antemão. Programas de doutorado começam como faculdade parte 2, com vários anos de aulas. Então, quando você enfrenta o horror de escrever uma dissertação, você já está há vários anos lá. Se você desistir agora, você será um desistente da pós-graduação, e provavelmente não gostará dessa ideia. Quando Robert foi expulso da pós-graduação por escrever o worm da Internet de 1988, eu o invejei enormemente por encontrar uma saída sem o estigma do fracasso.
No geral, a pós-graduação é provavelmente melhor do que a maioria das alternativas. Você conhece um monte de pessoas inteligentes, e sua procrastinação sombria será pelo menos um poderoso vínculo comum. E, claro, você terá um PhD no final. Eu me esqueci disso. Suponho que isso valha alguma coisa.
A maior vantagem de um PhD (além de ser o cartão de união da academia, é claro) pode ser que ele lhe dá alguma confiança básica. Por exemplo, os termostatos Honeywell em minha casa têm a interface mais atroz. Minha mãe, que tem o mesmo modelo, passou um dia lendo o manual do usuário para aprender a operar o dela. Ela assumiu que o problema era com ela. Mas eu posso pensar comigo mesmo: "Se alguém com um PhD em ciência da computação não consegue entender este termostato, deve ser mal projetado."
Se você ainda quiser ir para a pós-graduação depois desta recomendação equivocada, posso lhe dar conselhos sólidos sobre como entrar. Muitos dos meus amigos são professores de CS agora, então eu tenho a história interna sobre admissões. É bem diferente da faculdade. Na maioria das faculdades, os oficiais de admissões decidem quem entra. Para programas de PhD, os professores decidem. E eles tentam fazer isso bem, porque as pessoas que admitem vão trabalhar para eles.
Aparentemente, apenas recomendações realmente importam nas melhores escolas. Testes padronizados não contam nada, e notas contam pouco. O ensaio é principalmente uma oportunidade para se desqualificar dizendo algo estúpido. A única coisa em que os professores confiam são recomendações, de preferência de pessoas que conhecem. [6]
Então, se você quer entrar em um programa de PhD, a chave é impressionar seus professores. E pelos meus amigos que são professores, eu sei o que os impressiona: não apenas tentar impressioná-los. Eles não ficam impressionados por alunos que tiram boas notas ou querem ser seus assistentes de pesquisa para poder entrar na pós-graduação. Eles ficam impressionados por alunos que tiram boas notas e querem ser seus assistentes de pesquisa porque estão genuinamente interessados no tópico.
Então, a melhor coisa que você pode fazer na faculdade, seja você queira entrar na pós-graduação ou apenas ser bom em hacking, é descobrir o que você realmente gosta. É difícil enganar professores para deixá-lo entrar na pós-graduação, e impossível enganar problemas para deixá-lo resolvê-los. A faculdade é onde a farsa deixa de funcionar. A partir deste ponto, a menos que você queira trabalhar para uma grande empresa, o que é como reverter para o ensino médio, a única maneira de seguir em frente é fazendo o que você ama.
Notas
[1] Ninguém parece ter se importado, o que mostra quão irrelevante a Arpanet (que se tornou a Internet) era até 1984.
[2] É por isso que, quando me tornei um empregador, não me importei com GPAs. Na verdade, procuramos ativamente pessoas que haviam sido reprovadas na escola. Uma vez colocamos cartazes em Harvard dizendo "Você acabou de ser expulso por ter um desempenho ruim em suas aulas porque passou todo o seu tempo trabalhando em algum projeto seu? Venha trabalhar conosco!" Conseguimos encontrar um garoto que tinha sido, e ele era um ótimo hacker.
Quando Harvard expulsa graduandos por um ano, eles têm que conseguir empregos. A ideia é mostrar a eles quão horrível é o mundo real, para que eles entendam como são sortudos por estar na faculdade. Esse plano falhou com o cara que veio trabalhar conosco, porque ele se divertiu mais do que tinha se divertido na escola, e ganhou mais naquele ano com opções de ações do que qualquer um de seus professores fez em salário. Então, em vez de voltar arrependido no final do ano, ele tirou mais um ano de folga e foi para a Europa. Ele acabou se formando por volta dos 26 anos.
[3] Eric Raymond diz que as melhores metáforas para hackers estão na teoria dos conjuntos, combinatória e teoria dos grafos.
Trevor Blackwell lembra você de fazer aulas de matemática destinadas a estudantes de matemática. "As aulas de 'Matemática para engenheiros' eram horríveis. Na verdade, qualquer 'x para engenheiros' é ruim, onde x inclui matemática, direito, redação e design visual."
[4] Outros livros altamente recomendados: O que é Matemática?, de Courant e Robbins; Geometria e a Imaginação de Hilbert e Cohn-Vossen. E para aqueles interessados em design gráfico, Euclides de Byrne.
[5] Se você quisesse ter a vida perfeita, a coisa a fazer seria ir para a pós-graduação, escrever secretamente sua dissertação no primeiro ou segundo ano, e então apenas aproveitar os próximos três anos, soltando um capítulo de cada vez. Essa perspectiva fará a boca dos alunos de pós-graduação salivar, mas eu não conheço ninguém que tenha tido a disciplina para conseguir isso.
[6] Um amigo professor diz que 15-20% dos alunos de pós-graduação que eles admitam a cada ano são "long shots". Mas o que ele quer dizer com long shots são pessoas cujas aplicações são perfeitas de todas as maneiras, exceto que ninguém no comitê de admissões conhece os professores que escreveram as recomendações.
Então, se você quer entrar na pós-graduação nas ciências, precisa ir para uma faculdade onde existam professores de pesquisa reais. Caso contrário, você parecerá uma aposta arriscada para os comitês de admissões, não importa quão bom você seja.
O que implica uma consequência surpreendente, mas aparentemente inevitável: pequenas faculdades de artes liberais estão condenadas. A maioria dos alunos do ensino médio inteligentes pelo menos considera entrar nas ciências, mesmo que acabem optando por não fazê-lo. Por que ir para uma faculdade que limita suas opções?
Agradecimentos a Trevor Blackwell, Alex Lewin, Jessica Livingston, Robert Morris, Eric Raymond e vários professores de CS anônimos por lerem rascunhos disso, e aos alunos cujas perguntas começaram tudo.