Even people who understand prototypal inheritance do not like it. Here’s an inconvenient truth…
The notion of object prototypes has been around for at least 29 years, since the Self language was created. In the past quarter century, no new language of note has adopted object prototypes, unless you want to include 23-year-old Lua. All of the latest OOP languages, such as Dart, Scala, Groovy and Swift, have eschewed object prototypes. If this feature was so powerful and useful, why has it been roundly ignored?
The people who design languages typically know all about object prototypes. They aren’t ignorant. They do not “misunderstand” prototypes. They simply don’t think it’s worth adopting.
And neither do I.
Object Prototypes Do Not Scale Well
Smalltalk is also a light, fun, productive programming language. In fact, it’s the most productive programming language in the world!
It’s a beautifully simple and elegant language that is really, really easy to learn. In fact, Smalltalk has virtually no syntax at all! Smalltalk syntax comes down entirely to sending messages to objects: <object> <message>, where <message> can be unary, binary (infix), or keyword (taking on a parameter). That’s it! All the rest of Smalltalk is in its rich class library. This includes conditionals and loops and unbelievable extensibility.
So powerful, in fact, that Smalltalk almost became the dominant enterprise language in the past 20 years. In the early 1990s, IBM selected Smalltalk as the centrepiece of their VisualAge enterprise initiative (until Java usurped this role). We came this close!
The best thing about Smalltalk is probably its “live” programming environment/IDE/debugger. It is second to none. In conjunction with its light syntax, this is what explains Smalltalk’s incredible productivity.