Recommended Books
In my absence, some evil person has re-arrange my library. Apparently having the books strewn on the floor is not cool, although it make them very accessible.
Since I can actually see all the books now, I thought it would be interesting to list some of the good technical books that I have read. As usual, it is without any particular order, with the only qualification is that reading this book literally changed the way I think about software development.
- Domain Driven Design - Evans:
This is a very dry book, but it contains a lot of valuable information. I am not sure if I am at the point where I can really make effective use of DDD, but it certainly change the way I am approaching software. - The C++ Programing Language - Stroustrup:
If you know C++, you are more or less required to read it, and if you don't, learn C++ and then read it. This book is full of concepts that was very new to me when I read them. It is less useful for me now, but I still believe that you need to have some C++ background to be a good programmer. Until you haven't wrote your own string class you wouldn't understand what the whole fuss it about. - Patterns of Enterprise Applications - Fowler:
I read this one at about the same time I was digging into NHibernate. It made a lot of sense of NHibernate's code, and at the same time, convinced me that there is no real reason to reimplement those patterns. (One of the reasons that I am a bit scared when someone mention design patterns). - Working Effectively with Legacy Code - Feathers:
If you have not read it, go and do so. This book is directly responsible for the creation of Rhino Mocks, and it has affected my thinking very deeply. I am applying the same techniques for all code. I have found that it significantly increase my ability to work with complex software. - Operating Systems Concepts - The dinosaur book:
Again, you really need to read this to be able to do effective in this field. Even if you and the metals are so far away that you need a satellite link to talk to it, you have to understand what is going on. Understanding thread scheduling, interrupts, memory management and its association to the file system, paging and reclamation policies are critical to our ability to figure out how to approach a problem. - Modern Operating Systems - Tanenbaum:
Similar to the previous book, but give a lower level at some points. I read it about the same time I read Operating System Concepts, and it was very helpful to have two point of view on some things. - Operating Systems - Design and Implementation - Tanenbaum:
The Minix book, I think of it. Similar to the last two, but with a greater focus of actual code, rather than abstract concepts. - Practical file system design - Giampaolo (available as PDF):
This is a really interesting book. It focus on a relatively narrow subject, but it is full of interesting tidbits, history, education, constraints and fun. Highly recommended. - In Search of Stupidity - Chapman:
This is not a technical book per-se, but it is a great book to understand failures in the industry. It is hilarious as well. - Programming Erlang - Armstrong:
Go and read this book. The language itself is interesting, but it is the concepts that you will be exposed during this book that makes this really fascinating. - Virtual Machine Design and Implementation - Blunder:
This is not such a good book, but it did ensure that I will get an appreciation for the complexities involved in some tasks. This is a book that shows how easy it is to create a virtual machine. And it very easy indeed. (well, until you have to make guarantees about threading models and memory, need to provide hooks for JITing, debugging and profiling, etc. But the basic stuff is very simple. - Release It - Nygard:
I talked about this book extensively lately. You really want to read it to get an appreciation about how much better you can take your application's production readiness.
I have a lot more books that I have read, but non of them has really changed the way that I think about software.
Looking at this list, a couple of interesting things come up:
- No specific technology books. Stroustrup is arguably about C++, but I consider this a foundation book.
- No agile books - most of my thinking in agile related topics was from blogs / conversations / experience, rather than from books.
- A lot of low level topics.
I'll leave the interpretation to the reader.
Comments
Fowler does mention the both the Active record pattern and MVC in that book.
2 patterns that certainly monorail embraces to the full.
"Patterns of Enterprise Applications - Fowler:
I read this one at about the same time I was digging into NHibernate. It made a lot of sense of NHibernate's code, and at the same time, convinced me that there is no real reason to reimplement those patterns. (One of the reasons that I am a bit scared when someone mention design patterns)."
Please help me out with the parsing here. :-)
Do you mean that NHibernate /doesn't/ implement those patterns and that you saw no need to modify it to make it do so (because those design patterns are "scary"??) or that NH /does/ implement the patterns and you saw no need to write another framework that would as well (since the patterns were already implemented)? I was leaning towards the second interpretation but then I didn't understand the "(One of the reasons that I am a bit scared when someone mention design patterns)" remark?
/Mats
A cool list Ayende, I'd not thought of readinga book like Operating Systems Concepts, but that could be a real eye-opener.
Release It is still on my list. I cracked open my favourite book box after moving home, we have 3 in common! Picture here... :)
http://www.tobinharris.com/2008/2/18/books-lovely-geek-books
I'd suggest Programming Language Pragmatics, one of the best technical books I've ever read. It show how very old languages had fantastic ideas and concepts, and to some extend, how to implement that.
Do you have any book on "practical database system design" to suggest? I will need it sometime in near future, so having a good background on that would be helpful
I've had my eye on the Tanenbaum OS stuff for a while now. Now that you recommend it, I'm going to go for it.
Looks like the author of the VM book is Blunden, not Blunder..haha
I´m reading a book that is really helping me apply DDD in .NET:
[Applying Domain-Driven Design and Patterns: With Examples in C# and .NET] http://www.amazon.com/exec/obidos/ASIN/0321268202 (Foreword by Martin Fowler and Eric Evans -- DDD book Author)
There are some tips on starting with TDD too. Do you(Ayende and people) know this one?
Bruno,
yes, it is a really good one. Not ground breaking, because I already read DDD, but very good.
Ayende,
It offers a pratical introduction. What about Design Patterns - Elements of Reusable OO Software (GoF)? You haven´t cited that (although I´m sure you know and use it´s patterns).
The Pragmatic Programmer from Andrew Hunt and David Thomas
Refactoring To Patterns from Joshua Kerievsky
Instead of (or maybe in addition to) "The C++ Programing Language", I'd recommend Stroustrup's other book "The Design & Evolution of C++". Again, technically about C++ but really more about language design.
Great list. And yes, I have implemented my own string class in c++ and it wasn't fun but it saved me probably dozens of hours in my various c++ college courses because it was compatible with character arrays as well as the stl string class (which I hated for reasons that I can't remember). It was nice to be able to say:
jstring x = "hello";
jstring y = world;
x++;
x = x + ',';
x = x + y;
cout << x;
and it would print "hello, world"
try doing that with strcat
To: Jeff
What x++ do?
Mats,
NH already implements many of those patterns, and I don't like duplicate work.
The scared when someone mention Design Patterns refers to the pattern happy syndrome that you are undoubtly familiar with.
Tuna,
Nothing that rocked my world, sorry.
Data Access Patterns is a good book, I hear
Bruno,
I read it, it is very good, but I don't have it on the shelve now. Loaded it to a friend and he lost it.
@Ayende,
Thanks, then it all makes sense to me! /Mats
What about Refactoring again by Martin Fowler? That book had the biggest impact on how I compose my code at the lowest levels and made me think of software as being much softer. Maybe that's just not on the shelf either...
Oh, it is on the shelf, it is just not at the same level as the others, IMO.
Make no mistake, it was a very important book, but it is a list of steps to perform.
There is a book on Design Patterns (GoF) that might help to avoid the "pattern fever" or "pattern happy syndrome": http://www.oreilly.com/catalog/9780596527730/
The author (C# compiler Team Member) discusses all the 23 GOF patterns from a pratical perspective, using a modern language, and he explains real world (successfull) implementations of those Patterns (with or without C#).
I´ve read the NHibernate documentation this week. NHibernate really implements almost all the PoEAA raw patterns, but when a OR/Mapper isn´t available for some reason it´s good to know them...
Another book that might help people "infected" with "pattern fever" is this:
[Applying Domain-Driven Design and Patterns: With Examples in C# and .NET] http://www.amazon.com/exec/obidos/ASIN/0321268202 (Foreword by Martin Fowler and Eric Evans -- DDD book Author)
That I´ve pointed on the last reply.
These books had helped me...
Comment preview