Michael said:
Guys,
I've just finished reading Design Patterns and have been over
whelmed by how clever some people are
Keep in mind that -- as they are very honest about -- the GoF only catalogued
those patterns; they didn't invent them. Also, those patterns typically evolved
over time -- and often independently in more than one place -- and with many
people contributing improvements. It may look like genius when it's all presented
in a lump, but it's really the result of a lot of collective sweat.
Are there any other books on a similar vein worth reading,
The two volumes of "Pattern-Oriented Software Architecture" are, in some ways,
better than the GoF book and definitely cover a lot more ground. Martin Fowler's
"Analysis Patterns" also shouldn't be discounted, though, as the title suggests,
it doesn't deal with programming per se.
Managing large scale projects,
As Victor mentionned, John Lakos' "Large Scale C++ Software Design" is one of the
canons, but it deals with implementation details (which is very important). If
it's _management_ of projects that interests you, Neal Whitten's "Managing
Software Development Projects" is about as good as it gets. In between, you have
a few really good books by Steve McConnell. One of the best books is Martin
Fowler's "Refactoring: Improving the Design of Existing Code". Speaking of
refactoring, some people will recomment the mound of books on eXtreme
Programming, but personally, I find that they read like indoctrination pamphlets
in a new age cult.
You won't find much on this topic since it's really a minor subset of an already
minuscule subject.
Here you have plenty of choices, but they're not all explicitly about
extensibility. Lakos' book is again a good source. Carrol and Ellis have a book
called "Designing and Coding Reusable C++". Andrei Alexandrescu's "Modern C++
Design" and Vandervoorde and Josuttis' "C++ Templates" are masterful references,
but it takes even seasoned experts multiple readings to grasp the subtleties
(it's very rewarding, though). Just studying any Standard Library reference would
be enough to give you a heap of good concepts about extensibility.
Also when you start a progrm project from scratch, how
do you lay it out?
There are too many ways to count, but basically, most people simply clone the
skeleton of an existing project, improve the things that were found lacking in
the last iteration and go from there. It's a catch 22 for beginners because they
don't have existing projects to clone and the projects they can find are usually
too complex to fit what they're doing. The only good advice I can give you, until
you get to work with a team that has an established methodology, is: do many
projects and evolve your framework as you do so. You'll learn a lot by it.
I've been drawing object interactions on a a0 piece of paper, is this the
way others do it, or is there any good software for doing this??
If paper works for you, there's nothing wrong with it. I use Visio because it's
flexible and doesn't constrain me to someone else's methodology. Some people like
tools that enforce certain constraints or that generate code for them. Rational
Rose is often prefered by those people. I'm sure that if you take an inventory,
you could come up with dozens of programs that purport to aid in software design.
Claudio Puviani