Se contar o ano em que estudei na UFSC, estou prestes a ter demorado nove anos para me formar. Nesse intervalo de tempo, que corresponde a mais de um terço da minha vida, fui privilegiado por inúmeras oportunidades de conhecer e conversar com pessoas geniais que mudaram bastante o meu jeito de pensar. Por isso, qualquer texto subjetivo sobre a minha formatura precisa começar com agradecimentos.
Ao professor Denis Deratani Mauá pela orientação do TCC. Conheci o Prof. Denis estudando Inteligência Artificial no ano passado. A contemporaniedade da disciplina me encantou e me interessou especialmente a parte sobre modelos probabilísticos gráficos. Isso me levou a abandonar outras muitas ideias e procurar um tema que tivesse a ver com isso. Foi do Prof. Denis a ideia de estudar geração uniforme de k-trees para aprendizado de redes bayesianas. Ele já tinha trabalhos nesse sentido e seu feedback durante o processo foi muito valioso, assim como sua compreensão: passei o ano trabalhando e morei em Belo Horizonte, São Paulo, Porto Alegre e Rio de Janeiro. Nossa comunicação foi quase exclusivamente por e-mail.
A João de Santana Brito Júnior, aluno de mestrado orientado pelo Prof. Denis, pela ajuda com o aprendizado de redes bayesianas e implementação do aprendizado por amostragem de k-trees. A Walter Perez Urcia, outro aluno de mestrado orientado pelo Prof. Denis, pelos conjuntos de dados que usei nos experimentos. Aos funcionários da seção de alunos do IME, aos quais recorri tantas vezes durante a graduação -- e aos quais ainda vou recorrer para colar grau e retirar diploma.
Aos professores Daniel Santana de Freitas e Jáuber Cavalcante de Oliveira, da UFSC, pelo incentivo para aprender matemática com rigor lá no início da minha primeira tentativa de graduação, em 2008. Aos amigos que fiz na UFSC, dos quais guardo boas recordações apesar das distâncias.
Aos inúmeros competidores de olimpíadas de matemática e computação que conheci nos mais de 10 anos que participei dessas competições, pela troca saudável de problemas e soluções. Aos maratonistas da minha geração, em especial Luís Fernando Schultz, Atol Fortin e Natan Lima, com os quais tive o prazer de formar equipes que disputaram finais mundiais do ACM-ICPC, e Wanderley Guimarães, que foi nosso treinador. Aos mais novos, em especial Stefano Tommasini, Giovana Delfino, Nathan Proença, Victor Sena e Yan Couto, por manterem vivo o espírito maratonista na USP. A Walter Erquínigo, amigo das maratonas e camarada latino-americano nas incursões no Vale do Silício.
Aos amigos que fiz nos estágios, em particular meus supervisores Daniel Creão, Patrick Horn, Iskren Chernev, Dolapo Falola, Haoyi Li e Tony Lopes, pela troca de experiências essencial para complementar minha formação. Aprendizagem computacional e ciência de dados, redes e criptografia, desenvolvimento web e móvel, engenharia e design de produtos, desenvolvimento de ferramentas de integração contínua e de tecnologia anti-abuso foram algumas das áreas com as quais tive contato e me deram uma visão sobre computação muito maior do que a que eu tinha antes.
Aos amigos que fiz no IME; a maioria deles já saiu de lá muito antes de mim, é claro. Especialmente ao David Marzagão pelos cafés, problemas, estudos sobre criptografia e teoria dos jogos, intermináveis discussões.
Aos ativistas do movimento estudantil da USP e do Brasil pelas lutas pedagógicas do passado, do presente e do futuro em defesa da educação pública, gratuita e de qualidade para todos.
Aos ativistas do software livre e da liberdade na Internet pelas lutas democráticas do presente. A Richard Stallman, Julian Assange, Edward Snowden e Chelsea Manning, nossos contemporâneos que dedicam suas vidas a essa causa.
Aos camaradas do Movimento Esquerda Socialista pela conspiração para construir um mundo novo, por muita elaboração e ação coletiva. Não cito nomes pois são muitos e não gostaria de lembrar de uns e deixar nomes importantes de fora.
A Israel Dutra e Thiago Aguiar, com quem dividi casas nos últimos anos, pelo companheirismo.
Aos meus pais, Amarildo e Márcia, e meus irmãos, Bruno e Lucas, por tudo. A Sandra e Mário pela recepção em São Paulo. A André e Lavinia pela companhia no primeiro ano de graduação na USP. A todos os meus familiares pelo suporte. À Juliana pela parceria.
Muitas das minhas frustrações com o IME-USP estão registradas.
Em março de 2009, quando era calouro, escrevi um texto no qual reivindicava que o Bacharelado em Ciência da Computação fosse mais científico e menos técnico. Justificava citando Dijkstra: "Ciência da Computação está tão relacionada aos computadores quanto a astronomia aos telescópios, biologia aos microscópios, ou química aos tubos de ensaio. A ciência não estuda ferramentas. Ela estuda como nós as utilizamos, e o que descobrimos com elas." Acho que perdi essa briga para o mundo, porque meus amigos seguem pedindo ajuda para eu consertar seus computadores.
Em novembro do mesmo ano, critiquei a falta de democracia na USP para justificar que se participasse do movimento estudantil. Sigo do mesmo lado.
Há outras frustrações menores mas até simpáticas, daquelas que todo mundo tem. A terrível obrigatoriedade dos créditos em Física, que felizmente caiu; uma ou outra aula que eu não aguentava assistir... Nada relevante, obviamente.
Por outro lado, falar sobre desafios e frustrações especificamente sobre o trabalho de conclusão de curso é mais difícil. Talvez eu não tenha criado tanta expectativa para me permitir me frustrar, talvez meus verdadeiros desafios nesse ano tenham sido as eleições municipais; provavelmente as duas coisas.
Como mencionei anteriormente, o tema do meu TCC foi sugerido pelo Prof. Denis. Antes de eu falar com ele, havia cogitado estudar criptografia com o Prof. Paulo Barreto (da Escola Politécnica) ou redes com o Prof. Daniel Macêdo Batista. Com o primeiro pensei em estudar encriptação homomórfica; com o segundo pensei em desenvolver algo em cima do mosh, uma alternativa ao SSH que roda sobre UDP, é robusta e funciona melhor em redes móveis.
No fim gostei do tema escolhido porque me permitiu aproveitar minha familiaridade antiga com grafos -- o que facilitou a implementação dos algoritmos para codificar e decodificar k-trees -- e aprender um pouco mais sobre redes bayesianas e aprendizagem computacional.
Como escrevi nos agradecimentos, fui muito influenciado pelos engenheiros de software e pela cultura das empresas nas quais trabalhei. A escolha de usar a linguagem Go fez muito sentido depois do estágio no Google. Com efeito, a escrita do código fluiu muito naturalmente e segui muitas das convenções adotadas pela empresa. O uso de ferramentas de integração contínua mesmo para um projeto pequeno também foi por influência dos lugares que trabalhei, nesse caso especialmente Facebook e Dropbox.
Foi necessário algum tempo para digerir e compreender de verdade os conceitos trabalhados. Se hoje o artigo de Caminiti et al. (2010) sobre codificação e decodificação de k-trees em tempo linear me parece absolutamente didático, no início não foi trivial me acostumar com k-trees, cada detalhe do processo de re-rotulação, k-trees de Rényi, esqueleto de k-trees, árvores características e Dandelion Codes. A mesma coisa com o artigo de Nie et al. (2014) sobre aprendizado de redes bayesianas com treewidth limitado. Creio que esse tempo de adaptação seja normal.
É difícil encontrar tempo para dedicar ao TCC em meio a outros trabalhos (talvez seja esse o maior desafio), mas assim é a vida. Acredito que os maiores desafios são os que virão.
Espero ter oportunidade de seguir estudando e praticando matemática e ciência da computação. Espero que mais pessoas tenham mais oportunidades de se apaixonarem por teoremas e algoritmos.
Última atualização: Dom Nov 20 21:54:57 BRST 2016