Hoje em dia torna-se difícil conseguir acompanhar todas as evoluções tecnológicas. Mesmo reduzindo o espaço de procura a apenas temas relacionado com a nossa área - suponhamos Java e ciência da computação - as novas frameworks, ferramentas, papers e notícias obrigam a atenção contínua. Eu pessoalmente tenho cada vez mais dificuldade em reservar tempo para ler as feeds RSS ou tentar ler o que as várias pessoas que sigo partilham no Twitter.
No entanto, também são necessários os conceitos base. Fora o ensino superior e certificações, livros são um recurso essencial que me parecem que hoje em dia muita gente despreza. E estou a falar daqueles em papel, não dos pdfs que se sacam da net.
1 - The Java Programming Language
Escrito pelos criadores da linguagem, serve tanto como livro de introdução à linguagem como também de excelente referência para manter por perto.
Cobre desde as áreas básicas da linguagem até I/O, threading e acima de tudo as collections, para as quais é muito útil como referência.
2 - Effective Java
Escrito pelo Joshua Bloch, Effective Java é provavelmente o melhor livro sobre Java que já li.
Está organizado em 78 itens e cada um é uma boa prática, por exemplo, “Preferir composição no lugar de herança”, “Evitar Finalizers” ou “Preferir anotações a padrões de nomenclaturas”. Em cada um destes pontos, o autor discute os diversos ângulos da questão aprofundadamente e com justificações que demonstram um conhecimento extremo da plataforma.
3 - Java Concurrency in Practice
“Concorrência é difícil”, é uma das mensagens principais deste livro. O autor do livro, Brian Goetz, parte deste princípio para demonstrar ao longo do livro como evitar as principais falhas quando se desenvolve software concorrente em Java. Os bons e maus exemplos são demonstrados facilmente com snipplets de código com smileys negativos e positivos, o que ajuda a memorizar os padrões.
Além de explicar os principais problemas de concorrência - live locks, dead locks, race conditions, etc. - são explicadas detalhadamente as novas estruturas de dados para suporte a concorrência introduzidas no Java 5 e 6. Depois de ler este livro encontro-me a usar estas estruturas mais e mais vezes, e também a construir em cima delas conforme vou compreendendo como funcionam internamente.
4 - Concrete Mathematics: A Foundation for Computer Science
Todos estudamos matemática mas por vezes a dificuldade reside em encontrar aplicações para o que aprendemos. Este livro ensina conceitos matemáticos que são facilmente mapeados para problemas informáticos com os quais no encontramos no dia-a-dia. Também são conceitos que nos ajudam a perceber melhor os diferentes algoritmos.
5 - The Algorithm Design Manual
The Algorithm Design Manual é bastante acessível e completo. Os exemplos não estão escritos em Java mas vale pela quantidade e pela forma como são explanados os algoritmos. Cobre a maioria das áreas esperadas num livro para iniciantes/intermediários: estruturas de dados, algoritmos de pesquisa, grafos, programação dinâmica, combinatória, geometria, conjuntos e outras áreas.
Escrito pelo Robert Sedgewick que já tinha escrito a mesma versão do livro para C++ no início dos anos 90, o livro serve de excelente fonte de referência para se ter no local de trabalho e consultar rapidamente quando necessário.
O livro está dividido em 5 partes, separadas ao longo de 2 volumes - Fundamentos, Estruturas de Dados, Ordenação e Pesquisa no primeiro volume; e Grafos no segundo volume.
7 - Design Patterns: Elements of Reusable Object-Oriented Software
Conhecimento sobre design patterns - especificamente GoF neste caso, mas também hoje em dia padrões de arquitectura ou mesmo os Core J2EE patterns da Sun - é essencial para o profissional que trabalhe em linguagens orientadas a objectos. Isto pode ser provado tipicamente na entrevista de emprego, já que no mínimo uma perguntinha de padrões é sempre feita (dica: se vos perguntarem para referirem um padrão de desenho que conheçam, NÃO respondam Singleton!).
8 - The Pragmatic Programmer: from Journeyman to Master
Tal como o já referido Effective Java está para o Java, este livros está para a profissão de desenvolvimento de software. Os autores tentam cobrir as áreas que apenas se aprendem com a experiência profissional como um conjunto de boas práticas a seguir.
Tanto para profissionais com pouca experiência - que vão aprender algumas boas dicas - como para profissionais com extensiva experiência - que vão rever no livro muita coisa pela qual passaram mas agora organizada e esquematizada -, este livro prova-se uma leitura útil e bastante agradável.
9 - Refactoring: Improving the Design of Existing Code
Refactoring, refactoring, refactoring!
Actualmente a grande maioria dos profissionais sabe o que é refactoring - mesmo que não o pratiquem assim tanto - mas é extremamente estranho como um conceito tão simples não tinha sido esquematizado correctamente antes deste livro.
Pode-se pensar que não é necessário ler um livro sobre refactoring, pois na prática temos IDEs que nos ajudam a fazer grande parte do trabalho mas quando se olha para o projecto numa perspectiva macro, o refactoring não é assim tão simples. Este livro ajuda a reprogramar a nossa cabeça para estar constantemente em modo refactoring.
10 - Agile Software Development, Principles, Patterns, and Practices
Embora o título o possa fazer entender, este livro não é exclusivamente sobre metodologias ágeis. A verdade é que conjuga a enumeração de múltiplas metodologias ágeis com princípios de desenvolvimento de software como orientação a objectos e UML.
Ao contrário de outros livros sobre metodologias ágeis, o autor - que é um dos signatários iniciais do Agile Manifesto - não tenta puxar por nenhuma metodologia, embora fale mais de eXtreme Programming - TDD, refactoring, pair programming. É esta perspectiva integrada de agile + tecnologia que torna este livro num recurso essencial.
11 - Bónus - livro de Python/Ruby/Haskell/Scala/Groovy/Clojure ou outra linguagem
Esta lista é focada em Java e exactamente por causa disso, aconselho a se aprender pelo menos uma outra linguagem, esteja esta disponível para a JVM ou não.
Aprender linguagens novas faz-nos melhores programadores e especialmente agora com o renascimento de linguagens funcionais, também pode vir a ser uma vantagem profissional.
Obs: Galera, tirei esse texto de um artigo que li sobre programação, com os 11 livros mais importantes para o programador Java. Tenho que comprar alguns desses livros (hehe, sinceramente, não to conseguindo assimilar o conteudo de Java). Se vc sabe o nome de mais algum livro que tenha que ser adicionado a essa lista, poste no meu blog como forma de comentario. Ou até mesmo algum artigo que vocês tenham sobre tecnologia, me mandem para que eu possa postar no blog.