I was reading Erik Naggum's take on so-called "free software", a perspective I agree with entirely. It's interesting to see how his prediction has been borne out. Though I wouldn't go so far as to say "free" software has destroyed inventiveness, since I think C/C++ and lately Java have done more than enough of that. Annihilating inventiveness I mean, not being inventive!
But I agree with him that "free" software is entirely dictatorial and very, very far from free. And I even have a good idea how to remedy this. But that's not the point. The point is that it inspired me to check out the license for GNU Smalltalk since I was planning to maybe use it. Yes it has no GUI but this is a plus for me. No, it has no IDE, but I can get around this by porting from Dolphin. It's either that or Pharo.
Well, the license to GNU Smalltalk seems sensible, but that's not the point either. The point is that I started reading the documentation for fun. And I found this little gem in it:
The Smalltalk programming language is an object oriented programming language. This means, for one thing, that when programming you are thinking of not only the data that an object contains, but also of the operations available on that object. The object's data representation capabilities and the operations available on the object are “inseparable”;
And that's important because for years I've struggled with what the fuck is a "naked objects" UI framework. I've read about it. I think it's a fantastic idea. And this is an improvement over "OOUI" which I hadn't the faintest clue what the fuck it meant, although it sounded good too.
So I knew what a naked objects framework did, and I had some ideas on how it did it. But I never had an Aha moment and I could never explain in any principled way what it was about or why to have one. Yes, I understood the practical advantages well, but I consider such "understanding" strictly third rate. The pathetic bleating of people who are incapable of understanding anything.
So What Is It?
It turns out it's all very simple. Simple and yet profound. After all, it only took me years and dozens of design iterations to get it. An OOUI is one where representations belong to objects. So in OOP, code belongs to objects. And in OOUIs, representations belong to objects.
Now, this doesn't mean that each object has one and only one representation. That would be as ridiculous as an object having one and only one method. What it does mean is that the farce of "pluggable views" in the MVC (Model View Controller) paradigm is chucked away as so much lying garbage.
The whole notion of pluggable views is a sick joke and a lie. Not just because it's impossible in practice. But because it's not even desirable. Looking through your class hierarchy browser at some class and having not the slightest fucking clue how it represents itself ... this is Not Good.
So anyways, I finally cottoned on to this ridiculously simple insight two days ago. It didn't help at all that the Naked Objects framework written for Java actually fails, totally and utterly, to heed this simple insight.
It also didn't help that so-called OOUIs are nothing of the kind. For one thing, people claim that Smalltalk has an OOUI but anyone who takes a look at Genera knows what a sick lying joke that is. There is no Smalltalk UI with Genera's abilities, and that's a really sad pathetic thing.
I would chalk up my view of OOUIs as an original invention except if Genera's UI is implemented the way I think it is, then it probably has it down. Or at least, that's how I invented it. By trying to imagine how I would implement the functionality I saw in that video of a Lisp Machine.
Now just think about this last paragraph and reflect upon it. An original invention ... replicating 30 year old functionality. There is something seriously wrong with the world when this can be said with a straight face.