Thursday, March 9, 2017

Just for fun

Essa daqui eh o draft que eu usei para uma palestra para alunos da graduacao da UNICAMP alguns anos atras. Aqui seguem os slides e a gravacao.

A palestra seguiu mais ou menos assim ...

Muito cedo na minha vida, eu li o Livro do Linus Torvalds "Just for fun". O livro eh na forma de uma entrevista com o Linus, inventor do Linux, sobre como foi o processo de desenvolvimento do kernel.

O entrevistador queria entender qual foi a motivacao que fez com que o kernel fosse desenvolvido, e o Linus sempre voltava ao mesmo ponto: "Just for fun". Tudo que ele queria era se divertir.

Xadrez, Unicamp Fighters e Virus

Assim que eu entrei na Unicamp, eu me apaixonei por inteligencia artificial. Dentre os diversos assuntos, eu me interessei bastante por chess programming (como fazer um programa de computador jogar xadrez).

O negocio era absolutemente emocionante: como que um computador conseguia jogar xadrez???!!! Como q uma maquina era capaz de jogar melhor do que eu?! Se eu mesmo tinha programado, como isso era possivel?

Os anos passaram e minha paixao pelo xadrez continuou. Nos 5 anos da Unicamp, eu trabalhei em diversos projetos relacionados ao xadrez, e aa cada aula q eu fazia eu adicionava alguma coisa ao meu programa (e.g. chess UI via sockets).

Nunca eu me perguntei se isso ia ter futuro. Eu soh estava me divertindo :)

Durante os primeiros anos, tudo o que eu queria saber era de entender como que um computador conseguia jogar xadrez. Logo no primeiro ano, antes de ter feito Anal II, eu jah tinha lido praticamente tudo aa respeito de busca em arvores porque o minimax e o alpha-beta search sao baseados nisso. Jah tinha visto sockets e multi-threading, porque para eu participar dos campeonatos de programacao eu precisava desses conceitos. Redes neurais e algoritimos evolutivos estavam na ponta da lingua.

Tudo isso porque eu tava querendo me divertir.

Meu primeiro estagio

Olha soh que engracado como as coisas se encadearam.

Lah pelo quarto ano da faculdade, um cara do ITA veio dar uma palestra na UNICAMP sobre desenvolvimento de jogos. Como eu trabalhava muito com xadrez, fui conferir. Acabei conhecendo o apresentador e no final da palestra enviei um email para ele. Pronto, ali tinha acabado de descolar o meu primeiro estagio.

Eu nunca achei que iam me pagar para escrever codigo em Inteligencia Artificial


Trabalhei por 3 meses durante as ferias com inteligencia artificial, escrevendo algoritimos para xadrez, ligue os pontos e othelo. Por incrivel que pareca, o jogo ainda estah no ar!

Unicamp Fighters

Assim que eu terminei o meu estagio, eu escutei alguem falar sobre um concurso de projetos do Google e eu enviei uma proposta para um projeto: uma biblioteca para executar RPCs via Instant Messaging.




Foi isso que me levou aa conhecer o Chris DiBona e o Peter Saint Andre.

Google Summer Of Code

Acabei ganhando o concurso de projeto, sendo o primeiro brasileiro aa terminar o Google Summer Of Code. Massa :)

Quando acabou o concurso de projetos, o orkut tava bombando e eu tinha acabado de aprender sobre Jabber. Como eu sempre gostei de linux, nao lembro exatamente porque, resolvi escrever um sistema de arquivos :) Just for fun :)

Mais ou menos na mesma epoca eu comecei a gostar muito de desenvolvimento de kernel e eu comecei a escrever o UnicampOS. Um sistema operacional, afe, essa foi loucura. Nao vou entrar muito em detalhes no UnicampOS, mas lembre dele porque ele vai aparecer depois.

Escrevi um sistema de arquivos que pegava a sua lista de amigos e "montava" ela como se fosse um sistema de arquivos. Por incrivel que pareca tambem, o negocio ainda tah sendo usado :)



Assim que acabou o concurso de projeto, um dos engenheiros envolvidos pediu para a gente enviar um curriculo para ele submeter para o processo de estagio.

Como eu tinha trabalhado com o jabber e o orkut tava bombando, por um motivo ou outro, eu coloquei como que isso se aplicaria para o orkut.

Foi isso que me levou a conhecer o Patrick Barry.

Minha primeira entrevista tecnica

O Patrick era um engenheiro do Google que tava procurando estagiarios. Hoje somos grandes amigos.

O Patrick achou o meu curriculo porque tinha a string "orkut" escrita nele. Ele procurou no banco de dados e achou o meu curriculo.

Foi o Patrick tambem que fez a minha primeira entrevista de estagio. Ela foi assim.

Lembra que lah em cima eu falei sobre xadrez? Pois eh, a minha primeira pergunta de estagio foi sobre algoritimos de propagacao em grafos, uma generalizacao do alpha-beta search.

Lembra que lah em cima eu falei sobre sistemas operacionais? Pois eh, o meu segundo entrevistador pergontou sobre read/write locks e politicas de exclusao mutua.

Acabei passando na entrevista de estagio e fui para a California fazer um estagio de 3 meses.

Eu estava no quinto ano da faculdade e sai em julho para fazer o estagio.

Do or do not do. There is no try. -- yoda

Durante o estagio, eu percebi o tipo de oportunidade que estava sendo apresentada para mim.

Eu entrei em contato com pessoas altamente qualificadas e o Vale do Silicio era excepcional. Um lugar realmente impressionante.

Me preparando para o estagio, entrei na lista dos estagiarios do ano. Soh tinha email vindo de @stanford.edu, @mit.edu e @berkeley.edu. Eu achava que eu tava fudido.

Mas nao importava, eu ia fazer o meu melhor. Mas acima de tudo, eu ia me divertir :)

Aconteceu de eu fazer um estagio absolutamente excepcional. Eu era de longe o melhor estagiario do grupo (de 5-6 estagiarios, literalmente todos de Stanford, MIT e Harvard).

If you don't know what your options are, you don't have any.

No final do estagio, me fizeram uma proposta de trabalho integral.

Voltei para o Brasil com a cabeca 5 vezes maior.

Antes de me formar, enviei um email para uns colegas de trabalho sobre os meus planos. Mandei para eles os links de submissao de curriculos do Google, da Intel, da AMD, do MIT, de Stanford e Berkeley.

Eu sabia que era minha responsabilidade entender e explorar as minhas proprias opcoes.

Ideas are worthless. Execution is all that matters.

Em 2008 eu me mudei para a California e comecei a minha carreira profissional.

Me senti como me senti quando entrei na UNICAMP: tao perdido quanto igualmente apaixonado. Aprendi muita coisa, algumas botei por escrito aqui.

Aqui sao as coisas que eu fiz no Google (link pro Google Easter Eggs).

Continuei trabalhando com coisas nao relacionadas ao meu trabalho. Se tinha dado certo na faculdade, porque nao ia dar certo no trabalho tambem neh?

Em 2009 eu escrevi mais codigo para fora do Google do que para dentro do Google.

Eu escrevi de tudo. Desde sistemas de arquivos distribuidos ateh ferramentas de refactoracao de codigo automaticas.

E claro, escrevi mais um programa que jogava xadrez.

Soh que dessa vez, eu tinha um cluster de 1000 maquinas para brincar :)

Durante um tempo, eu escrevia e re-escrevia algoritimos de xadrez, majoritariamente em cima de mapreduces para computacao distribuida.

Foi isso que me levou aa conhecer o Ken Thompson (e deixar de conhecer a Britney Spears).

De volta para o Xadrez

Um belo dia, numa lista de discussao dentro do Google, o Ken Thompson posta algumas perguntas sobre chess programming. Ken Thompson??!! Como assim o Ken Thompson? O cara que invetou o UNIX?

Mandei um email para ele e ele marcou uma reuniao comigo.

A parte engracada eh que a reuniao aconteceu durante um show que teve da Brittney Spears dentro do Google. Todos meus amigos fora do Google perguntavam se eu ia no show, e eu claro que nao ia trocar uma reuniao com Ken por um show com a Brittney.

Quando a dani perguntou se eu tinha ido, e eu falei q nao, ela respondeu "Ken o que??!!"!

Hoje trabalho com um protocolo de redes.

Eh um pouco dificil explicar em poucas palavras, mas eh na mesma area de escopo que WSDL (soh que para Resource Oriented Architectures).

Eu escrevi mais sobre isso aqui e aqui.

Foi isso que me levou a conhecer o Vint Cerf.

Um protocolo de redes inter-planetaria

Um certo dia, o Vint Cerf enviou um email para uma lista que eu acompanho, perguntando se existiam especialistas no Google sobre SOAP/WSDL e XML.

Como eu tava trabalhando na area, e eu sou fanzao do Vint, chutei o balde e resolvi enviar um email para ele.

No mesmo dia, ele me responde: "Oi Samuel, eu estou trabalhando num protocolo de redes entre planetas e a gente tah com um problema para resolver aqui que tah dificil de resolver. O grupo estah tendendo aa usar SOAP/WSDL, mas eu quero tentar convence-los de que isso eh uma mah ideia. O desafio aqui eh que por causa da rotacao dos planetas muitos pacotes sao perdidos e os protocolos atuais nao levam esse tipo de caracteristica em consideracao.".

Eu nao sabia se eu ria ou se eu chorava :)

Foi isso. Aqui vao mais algumas coisas que eu aprendi ao longo dos anos.