Os programadores não leem livros – mas o senhor deveria ler

Um dos temas centrais do stackoverflow.com é que os desenvolvedores de software não aprendem mais a programar com livros, pois Joel mencionou:

Os programadores parecem ter parado de ler livros. O mercado de livros sobre tópicos de programação é minúsculo em comparação com o número de programadores em atividade.

Joel expressou sentimentos semelhantes no livro de 2004 The Shlemiel Way of Software:

Mas a maioria das pessoas ainda não lê. Ou escreve. A maioria dos desenvolvedores não lê livros sobre desenvolvimento de software, não lê sites sobre desenvolvimento de software, nem mesmo lê o Slashdot.

Se os programadores não aprendem com livros hoje, como eles aprendem a programar? Eles fazem isso à moda antiga: arregaçando as mangas e escrevendo código – enquanto aproveita a sabedoria coletiva da Internet em uma segunda janela. A Internet tornou os livros de programação obsoletos. Ela é mais rápida, mais eficiente e simplesmente mais inteligente obter suas informações de programação on-line. Acredito que a experiência de Doug McCune, que ele descreve apropriadamente como Por que não leio livrosé bastante típico.

Atribuo parte da culpa diretamente ao setor de publicação de livros técnicos:

  • A maioria dos livros de programação não presta. A barreira para ser um autor de livros, pelo que sei, é praticamente inexistente. A relação sinal-ruído da publicação de livros não é, sem dúvida, muito melhor do que o que o senhor encontrará na Internet. Das centenas de livros de programação lançados todos os anos, talvez dois ou três valham realmente o investimento de tempo.
  • Livros de programação vendidos por peso, não por volume. Parece haver uma relação inversa entre o tamanho de um livro de programação e sua qualidade. Quanto maior o livro, de alguma forma, menos informações úteis ele conterá. Qual é o objetivo desses gigantescos tomos de referência? Como o senhor encontrar o que quer que seja nele, muito menos levantar as malditas coisas?
  • Livros de programação de solução rápida voltados para iniciantes. Não tenho nada contra a entrada de novatos no campo da programação. Mas continuo a acreditar que o “Learn [Insert Language Here] em 24 horas!” são uma variedade de livros que não são prestando um desserviço à nossa profissão. O foco monomaníaco na agora mesmo e a maneira mais rápida e fácil possível de fazer as coisas leva os iniciantes ao caminho errado – ou, como gosto de chamá-lo, “PHP”. Eu brinco! Estou brincando!
  • Programação de livros pornográficos. A ideia de que ter uma pilha de livros de programação grossos e de aparência importante na sua estante, em grande parte não lidos, de alguma forma o tornará um programador melhor. Como David Poole que uma vez me contou por e-mail, “eu nunca conseguiria fazer isso na vida real” parece ser o tema da pilha de livros pornográficos sobre programação. É por isso que considerei, e rejeitei, comprar o livro do Knuth Arte da programação de computadores. Tente comprar livros práticos que o senhor realmente lerá e, mais importante, colocará em prática.

Como autor, também sou culpado. Fui coautor de um livro de programação e I ainda não acho que o senhor deva comprá-lo. Não quero dizer isso de uma forma irônica, com chapéu de caminhoneiro e psicologia reversa. Quero dizer isso literalmente. Não é um livro ruim, de forma alguma. Tenho o maior respeito pelo meu estimado coautores. Mas as mesmas informações seriam muito mais acessíveis na Web. Prendê-las em um livro de árvore morta é, em última análise, um desperdício de esforço.

A Internet certamente acelerou o fim dos livros de programação, mas há algumas evidências de que, mesmo antes da Internet, os programadores não liam muitos livros de programação. Fiquei bastante surpreso ao encontrar a seguinte passagem no Code Complete:

Dê um tapinha nas costas do senhor por ter lido este livro. O senhor já está aprendendo mais do que a maioria das pessoas no setor de software porque um livro é mais do que a maioria dos programadores lê por ano (DeMarco e Lister 1999). Um pouco de leitura contribui muito para o avanço profissional. Se o senhor ler um bom livro de programação a cada dois meses, aproximadamente 35 páginas por semana, logo terá um bom domínio do setor e se diferenciará de quase todos ao seu redor.

Acredito que o mesmo texto esteja presente na edição original de 1993 do Code Complete, mas não tenho mais uma cópia para verificar isso. Uma pequena pesquisa revelou a passagem a que Steve McConnell está se referindo no livro de DeMarco e Lister Peopleware:

As estatísticas sobre leitura são particularmente desanimadoras: O desenvolvedor de software médio, por exemplo, não possui um único livro sobre o assunto de seu trabalho e nunca leu nenhum. Esse fato é horrível para qualquer pessoa preocupada com a qualidade do trabalho na área; para pessoas como nós, que escrevemos livros, é positivamente trágico.

É muito doloroso para mim que o senhor ler os comentários do reddit e descubra que as pessoas estão interpretando a declaração de missão do stackoverflow.com como um repúdio aos livros de programação. Por mais ambivalente que eu seja em relação ao atual mercado de livros de programação, o senhor não está se importando com isso, Eu adoro livros de programação! Este mesmo blog foi fundado com base no conceito de minha lista de leituras recomendadas para desenvolvedores. Muitas de minhas postagens no blog são minhas tentativas fracas de explicar conceitos-chave delineados há muito tempo nos livros clássicos de programação.

Como conciliar essa declaração aparentemente contraditória, o dinâmica de amor e ódio? O senhor sabe, existem livros de programação e existem livros de livros de programação.
Os melhores livros de programação são atemporais. Eles transcendem a escolha da linguagem, do IDE ou da plataforma. Eles não explicam como, mas o porquê. Se o senhor se sente compelido a fazer uma limpeza em sua estante a cada cinco anos, confie em mim, o senhor está comprando os livros de programação errados.

Eu não trocaria minha estante de livros de programação por nada. Eu me refiro a ela o tempo todo. Na verdade, eu me referi a ela duas vezes enquanto escrevia este post.

my-programming-bookshelf-small.jpg

Não vou me estender sobre meu lista de leituras recomendadaspois eu a mantenho orgulhosamente a mesma há anos.

(Atualizar: Tim Spalding gentilmente preparou uma conta no LibraryThing em meu nome – e os membros já documentaram e registraram todos os livros retratados nestas prateleiras. Impressionante e muito legal!)

Mas tenho este chamado às armas: meus cinco principais livros de programação que todo programador deveria ter – e leia. Esses livros seminais são leituras ricamente práticas, ano após ano, independentemente do tipo de programação que eu esteja fazendo. Eles recompensam as leituras repetidas, oferecendo insights mais profundos e penetrantes sobre a engenharia de software toda vez que volto a eles, munido de mais alguns anos de experiência. Se o senhor ainda não leu esses livros, o que está esperando?

Minha maior intenção é fazer com que o senhor stackoverflow.com altamente complementares a esses tipos de livros de programação clássicos e atemporais. Não se trata, de forma alguma, de um substituto para eles.

Por outro lado, se o senhor for o infeliz autor de Perl for Dummies (Perl para Leigos)então tome cuidado, pois estamos definitivamente atrás do senhor.