Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I've been trying to understand the fundamentals of general abstractions and modeling: there are quite a lot of books when you search for abstractions, but most of those seem to be about learning object-oriented programming in a given language.

Is there a book out there that's the de-facto standard for describing best practices, design methodologies, and other helpful information about general abstractions and modeling? What about that book makes it special?

share|improve this question

closed as off-topic by gnat, MichaelT, Bart van Ingen Schenau, Kilian Foth, thorsten müller Jan 27 at 14:08

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions asking us to recommend a tool, library or favorite off-site resource are off-topic for Programmers as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it." – gnat, MichaelT, Bart van Ingen Schenau, Kilian Foth, thorsten müller
If this question can be reworded to fit the rules in the help center, please edit the question.

Hi David, open-ended book recommendation questions don't work well here, as they tend to be a list of people's favorite book with no explanation about why the books are any use. I've revised your question to better fit with what types of book questions we do allow here. For more information, check out Are book recommendations on-topic?. –  user8 Aug 23 '11 at 6:10
No. Every decade or so, the book is different. It is ok, but the problem is that everyone thinks of not the same book. –  user7071 Sep 2 '11 at 13:41

7 Answers 7

Personally, I'd recommend Eric Evan's: Domain Driven Design

This book gives a good history of modeling and quickly get's into best practices, with a bias on having a domain model in place, separate from infrastructure and UI layers. While this sounds very obvious, you'd be surprised at the number of apps out there that don't follow it and the developers complain their software product is a maintenance nightmare and new members to the team take ages to get to grips with the system. This book shows you how to avoid that and proposes some good strategies.

I will admit that the book can be a dry read in sections, but it's got a lot of wisdom in it. I don't think I've met anyone that's said anything bad about it and my copy is frequently borrowed by other developers who need to brush up on their modeling skills.

share|improve this answer
I, too, can recommend this book, –  Falcon Aug 23 '11 at 7:28

Have a look,if "Analysis Patterns" by Martin Fowler is suited for you. In this book, Fowler describes model patterns, that can be found in various domain problems (from Situation A, Situation B and Situation C emerge Pattern X). He uses examples from financial services and medic care.

My personal experience with the book was, that it helped me "thinking in patterns". It helped me abstract from a situation in a domain to a more abstract patterns. If you are looking for modeling and abstraction of information, then I'd recommend you to read the book (despite its age). The book does not cover however algorithm design and things alike.

share|improve this answer

If you want to read a book about how to build abstractions in programming, I would highly recommend "Structure and Interpretation of Computer programs"


By a short look into the table-of-contents,


you can see that this is all about abstractions (abstractions with functions, with data, etc.) It uses Scheme (a lisp dialect), which may scare some people off, but Scheme has a very simple syntax which gives the book plenty of room to teach you how to build bigger things from smaller ones, how to make use of different levels of abstraction and so on.

share|improve this answer

Conceptual data model patterns by David Hay and Len Silverston can be really useful in terms of modelling different business domains. I have written a blog on this topic which includes links to available resources - see conceptual model patterns.

share|improve this answer
I love David Hay's books he just published a new one in January...need to pick it up. –  Mike Brown Nov 22 '11 at 17:08
And Len Silverston as well. I agree with your assessment that just blindly copying the models can be detrimental but if you understand the approach, it's a huge jump start. –  Mike Brown Nov 22 '11 at 17:09

If you're wanting to put it into coding practice, for C# in this case (though the question didn't supply a language), Tim McCarthy's .NET Domain-Driven Design with C#: Problem - Design - Solution will go through the Martin Fowler basics of DDD and then tie it to actual implementation.

share|improve this answer

My all-time favorite is Data and Reality. Basic assumptions in data processing reconsidered by William Kent. It may look outdated because it's from 1978, but give it a try - modeling is not about new technologies but about creating a model from an universe of discourse, to be implemented in data.

You should also have seen the origin of data modeling from the CODASYL working group. The whole picture is shown in Data Base Standardization - A Status Report in LNCS 39, pp 362–386 (fig. 2). I often have the feeling that little progress has been made since then.

The books by Hay (Data Model Patterns: Conventions of Thought) and Silverston (The Data Model Resource Book - A Library of Universal Data Models for All Enterprises) have already been mentioned - I found them less usefull, but it depends on the domain you are working in.

A more practical guide is Halpin and Morgan's Information Modeling and Relational Databases: From Conceptual Analysis to Logical Design (2008). They cover different modeling languages but focus on ORM2, which I found very inspiring. This book may also be a good counterpart on books about object-oriented modeling.

share|improve this answer

No one mention it but a great book on design and modeling is Java Modeling in Color with UML. Yes I know on the surface it looks like it's tied to Java...but the technique is really language agnostic. Following up from that is Streamlined Object Modeling I am using these books (along with Silverston's Data Model Resource Book volume 1 and volume 2) to jump start development for my current project (Enterprise App for Logistics company).

If you pick nothing else up get Java Modeling in Color. It will change how you design.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.