Ask HN: What are some good books for understanding OOP?
I am a novice programmer, currently self-learning, would really like to understand Object Oriented Programming well. Can anyone suggest some books that are good at explaning OOP for beginners?
Thanks for the help in advance.
[+] [-] philwelch|15 years ago|reply
Unfortunately, the C++/Java conception of OOP has had a much better sales team since the 90's or so, so you can get sucked into that universe and never find your way out again. So learn OOP from multiple perspectives.
[+] [-] phamilton|15 years ago|reply
Things like "Cohesion", "Layering", "Polymorphism", "Abstraction", etc.
They are all great concepts with a lot of important principles, but I drives me nuts how often I've heard them used excessively.
[+] [-] wlievens|15 years ago|reply
This is key. Even if you end up never using the less traditional OOP models, learning them will let you write better software in the conventional languages. I can say with certainty that my basis in Smalltalk and (albeit limited) knowledge of Lisp makes me a far better Java programmer.
[+] [-] gruseom|15 years ago|reply
Don't take this as advice against learning what you want to learn, but I'd caution against the idea that "object-oriented programming" and "good programming" are the same thing (or even that they are correlated). OO in its various incarnations comes with a tremendous amount of baggage. It took me years to figure out I didn't need it, and that insight made me a much better programmer.
[+] [-] mschwar99|15 years ago|reply
http://video.google.com/videoplay?docid=-2058469682761344178...
It is an older video of Dan Ingalls of Smalltalk fame explaining objects. I clearly remember a large light bulb going off in my head as he walked through his analogy of a hospital described as an object.
This certainly isn't comprehensive, but if you are stuck on the concept its helpful to hear someone talk it out.
[+] [-] flgb|15 years ago|reply
C2 is another resource worth checking out. C2 is the original "wiki". While its not always coherent and will structured, there are some real gold nuggets here: http://c2.com/cgi/wiki?ObjectOrientedProgramming
[+] [-] flojito|15 years ago|reply
[+] [-] YooLi|15 years ago|reply
http://www.amazon.com/dp/0596007124
Do not jump in with the GoF Design Pattern book. :)
[+] [-] abecedarius|15 years ago|reply
[+] [-] brudgers|15 years ago|reply
Head First C# [1st choice because the program exercises are far more interesting] or Head First Java [which is pretty dull]
Learn Python the Hard Way would be my choice for learning old school style. http://learnpythonthehardway.org/index
[+] [-] duck|15 years ago|reply
[+] [-] briandoll|15 years ago|reply
This is a fantastic book on OOP design principals and has lots of language-agnostic examples.
[+] [-] abecedarius|15 years ago|reply
* Chapter 3 of http://mitpress.mit.edu/sicp/ -- also chapters 1 and 2.
* _Abstraction and Specification in Program Development_, on design by contract. There's a newer book by the same authors, _Program Development in Java_, but Norman Ramsey says it's not as good. (I've only read the older one.) By Liskov & Guttag. Focuses on abstract datatypes rather than OOP classic. Bertrand Meyer's _Object-Oriented Software Construction_ covers much of the same material, but not as well to my taste in the bits I dipped into.
* Also, _Smalltalk-80: The Language and Its Implementation_ at http://wiki.squeak.org/squeak/64 -- this might be more basic than the above two. The ideas were old to me by the time I got to it, so I don't know how well it'd work for a novice.
* I've seen _A Little Smalltalk_ recommended as an intro to OO and it looks plausible: http://www.littlesmalltalk.org/index.php?page=the-book -- I haven't read it myself.
[+] [-] dtsingletary|15 years ago|reply
[+] [-] felideon|15 years ago|reply
* The Art of the Metaobject Protocol by Gregor Kiczales
Don't let the second one fool you. Although it is a Lisp book, it presents OOP design principles applicable to any language. As the Amazon review says: "The Art of the Meta-Object Protocol is useful for the advanced CLOS user as well as for anyone interested in object-oriented programming and language design."
[+] [-] gruseom|15 years ago|reply
[+] [-] duck|15 years ago|reply
Lots of OO classes use it and Smalltalk is a great language to learn OO with (but even if you don't use it, the general information will be a big help).
[+] [-] abecedarius|15 years ago|reply
[+] [-] thornkin|15 years ago|reply
[+] [-] andre3k1|15 years ago|reply
I understand that this is a monumental end goal given my current situation, but can anyone point me in the direction of the best tutorial books that money can buy?
Good karma for anyone that responds :)
[+] [-] manvsmachine|15 years ago|reply
It seems that your first step is to to find good C++ resources: http://stackoverflow.com/questions/155762/best-c-resource
Hope this helps.
[+] [-] meadhikari|15 years ago|reply
[+] [-] photon_off|15 years ago|reply
[+] [-] skowmunk|15 years ago|reply