InfoQ

InfoQ

Article

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Book List

InfoQ Editors' Recommended Reading List

Posted by Charles Humble on Feb 17, 2009

Sections
Process & Practices,
Development,
Enterprise Architecture
Topics
Architecture ,
Ruby ,
SOA ,
Java ,
.NET ,
Agile
Tags
Book

We recently had a conversation amongst the InfoQ editorial team about the books we would most recommend to InfoQ readers based on the books that we felt had most influenced us as programmers, architects and managers. Here is the resulting list of sixteen books that we eventually agreed on, plus a few other tips, with comments from the editors who originally suggested them.

RelatedVendorContent

Monitor your Production Java App - includes JMX! Low Overhead - Free download

Cloud Access 360 Overview

Spring Data Neo4j Tutorial

Modeling Your Cloud Services Brokerage

The Agile Tester

Related Sponsor

In today’s hyper-competitive world, later may be too late to adopt Agile development and this Roadmap for Success will help you get started. Download "Agile Development: A Manager's Roadmap for Success" now!

Alex Blewitt
Extreme Programming Explained (Kent Beck) is a good intro to XP, and even if you don't subscribe to the everything-agile approach, it makes a good read. Probably not a reference tome though.

My reference guide is An introduction to algorithms (Cormen/Leiserson/Rivest/Stein) which is an insanely dense but very worthwhile book.

Troubled IT Projects by John Smith is probably one you've not come across before, but actually explains a number of things that can go wrong in managing a project. It's also quite fun as a scorecard on the project you're currently working on ...

What I think probably is worth observing, though, is that it depends what level of experience you have as to which type of book you like (or should be recommended). Kent's XP book is good for novices and people not familiar with agile, but Cockburn's might be better for a more experienced person. Similarly, I wouldn't foist the introduction to algorithms on a complete newbie, but if you want to know how to implement B-trees or understand complexity measurements of algorithms, it's indispensable.

 

Deborah Hartmann
Set in the highly collaborative environment of agile software development, Jean Tabaka's book entitled Collaboration Explained: Facilitation skills for software project leaders provides answers to tough management issues like conflict, interpersonal communications, and time constraints. If you hate meetings and/or believe they should improve, you must read this book - whether you are involved in an agile project or not!

 

Charles Humble
Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman, and Julie Sussman: I was recommended 'SIC-P' a few years ago when I was chatting to a friend about the fact my coding ability seemed to have plateaud. It isn't a particularly easy book and if you're after quick drop-in solutions for a problem then this isn't the book you are looking for. It is, however, rewarding, dense reading and it has probably had more impact on my coding then anything else I've read.

Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides is a good follow-on book from SIC-P, though I'll admit I wasn't a fan of it the first time I read it. Whilst it undeniably captures a wealth of object-oriented design expertise in one place, I felt initially that much of it was interesting theory that I would never really use. As time has gone on though I've come to appreciate the ideas more and more and I still regularly refer to it when I'm stuck with a piece of design work. Highly recommended.

 

Mark Levinson
Agile Software Development: A Cooperative Game (2nd Ed) by Alistair Cockburn. Possibly the most interesting book I've ever read about agile software development. It's not about any one methodology, instead Alistair analyzes game play, individual communication, team cooperation: the elements that are the core of all software development. The book also includes sections on agile outside of software, a survey of the various methodologies and much more.

The Wisdom of Teams by Jon Katzenbach and Douglas Smith - A pre Agile book, Katzenbach and Smith study real teams in many industries providing some real analysis and rigor to the question of what made these teams successful. By the end of the book you will discover that "Nothing can guarantee the creation of high performance teams. The best you can do is put in place the conditions that will help them form." This book was at the core of my series Why Scrum Works.

 

Srini Penchikala
Patterns of Enterprise Application Architecture by Martin Fowler: I like this book because it's a single information resource on pretty much all the design problems an architect or a developer runs into when working on a typical software development project. It may be the best patterns book (along with Gang of Four design patterns) that covers topics like domain logic, presentation layer, managing session state, and object-relational structural and behavioral patterns. Like any good resource, the patterns discussed in this book are relevant and valid, whether you are still using pre-EJB3 J2EE technology, JEE, or light-weight frameworks like Hibernate and Spring, or a .NET application. A must-read and must-own book for every developer.

Domain-Driven Design by Eric Evans: This book has been a great reference to the software development community since it was released in 2004. It stresses the importance of aligning business domain with software design and development. Some of the concepts discussed, like Ubiquitous Language, Model-Driven Design, Bounded Context, and Anti-corruption Layer, can be used in any medium to large size business domain to manage the complexity of the domain model. After reading this book I started applying the DDD principles in my projects wherever applicable and I have been successful in eliminating anemic domain models and handling business logic in a more OO way. The concepts discussed in the book are technology and framework independent so they can be applied in any software development project based on Java, .NET or other technologies. Also, this book was the main inspiration for my "Domain Driven Design and Development In Practice" article published last year. This book is a must read for any software developer who is involved in creating or managing a business domain.

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions by Gregor Hohpe and Bobby Woolf: This has been one of my favorite books since 2004 when I first read the book. The authors have nicely organized and described several asynchronous design patterns useful in every day enterprise applications, especially those involving multi-system integration. The core discussion is on various integration styles including "Messaging" which is the heart of asynchronous communication patterns. The examples in the book include the popular loan broker process application which has been implemented in several recent ESB frameworks. This book has been an inspiration to most of the recent SOA integration and ESB frameworks (like ServiceMix, Mule, and Spring Integration) which support the integration patterns discussed in the book.

Peopleware - Productive Projects and Teams by Tom DeMarco and Timothy Lister: I read this book last year after it was recommended by a friend. I have to say it was one of the most influential books I've ever read. In the book, the authors demonstrate, with the help of industry examples, surveys, and statistics, that major problems in software development are human (hence the title Peopleware), not technical (like hardware or software). Their theory is that developers, designers and other brain-workers reach a state called the "flow", where they can make great strides towards solving complex problems. But any interruption, whether it's an e-mail, a phone call, or a walk-up, will break this flow and it takes time (15 minutes on average based on the statistics) to get back into the flow again. According to the authors, a manager's job is not to make the team members work but to make it possible for them to work. It has been more than 20 years since this book was first published and the concepts discussed in the book are still relevant and valid even after the emergence of all the new software development technologies and frameworks, and agile project management methodologies. This book is a must read for every manager and team-lead out there whose responsibility is to manage the team members. I highly recommend this book for every software manager to read - more than once.

 

Werner Schuster
Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt brings the Pragmatic Programmers point of view to the ultimate platform: the gray matter inside our noggins. It contains many ways to help improve learning, working etc., for one by using the Dreyfus learning model.

Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture by Jon Stokes collects years of articles on CPUs and other technology from Ars Technica. Jon Stokes ('Hannibal') cracks open the black box of the CPU, pointing out the interesting bits here and there - and he does so with modern CPUs such as recent x86 and Power CPUs. Knowing how instruction fusion helps improve reorder buffer efficiency is great for water cooler discussions - but knowing how memory hierarchy and cache behavior impacts performance on modern CPUs might just help you optimize yourself out of a tight corner.

Also have a look at the proceedings of the HOPL conferences. Many of the papers are available online and they're also available in printed form. It seems like the drab world of C-like, imperative, curly braces languages might be spiced up by a variety of paradigms. And as these things go: the languages or ideas of the future have been around for decades. The HOPL papers are detailed histories of many languages which either have had their time in the limelight or whose time might come, be it Smalltalk, Erlang, Lua, LISP, or many others.

Alan Kay's paper on The Early History of Smalltalk is a wealth of information. I've started re-reading it every year - somehow I always find something new; at the last reading I realized just how much original Smalltalk was based on the Actors model.

The HOPL papers are obviously mostly about history - but I find that many developers lack even the basic knowledge of events that happened and technologies that were developed before, oh, 1995. It's a bit disturbing to show 40 year old technology to 'experienced' developers and see them gasp with disbelief (which has the benefit of appearing like Prometheus bearing a novel gift from above, although that gets boring pretty fast).

 

Ryan Slobojan
Effective Java by Joshua Bloch: Effective Java is widely revered as one of the bibles of Java development. It gives the reader an understanding of not only what is available in the language, as many other books do, but of how to most effectively make use of the Java language and APIs to create fast, reliable, scalable and maintainable software. Many of the principles are also applicable to other programming languages, as a lot of the principles of good software design are universal ones. I found that, after reading this book, I looked at the code that I wrote in a different light - it became easier to read, there were less lines of code overall, and it was easier to fix bugs when I came back into it later. I consider this book an essential read for anyone that does development in the Java language - it doesn't just tell you what is there, but also tells you when and how to use it most effectively.

 

Stefan Tilkov
One of the best books I've read in recent years is Michael Nygard's Release It! – filled with practical advice from someone who makes stuff work for a living. The book is filled with war stories showing where large-scale systems fail, and Michael uses his vast experience to extract some common anti-patterns, problems that occur again and again in naive designs. He then shows how to address them using appropriate patterns. I found this book to be highly entertaining for the anecdotes from real life alone, and full of practical advice applicable every time you build systems that actually need to work.

 

  • This article is part of a featured topic series on SOA and also Agile
correction - introduction to algorithms authors by Yardena Meymann Posted
Re: correction - introduction to algorithms authors by Charles Humble Posted
Brian Goetz - java Concurrency In Practice by Doug Ly Posted
  1. Back to top

    correction - introduction to algorithms authors

    by Yardena Meymann

    Cormen, Leiserson, Rivest and Stein.

  2. Back to top

    Re: correction - introduction to algorithms authors

    by Charles Humble

    Many thanks for pointing this out – have amended the text.
    Charles

  3. Back to top

    Brian Goetz - java Concurrency In Practice

    by Doug Ly

    I would say this book change my skill working with java thread. I has been slepping with it for more than 4 years

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.