tags:

views:

234

answers:

8
+2  Q: 

Help with design

I think I am pretty good with programming C# syntax. What I am looking for now is some resources, books(preferable), websites, blogs, that deal with the best way to design object oriented Desktop Applications and Web applications, especially when it comes to data and databases.

Thanks

+1  A: 

For a book on how to develop software I would recommend The Pragmatic Programmer. For design you may want to look at Interface Oriented Design. Code Complete is an "A to Z" reference on developing software. You might also want to consider the O'Reilly Head First books, especially Head First Object-Oriented Analysis and Design, as something a little easier to start with.

EDIT I don't know how I forgot about Bob Martin, but you could also read any of the books that Object Mentor has on any of it's lists. Here is their section on Software Design. In particular I'd recommend Agile Software Development: Principles, Patterns, and Practices (Amazon, but it's also the second book on the Object Mentor list).

tvanfosson
+1  A: 

I haven't been thrilled with any of the recent books, so much so that I'm seriously thinking about writing a new one. The "Head First" books generally have read to me ike one step above the "For Dummies" books (to be fair, I haven't read that one.)

I'm actually fond of Peter Coad's Java Design; you can get one cheaply used, it's no longer in print. Obviously, it's Java heavy, but the design part is good, and pretty lightweight.

Ivar Jacobson's Object Oriented Software Engineering is also very good (it introduced the idea of "use cases", among other things) and does appear to still be in print, but there are zillions of used copies around.

Charlie Martin
Yes, I've looked at the Head First book but I didn't see anything about working with databases or a data layer.
jumbojs
+5  A: 

You are asking to drink from a firehose. Let me encourage you to write some small programs before you tackle big ones. However, here are a few books about design and a paper which argues that a lot of design can't be learned from books:

  • On System Design is a good short paper that articulates what a lot of experienced programmers think about the art of design.

  • Programming Pearls by Jon Bentley presents some lovely examples of design in the small. It's a fun read and includes many classic stories.

  • The Unix Programming Environment by Kernighan and Pike presents one of the great software-design philosophies of the 20th century. Still required reading after almost 25 years.

  • Software Tools in Pascal is narrower and deeper but will tell you a lot about the specifics of building software tools and the design philosophy.

  • Abstraction and Specification in Program Development by Barbara Liskov and John Guttag will teach you how to design individual modules so they can fit with other modules to form great libraries. It is out of print but your local University library may have it.

  • C Interfaces and Implementations presents a very well designed library that gives C programmers the abstractions found in much higher-level languages.

  • Finally, Test-Driven Development will teach you how to articulate and develop a design through the stuff that matters: what your software actually does.

I learned a lot from Composite/Structured Design by Glenford Myers, but it bears a little less directly on the topics you asked about. It talks primarily about good and bad ways modules can interdepend.

Norman Ramsey
+1  A: 

I pick up the following keywords from your question: Object Oriented (modeling and programming), building desktop applications, building web application and database design. Because you didn't mention any specific language, it's very difficult to make a recommendation for you. So I pretend I'm the one asking the question and knowing me, I recommend to myself :

  1. OO: Thinking in C++ or thinking in Java by Bruce Eckel.
  2. Building desktop applications: Ultimate++
  3. and web applications development: http://www.djangoproject.com/
  4. Database: I don't have any good recommendation.

My rational for making the above recommendations:

  1. I don't want to recommend a dozen books or more. You won't have to read them all.
  2. The "Thinking" books by Bruce Eckel can cover major OO concepts as you wouldn't have any problem picking up a new language since it's just a matter of syntax.
  3. Ultimate++ can produces leanest desktop applications and they use templates very agressively, resulting in very elegant codes. The other advantage for using U++ over something like MFC, WPF, java Swing Java SWT, Python, etc is that your executable do not have any baggage or dependencies. It won't require your users to install a JRE, .NET framework, MFC DLLs, or Python, etc. That's my choice, therefore I make that recommendation.
  4. Django because I know and like Python and I don't know Ruby very well. Ruby experts would say RubyOnRails or C# experts would say ASP MVC. Java might says Struts, JSF, Stripes, but I don't think Java has anything that can compete against frameworks from Python, Ruby, C#, or even PHP these days.
Khnle
+1  A: 

I'm suprised no one has mentioned Design Patterns by the "Gang of Four" yet. It is the book that really cemented in my mind how OO should really be used. The first couple chapters are especially enlightening about how things should work in a good system. It's no the easiest read, but I think it's the best. If you want a lighter view of the same subject matter, check out Head First Design Patterns.

Steve Rowe
Although the book is *called* 'Design Patterns' I have never found much design in it. About half the book is a compendium of techniques that are used by good programmers---very useful for programmers to develop some maturity. The rest is workarounds for things in C++ that are broken.
Norman Ramsey
The patterns found in the book work in all OO languages and were inspired by Smalltalk work. To call them workarounds for things in C++ that are broken is to miss the point of the book. You are correct that the design isn't up front all the time, but it is there in the reason for the patterns.
Steve Rowe
+1  A: 

Martin Fowler's Enterprise-Application-Architecture is a great book for common pattern's you'll see in a lot of client server applications.

More of a book on thinking about object oriented problems is Eric Evan's Domain-Driven Design: Tackling Complexity in the Heart of Software

leaf dev
insightful books they are...
Hemanshu Bhojak
A: 

Years ago, as a c programmer who had done some Windows 3.1 programming, I learned a lot about object oriented design by using a development framework, specifically Borland's Object Windows Library. Their package back then also had a well-designed database object library for their database engine. Nowadays, all the database stuff is SQL, which does not lend itself to demonstrating, imho, good design.

So, my advice would be to do some programming of something you're a bit familiar with, making use of a well designed object library. I am not sure where to point you - Visual Studio is kind of huge, the Office object models are a little hard to get your hands around until you've spent some time with them...

A: 

You should also have Object Oriented Analysis and Design with applications - Grady Booch.

It's a must have for people interested in OOAD

Hemanshu Bhojak