RODRIGO BRANAS
08 de Setembro de 2023

Livros recomendados sobre Design e Arquitetura de Software

Esses são os livros que eu recomendo sobre design e arquitetura de software. A maior parte deles é atemporal, ou seja, é um conhecimento que você vai levar para o resto da sua carreira, por muito e muitos anos.

O ideal é começar pelos livros que abordam formas de escrever código de melhor qualidade, como o Clean Code, Refactoring e Working Effectively with Legacy Code. Esse último é mais indicado para quem trabalha com um sistema legado, que tem uma dívida técnica alta.

Não vejo sentido em começar a estudar nada relacionado a padrões de projeto se você ainda não sabe escolher um bom nome para uma variável ou simplificar um condicional. Lembre-se, escrever código vem antes de tomar decisões de design.

Alias, pra quem é de Java, uma dica sensacional é ler o livro Effective Java do Joshua Bloch. Eu lembro de ter lido há muitos anos atrás e me ajudou muito na forma como eu escrevia código em Java na época.

Conforme vamos conhecendo novas linguagens, mudamos a nossa forma de escrever código, muitas vezes abrindo a nossa mente para outros estilos de pogramação, outras convenções adotadas por diferentes comunidades, por isso eu sempre indico o livro o Seven Languages in Seven Weeks.

Com Clean Architecture e Domain-Driven Design nós mergulhamos no design, na definição e atribuição de responsabilidades de cada camada e também amaduremos na modelagem do domínio. Sobre Domain-Driven Design eu sempre recomendo o livro Implementing Domain-Driven Design do Vaughn Vernon. Depois dele, gosto bastante do Learning Domain-Driven Design do Khononov. O livro do Eric Evans foi o primeiro, mas na minha opinião é um pouco mais prolixo, então não recomendo muito.

Livros sobre padrões de projeto são sempre muito úteis e nessa lista eu trouxe dois bem importantes: Design Patterns do GoF e Patterns of Enterprise Application Architecture, do Martin Fowler. Ambos são essenciais e você pode ir lendo aos poucos, não necessariamente de forma sequencial. Tem padrões que eu já li mais de 10 vezes e outros que talvez eu nunca tenha lido. Se quiser ir além, você pode ler o livro Refactoring to Patterns do Joshua Kerievisky, ele mostra diversas técnicas de refatoração envolvendo a aplicação de padrões de projeto.

Hoje em dia estamos quase sempre lidando com uma arquitetura distribuída e por isso o livro Microservices Patterns do Chris Richardson é essencial. Ele aborda muitos padrões fundamentais para este tipo de arquitetura como SAGA, CQRS, API Gateway, Circuit Breaker, entre outros. Um outro livro muito interessante sobre o assunto é o Practical Microservices do Garofolo.

Completando a lista temos dois livros sobre arquitetura de software do Neial Ford: Fundamentals of Software Architecture e Software Architecture: The Hard Partes, ambos excelentes.

Por fim, existem dois livros que contam muitas histórias interessantes, falam sobre comunicação, conhecimento, modelagem, gestão, complexidade e que podem ser lidos em qualquer momento da sua carreira: Mythical Man-Month e Pragmatic Programmer.

Sobre o idioma, depende muito do seu nível em inglês, se ele for mais iniciante talvez seja preferível sempre comprar os livros em português. Se você já estiver mais acostumado e quiser gastar pelo menos o triplo pra comprar o livro, escolha a versão em inglês, além disso ela não terá erros de tradução que são muito comuns nesse tipo de livro.

Boa leitura!



Patterns of Enterprise Application Architecture
Martin Fowler


Microservices Patterns
Chris Richardson


Clean Code
Robert Martin


Design Patterns
Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides


Clean Architecture
Robert Martin


Refactoring
Martin Fowler


Practical Microservices
Ethan Garofolo


The Mythical Man Month
Fred Brooks


The Pragmatic Programmer
Andy Hunt e Dave Thomas


Seven Languages in Seven Weeks
Bruce Tate


Refactoring to Patterns
Joshua Kerievisky


Effective Java
Joshua Bloch


Software Architecture: The Hard Parts
Neial Ford


Working Effectively with Legacy Code
Michael Feathers


Fundamentals of Software Architecture
Neial Ford


Learning Domain Driven Design
Vlad Khononov


Implementing Domain-Driven Design
Vaughn Vernon


Domain-Driven Design
Eric Evans

#livros