O Currículo Escrito na Biblioteca: um ensaio sobre destino e faculdade de computação
Introdução:
O ICMC é discutivelmente uma das melhores instituições de computação do Brasil, e o que é fato é que abriga a maior biblioteca especializada da América do Sul. Foi nesse ambiente que me desenvolvi como profissional. Não foram as salas de aula, os colegas ou os professores que moldaram minha trajetória. Foi a biblioteca, com seu enorme acervo — muitíssimo bem curado — e sua atmosfera propícia ao estudo, o grande motor dos meus estudos em computação.
Esses dias, enquanto visitava o campus, decidi procurar um livro que peguei emprestado no primeiro ano. Para encontrá-lo, fui até o balcão pedir ajuda e acabei recebendo o histórico completo de todos os livros que havia emprestado durante os 7 anos fui estudante graduação no ICMC. E foi um choque: nunca, nem nos meus devaneios mais ambiciosos, eu imaginaria que tinha estudado tanto.
Ao revisitar essa lista, percebi que alguns livros, em particular, tiveram um impacto profundo na minha formação. Cada um deles, de alguma forma, é parte não apenas da minha história como programador, mas como pessoa. Handmade Electronic Music: The Art of Hardware Hacking foi uma descoberta inesperada que despertou minha curiosidade técnica. Calculus de Michael Spivak foi o livro que finalmente me ensinou matemática, depois de muitos fracassos. E JavaScript & jQuery: Interactive Front-End Web Development de Jon Duckett, continua a ser o livro mais bonito que já tive o prazer de estudar.
Esses são apenas três livros que tiveram um impacto profundo em mim, e vou contar como nos próximos parágrafos. O grande ouro deste post, porém, é que, ao analisar essa lista, fica claro que ela (quase) reflete o currículo do curso de Ciência da Computação do ICMC de forma fiel. Há as obras clássicas que são referências, assim como livros mais recentes que exploram tecnologias emergentes. Com algumas exceções na categoria "Outros", essa lista serve como um verdadeiro roadmap.
Eu compartilho não só uma narrativa pessoal, mas uma evidência clara do que um estudante pode esperar aprender em um dos melhores cursos de computação do mundo. É um caminho que difere bastante dos que você encontra na internet, porque reflete uma educação que vai além do superficial e mergulha de cabeça nos fundamentos.
Os Três Livros Mágicos
Encontrei Handmade Electronic Music: The Art of Hardware Hacking durante a minha primeira visita à biblioteca, logo após pegar os livros de Cálculo e Geometria Analítica, obrigatórios para todo calouro. Decidi dar uma volta para explorar o que mais havia por lá, e, esse livro, de alguma forma, me chamou. Foi como se ele estivesse gritando meu nome. Em meio às dezenas de milhares de livros ali, sem saber como eles estavam organizados, fui direto a ele, mesmo sem ter ideia da sua existência. A música eletrônica já era uma paixão minha, então, se você quiser uma explicação racional, é natural que esse livro tenha chamado minha atenção. Mas eu prefiro acreditar que há algo mais.
Não era o tipo de livro que fazia parte de qualquer curso, nem algo que um professor recomendaria, mas sim uma joia rara que encontrei por pura sorte. Esse livro vai além de ensinar como fazer música com qualquer coisa; ele me ensinou a sentir o que o universo está tentando dizer, a perceber que desmontar e remontar é uma forma de entender as mensagens ocultas no caos. Foi uma lição de como o acaso pode moldar nosso destino, deixando claro que a exploração e a curiosidade são forças poderosas na construção do conhecimento.
Eu já havia reprovado em Cálculo 1 três vezes, e lá estava eu, insistindo em aprender matemática, em vez de simplesmente memorizar os procedimentos que precisava para passar de ano, mais uma vez. Eu realmente estava tentando: prestava atenção, fazia boas perguntas durante as aulas, e um dia, uma dessas perguntas deixou o professor sem resposta. Na aula seguinte, ele voltou com o livro Calculus de Michael Spivak e explicou a demosntração que eu havia questionado. Depois da aula, ele me chamou e recomendou o livro, que em suas palavras é o melhor e mais díficil sobre cálculo, e se colocou à disposição para me ajudar com os exercícios que eu não conseguisse resolver.
Dessa vez, finalmente passei, com nota máxima. Calculus de Spivak não é um livro de cálculo; é uma introdução à Análise Real. Enquanto os livros de cálculo focam em ensinar regras e procedimentos, que usam as funções para fazer coisas incríveis, a análise megulha nas bases conceituais, oferecendo uma entendido profundo e acessível dos fundamentos das funções e números reais. Durante dois anos, aluguei o livro 13 vezes, muitas depois de já ter sido aprovado. Estava determinado a dominar cada conceito, se tornou um missão especial. A obra de Spivak foi um testemunho do poder da mente humana em transformar o destino, mostrando que, com determinação, podemos criar o nosso próprio caminho.
O único exemplar da biblioteca era antigo, com as páginas literalmente se desfazendo. Literalmente exigia respeito e carinho para manusear, algo que jamais uma tela de computador seria capaz de reproduzir. E não era só o livro principal - havia também um suplemento com as respostas dos exercícios ímpares, sem as soluções, mas fundamentais para validar meu entendimento antes de prosseguir para os conceitos seguintes. Spivak não me ensinou não apenas cálculo, mas a ver o universo como uma expressão matemática, onde tudo faz parte de uma grande e elegante estrutura lógica. Desbravar este livro é uma experiência transcendental — não apenas sentido matemático, mas também filosófico.
Outro livro que deixou uma marca forte na minha formação foi JavaScript & jQuery: Interactive Front-End Web Development de Jon Duckett. Parte da bibliografia complementar da disciplina de Desenvolvimento Web, em 2014, representava o que havia de mais moderno em desenvolvimento web frontend. Mas o que realmente faz esse livro se destacar e se tornar atemporal não é seu o conteúdo, mas o design gráfico e a tipografia impressionantes.
Este é, sem dúvida, o livro mais bonito que já tive o prazer de estudar. A clareza com que os conceitos são apresentados, combinada com um layout visualmente deslumbrante, torna a experiência de aprendizado algo realmente fascinante. As páginas são meticulosamente projetadas, cada seção é organizada com uma atenção ao detalhe que vai muito além do comum para livros técnicos. É um livro que consegue ser tanto uma obra de arte quanto um guia prático. Um nível de cuidado e design deveria ser mais comum em outros livros técnicos.
Jon Duckett não apenas ensina tecnologias; ele capturou a fusão entre forma e função, entre desejo e realidade, mostrando que a programação é, em essência, a arte de harmonizar o que a mente humana deseja com o que o universo orquestra. Foi uma lição sobre como a estética e a clareza podem amplificar o impacto do conhecimento, tornando o uma obra atemporal.
A biblioteca, nesse sentido, foi mais do que um simples acervo. Cada livro, seja fruto do acaso, de uma recomendação de um professor ou da exigência de uma disciplina, tornou-se um universo. Desmontar circuitos, desvendar teoremas e mergulhar na Web me ensinou que o destino, embora influenciado por forças externas, é construído a cada escolha, a cada página lida, a cada teorema demonstrado. A biblioteca foi o meu laboratório, onde transformei a curiosidade em conhecimento e o conhecimento em paixão.
Todo o Resto
Esses três livros foram cruciais para minha formação, mas eles representam apenas uma pequena parte do conhecimento que adquiri durante a graduação. Ao analisar a lista completa, fica evidente como o currículo do curso de Ciência da Computação do ICMC é dividido em três grandes blocos: matemática, fundamentos da computação e programação prática. Vamos explorar cada um desses pilares.
Matemática
A matemática é o alicerce sobre o qual toda a construção da computação se ergue. É a linguagem universal que permite descrever e resolver problemas complexos de forma precisa e eficiente. Muitas vezes, subestimamos a importância da matemática no dia a dia de um programador, mas a verdade é que ela está presente em praticamente todos os aspectos do desenvolvimento de software. É verdade que mesmo que embora eu já feito algumas coisas hardcores, raramente, precisei ir além de algumas derivadas no trabalho como programador. No entanto, não se engane: são estas disciplinas que oferecem as ferramentas necessária para resolver qualquer problema com programação.
A matemática é como um treino intenso para o cérebro. Assim como um fisiculturista precisa levantar pesos pesados para desenvolver músculos fortes, um programador precisa resolver problemas matemáticos desafiadores para fortalecer sua capacidade de raciocínio lógico e abstrato. A disciplina e força mental adquirida por meio do estudo e da prática da matemática é inigualável.
- Concrete Mathematics: A Foundation for Computer Science - R. L. Graham, D. E. Knuth, O. Patashnik
- Supplement to Calculus - Michael Spivak
- Cálculo: Em uma Variável Real - Placido Zoega Taboas
- Topics in Algebra - I. N. (Israel Nathan) Herstein
- Fundamental Number Theory with Applications - Richard A. Mollin
- Um Curso de Cálculo - Hamilton L. (Hamilton Luiz) Guidorizzi
- Two-Dimensional Calculus - Robert Osserman
- Geometria Analítica: Um Tratamento Vetorial - Ivan de Camargo, Nilson de Oliveira Gularte
- Equações Diferenciais Elementares e Problemas de Valores de Contorno - William E. (William Edward) Boyce
- Fourier Series - G. P. (Georgiasi Pavlovich) Tolstov
- Calculus of Several Variables - Serge Lang
- Spivak’s Calculus - Michael Spivak
- Multivariable Calculus, Linear Algebra, and Differential Equations - Stanley Israel Grossman
Fundamentos da Computação
Além da sólida base matemática, outro pilar fundamental para um programador é o profundo entendimento dos princípios subjacentes aos sistemas de software. Compreender como os dados são representados, processados e armazenados, desde o nível de mais baixo de transistors até as abstrações mais altas, como a cloud é essencial para construir sistemas eficientes, robustos e escaláveis.
Esses fundamentos formam a base teórica necessária para qualquer engenheiro de software. Ao entender os diferentes níveis de abstração de um sistema de software, o programador ganha uma visão holística que permite identificar oportunidades de otimização, resolver problemas complexos e construir soluções verdadeiramente geniais. Essa capacidade de navegar harmoniosamente entre os detalhes técnicos mais minuciosos e as abstrações mais amplas é o que diferencia o desenvolvedor médio de um engenheiro excepcional.
- Física - Paul Allen Tipler
- Física 1 - Mecânica: Teoria e Problemas Resolvidos - Adir Moysés
- Digital Design: Principles and Practices - John F. Wakerly
- Fundamentals of Digital Logic with VHDL Design - Stephen D. Brown
- Boolean Algebra with Computer Applications - Gerald Earl Williams
- Digital Fundamentals with VHDL - Thomas L. Floyd
- Computer Organization and Design: The Hardware/Software Interface - David A. Patterson, John L. Hennessy
- Structured Computer Organization - Andrew S. Tanenbaum
- Microeletrônica - Adel S. Sedra
- Eletrônica Básica - Luiz Bertini
- Computer Organization and Architecture: Designing for Performance - William Stallings
- Fundamentals of Database Systems - Ramez Elmasri, Shamkant B. Navathe
- Artificial Intelligence: A Modern Approach - Stuart J. Russell, Peter Norvig
- Redes de Computadores e a Internet: Uma Abordagem Top-Down - James F. Kurose, Keith W. Ross
- Modern Operating Systems - Andrew S. Tanenbaum
- Introduction to Parallel Computing - Ananth Grama, Anshul Gupta, George Karypis, Vipin Kumar
- Linguagens Formais e Autômatos - João L. G. Rosa
- Streaming Systems: The What, Where, When, and How of Large-Scale Data Processing - Tyler Akidau, Slava Chernyak, Reuven Lax
A Arte da Programação
O terceiro pilar fundamental para um programador é a versatilidade em dominar diversas linguagens de programação e a capacidade de implementar algoritmos em diferentes paradigmas. A programação é uma arte que exige não apenas conhecimento técnico, mas também criatividade e o domínio dos instrumentos de trabalho. A capacidade de traduzir problemas abstrados em algortimos concretos é crucial.
Também é essencial dominar uma variedade de ferramentas, para transformar estes algoritmos em software funcional sob quaisquer caractristcas, além de ampliar sua capacidade de aprender tecnologias emergentes rapidamente. Também faz parte desse bloco conhecer os princípios de desenvolvimentos de software, como metodologias e processos de desenvolvimento e e verificação de software. Essa lista mostra como é um equívoco pensar que a programação se resume a backend/frontent.
- Algorithms in C - Robert Sedgewick
- Numerical Recipes in C: The Art of Scientific Computing - William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery
- Programming Abstractions in C: A Second Course in Computer Science - Eric S. Roberts
- Thinking in C++: Volume 2 - Practical Programming - Bruce Eckel
- Dominando Algoritmos com C - Kyle Loudon
- C++ Primer Plus - Stephen Prata
- Programming Clojure - Stuart Dabbs Halloway
- File Structures: An Object-Oriented Approach with C++ - Michael J. Folk, Bill Zoellick, Greg Riccardi
- 21st Century C - Ben Klemens
- Java: Como Programar - Paul J. Deitel, Harvey M. Deitel
- Software Engineering - Ian Sommerville
- Functional Thinking: Paradigm Over Syntax - Neal Ford
- The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie
- Treinamento em Linguagem C - Victorine Viviane Mizrahi
- A Book on C: Programming in C - Al Kelley, Ira Pohl
- Beginning Ruby: From Novice to Professional - Peter Cooper
- Fundamentos de Programação: Algoritmos - Luis Joyanes Aguilar
- Introdução Ao Teste De Software - Marcio Delamaro
- Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
- Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design - Craig Larman
- The Pragmatic Programmer: From Journeyman to Master - Andrew Hunt, David Thomas
- JavaScript: The Definitive Guide - David Flanagan
- Rails 3 in Action - Ryan Bigg
- JavaScript & jQuery: Interactive Front-End Web Development - Jon Duckett
- HTML5 and CSS3: Develop with Tomorrow's Standards - Brian P. Hogan
Outros
Além dos três pilares fundamentais, um programador deve cultivar a curiosidade e explorar áreas afins para expandir seus conhecimentos e habilidades. A formação curricular é apenas o início da jornada. A lista de livros a seguir representa apenas uma outros tópicos que explorei durante a graduação.
- Microeconomia - Robert S. Pindyck
- Head First Design Patterns - Eric Freeman
- Make: Electronics: Learning by Discovery - Charles Platt
- UNIX Power Tools - Não Disponível
- Programming Interactivity: A Designer's Manual - Joshua J. Noble
- Handmade Electronic Music: The Art of Hardware Hacking - Nicolas Collins
- Music and Acoustics: From Instrument to Computer - Philippe Guillaume
- The Art of Prolog: Advanced Programming Techniques - Leon Sterling
- XML Design and Implementation: Programming Techniques - Paul Spencer
- Program Generators with XML and Java - J. Craig Cleaveland
- Practical Arduino: Cool Projects for Open Source Hardware - Jonathan Oxer
- Digital Delirium - Dado não disponível
- Being Digital - Nicholas Negroponte
- Computational Semantics with Functional Programming - Andrea Unger
Conclusão
Ao rever a lista de livros que emprestei na biblioteca, tive a sensação de estar revisitando a minha graduação e me surpreendi muito com a quantidade de conhecimento a que fui exposto. A curiosidade sempre me impulsionou, mas nunca imaginei que estudaria tanto. Então, se você está começando agora, saiba que o caminho é longo e árduo. Não recomendo que ninguém leia exatamente estes livros. Essa não é uma de favoritos, recomendados, ou algo do tipo. Na verdade, muitos dos meus livros favoritos eu encontrei em sebos e não estão nessa lista.
Esses livros listados aqui são apenas aqueles que peguei na biblioteca da universidade, mas mesmo assim, acredito que o conteúdo coberto aqui representa o que é esperado de um formando em Ciência da Computação. Para as melhores oportunidades, isso é na minha opinião, o mínimo que se espera. Uma pessoa muito motivada e capaz, precisaria de dois anos de estudo em tempo (quase) integral. Se você está se perguntando se deve fazer uma faculdade de ciência da computação, pense o seguinte: você se imagina estudando tudo isso nos próximos anos? Se a resposta for não, definitivamente, você deveria considerar fazer uma faculdade.
Um abraço e bons estudos.