Disciplinas relevantes

Apresentarei aqui as disciplinas que cursei durante o Bacharelado em Ciência da Computação e que foram as mais relevantes não somente para a iniciação científica em si, mas também para toda a minha formação acadêmica e para as decisões que tomei.

As primeiras disciplinas introdutórias relacionadas à computação, MAC0110 - Introdução à Computação e MAC0122 - Princípios de Desenvolvimento de Algoritmos, foram particularmente importantes para mim porque, ao contrário de muitos dos meus colegas, meu conhecimento prévio de programação era muito baixo: antes de entrar na faculdade eu só havia tido um breve contato com a linguagem BASIC e mal conhecia o conceito de algoritmo. Com essas disciplinas eu pude me familiarizar com programação imperativa, com a linguagem C e, principalmente, conheci a idéia de eficiência em programação. Cabe mencionar que essa idéia deveria ter sido melhor desenvolvida com a disciplina MAC0323 - Estruturas de Dados, mas esta infelizmente não foi dada com a profundidade adequada.

Na área mais teórica, as disciplinas MAT0138 - Álgebra I para Computação e MAT0213 - Álgebra II me apresentaram conceitos que são fundamentais na área pela qual optei, além de me colocarem em contato com padrões e técnicas para enunciar e demonstrar teoremas. Infelizmente, como mencionei na parte de desafios e frustrações, a maneira como cursei os primeiros semestres do curso acabou evitando que eu me dedicasse adequadamente a essas disciplinas. O mesmo ocorreu com as disciplinas MAT0139 - Álgebra Linear para Computação e MAC0300 - Métodos Numéricos da Álgebra Linear.

Felizmente, eu apreciei e me dediquei bastante a uma das disciplinas mais importantes para a área que escolhi e para a minha iniciação científica: MAC0315 - Programação Linear. Apesar do conteúdo mais teórico, gostei muito desta disciplina mesmo na época em que eu priorizava a parte mais prática da computação. Quando já estava tendendo a me decidir pela área teórica, fui monitor da disciplina para relembrar e solidificar os conceitos. Isso se mostrou útil tanto para a iniciação como para ajudar a compreender o conteúdo de outra disciplina relevante: MAC0450 - Algoritmos de Aproximação, matéria que me colocou em contato com técnicas importantes da combinatória poliédrica, como o primal-dual.

Quando cursei a disciplina MAC0414 - Linguagens Formais e Autômatos, não lhe dei a devida relevância porque na época eu não conhecia a real importância do conceito de reconhecimento de linguagens. Isso me foi apresentado posteriormente na disciplina MAC0430 - Algoritmos e Complexidade de Computação, na qual pude compreender idéias extremamente importantes para a área de otimização combinatória, como NP-completude.

As disciplinas MAC0328 - Algoritmos em Grafos e MAC0338 - Análise de Algoritmos foram extremamente importantes tanto para a iniciação científica como para minha formação acadêmica. Pude solidificar e aprofundar meu conhecimento sobre eficiência de algoritmos, aprendi conceitos importantes de grafos e otimização combinatória e tive os meus primeiros contatos com a linguagem CWEB e com a plataforma SGB. Estas duas disciplinas provavelmente foram as mais relevantes para minha iniciação científica. Cabe mencionar que elas tiveram grande peso na minha escolha pela área teórica, em parte devido à excelente didática dos professores José Coelho e Cristina Gomes Fernandes. Foi no período em que as cursei que escolhi o Coelho como meu orientador de iniciação.

Mas a disciplina que pode ser realmente considerada o meu divisor de águas, aquela que me convenceu a esquecer o desenvolvimento de software e considerar a área acadêmica, foi MAC0436 - Tópicos de Matemática Discreta, ministrada pelo professor Yoshiharu Kohayakawa. Foi nessa disciplina que eu comecei a apreciar a beleza de certas demonstrações matemáticas através do estudo de problemas combinatórios que são simples de enunciar mas extremamente difíceis de provar. O que me atraiu no conteúdo da disciplina foram as técnicas e argumentos sofisticados que à primeira vista são indigestos mas, uma vez compreendidos, tornam-se ferramentas poderosas que ajudam a obter demonstrações surpreendentemente elegantes. Cursar essa disciplina apesar do susto inicial foi provavelmente uma das melhores decisões que tomei ao longo de todo o curso.

Diante da minha decisão de fazer mestrado em otimização combinatória, cursei antecipadamente, por recomendação de meu orientador, algumas disciplinas de pós-graduação. Aqui cabe enfatizar que a disciplina MAC5770 - Introdução à Teoria dos Grafos, ministrada pelo professor Paulo Feofiloff, foi extremamente útil não somente em termos de conteúdo, mas também porque o professor foi muito rígido em questões de formalidade e corretude, e isso contribuiu muito para aprender a redigir demonstrações.

Também foi interessante cursar a disciplina MAC5781 - Otimização Combinatória, cujo conteúdo incluía os mesmos problemas da iniciação. Apesar da aparente redundância, a disciplina complementou a iniciação e vice-versa, pois em nosso projeto estudamos aspectos mais relacionados à implementação dos algoritmos enquanto na disciplina aprofundamos a teoria. Foi interessante ver os problemas a partir de pontos de vista diferentes.