views:

182

answers:

5

i'm looking for a book that talks about sofware decision like :

  • when should i use thread pool and shouldn't. and in the first case, explains how.

  • how should i acess my DB , how big my transactions should be

  • how to read XML, to use DOM or SAX, what library to choose, and best ways to parse

  • how to handle client-server app best efficient way

and more stuff like that. is a book like that exist ? (preferably in c++ but not that important)

+1  A: 

Your questions are ranging across so many technologies that a single book is unlikely to be what you need. It sounds like you're hearing about many kinds of techniques and ideas and trying to figure out where to apply them. My advice would go as follows:

First, start with particular problems that you need to solve today. Decompose the problems and try identify decision points. Work on on a bit, seek options and try to understand forces that drive you towards one. Then pick one and ride it, see how it works, see how it hurts. Reflect on (or if you have the luxury of time, try ) some alternative.

So consider some of your points

how to handle client-server app best efficient way

To me this reveals an initially mistaken way of thinking. There can be no one "Best Way" for client server. Lots of possibilities here. Probably too many to really evaluate, so pick a standard technology which fits your current skills and really understand it. I'm a Java guy so I might pick an Applet and RMI to some EJBs in an App Server (actually I wouldn't but that's a whole other story). Once you get your hands dirty you start to understand some of the decisions.

I infer from your questions about thread pools and databases implies that you're unfamiliar with these technologies, and therefore I'd suggest picking a framework (eg. Spring in my world, presumably in the C# world you have various .NET capabilities) so start by understanding how to use those. Let the framework author do the hard stuff initially, then read up about the design decisions the author made.

djna
A: 

I think you're going to need several books to cover all of these topics.

For multi-threading, Programming with POSIX Threads by David Butenhof is very good. Like the title says, it focuses on the POSIX API, but much of the book is applicable to threading in general. Doug Lea's Concurrent Programming in Java is also first-class and not too specific to Java. Both of these are very densely packed with information, and require effort to go through but it's well worth it.

In XML, I don't really have experience with using C or C++, only Java. There I have usually gone with books published by O'Reilly, as XML is more practical and suited to their style of books. Java and XML I recall as being quite good, and it will give an overview of both SAX and DOM. (But anyway, the answer to the question of whether to use SAX or DOM is: Almost always use SAX, and use DOM only if you need to represent XML as XML in memory and you don't have any other model available. DOM really is horrible.) And in the case of XML, you can also find good articles on the Web.

For distributed programming, which client-server is a part of, one good book is Pattern-Oriented Software Architecture volume 2: Patterns for Concurrent and Networked Objects by Douglas Schmidt et al. It is a design pattern book, covering different designs for distributed systems and when you would use each one.

Can't help with databases, haven't mucked around with them enough. And if you have any other topics, I recommend the same approach: get a separate book for each topic, you'll get a lot more and much better information that way.

jk
A: 

Sounds like you have specific questions on implementation details - that's not the same IMO as good software design principles. You can find the answers to your questions with a bit of google fu and good luck with that but answering those questions will tell you nothing about software design.

If you want to read a couple of good books about real software design then read The Art of Computer Programming by Donald Knuth or Programming Pearls by Jon Bentley. Learn some good fundamentals and you'll soon learn to separate the wheat from the chaff so to speak.

zebrabox
Those books don't really cover software design, they are more at the algorithm level.
jk
Algorithms are software design. They tell you how to think about problems and how to solve them - that is design. Think about the problem and the best way to solve it and you have a way of approaching software design.
zebrabox
I still wouldn't call algorithms *software design*, which to me has more of a connotation to the overall architecture, not the details, and the skills of being a good algorithm designer don't really translate to being a good architecture designer.
jk
+1  A: 

I found Efficient C++ quite readable. It covers many of those topics.

AShelly
A: 

It has to be Code Complete

Rachel