   Looking for suggestions on OOD texts
  I've just completed my second semester of a CS degree (we wrapped up with data structures in the core programming course) and feel like my two biggest weaknesses thus far are in algorithm design (which I'm sure will come with practice and/or a discrete math course) and OOD.  When I sit down to create a program from scratch, I find I'm still thinking largely in linear patterns, and any time I look at tutorials or sample code I understand their idea and the implementation-- but I would never have thought do do things "that way."So...are there any books anyone here has found integral to really grasping-, and adding to your standard process-, OOD?  I'm picking up the Gamma et al. Design Patterns book in a week, but any insight/experience would be much appreciated.   
  I don't think the design patterns book will help you. It's a decent reference, so long as you don't allow yourself to go looking for places to "apply patterns" in your code (i.e., the 'when you have a hammer every problem looks like a nail' issue)... but it won't tell you how and when to best make use of its information.There are very few books on this subject; much of it comes from experience and practice. There are a few good articles floating around though, that describe OO principles (not "encapsulation, inheritance, polymorphism," those are about implementation detail) that can help guide your thinking when you're trying to design a system. I have them bookmarked here (the ObjectMentor articles).   ;  Awesome bookmarks!  Thanks Josh! :)   ;  That's brilliant, thanks for the link :)   