tags:

views:

677

answers:

12

Possible Duplicates:
What books do you suggest for understanding object oriented programming design deeply?
What is the single most influential book every programmer should read?
Best Java book you have read so far

I am currently at university and am about to start a personal project, for both experience and hopefully to help me in my studies.

However, one of the main difficulties I am having up to this point is the actual design and architecture of the system I am trying to build. Things just seem clunky, or I have to keep going back to change things because I haven't considered fully an option that I needed.

What I am looking for is a book or maybe a resource that would help me in my design. Really looking at how to split up classes (when and why), and how I should correctly use things like inheritance and perhaps other frameworks.

I don't know if it will make a difference in the books suggested but I am developing using Java.

A: 

Eric Evans "Domain Driven Design"

DDD Web site and Amazon link

Charles Bretana
+4  A: 

As far as designing the individual subsystems for your whole application, I HIGHLY recommend the Gang of Four book on software design patterns.

AlbertoPL
+1  A: 
  • Head First Software Development
  • Refactoring from Martin Fowler a book with many examples of bad code and good ways to improve the code. This helps understanding and seeing what code problems are and what could solve them. I learned more about patterns reading this book then the Gang of Four book
Janusz
+7  A: 

I highly recommend:

dfa
+1 for Head First Design Patterns and Gang of Four.
Mike J
Add Martin Fowler's 'Refactoring' to that list.
Kelly French
Also read "When Design Patterns Cause More Harm Than Good" ;-)
+1 Head First and GoF are a must
SwDevMan81
+1  A: 

Two books I recommend as advanced-introductory (if that's not an oxymoron) are

Program Development in Java: Abstraction, Specification, and Object-Oriented Design by Barbara Liskov (of Liskov's Principle fame) & John Guttag.

Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock & Alan McKean

Steve Gilham
A: 

Listed below is a list of recommended reading that comes from a developer users group, I'm a member of. It has a microsoft leaning towards it because of the focus of the user group, but there's a lot of good design and architecture books listed. I think good sources of ideas should also come from looking at source code of public domain projects similar to what you're doing. Examine how other people did what you're trying to do and see what style, methods, patterns and architecture work for you.

Design Patterns: Elements of Reusable Object-Oriented Software. Gamma,Helm,Johnson,Vlissides.

Code Complete Steve McConnel

Patterns of Enterprise Application Architecture

Anti Patterns

Refactoring: Improving the design of existing code

Refactoring Databases: Evolutionary Database Design

The Mythical Man Month

The pragmatic programmer

Writing Secure Code

Peopleware

Rapid Development

Testing Computer Software

Don’t make me think

Facts and Fallacies of Software Engineering

Dynamics of Software Development

Herding Cats: A primer for Programmers Who Lead Programmers

Software Project Survival Guide

Beautiful Code

A Sane Approach to Database Design

Programming Pearls

Clean Code

Pro LinQ Joseph Rattz, Jr

Professional SQL server Integration services (P to P series)

Pro C# 2008 and the .NET 3.5 Platform Andrew Troelsen

Programming WCF Services Juval Lowy

Software Craftsmanship. McBreen.

XSLT 2.0 Michael Kay

Xquery Priscilla Walmsley.

Inside c# Archer, WhiteChapel

PRO ASP.NET 3.5 in C# 2008 McDonnald Szpusta.

Java in a Nutshell

Beginning Pojos Sam-Bodden.

XPATH 1.0 Michael Kay

Domain-Driven Design: Tackling Complexity in the Heart of Software Eric Evans

Head First: Design Patterns Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra

Windows Presentation Foundation Unleashed Adam Nathan

The best Software Writing Joel Spolsky

Agile Software Development, Principles, Patterns, and Practices Robert C. Martin

Applying Domain-Driven Design and Patterns: With Examples in C# and .NET Jimmy Nilsson

Why Software Sucks

Code Leader Patrick Cauldwell

gjutras
there also books on usability... database design.... testing... sorry but this answer is off topic: -1
dfa
+2  A: 

As a beginner you need to keep things relatively simple initially. I would recommend two books very highly, 'Head First Design Patterns' and Martin Fowler's 'Refactoring'

The Head First book is not to everybody's liking, it's not your normal technical style book, but stick with it, it's very good.

Do not buy the Gang of Four book, not at the beginning. It is one of the seminal works of software development, but it's dry, hard to read and a catalogue. Buy it after you've got to grips with some of the patterns you are going to use and use it for reference!

Kevin Jones
+3  A: 

I would recommend Effective Java, 2nd Edition and The Pragmatic Programmer. While they both don't sound like they are about design, I believe they address what you describe: how to structure and set up code, when to use inheritance, and much more. After these, if you want to dig into classical OO design patterns, you might consider the GOF book, in particular if you do a lot UI programming.

Fabian Steeg
+1 for Pragmatic Programmer. Brilliant read, not so much about the technicalities but more praticalities in the software development world.
Mike J
+1  A: 

Just carry on doing what you're doing - practice.

Refactoring ('going back to change things') is the norm rather than the exception and you should expect to be doing this on any project.

That's not to say knowing a few principles and practices is a bad thing but IMHO it's the hard learned lessons from following the wrong paths that cement those lessons and allow your to home your skill.

In terms of books the best principles book I've read is Uncle Bob's Agile Software Development, Principles, Patterns, and Practices, which provides the more advanced OO principles from which everything else is derived.

I'd also throw in Code Complete, which while I don't agree with all of it 100% is mostly on point and a great classic.

I'd second what @Kevin Jones said about the GoF book - read it way back when, it's certainly dry, many of the patterns I was using anyway and it's normally one of those books that sits on developers desks as a status symbol.

The major benefit the GoF book provides is the common naming it introduces but a search on Wikipedia for Design Patterns will provide the same, is more up to date and extensive (obviously) and is much easier reading.

Nick Holt
+1 for the best answer. Practice and learn.
A: 

These books should get you going, I learnt a lot from them when faced with the same design issues once

Head First Object Oriented Analysis & Design

Head First Design Patterns

I'd also tell u to look into UML diagrams when deciding the architecture and defining modules (which might consist of a single class or a couple of classes(or interfaces)) for your application. I havent read any good book on uml though that i could recommend.

Zaki
A: 

If you're intested in the Gang of Four-- which I also recommend-- but want something more than C++ examples, it looks like Antropy Consulting has Flex 3 and Actionscript examples of all of the constructs on their website. That will give you another perspective on the practical application of the principles they discuss.

JohnMetta
A: 

You're probably getting a little ahead of yourself. Many of the books and ideas cited are not going to be of use to you right now. Until you have experienced more development problems the patterns and solutions will really have no meaning.

It would be nice to just "turn on the faucet" and fill our brains with the stuff in those books, but I don;t think those books are that useful for someone who has not spent a little time coding and seeing the problems firsthand.

I'd suggest just trying to break the problem into abstractions that you can use to solve the problem mentally/manually. Can you map the problem and problem domain to some simple object that you can model in the computer.

Start with simple bits and add more complexity. If some object seems to have too much going on or too many interfaces to other objects then it probably need to be modified to be a few different objects.

The next step is then asking peers/Stack overflow about a particular design/set of classes you have come up with. That might get you a lot more bang for your buck than wading through dozens of books.

Tim