Recentemente tivemos uma conversa com o time editorial da InfoQ sobre os livros que poderíamos indicar para leitores da Infoq baseado nos livros que mais nos influenciaram como programadores, arquitetos e gerentes.Aqui está uma lista de dezesseis livros que todos nós concordamos que podem ajudar, com algumas dicas e comentários dos editores que fizeram a sugestão. Alex Blewitt Meu guia de referência é An introduction to algorithms (Cormen/Leiserson/ Troubled IT Projects de John Smith é provavelmente um livro que você nunca ouviu falar antes, mas realmente explica muitas coisas que podem dar errado durante a gerência de um projeto . É quase tão engraçado como um scorecard no projeto que você está trabalhando atualmente... O que eu acredito que valha a pena observar, entretanto, é que depende do seu nível de experiência ou que tipo de livro você gosta. O livro do Kent Beck é indicado para pessoas que estão iniciando com metodologias ágeis ao passo que Cockburn's deve ser melhor para pessoas com mais experiência. De maneira similar, eu não indicaria Introduction to Algorithms para um iniciante, mas se você quiser saber como implementar B-trees ou entender como estimar a complexidade de um algorítmo, ele é indispensável. Deborah Hartmann Charles Humble Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides é uma boa sequência para SIC-P, entretanto eu devo admitir que não gostei na primeira vez que li. Porém, é inegável que ele captura a essência da orientação a objetos, e logo percebi que muitas das interessantes teorias que estavam ali eu nunca tinha realmente usado. Com o passar do tempo eu fui aprendendo a apreciar as grandes idéias contidas neste livro e ele continua sendo minha referência sempre que estou preso em algum problema de design de software. Altamente recomendado. Mark Levinson Srini Penchikala Werner Schuster Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture de Jon Stokes reúne anos de artigos sobre CPUs e outras tecnlogias da Ars Technica. Jon Stokes ('Hannibal') abre a caixa preta da CPU, nos mostrando bits interessantes aqui e ali – e também faz com CPUs recentes como x86 e Power CPUs. Saber que a instrução fusion melhora a reordenação do buffer eficientemente é legal para discussões water cooler – mas saber que a hierarquia de memória e o comportamento do cache impactam na performance das CPUs mais modernas pode simplesmente ajudar você a otimizar-se fora de um canto apertado. O artigo de Alan Kay The Early History of Smalltalk é uma boa fonte de informações. Eu comecei a relê-lo este ano – e de alguma forma eu sempre encontro coisas novas; na última leitura eu percebi como o Smaltalk original era baseado em Actors model. A grande maioria dos artigos da HOPL é sobre história – mas eu descobri que uma grande parcela dos desenvolvedores deixam para trás boa parte dos eventos que aconteceram e das tecnologias que foram desenvolvidas antes de 95. “É um pouco perturbador mostrar 40 anos de tecnologia para os desenvolvedores 'experientes' e vê-los ofegar com dúvida (que tem o benefício de aparecer como Prometheus estruturava uma novela anteriormente, embora isso fique chato muito rápido. Ryan Slobojan Stefan Tilkov
Extreme Programming Explained (Kent Beck) é uma boa introdução a XP, e mesmo que você não adote metodologias ágeis na sua totalidade, ele é uma boa leitura. Provavelmente não é uma referência para mim.
Focado em um ambiente altamente colaborativo para desenvolvimento ágil, o livro de Jean Tabaka's entitulado Collaboration Explained: Facilitation skills for software project leaders fornece respostas para questões difíceis de gerenciamento como: conflitos, comunicação interpessoal e restrições de tempo. Se você odeia reuniões e acredita que elas deveriam ser melhores, você deve ler este livro – envolvido ou não em projetos ágeis!
Structure and Interpretation of Computer Programs de Harold Abelson, Gerald Jay Sussman, e Julie Sussman: Eu fui recomendado ao 'SIC-P' a uns anos atrás quando estava conversando com um amigo sobre o fato que minhas habilidades como programador pareciam que tinham parado de evoluir. Este não é, a particularmente, um livro simples e se você está atrás de soluções prontas para os problemas, então este não é o livro que você procura. Ele é, entretanto, recompensador, uma leitura densa e provavelmente teve mais impacto no meu código do que qualquer outra coisa que eu tenha lido.
Agile Software Development: A Cooperative Game (2nd Ed) de Alistair Cockburn. Possivelmente o livro mais interessante que eu já tenha lido sobre desenvolvimento ágil. Não é sobre nenhuma metodologia específica, ao invés disso Alistair analisa “game play”, comunicação individual e cooperação entre o time: os elementos que compõe o núcleo de desenvolvimento de software. O livro também contém seções de agilidade fora do contexto de software, relatório de diversas metodologias e muito mais.
The Wisdom of Teams de Jon Katzenbach e Douglas Smith – Um livro que antecedeu a fase de metodologias ágeis, Katzenbach e Smith estudam times reais em várias indústrias fornecendo algumas análises reais e rigorosas sobre as questões que fizeram estes times darem certo. No final do livro você vai descobrir que "nada pode garantir a criação de times altamente performáticos. O melhor que você pode fazer é fornecer condições que ajudem a melhorar o desempenho deles. "Esse livro está no centro das minhas publicações relacionadas a Porquê Scrum funciona.
Patterns of Enterprise Application Architecture de Martin Fowler: Eu gosto deste livro porque ele é uma fonte única para basicamente todos os problemas de design que arquitetos e desenvolvedores passam durante o desenvolvimento de software. Ele talvez seja o melhor livro de padrões (junto com Gang of Four design patterns), cobre tópicos como lógica de domínio, camada de apresentação, gerenciamento do session state, estruturação objeto-relacional e padrões de comportamento. Como qualquer boa fonte, os padrões discutidos neste livro são relevantes e válidos, quer você ainda esteja usando EJB 2, JEE, ou um framework light-weight como Spring e Hibernate ou ainda esteja numa aplicação .NET. Leitura e compra obrigatória para todo desenvolvedor.
Domain-Driven Design de Eric Evans: Este livro tem sido uma boa referência para a comunidade de desenvolvimento de software desde que foi lançado em 2004. Ele ratifica a importância do alinhamento do domínio de negócio com design de software e desenvolvimento. Alguns dos conceitos discutidos, como Ubiquitous Language, Model-Driven Design, Bounded Context, e Anti-corruption Layer, pode ser usado para qualquer domínio de negócio para gerenciar a complexidade do modelo de domínio. Depois de ler este livro eu comecei a aplicar os princípios de DDD nos meus projetos sempre que podia e tive sucesso eliminando modelos de domínio anêmicos e tratando a lógica de negócio de uma maneira mais OO. Os conceitos discutidos neste livro não tem haver com nenhuma tecnologia ou framework específico, desta maneira eles podem ser aplicados a qualquer projeto, seja em Java,.NET ou qualquer outra tecnologia. Além disso, este livro foi minha principal inspiração para o meu artigo "Domain Driven Design and Development In Practice" publicado no ano passado. Este livro é leitura obrigatória para qualquer desenvolvedor que esteja envolvido em gerência ou criação de domínio de negócio.
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions de Gregor Hohpe e Bobby Woolf: Este tem sido uns dos meus livros prediletos desde 2004 quando eu o li a primeira vez. Os autores descreveram e organizaram de forma muito boa vários padrões de projetos assíncronos úteis no dia a dia de aplicações corporativas, especialmente os que envolvem sistemas de integração. A discussão principal está nos vários estilos de integração incluindo "Mensageria" que é o coração dos padrões de comunicação assíncronos. Os exemplos no livro incluem o popular “loan broker” que tem sido implementado recentemente em vários frameworks ESB. Este livro tem sido a inspiração para as mais recentes integrações usando SOA e frameworks ESB (como ServiceMix, Mule, e Spring Integration) cujo suporte para padrões de integração são discutidos neste livro.
Peopleware - Productive Projects and Teams de Tom DeMarco e Timothy Lister: Eu li este livro no último ano após ter sido recomendado por um amigo. Eu devo dizer que foi um dos livros mais influentes que já li. No livro, os autores demonstram, com ajuda de exemplos da indústria, relatórios, e estatísticas, que as pessoas são o maior problema em desenvolvimento de software (vide o titulo Peopleware), não técnico (como hardware ou software). Sua teoria é que os desenvolvedores, designers e qualquer outro que precisa principalmente do cérebro para trabalhar podem atingir um estado de "fluxo", onde eles podem ter ótimas idéias resolvendo problemas complexos. Mas qualquer interrupção, seja um email, telefonema, ou uma caminhada, vai quebrar este fluxo e ele precisa de tempo (15 minutos baseado nas estatísticas) para voltar ao fluxo novamente. De acordo com os autores, o trabalho do gerente não é fazer com que os membros do time trabalhem, e sim fazer com que seja possível que eles executem o trabalho da melhor maneira. Já tem mais de 20 anos que esse livro foi publicado pela primeira vez e os conceitos discutidos ainda permanecem relevantes e válidos mesmo após o surgimento de todas novas tecnologias para desenvolvimento de software, frameworks e metodologias de gerenciamento de projeto ágeis. Este livro é leitura obrigatória para todo gerente de projeto e líder de desenvolvimento cuja responsabilidade é gerenciar os membros do time. Eu realmente recomendo este livro para todo gerente de projetos, e que leiam mais de uma vez.
Pragmatic Thinking and Learning: Refactor Your Wetware de Andy Hunt traz o ponto de vista dos Programadores Pragmáticos para a plataforma final: a substância cinzenta dentro de nossas cabeças. Ele contém diversas maneiras para ajudar a melhorar o aprendizado, trabalho etc., para aqueles que usam o modelo de aprendizado Dreyfus.
Também vale a pena dar uma olhada nas próximas conferências HOPL. Muitos dos artigos estão disponíveis online e também de forma impressa. Parece que o mundo feio de linguagens como C, imperativas, complicadas, baseadas em chaves pode perder espaço para outra variedade de paradigmas. E como essas coisas são: as linguagens e idéias para o futuro estão por aí a décadas. Os artigos da HOPL relatam histórias detalhadas de várias linguagens que já fizeram sucesso ou cujo sucesso ainda estar por vir, como Smalltalk, Erlang, Lua, LISP, ou várias outras.
Effective Java de Joshua Bloch: Effective Java é fortemente reverenciado como uma das bíblias do desenvolvimentos em Java. Ele fornece ao leitor não apenas o que está disponível na linguagem, como outros livros fazem, mas como usar a linguagem da forma mais efetiva possível para criar aplicações rápidas, confiáveis, escaláveis e manuteníveis. Muitos dos princípios podem ser aplicados a outras linguagens de programação, assim como muitos dos princípios de design de software são universais. Eu percebi que, depois de ler este livro, eu olhava para o código que desenvolvia de uma forma diferente – ficou mais legível, com menos código repetido, e mais fácil de consertar eventuais bugs em algum processo de manutenção. Eu considero este livro leitura obrigatória para qualquer um que queira desenvolver com Java – como falei anteriormente, ele não apenas aponta o que tem de bom na linguagem, e sim como fazer uso de forma eficiente.
Um dos melhores livros que li nesses últimos anos foi o Release It! de Michael Nygard – ele contém conselhos práticos de como alguém pode fazer algo funcionar na vida real. O livro vem com estórias de guerra de como grandes sistemas falharam, e Michael usa sua grande experiência para extrair alguns anti-padrões, problemas que ocorrem repetidamente em designs principiantes. Ele então mostra como resolver usando os padrões apropriados. Eu encontrei este livro para ser um bom entretenimento para casos da vida real, e um guia completo de conselhos aplicáveis a todo sistema que você realmente queira que funcione.