Book reccomendations

Started by
7 comments, last by wild_pointer 21 years, 5 months ago
What reccomendations do you have for books on design, not necessarily for games, it doesn't have to be fanatically OO either. I frequently find my implementations rather short sighted, and massive rewrites are beginning to annoy me [edit] BTW, I ordered design patterns recently, just looking for some other titles. [My site|SGI STL|Bjarne FAQ|C++ FAQ Lite|MSDN|Jargon]
Ripped off from various people [edited by - wild_pointer on October 22, 2002 7:24:37 AM]
[size=2]
Advertisement
Refactoring by Martin Fowler.
I would also recomend the 2 books preceding "Refactoring" which are "Analasys Patterns" and "Design Patterns"
I recommend that you start with a good OO design book before moving to refactoring or patterns books. Although those other books are good, I think a solid grounding in OO design first would be much better and help you to really get the most out of all the books you buy.

Robert Martin has a bunch of good papers on his company''s website. He''s supposed to have a new book out this month. Something about analysis and design using the agile process. The excerpts are great.
Hey Bobo, You wouldn''d happen to have a link to that site would you?
// Ryan
ObjectMentor.

[edited by - SabreMan on October 23, 2002 11:47:12 AM]
Game Architecture & Design - A downside is that a third of the book talks about process and how to work together in teams, so its not completely about design.

Also, Design Patterns is a good one.

Those are the only two books that I''ve read dealing with design. Some other books that don''t really talk about design but I thought helped: More Effective C++, Effective C++, Code Complete.

One of the best way to learn about design is to look at other people''s code. Also read lots of books about lots of different subject in computing - compiler theory, parsing, computability, AI, graphics, ... etc.

Another way I''ve found to learn about design is to learn Java. People often say there''s a sub-language in C++ struggling to get out - the so called "right way" to program with C++. Java enthusiasts say that language is Java and I think they''re partially right. Learning Java can help make you a much better OO C++ programmer. Java is good because it eliminates most of the ways people can misuse the C++ language. It also practically forces you to program in an OO manner. Java has lots of design patterns built right into the API, and if I''m ever stuck on how to design something in a proper OO manner I often go to the Java API and see how they''ve done it.

Cheers.
quote:Original post by Z01
a third of the book talks about process and how to work together in teams, so its not completely about design.

Design and process are so closely related they should often be considered together. The design of a system often takes on a shape that reflects the organisational structure and process used to build it. Shoddy process leads to shoddy design.
quote:
Another way I've found to learn about design is to learn Java.

Huh?
quote:
People often say there's a sub-language in C++ struggling to get out - the so called "right way" to program with C++. Java enthusiasts say that language is Java and I think they're partially right.

I think "they" are largely wrong.
quote:
Learning Java can help make you a much better OO C++ programmer.

How? Please elaborate.
quote:
Java is good because it eliminates most of the ways people can misuse the C++ language. It also practically forces you to program in an OO manner.

Why is it good to *force* someone to program in a particular style?

[edited by - SabreMan on October 24, 2002 5:03:28 AM]
Sabreman -

Can you program Java? If you can already and you don''t agree with me, even if I write an essay I doubt I''m going to convince you =) Religious language wars and all that.

Otherwise, I''d encourage you to try Java. C++ is a tricky language - it has many ways that you can shoot yourself in the foot and not even realize it. Java is a language written based on C++ but with those snytactical elements and usage idioms that are the most common cause of C++ bugs and non-object orientedness removed from the language. In this way, Java can teach the "proper" way to use C++ in an OO manner. Additionally, as I mentioned in my original post the API for Java is very well designed, and studying other people''s designs is a good way to improve your designs.

It is possible to force you to program in a certain way by limiting the programming language. Ie. not giving you certain design options, and providing other language elements that are useful in an OO environment. I''m sure you would agree with me that C++ is much easier to program in an OO manner than the C language. Why? - the language supports OO constructs. In a similar way, Java is to C++ as C++ is to C. Java doesn''t really add OO constructs like C++ did, so much as take away things from C++ that cause people to break OO principles.

In order for C++ to be successful, it had to be backwards compatible with C and the C++ language includes lots of extra stuff. That extra stuff, though it may be useful in a procedural approach, can really mess up an OO design. New programmers to C++ are very often confused by all the possible options and it really is a chore and subject of many books to teach them how to program in an OO manner. Java is a language that was designed (mostly) free of any compatibility constraints and they were free to design it in an OO manner.

Why is it good to force someone to program a certain style?

First of all, as a learning tool. This is the reason Java is used so often in universities as a learning language - it practically enforces proper OO programming on the programmer.

Second of all, as a company you might want to force its programmers to program in an OO style because the benefits of OO programming for large projects are well documented and they save lots of money. You sound very indignant when you say, "why would it be good to *force* someone to program a particular style?" ... as if we are about taking away your rights. It has nothing to do with rights, it has to do with being productive, writing good code, and making money. If you are on a C++ project and the five other programmers are writing OO code and you are not, you are not being helpful to the team and they''re probably going to kick you. If it was a Java project and you wanted to write non-OO code you''d have a lot less wiggle room and you''d really have to try hard to do it.

Note: I don''t consider this a debate about which language is better, and I avoid such debates whenever I can, because they''re largely unproductive. I do maintain, however, that Java is a better learning language than C++ as it encourages proper OO design.

This topic is closed to new replies.

Advertisement