True meaning of OOP

I’ve just come across this email from Alan Kay who coined the term ‘Object-oriented programming’ at the end of the 60’s.

He says:

“OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them.”

Comments

Duck typing is for dynamic-typed languages (as in VBScript, PHP, Ruby, Python, etc.), whereas late binding works for static-typed languages, as well. For example, by using polymorphism in OOP, you are using late binding.

Neither Ruby nor Python deserve to be mentioned in the same breath as Smalltalk and Lisp. Ruby and Python are both hackish and un-pure languages that make compromises in syntax to be more “normal” while Smalltalk and Lisp are pure and take their respective styles to the extreme, everything is an object or everything is a function/macro. Ruby has an “if” statement, so it’s not pure OO like Smalltalk. Neither Python or Ruby can pass a real closure cleanly, their inventors didn’t see the need.

It’s true that Ruby and Python are impure compared to Smalltalk. I actually use Squeak with my students for their “Multimedia Application Development” module so I know Smalltalk quite well… and, more important, I really appreciate it’s purity.

I have had a quick look at your blog and I’ve noticed that you are a big fan of Seaside. I’ve not used it yet but I know some people are very seriously looking at it. I’ll also have to do it.

As an aside, being a Smalltalk lover, I’m sure you also like Ruby. Ruby might not be 100% pure but it’s damn purer than most other programming languages, isn’t it?

Ruby is closer to Smalltalk than any other language, so I don’t dislike Ruby, but I’m not really a fan, since I use the real thing. Coming from any other language, Ruby looks awesome, but coming from Smalltalk, it just looks full of inconsistencies and compromises that seem pointless and its tool support is just abysmal.

Ruby, as simple as it seems in comparison to many languages, is still horribly complex compared to Smalltalk, and as far as I can see, there’s no good reason for it. Smalltalk is still light years ahead of Ruby and I couldn’t justify using it because it’d be taking a step backwards. I do however enjoy the attention Ruby is bringing to Smalltalk.