Bom, me perguntaram o que eu li sobre OOD e OOP e esses foram as coisas que eu consegui pensar na hora:

Acho que pra começar a falar alguma coisa sobre arquitetura e design é preciso ter uma boa noção sobre orientação a objetos e, infelizmente, não achei um lugar pra começar com facilidade. Pra corrigir esse problema eu pretendo muito em breve comprar o Object-Oriented Software Construction pra tentar extrair dele partes que tornem mais simples explicar e enteder OOP. Esse livro tem dois problemas: é bem extenso e difícil de encontrar (logo caro), achei uma livraria no Brasil que vende e penso em começar a me aventurar com ele na semana que vem. Mas, com certeza um ótimo começo é a WikiWiki que é um repositório incrível de conhecimento compartilhado!

Com uma noção maior de OOP é hora de entender quais práticas são comuns dentro do paradigma. Recomendo fortemente o livro do Kent Beck Test Driven Development: By Example e o livro do Fowler o Refactoring: Improving the Design of Existing Code, pois as práticas se complementam e ambas influenciam diretamente na qualidade não só do seu código como também do design. Ainda nessa onda de Refactoring e Kent Beck eu recomendo a leitura do Implementation Patterns, que vai ajudar a entender melhor o conceito de estado e de quebra é uma verdadeira aula de como escrever código legível e inteligível.

A partir desse ponto deverão existir muitas e muitas referências sobre o Design Patterns: Elements of Reusable Object-Oriented Software que é um livro obrigatório para melhorar qualidade de refactorings e, principalmente, para manter um vocabulário comum de soluções para problemas já visitados, ou seja, não tentar inventar a roda e dar um nome diferente pra ela.

O Clean Code: A Handbook of Agile Software Craftsmanship com certeza deveria ser o próximo livro a ser lido porque ele vai falar das dúvidas que com certeza aparecerão com relação a exceções e seu tratamento, a organização de classes e a importância de princípios básicos, mas, que geralmente são negligenciados como The Law of Demeter. Além disso ele vai complementar a leitura do Implementation Patterns.

Aproveitando o gancho do Uncle Bob eu estou lendo o Agile Principles, Patterns, and Practices in C# pra ter maior noção de UML e poder discutir a aplicação de S.O.L.I.D numa aplicação real, ele é realmente fantástico! Além de ser uma referência sólida (que excelente trocadilho, Nelson…) para OOD (a melhor que li até então).

Outro livro que acredito ser obrigatório para entender melhor testes (principalmente o que testar e o que não testar) e mocks (principalmente) é o GOOS. Inclusive a palestra que apresentamos recentemente no PHPSC e no Intercon é baseado neste livro. Para se aprofundar ainda mais em testes recomendo o xUnit Test Patterns: Refactoring Test Code e depois ir procurando mais fontes ou perguntar pra outras pessoas sobre quais materiais elas tem como referência eu li boa parte desses:

A partir daqui acho que vou ficar devendo livros que eu realmente consegui terminar… Tenho idéia sobre o que falam e li parte considerável deles, mas, não os terminei completamente. Acho importante falar neles porque eles dão base sólidas de como aplicações reais são criadas no mundo real, são eles:

Essa foi minha humilde lista do que eu li e leio. Atualmente eu tenho lido bastante coisa sobre Ruby pra tentar aprender alguma outra linguagem, se alguém se interessar por quais livros eu comecei, por favor, me mande um sinal de fumaça.

Note: Você não precisa comprar os livros na Amazon, eu coloquei o link deles porque eu tenho Kindle.

Se alguém achar interessante posso passar depois uma lista dos livros que tenho no Kindle, quem sabe ajuda em algo :)