[fonc] The Web Will Die When OOP Dies

2012-06-09 Thread Toby Schachman
This half hour talk from Zed Shaw is making rounds,
https://vimeo.com/43380467

The first half is typical complaints about broken w3 standards and
processes. The second half is his own observations on the difficulties
of teaching OOP. He then suggests that OOP is an unnatural programming
paradigm and that the problems of the web stem from the problems of
OOP.

My take:

I agree with Zed that the dominant "OOP" view of reality no longer
serves us for creating the systems of the future. I imagine that this
will be a hard pill to swallow because we (programmers) have
internalized this way of looking at the world and it is hard to *see*
anything in the world that doesn't fit our patterns.

The hint for me comes at 22 minutes in to the video. Zed mentions
OOP's mismatch with relational databases and its emphasis on
request-response modes of communication. Philosophically, OOP
encourages hierarchy. Its unidirectional references encourage trees.
Request-response encourages centralized control (the programmer has to
choose which object is "in charge"). Ted Nelson also complains about
hierarchical vs. relational topologies with respect to the web's
historical development, particularly unidirectional links.

I've been reading (and rereading) Sutherland's 1963 Sketchpad thesis (
http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-574.pdf ) and it
strikes me that philosophically it is founded on *relationships*
rather than *hierarchy*. Internally, references are always stored
bi-directionally. It presents the user with a conceptual model based
on creating constraints (i.e. relationships) between shapes.

Chapter 7 has been particularly hard for me to grok because his
"recursive merging" has no good analogue in OOP inheritance strategies
as far as I know. Here he takes a structure A (a network of things and
their relationships) and merges them onto another structure B by
specifically associating certain things in A with things in B. This
operation creates new relationships in structure B, corresponding to
the analogous relationships in structure A. Inheritance by analogy.

He claims to get quite a bit of leverage from this strategy.

Toby
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] The Web Will Die When OOP Dies

2012-06-09 Thread Pascal J. Bourguignon
Toby Schachman  writes:

> This half hour talk from Zed Shaw is making rounds,
> https://vimeo.com/43380467
>
> The first half is typical complaints about broken w3 standards and
> processes. The second half is his own observations on the difficulties
> of teaching OOP. He then suggests that OOP is an unnatural programming
> paradigm and that the problems of the web stem from the problems of
> OOP.
>
> My take:
>
> I agree with Zed that the dominant "OOP" view of reality no longer
> serves us for creating the systems of the future. I imagine that this
> will be a hard pill to swallow because we (programmers) have
> internalized this way of looking at the world and it is hard to *see*
> anything in the world that doesn't fit our patterns.
>
> The hint for me comes at 22 minutes in to the video. Zed mentions
> OOP's mismatch with relational databases and its emphasis on
> request-response modes of communication. Philosophically, OOP
> encourages hierarchy. Its unidirectional references encourage trees.
> Request-response encourages centralized control (the programmer has to
> choose which object is "in charge"). Ted Nelson also complains about
> hierarchical vs. relational topologies with respect to the web's
> historical development, particularly unidirectional links.

This is wrong.

Request-responses mode comes from the mapping of the notion of message
sending to the low-level notion of calling a subroutine.  Unidirectional
references comes from the mapping of the notion of association to the
low-level notion of pointer.

But those mappings are not inherent of OOP, and aren't even necessarily
promoted by a OO programming language. 

And even if they may seem at first natural with common OO programming
languages, it's easy to avoid using them.

For example, request-response is NOT the paradigm used in OpenStep
(Cocoa) programming.   For example, when a GUI object is edited, it may
send a message to a controller object, but it does not send the new
value.  Instead, it sends itself, and let the controller ask for its new
value later.

Some languages implement message sending as an asynchronous operation
natively.



So it seems to me it's a case of taking the tree for the forest.



> I've been reading (and rereading) Sutherland's 1963 Sketchpad thesis (
> http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-574.pdf ) and it
> strikes me that philosophically it is founded on *relationships*
> rather than *hierarchy*. Internally, references are always stored
> bi-directionally. It presents the user with a conceptual model based
> on creating constraints (i.e. relationships) between shapes.

Indeed.


> Chapter 7 has been particularly hard for me to grok because his
> "recursive merging" has no good analogue in OOP inheritance strategies
> as far as I know. Here he takes a structure A (a network of things and
> their relationships) and merges them onto another structure B by
> specifically associating certain things in A with things in B. This
> operation creates new relationships in structure B, corresponding to
> the analogous relationships in structure A. Inheritance by analogy.
>
> He claims to get quite a bit of leverage from this strategy.
>
> Toby
> ___
> fonc mailing list
> fonc@vpri.org
> http://vpri.org/mailman/listinfo/fonc

-- 
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] The Web Will Die When OOP Dies

2012-06-09 Thread Miles Fidelman

Toby Schachman wrote:

This half hour talk from Zed Shaw is making rounds,
https://vimeo.com/43380467

The first half is typical complaints about broken w3 standards and
processes. The second half is his own observations on the difficulties
of teaching OOP. He then suggests that OOP is an unnatural programming
paradigm and that the problems of the web stem from the problems of
OOP.

To echo Pascal Bourguignon's sentiment, "this is all just wrong."

First off, while I personally am not a big fan of OOP, seems to me that 
HyperCard was an existence proof that OOP is an incredibly natural 
programming paradigm, when it's packaged well.


Re. problems of the web stemming from problems of OOP:  Other than Java 
servelets, where is OOP much in evidence on the web?


If anything, the web is a big implementation of the Actor paradigm. Web 
servers, by and large, listen for messages, and respond to incoming 
messages by spawning a process that generates a response, then 
terminates.  Doesn't seem very object oriented to me - particularly when 
code takes the form of perl, or PHP.





--
In theory, there is no difference between theory and practice.
In practice, there is.    Yogi Berra

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] The Web Will Die When OOP Dies

2012-06-09 Thread Toby Schachman
On Sat, Jun 9, 2012 at 8:48 PM, Pascal J. Bourguignon
 wrote:
> Request-responses mode comes from the mapping of the notion of message
> sending to the low-level notion of calling a subroutine.  Unidirectional
> references comes from the mapping of the notion of association to the
> low-level notion of pointer.
>
> But those mappings are not inherent of OOP, and aren't even necessarily
> promoted by a OO programming language.
>
> And even if they may seem at first natural with common OO programming
> languages, it's easy to avoid using them.

I agree that these are not necessary or intended implications of OOP.
My comments used "OOP" to refer to the paradigm that I see used and
implemented in common practice.

Message passing does not necessitate a conceptual dependence on
request-response communication. Yet most code I see in the wild uses
this pattern. A hierarchy of control is set up. An object will request
information from its subordinate objects, do some coordination, send
commands back down, or report back to its superior. Centralized
control seems to be the only way we can keep track of things. I rarely
see an OO program where there is a "community" of objects who are all
sending messages to each other and it's conceptually ambiguous which
object is "in control" of the overall system's behavior.

As for bidirectional references, I see them used for specialized
subsystems (implemented by specialists) such as relational databases
and publish-subscribe servers. But they tend to be tricky to set up in
OOP settings. Yet, as I bring up in the Sketchpad remarks, I believe
they have a lot of potential when they can be used as a fundamental
primitive of a programming paradigm.
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] The Web Will Die When OOP Dies

2012-06-09 Thread Igor Stasenko
While i agree with guy's bashing on HTTP,
the second part of his talk is complete bullshit.

He mentions a kind of 'signal processing' paradigm,
but we already have it: message passing.
Before i learned smalltalk, i was also thinking that OOP is about
structures and hierarchies, inheritance.. and all this
private/public/etc etc bullshit..
After i learned smalltalk , i know that OOP it is about message
passing. Just it. Period.
And no other implications: the hierarchies and structures is
implementation specific, i.e.
it is a way how an object handles the message, but it can be
completely arbitrary.

I think that indeed, it is a big industry's fault being unable to
grasp simple and basic idea of message passing
and replace it with horrible crutches with tons of additional
concepts, which makes it hard
for people to learn (and therefore be effective with OOP programming).

-- 
Best regards,
Igor Stasenko.
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] The Web Will Die When OOP Dies

2012-06-09 Thread BGB

On 6/9/2012 9:28 PM, Igor Stasenko wrote:

While i agree with guy's bashing on HTTP,
the second part of his talk is complete bullshit.


IMO, he did raise some valid objections regarding JS and similar though 
as well.


these are also yet more areas though where BS differs from JS: it uses 
different semantics for "==" and "===" (in BS, "==" compares by value 
for compatible types, and "===" compares values by identity).



granted, yes, bashing OO isn't really called for, or at least absent 
making more specific criticisms.


for example, I am not necessarily a fan of Class/Instance OO or deeply 
nested class hierarchies, but I really do like having "objects" to hold 
things like fields and methods, but don't necessarily like it to be a 
single form with a single point of definition, ...


would this mean I am "for" or "against" OO?...

I had before been accused of being anti-OO because I had asserted that, 
rather than making deeply nested class hierarchies, a person could 
instead use some interfaces.


the problem is partly that "OO" often means one thing for one person and 
something different for someone else.




He mentions a kind of 'signal processing' paradigm,
but we already have it: message passing.
Before i learned smalltalk, i was also thinking that OOP is about
structures and hierarchies, inheritance.. and all this
private/public/etc etc bullshit..
After i learned smalltalk , i know that OOP it is about message
passing. Just it. Period.
And no other implications: the hierarchies and structures is
implementation specific, i.e.
it is a way how an object handles the message, but it can be
completely arbitrary.

I think that indeed, it is a big industry's fault being unable to
grasp simple and basic idea of message passing
and replace it with horrible crutches with tons of additional
concepts, which makes it hard
for people to learn (and therefore be effective with OOP programming).


yeah.


although a person may still implementing a lot of this for sake of 
convention, partly because it is just sort of expected.


for example, does a language really need classes or instances (vs, say, 
cloning or creating objects ex-nihilo)? not really.


then why have them? because people expect them; they can be a little 
faster; and they provide a convenient way to define and answer the 
question "is X a Y?", ...


I personally like having both sets of options though, so this is 
basically what I have done.




meanwhile, I have spent several days on-off pondering the mystery of if 
there is any good syntax (for a language with a vaguely C-like syntax), 
to express the concept of "execute these statements in parallel and 
continue when all are done".


practically, I could allow doing something like:
join( async{A}, async{B}, async{C} );
but this is ugly (and essentially abuses the usual meaning of "join").

meanwhile, something like:
do { A; B; C; } async;
would just be strange, and likely defy common sensibilities (namely, in 
that the statements would not be executed sequentially, in contrast to 
pretty much every other code block).


I was left also considering another possibly ugly option:
async![ A; B; C; ];
which just looks weird...

for example:
async![
{ sleep(1000); printf("A, "); };
{ sleep(2000); printf("B, "); };
{ sleep(3000); printf("C, "); }; ];
printf("Done\n");

would print "A, B, C, Done" with 1s delays before each letter.


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc