Back-End

11 mai, 2009

10 (+1) livros essenciais para o programador Java

Publicidade

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
relacionados 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 falando daqueles
em papel, não dos pdfs que se baixam da net.

Foi com esta ideia que decidi juntar uma lista de 10 livros que
considero essenciais para um programador Java – i.e. que contêm a
matéria mínima que gostava de ver nos membros das minhas equipes de
desenvolvimento. Alguns destes podem ser substituídos por outros, pois trata-se de escolhas pessoais, mas os temas e áreas abrangidos penso
serem extensivos. Lembro que é uma lista de livros
técnicos, não se focando no desenvolvimento das chamadas “soft skills”.
Fica a lista:

1 – The Java Programming Language

Escrito pelos criadores da linguagem, serve tanto como livro de
introdução a Java 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. Além disso, o estilo de escrita é facílimo de ler. Eu demorei duas noites a ler o livro todo.

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 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 à concorrência
introduzidas no Java 5 e 6. Depois de ler este livro estou usando
estas estruturas mais e mais vezes, e também construindo em cima delas
conforme vou compreendendo como funcionam internamente.

4 – Concrete Mathematics: A Foundation for Computer Science

Sim, coloquei aqui um livro de matemática! 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 nos encontramos no dia-a-dia. Também são conceitos que nos
ajudam a perceber melhor os diferentes algoritmos.

5 – The Algorithm Design Manual

Este não foi o primeiro livro de algoritmos que comprei nem é
considerado o “standard”. O primeiro que comprei – e que, sinceramente,
nunca consegui ler todo – foi o Introduction to Algorithms. Além de grosso, tem uma abordagem extremamente acadêmica e formal. Por outro lado, este, 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.

6 – Algorithms in Java

Decidi incluir um outro livro de algoritmos, desta vez em Java.
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. Está dividido em cinco partes, separadas ao longo de dois 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 arquitetura ou mesmo os Core J2EE patterns
da Sun – é essencial para o profissional que trabalhe em linguagens
orientadas a objetos. Isto pode ser provado tipicamente na entrevista
de emprego, já que no mínimo uma perguntinha de padrões é sempre feita
(dica: se te perguntarem para dizerem um padrão de desenho que
conheçam, NÃO respondam Singleton!).

8 – The Pragmatic Programmer: from Journeyman to Master

Tal como o já citado 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! Atualmente, a grande maioria dos profissionais sabe o que é
refactoring, mesmo que não o pratiquem tanto assim. Mas é
extremamente estranho como um conceito tão simples não tinha sido
esquematizado corretamente 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 projeto 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, exatamente 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 que sejamos melhores programadores. Especialmente agora com o renascimento de linguagens funcionais, também
pode vir a ser uma vantagem profissional.

Certamente esqueci-me de outros livros importantes, mas estes são aqueles que considero poderem contribuir muito para a qualidade que um
profissional pode vir a atingir. Aceito recomendações para outros
livros!