I have an idea for an iOS app, so I have been taking Paul Hegarty's excellent Stanford course on iOS development (now with Swift!). I really enjoy the class and the material is presented at exactly the level I'm looking for. The material isn't difficult to follow, but I do find myself having to make some mental translations for some of the terminology. It occurred to me that this is my first exposure to the "other kind of object oriented programming".
I have never used Objective-C and this is my first time using Swift. I have plenty of object oriented programming experience, but it has been with C++, Java, Python, Perl, and the like. Objective-C (and Swift) are quite different.
Object oriented programming concepts date back to the Simula programming language, developed in the late 1960's. C++ was the arguably the first language to bring OOP to mainstream commercial success in the 1980's. Many languages that came after, such as Java, Python, and Ruby, while technically distinct from C++, take a lot of terminology and what I'd call their "philosophical approach" to object oriented design from C++. Java gets rid of multiple inheritance and has automatic memory management. But fundamentally it maintains the structure of classes, methods, interfaces, etc.
The NeXT, and now Apple, development environment has a different lineage. Objective-C is an object oriented language and still builds on the work done in developing Simula, but it feels more like Smalltalk than C++. While Objective-C and Swift have classes and methods, the terminology is more focused on message passing than method calls. Instead of interfaces or abstract classes, Objective-C and Swift have protocols.
It's easy enough to make the translation in my head, but it's striking to come face to face with an entirely different evolutionary branch of object oriented programming languages. In 1998, Alan Kay, OOP pioneer and the inventor of Smalltalk, wrote that he felt that messaging was the most important takeaway from object oriented programming and that that the focus on classes was missing the point. So the argument could be made that the Objective-C line of evolution is more pure to the original intent of OOP. But it feels foreign to someone used to the C++ evolutionary branch.
I'm just getting started with Swift, so it's too early to have strong opinions about the language. I wonder about the lack of namespacing, but I haven't gotten that far in the book yet. So far I'm enjoying the opportunity to learn something new and different.