Hacker News new | ask | show | jobs
by philwelch 5671 days ago
The most important thing to realize is that "object-oriented programming" isn't a well defined term. If you don't know what it means and you pick up books about Smalltalk or CLOS, you won't really have a good grasp on the corporate C++/Java/C# environments you might be thrown into, and if you get a job interview that asks "explain OOP to me", they won't have any fucking idea what you're talking about, because by "OOP" they mean Java and by "OOP" you'll mean Smalltalk or CLOS. Likewise, if you pick up a Java book, it'll take you awhile to figure out what Smalltalkers, Lispers, and Rubyists are on about.

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.

2 comments

In situations like those, I feel like OOP is some of the most buzzword laden areas of CS.

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.

I would put http://en.wikipedia.org/wiki/Liskov_substitution_principle at the top of the list of things to understand. Language features like polymorphism and encapsulation aren't exclusively OO but they're provided because they help your designs follow LSP.
> So learn OOP from multiple perspectives.

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.