4 ms·
Which is funny, because OOP should be[1] about the in-between of the objects: the messages[2]. Not about the objects themselves or the classes and GOF design pa
by felideon 4y ago
Which is funny, because OOP should be[1] about the in-between of the objects: the messages[2]. Not about the objects themselves or the classes and GOF design patterns.
With Common Lisp you get generic functions and design your classes around those.
[1] “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.” - Alan Kay (http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay...)
[2] “The key in making great and growable systems is much more to design how its
modules communicate rather than what their internal properties and
behaviors should be.” - Alan Kay (https://wiki.c2.com/?AlanKayOnMessaging https://wiki.c2.com/?AlanKayOnMessaging)
- gmfawcett 4y agoWe should stop invoking Alan Kay's ancient opinion in OOP discussions. I suggest we rebrand his flavour of programming as "message oriented programming" (MOP), thank it for its continuing contributions to the field, and recognize that contemporary OOP is a valid but different solution space.
- felideon 4y agoClarity is certainly important, in which case I could have said “OOP should have been...” Except: Smalltalk still lives (Squeak) and Erlang takes messaging to the extreme.
- Twisol 4y agoI've not used Erlang much, really, but it seems like a really nice fusion of messaging across agents and immutable state within agents. Elixir has long been on my list of languages to properly pick up...
- deleted 4y ago[deleted]
- samatman 4y agoRather, we should insist on calling object oriented programming what it is, and come up with an acronym for the poor imitations. How about Class-Reified Abstract Programming? If the shoe fits...
- Existenceblinks 4y agoIn this era, DeepClass is a kool name.
- danielam 4y agoToo much mutation leads to deep state.
- gmfawcett 4y agoModern OOP isn't a poor imitation of anything, it's a distinct approach with its own merits. The No True OOP meme is old and tired, and frankly pointless.
- cutler 4y agoAgreed. Smalltalk is Smalltalk and corporate OOP(Java/C#) is what it is. Neither is superior or more pure.
- eyelidlessness 4y agoIt’s imperative programming with dots/infix sigils and either a little or a lot of ceremony.
- pie_flavor 4y agoSmalltalk came after Simula, which created the "poor imitation" you refer to. The reason you remember Kay instead of Simula is because Simula's ideas actually worked and so instantly got adopted by too many languages to care where it came from.
- goatlover 4y agoAlso since Simula proceeded Smalltalk, and C++ is inspired by Simula, and Java by C++.
- pjmlp 4y agoI always take a point to address the "Java coding in C++", as what actually happened was Java adopting what was the C++ approach to library development before Oak turned into Java.
- renox 4y agoThat's funny but for me Erlang is much more MOP than Smalltalk
- gmfawcett 4y agoSure. Reading the qualifications that Kay makes at the end of his quote (above), he leaves room for Erlang to be MOP. I suspect that he just wasn't familiar with the language.
- k__ 4y agoThe lecture about GOF design patterns were the first OOP lecture in university where I actually felt I learned something useful.
- freilanzer 4y agoThat's somewhat tragic.
- deckard1 4y agoIt's probably even more humorous if you understand that Scheme was created because Gerald Jay Sussman and Guy Steele wanted a way to experiment with Carl Hewitt's actor model, which is based on message passing. Which, itself, was based on Simula, Smalltalk, etc. Sussman and Steele came up with a way to do lexical scoping in a LISP, thus closures in LISP were born. They then acknowledged that actors and closures are essentially the same concept (I'm assuming with mutation, i.e. Scheme's "set!" and friends because otherwise message passing to update independent actors would be meaningless). And to put the cherry on the top, what do Java, Common Lisp, and Scheme all have in common? Guy L. Steele worked on the language specs of all of those. Which makes the dig against Java a bit hilarious, though understandable. http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03237.html http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/m... > [...] And by such examples one may be led into the functional style of programming, which is possible within Lisp/Scheme, though not required.
- cutler 4y agoWasn't it specifically garbage collection that he contributed?
- deckard1 4y agonope. GC is thanks to John McCarthy, himself, when he invented LISP around 1959.
- bsaul 4y ago"actors and closure are the same concept": Do you have a good article explaining this ? To me actors is mainly a pattern for dealing with concurrency, and closures seem completely unrelated. But i assume i'm missing something...
- drnewman 4y agoThe Actor model is interesting because it wasn't originally a model for concurrency. It expresses concurrency semantics naturally, which is why it's been used that way. But, believe it or not, originally it was a mathematical theory of computing comparable to the Lambda Calculus. If you'd like to explore this space look up the original papers by Carl Hewitt. He's also written some more recent papers on the subject. Also the "Lambda Papers" by Sussman and Steele are instructive. They deal with implementing various control structures and computational patterns with lambdas. Unfortunately there isn't a "Lambda the Ultimate Object" which could be written. I'm guessing they didn't go there because at the time OOP hadn't taken off and may have seemed obvious to the people who where involved in Lisp/OOP at the time. In his essay "Objects Have not Failed" Guy Steele addresses the history that deckard1 mentions. [1] "Viewing Control Structures as Patterns of Passing Messages" - Carl Hewitt [2] "Actor Model of Computation: Scalable Robust Information Systems" - Carl Hewitt [3] The Lambda Papers - https://research.scheme.org/lambda-papers/ https://research.scheme.org/lambda-papers/ [4] "Objects Have Not Failed" - Guy Steele, https://www.dreamsongs.com/ObjectsHaveNotFailedNarr.html https://www.dreamsongs.com/ObjectsHaveNotFailedNarr.html
- pjmlp 4y agoCommon Lisp also gets you the Common Lisp Object System.