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 estudantes de ciência da computação perguntando o que fazer na faculdade. Posso não ser a melhor fonte de conselho, porque fiz filosofia na faculdade. Mas fiz tantas aulas de ciência da computação que a maioria dos estudantes de ciência da computação achava que eu era um. Eu certamente era um hacker, pelo menos.
Hackeando
O que você deve fazer na faculdade para se tornar um bom hacker ? Há duas coisas principais que você pode fazer: se tornar muito bom em programação e aprender muito sobre problemas específicos e legais. Elas acabam sendo equivalentes, porque cada uma leva você a fazer a outra.
A maneira de ser bom em programação é trabalhar (a) muito (b) em problemas difíceis. E a maneira de fazer você mesmo trabalhar em problemas difíceis é trabalhar em algum projeto muito envolvente.
As probabilidades são de que este projeto não seja uma tarefa de classe. Meu amigo Robert aprendeu muito escrevendo software de rede quando era um estudante de graduação. Um de seus projetos era conectar Harvard à Arpanet; tinha sido um dos nós originais, mas em 1984 a conexão tinha morrido. [1] Não só este trabalho não era para uma classe, mas porque ele passou todo o seu tempo nisso e negligenciou seus estudos, ele foi expulso da escola por um ano. [2] Tudo se acalmou no final, e agora ele é um professor no MIT. Mas você provavelmente ficará 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. Os programadores tendem a se classificar 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. Professores estão especialmente interessados em pessoas que podem resolver problemas tediosos do tipo administração de sistemas para eles, então essa é uma maneira de colocar o pé na porta. O que eles temem são flocos e currículos desleixados. É muito comum que um assistente resulte em um aumento líquido no trabalho. Então, você tem que deixar claro que você quer dizer uma diminuição líquida.
Não desanime se eles disserem não. A rejeição é quase sempre menos pessoal do que o rejeitado imagina. Apenas passe para o próximo. (Isso se aplica a namoro também.)
Cuidado, porque embora a maioria dos professores seja inteligente, nem todos trabalham em coisas interessantes. Os professores têm que publicar resultados novos para progredir em suas carreiras, mas há mais competição em áreas mais interessantes de pesquisa. Então, o que os 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 isso.
Nunca trabalhei como assistente de pesquisa, então me sinto um pouco desonesto recomendando esse caminho. Aprendi a programar escrevendo minhas próprias coisas, particularmente tentando fazer engenharia reversa no SHRDLU do Winograd. Eu era tão obcecada por esse programa quanto uma mãe com um bebê.
Quaisquer que sejam as desvantagens de trabalhar sozinho, a vantagem é que o projeto é todo seu. Você nunca precisa se comprometer ou pedir permissão a ninguém, e se 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 novidades (como os professores fazem) ou lucratividade (como as empresas fazem). Tudo o que importa é o 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 tecnicamente maçantes (se você sofre 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 há empresas de jogos por aí trabalhando em produtos com mais conteúdo intelectual do que a pesquisa nos últimos nove décimos dos departamentos de CS das universidades.
Se eu estivesse na faculdade agora, provavelmente trabalharia com gráficos: um jogo de rede, por exemplo, ou uma ferramenta para animação 3D. Quando eu era estudante, não havia ciclos suficientes para tornar os gráficos interessantes, mas é difícil imaginar algo mais divertido para trabalhar agora.
Matemática
Quando eu estava na faculdade, muitos professores acreditavam (ou pelo menos desejavam) que a ciência da computação fosse um ramo da matemática. Essa ideia era mais forte em Harvard, onde não havia nem mesmo uma especialização em CS até a década de 1980; até então, era preciso se formar em matemática aplicada. Mas era quase tão ruim em Cornell. Quando eu disse ao temível 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 um absurdo e que me formar em algo rigoroso me curaria de tais ambições estúpidas.
Na verdade, a quantidade de matemática que você precisa como um hacker é muito menor do que a maioria dos departamentos universitários gosta de admitir. Eu 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ê tem que 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 saber 1001 truques para diferenciar fórmulas, a matemática vale muito a pena ser estudada por si só. É uma fonte valiosa de metáforas para quase qualquer tipo de trabalho.[3] Eu queria ter estudado mais matemática na faculdade por esse motivo.
Como muitas pessoas, fui abusado matematicamente quando criança. Aprendi a pensar em matemática como uma coleção de fórmulas que não eram bonitas nem tinham relação com minha vida (apesar das tentativas de traduzi-las em "problemas de palavras"), mas tinham que ser memorizadas para ir bem em testes.
Uma das coisas mais valiosas que você pode fazer na faculdade seria aprender o que a matemática realmente é. Isso pode não ser fácil, porque muitos bons matemáticos são maus professores. E embora existam muitos livros populares sobre matemática, poucos parecem bons. Os melhores que posso pensar são os de WW Sawyer. E, claro, Euclides. [4]
Tudo
Thomas Huxley disse: "Tente aprender algo sobre tudo e tudo sobre alguma coisa". A maioria das universidades visa esse ideal.
Mas o que é tudo? Para mim, significa tudo o que as pessoas aprendem ao trabalhar honestamente em problemas difíceis. Todo esse trabalho tende a ser relacionado, no sentido de que ideias e técnicas de um campo podem frequentemente ser transplantadas com sucesso para outros. Até mesmo outros que parecem bem distantes. Por exemplo, eu escrevo ensaios da mesma forma que escrevo software: eu sento e escrevo uma versão 1 ruim o mais rápido que consigo digitar, então passo várias semanas reescrevendo-a.
Trabalhar em problemas difíceis não é, por si só, o 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 alegremente com técnicas irremediavelmente 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 conhecesse um colega de 100 anos atrás, ele poderia lhe ensinar algumas coisas novas; se um psicólogo conhecesse um colega de 100 anos atrás, eles apenas entrariam em uma discussão ideológica. Sim, claro, você aprenderá algo fazendo uma aula de psicologia. O ponto é que você aprenderá mais fazendo uma aula em outro departamento.
Os departamentos que valem a pena, na minha opinião, são matemática, ciências exatas, engenharia, história (especialmente história econômica e social, e história da ciência), arquitetura e os clássicos. Um curso de pesquisa em história da arte pode valer a pena. Literatura moderna é importante, mas a maneira de aprender sobre ela é apenas lendo. 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 com EB White do que com um filósofo acadêmico.
Falo aqui por experiência própria. Eu provavelmente deveria ter ficado ofendido quando as pessoas riram de Clinton por dizer "Depende do significado da palavra 'é'". Eu fiz cerca de cinco aulas na faculdade sobre o significado de "é".
Outra maneira de descobrir quais campos valem a pena estudar é criar o gráfico de abandono. Por exemplo, conheço muitas pessoas que trocaram de matemática para ciência da computação porque achavam 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 gratificante. Então, provavelmente vale mais a pena estudar matemática do que ciência da computação. Por comparações semelhantes, você pode fazer um gráfico de todos os departamentos de uma universidade. Na parte inferior, você encontrará as disciplinas com menos conteúdo intelectual.
Se você usar esse método, obterá aproximadamente a mesma resposta que acabei de dar.
Cursos de idiomas são uma anomalia. Acho que são mais bem 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 o idioma é falado. Por capricho, estudei árabe quando calouro. Era muito trabalho, e os únicos benefícios duradouros eram uma habilidade estranha de identificar raízes semíticas e alguns insights sobre como as pessoas reconhecem palavras.
Cursos de arte de estúdio e escrita criativa são curingas. Normalmente, você não aprende muito: você apenas trabalha (ou não trabalha) no que quer que queira, e então fica sentado oferecendo "críticas" das criações uns dos outros sob a vaga supervisão do professor. Mas escrita e arte são problemas muito difíceis nos quais (algumas) pessoas trabalham honestamente, então vale a pena fazê-los, especialmente se você puder encontrar um bom professor.
Empregos
Claro que os estudantes universitários precisam pensar em mais do que apenas aprender. Há também dois problemas práticos a considerar: empregos e pós-graduação.
Em teoria, uma educação liberal não deve fornecer treinamento profissional. Mas todo mundo sabe que isso é um pouco de mentira. Hackers em todas as faculdades aprendem habilidades práticas, e não por acidente.
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 pequena empresa ou laboratório de pesquisa, você se sairá melhor aprendendo 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 você usará em um emprego. Você deve mirar um pouco alto na faculdade.
Em treinos, um jogador de futebol pode levantar 300 libras no supino, mesmo que ele nunca tenha que exercer tanta força durante o jogo. Da mesma forma, se seus professores tentam fazer você aprender coisas mais avançadas do que você precisa em um trabalho, pode não ser apenas porque eles são acadêmicos, desligados do mundo real. Eles podem estar tentando fazer você levantar pesos com seu cérebro.
Os programas que você escreve em aulas diferem em três maneiras críticas daqueles 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 frequentemente exigem que você descubra qual é o problema antes de poder resolvê-lo.
Você não precisa esperar sair (ou mesmo entrar) da faculdade para aprender essas habilidades. Se quiser aprender a lidar com código existente, por exemplo, você 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 o impeça 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 tropecei em um bom algoritmo para filtragem de spam porque eu queria parar de receber spam. Agora, o que eu queria ter era um leitor de e-mail que de alguma forma impedisse minha caixa de entrada de 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 alguém realmente quer é um abridor de garrafas.
Pós-graduação
E quanto à pós-graduação? Você deveria ir? E como entrar 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 fazem doutorado em CS não vão para a pesquisa. Eu não fui para a pós-graduação para me tornar um professor. Fui porque queria aprender mais.
Então, se você está interessado principalmente em hacking e vai para a pós-graduação, você encontrará muitas outras pessoas que estão igualmente fora de seu elemento. E se metade das pessoas ao seu redor estão fora de seu elemento da mesma forma que você, você está realmente fora do seu elemento?
Há um problema fundamental na "ciência da computação", e ele surge em situações como essa. Ninguém tem certeza do que "pesquisa" deveria ser. Muita pesquisa é hacking que teve que ser enfiada na forma de um artigo acadêmico para render mais um quantum de publicação.
Então é meio enganoso perguntar se você vai se sentir em casa na pós-graduação, porque muito poucas pessoas se sentem em casa na ciência da computação. O campo todo é desconfortável em sua própria pele. Então o fato de você estar interessado principalmente 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 das quais não gosta.
O número um será sua dissertação. Quase todo mundo odeia sua dissertação quando termina de lê-la. O processo tende inerentemente 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 escrevendo uma dissertação. E, além disso, a pós-graduação é quase um paraíso. Muitas pessoas se lembram dela como o momento mais feliz de suas vidas. E quase todos os outros, inclusive eu, se lembram dela como um período que teria sido, se eles não tivessem que escrever uma dissertação. [5]
O perigo da pós-graduação é que você não vê a parte assustadora logo de cara. Os 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. Se você desistir agora, você será um desistente da pós-graduação, e você provavelmente não vai 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 muitas pessoas inteligentes, e sua procrastinação sombria será pelo menos um poderoso elo comum. E, claro, você tem um PhD no final. Eu esqueci disso. Acho que vale 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 na minha casa têm a IU mais atroz. Minha mãe, que tem o mesmo modelo, passou diligentemente um dia lendo o manual do usuário para aprender a operar o dela. Ela presumiu 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, ele deve ser mal projetado."
Se você ainda quiser ir para a pós-graduação depois dessa recomendação equívoca, 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ão decidem quem entra. Para programas de doutorado, os professores decidem. E eles tentam fazer isso bem, porque as pessoas que eles admitem vão trabalhar para eles.
Aparentemente, apenas recomendações realmente importam nas melhores escolas. Testes padronizados não contam para nada, e notas para pouco. A redação é principalmente uma oportunidade de se desqualificar dizendo algo estúpido. A única coisa em que os professores confiam são recomendações, de preferência de pessoas que eles conhecem. [6]
Então, se você quer entrar em um programa de doutorado, a chave é impressionar seus professores. E dos meus amigos que são professores, eu sei o que os impressiona: não apenas tentar impressioná-los. Eles não ficam impressionados com alunos que tiram boas notas ou querem ser seus assistentes de pesquisa para que possam entrar na pós-graduação. Eles ficam impressionados com 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 para 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 fingir para de funcionar. Deste ponto em diante, a menos que você queira trabalhar para uma grande empresa, o que é como voltar ao 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 o quão pouco importante era a Arpanet (que se tornou a Internet) em 1984.
[2] É por isso que, quando me tornei empregador, não me importei com médias de notas. Na verdade, procurávamos ativamente pessoas que tinham sido reprovadas na escola. Certa vez, colocamos cartazes em Harvard dizendo "Você acabou de ser expulso por ter ido mal nas aulas porque passou todo o seu tempo trabalhando em algum projeto seu? Venha trabalhar para nós!" Conseguimos encontrar um garoto que tinha sido, e ele era um ótimo hacker.
Quando Harvard expulsa os alunos de graduação por um ano, eles têm que conseguir empregos. A ideia é mostrar a eles o quão horrível é o mundo real, para que entendam a sorte que têm de estar na faculdade. Esse plano saiu pela culatra com o cara que veio trabalhar para nós, porque ele se divertiu mais do que na escola e ganhou mais naquele ano com opções de ações do que qualquer um de seus professores ganhou em salário. Então, em vez de rastejar de volta arrependido no final do ano, ele tirou mais um ano de folga e foi para a Europa. Ele finalmente se formou com cerca de 26 anos.
[3] Eric Raymond diz que as melhores metáforas para hackers estão na teoria dos conjuntos, na combinatória e na teoria dos grafos.
Trevor Blackwell lembra você de fazer aulas de matemática destinadas a alunos de matemática. "As aulas de 'Matemática para engenheiros' eram péssimas. Na verdade, qualquer 'x para engenheiros' é péssimo, 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 os 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 se divertir pelos próximos três anos, escrevendo um capítulo de cada vez. Essa perspectiva deixaria os alunos de pós-graduação com água na boca, mas não conheço ninguém que tenha tido a disciplina para fazê-lo.
[6] Um amigo professor diz que 15-20% dos estudantes de pós-graduação que eles admitem a cada ano são "azarões". Mas o que ele quer dizer com azarões são pessoas cujas candidaturas são perfeitas em todos os sentidos, 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 em ciências, precisa ir para uma faculdade em algum lugar com professores pesquisadores de verdade. Caso contrário, você parecerá uma aposta arriscada para os comitês de admissão, não importa o 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 estudantes inteligentes do ensino médio ao menos considera entrar para as ciências, mesmo que, no final das contas, optem por não fazê-lo. Por que ir para uma faculdade que limita suas opções?
Obrigado a Trevor Blackwell, Alex Lewin, Jessica Livingston, Robert Morris, Eric Raymond e vários professores anônimos de ciência da computação pela leitura dos rascunhos, e aos alunos cujas perguntas o iniciaram.