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

2012-06-18 Thread Paul Homer
This discussion has inspired me to try once again to express my sense of what I 
mean by complexity. It's probably too rambly for most people, but some may find 
it interesting:

http://theprogrammersparadox.blogspot.ca/2012/06/what-is-complexity.html

Paul.





 From: Miles Fidelman mfidel...@meetinghouse.net
To: Fundamentals of New Computing fonc@vpri.org 
Sent: Saturday, June 16, 2012 3:20:22 PM
Subject: Re: [fonc] The Web Will Die When OOP Dies
 
BGB wrote:
 
 a problem is partly how exactly one defines complex:
 one definition is in terms of visible complexity, where basically adding a 
 feature causes code to become harder to understand, more tangled, ...
 
 another definition, apparently more popular among programmers, is to simply 
 obsess on the total amount of code in a project, and just automatically 
 assume that a 1 Mloc project is much harder to understand and maintain than 
 a 100 kloc project.

And there are functional and behavioral complexity - i.e., REAL complexity, in 
the information theory sense.

I expect that there is some correlation between minimizing visual complexity 
and lines of code (e.g., by using domain specific languages), and being able 
to deal with more complex problem spaces and/or develop more sophisticated 
approaches to problems.

Miles



-- 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


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


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

2012-06-17 Thread GrrrWaaa

On Jun 16, 2012, at 12:07 PM, Miles Fidelman wrote:

 Wesley Smith wrote:
 If things are expanding then they have to get more complex, they encompass
 more.
 Aside from intuition, what evidence do you have to back this statement
 up?  I've seen no justification for this statement so far.
 
 As I recall, there was a recent Nobel prize that boiled down to: Increase the 
 energy flowing into a system, and new, more complex, behaviors arise.

Are you thinking of Prigogine's dissipative structures? Nobel laureate in 1977.
http://en.wikipedia.org/wiki/Ilya_Prigogine
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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

2012-06-17 Thread David Leibs
I really like you observation about debugging.  The error you see was bad 
copying from another workspace. Totally botched. My email proof reading skill 
are totally lacking as well.   In general I will get everything I try to do 
initially wrong and if I don't get something very wrong every 30 minutes then 
I am not doing anything.

-David Leibs

On Jun 17, 2012, at 9:49 AM, GrrrWaaa wrote:

 
 On Jun 15, 2012, at 12:17 PM, David Leibs wrote:
 
 As children we spend a lot of time practicing adding up numbers. Humans are 
 very bad at this if you measure making a silly error as bad. Take for 
 example:
 
   365
 +  366
 --
 
 this requires you to add 5  6, write down 1 and carry 1 to the next column
 then add 6, 6, and that carried 1 and write down 2 and carry a 1 to the next 
 column
 finally add 3, 3 and the carried 1 and write down 7
 this gives you 721, oops, the wrong answer.  In step 2 I made a totally 
 dyslexic mistake and should have written down a 3.
 
 Ken proposed learning to see things a bit differently and remember the  
 digits are a vector times another vector of powers.
 Ken would have you see this as a two step problem with the digits spread out.
 
   3   6   5
 +  3   6   6
 
 
 Then you just add the digits. Don't think about the carries.
 
   3   6   5
 +  3   6   6
 
   6  12  11
 
 
 Now we normalize the by dealing with the carry part moving from right to 
 left in fine APL style. You can almost see the implied loop using residue 
 and n-residue.
 6  12 11
 6  13  0
 7   3  0
 
 Ken believed that this two stage technique was much easier for people to get 
 right.  
 
 I'm not sure the argument holds: the answer should be 731. :-)
 
 But, to be fair, spreading out the calculation like this makes it easier to 
 debug and find the place where it went awry. Ha - I never thought of that 
 before - writing out proofs in math problems is as much debugging as it is 
 verifying! Maybe programming interfaces could help us debug by more readily 
 showing the 'reasoning' behind a particular value or state, the particular 
 data/control-flows that led to it. Like picking up the program-mesh by 
 holding the result value we are interested in, and seeing the connected 
 inputs draping away to the floor.
 
 
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc

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


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

2012-06-17 Thread David Leibs
Thanks for the link.  This thread has had me thinking quite a bit about the 
Central Limit Theorem from probability.

http://en.wikipedia.org/wiki/Central_limit_theorem

It explains why so many of our measurements result in normal distributions.

-David Leibs

On Jun 17, 2012, at 9:36 AM, GrrrWaaa wrote:

 
 On Jun 16, 2012, at 12:07 PM, Miles Fidelman wrote:
 
 Wesley Smith wrote:
 If things are expanding then they have to get more complex, they encompass
 more.
 Aside from intuition, what evidence do you have to back this statement
 up?  I've seen no justification for this statement so far.
 
 As I recall, there was a recent Nobel prize that boiled down to: Increase 
 the energy flowing into a system, and new, more complex, behaviors arise.
 
 Are you thinking of Prigogine's dissipative structures? Nobel laureate in 
 1977.
 http://en.wikipedia.org/wiki/Ilya_Prigogine
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc

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


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

2012-06-17 Thread Miles Fidelman

GrrrWaaa wrote:

On Jun 16, 2012, at 12:07 PM, Miles Fidelman wrote:


Wesley Smith wrote:

If things are expanding then they have to get more complex, they encompass
more.

Aside from intuition, what evidence do you have to back this statement
up?  I've seen no justification for this statement so far.

As I recall, there was a recent Nobel prize that boiled down to: Increase the 
energy flowing into a system, and new, more complex, behaviors arise.

Are you thinking of Prigogine's dissipative structures? Nobel laureate in 1977.
http://en.wikipedia.org/wiki/Ilya_Prigogine


That's the one.  Thanks!

Miles



--
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-17 Thread Toby Schachman
On Sat, Jun 16, 2012 at 12:18 PM, David Barbour dmbarb...@gmail.com wrote:

 A valid question might be: how much of this information should be
 represented in code? How much should instead be heuristically captured by
 generic machine learning techniques, indeterminate STM solvers, or stability
 models? I can think of much functionality today for control systems,
 configurations, UIs, etc. that would be better (more adaptive, reactive,
 flexible) achieved through generic mechanisms.

 Sure, there is a minimum number of bits to represent information in the
 system, but code is a measure of human effort, not information in general.

I think you'd be interested in this work,
http://wekinator.cs.princeton.edu/

The idea is to build electronic musical instruments by training
supervised machine learning algorithms on physical input signals
(accelerometers, cameras, etc). The machine learning is pretty naive
as I understand, but I think it works because the person training the
machine is simultaneously exploring the instrument, training herself
to play it. Person and instrument learning how to play each other.

You can watch an overview video here,
http://www.cs.princeton.edu/~fiebrink/drop/wekinator/WekinatorDemo2.m4v

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


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

2012-06-16 Thread John Zabroski
On Jun 15, 2012 2:39 PM, Pascal J. Bourguignon p...@informatimago.com
wrote:

 John Zabroski johnzabro...@gmail.com writes:


  Sorry, you did not answer my question, but instead presented excuses
  for why programmers misunderstand people.  (Can I paraphrase your
  thoughts as, Because people are not programmers!)

 No, you misunderstood my answer:
 Because people don't pay programmers enough.

In the words of comedian Spike Milligan, All I ask is for the chance to
prove money can't make me happy.

But my motto comes from pianist Glenn Gould: the ideal ratio of performers
to audience is one. I have never seen a software team produce better
results with better pay, but most of the great advances in software came
from somebody doing something differently because any other way was simply
wrong.

Having seen millionaires throw their money around to build their dream app
(the Chandler project featured in Scott Rosenberg's book Dreaming in Code
and all of Sandy Klausner's vaporware graphical programming ideas), and
seeing what road blocks still remained, I disbelieve your answer.

Who invented the spreadsheet? One person.
Who invented pivot tables? One person.
Who invented modeless text editing? One person.

How much money is enough, anyway?  In the words of John D. Rockefellar, A
little bit more?
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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

2012-06-16 Thread John Zabroski
On Fri, Jun 15, 2012 at 10:52 PM, Miles Fidelman mfidel...@meetinghouse.net
 wrote:

 Pascal J. Bourguignon wrote:

 John Zabroski johnzabro...@gmail.com writes:


  Sorry, you did not answer my question, but instead presented excuses
 for why programmers misunderstand people.  (Can I paraphrase your
 thoughts as, Because people are not programmers!)

 No, you misunderstood my answer:
 Because people don't pay programmers enough.


  I think that might be an inaccurate statement in two regards:

 - programmers make VERY good money, at least in some fields (if you know
 where to find good, cheap coders, in the US, let me know where)

 - (a lot of programmers) do NOT have a particularly user-focused mindset
 (just ask a C coder what they think of Hypercard - you'll get all kinds of
 answers about why end-users can't do any useful; despite a really long
 track record of good stuff written in Hypercard, particularly by educators)

 Note: This is irrelevant vis-a-vis Jon's question, however.  The answer to
 why he can't find easy ways to upload files, is because he isn't looking.



I have probably spent the better part of my life looking for examples of
good design, and my conclusion is there are so few good designers. Even
fewer non-designers actually notice a good designers' abilities to put them
in a position to succeed.  For that reason, we are languishing under the
canopy of a squalid subcultural darkness where I get answers saying greed
is good and will solve all.

Your answer and Pascal's can only be described as the answers adults would
give.  My question was a thought exercise, to build in the world of
imagination.
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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

2012-06-16 Thread BGB

On 6/16/2012 9:19 AM, Randy MacDonald wrote:

On 6/10/2012 1:15 AM, BGB wrote:
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.

I believe that the expression in Dyalog APL is:

⍎¨statements

or

{execute}{spawn}{each}statements.



I recently thought about it off-list, and came up with a syntax like:
async! {A}{B}{C}

but, decided that this isn't really needed at the more moment, and is a 
bit extreme of a feature anyways (and would need to devise a mechanism 
for implementing a multi-way join, ...).


actually, probably in my bytecode it would look something like:
mark
mark; push A; close; call_async
mark; push B; close; call_async
mark; push C; close; call_async
multijoin

(and likely involve adding some logic into the green-thread scheduler...).


ended up basically opting in this case for something simpler which I had 
used in the past:
callback events on timers. technically, timed callbacks aren't really 
good, but they work well enough for things like animation tasks, ...


but, I may still need to think about it.

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


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

2012-06-16 Thread Randy MacDonald
@BGB, if the braces around the letters defers execution, as my memories 
of Perl confirm, this is perfect.  With APL, quoting an expression 
accomplishes the same end: '1+1'



On another note, I agree with the thesis that OO is just message passing:

  aResult ← someParameters 'messageName' to anObject ⍝⍝ so, once 
'to' is defined, APL does OO.


I was thinking 'new' didn't fit, but

   'new' to aClass

convinced me otherwise.

It also means that 'object oriented language' is a category error.

On 6/16/2012 11:40 AM, BGB wrote:


I recently thought about it off-list, and came up with a syntax like:
async! {A}{B}{C}



--
---
|\/| Randy A MacDonald   | If the string is too tight, it will snap
|\\| array...@ns.sympatico.ca|   If it is too loose, it won't play...
 BSc(Math) UNBF '83  | APL: If you can say it, it's done.
 Natural Born APL'er | I use Real J
 Experimental webserver http://mormac.homeftp.net/
-NTP{ gnat }-

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


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

2012-06-16 Thread BGB

On 6/16/2012 10:05 AM, Randy MacDonald wrote:
@BGB, if the braces around the letters defers execution, as my 
memories of Perl confirm, this is perfect.  With APL, quoting an 
expression accomplishes the same end: '1+1'




no, the braces indicate a code block (in statement context), and it is 
the async keyword which indicates that there is deferred execution. 
(in my language, quoting indicates symbols or strings, as in this is a 
string, 'a', or 'single-quoted string', where a is always a string, 
but 'a' is a character-literal).


in a expression context, the braces indicate creation of an ex-nihilo 
object, as in {x: 3, y: 4}.


the language sort-of distinguishes between statements and expressions, 
but this is more relaxed than in many other languages (it is more built 
on context than on a strict syntactic divide, and in most cases an 
explicit return is optional since any statement/expression in tail 
position may implicitly return a value).



the letters in this case were just placeholders for the statements which 
would go in the blocks.


for example example:
if(true)
{
printf(A\n);
sleep(1000);
printf(B\n);
sleep(1000);
}
printf(Done\n);

executes the print statements synchronously, causing the thread to sleep 
for 1s in the process (so, Done is printed 1s after B).


and, with a plain async keyword:
async {
sleep(1000);
printf(A\n);
}
printf(Done\n);

will print Done first, and then print A about 1 second later (since 
the block is folded into another thread).


technically, there is another operation, known as a join.

var a = async { ... };
...
var x = join(a);

where the join() will block until the given thread has returned, and 
return the return value from the thread.
generally though, a join in this form only makes sense with a single 
argument (and would be implemented in the VM using a special bytecode op).


an extension would be to implicitly allow multiple joins, as in:
join(a, b, c);//wait on 3 threads
except, now, the return value doesn't make much sense anymore, and likewise:
join(
async{A},
async{B},
async{C});
is also kind of ugly.

in this case, the syntax:
async! {A}{B}{C};
although, this could also work:
async! {A}, {B}, {C};

either would basically mean async with join, and essentially mean 
something similar to the 3-way join (basically, as syntax sugar). it may 
also imply we don't really care what the return value is.


basically, the ! suffix has ended up on several of my keywords to 
indicate alternate forms, for example: a as int and a as! int will 
have slightly different semantics (the former will return null if the 
cast fails, and the latter will throw an exception).



but, since I got to thinking about it again, I started writing up more 
of the logic for this (adding multiway join logic, ...).





On another note, I agree with the thesis that OO is just message passing:

  aResult ? someParameters 'messageName' to anObject ?? so, once 
'to' is defined, APL does OO.


I was thinking 'new' didn't fit, but

   'new' to aClass

convinced me otherwise.

It also means that 'object oriented language' is a category error.



my language is a bit more generic, and loosely borrows much of its 
current syntax from JavaScript and ActionScript.


however, it has a fair number of non-JS features and semantics exist as 
well.
it is hardly an elegant, cleanly designed, or minimal language, but it 
works, and is a design more based on being useful to myself.




On 6/16/2012 11:40 AM, BGB wrote:


I recently thought about it off-list, and came up with a syntax like:
async! {A}{B}{C}



--
---
|\/| Randy A MacDonald   | If the string is too tight, it will snap
|\\|array...@ns.sympatico.ca|   If it is too loose, it won't play...
  BSc(Math) UNBF '83  | APL: If you can say it, it's done.
  Natural Born APL'er | I use Real J
  Experimental webserverhttp://mormac.homeftp.net/
-NTP{ gnat }-


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


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


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

2012-06-16 Thread BGB

On 6/16/2012 11:36 AM, Randy MacDonald wrote:
@BGB, by the 'same end' i meant tranforming a statement into something 
that a flow control operator can act on, like if () {...} else {}  The 
domain of the execute operator in APL is quoted strings.  I did not 
mean that the same end was allowing asynchronous execution.




side note:
a lot of how this is implemented came from how it was originally 
designed/implemented.


originally, the main use of the call_async opcode was not for async 
blocks, but rather for explicit asynchronous function calls:
foo!(...);//calls function, doesn't wait for return (return value is 
a thread-handle).

likewise:
join(foo!(...));
would call a function asynchronously, and join against the result 
(return value).


async also was latter added as a modifier:
async function bar(...) { ... }

where the function will be called asynchronously by default:
bar(...);//will perform an (implicit) async call

for example, it was also possible to use a lot of this to pass messages 
along channels:

chan!(...);//send a message, don't block for receipt.
chan(...);//send a message, blocking (would wait for other end to join)
join(chan);//get message from channel, blocks for message

a lot of this though was in the 2004 version of the language (the VM was 
later re-implemented, twice), and some hasn't been fully reimplemented 
(the 2004 VM was poorly implemented and very slow).


the async-block syntax was added later, and partly built on the concept 
of async calls.



but, yeah, probably a lot of people here have already seen stuff like 
this before.





On 6/16/2012 1:23 PM, BGB wrote:

On 6/16/2012 10:05 AM, Randy MacDonald wrote:
@BGB, if the braces around the letters defers execution, as my 
memories of Perl confirm, this is perfect.  With APL, quoting an 
expression accomplishes the same end: '1+1'




no, the braces indicate a code block (in statement context), and it 
is the async keyword which indicates that there is deferred 
execution. (in my language, quoting indicates symbols or strings, as 
in this is a string, 'a', or 'single-quoted string', where a is 
always a string, but 'a' is a character-literal).


in a expression context, the braces indicate creation of an ex-nihilo 
object, as in {x: 3, y: 4}.


the language sort-of distinguishes between statements and 
expressions, but this is more relaxed than in many other languages 
(it is more built on context than on a strict syntactic divide, and 
in most cases an explicit return is optional since any 
statement/expression in tail position may implicitly return a value).



the letters in this case were just placeholders for the statements 
which would go in the blocks.


for example example:
if(true)
{
printf(A\n);
sleep(1000);
printf(B\n);
sleep(1000);
}
printf(Done\n);

executes the print statements synchronously, causing the thread to 
sleep for 1s in the process (so, Done is printed 1s after B).


and, with a plain async keyword:
async {
sleep(1000);
printf(A\n);
}
printf(Done\n);

will print Done first, and then print A about 1 second later 
(since the block is folded into another thread).


technically, there is another operation, known as a join.

var a = async { ... };
...
var x = join(a);

where the join() will block until the given thread has returned, 
and return the return value from the thread.
generally though, a join in this form only makes sense with a 
single argument (and would be implemented in the VM using a special 
bytecode op).


an extension would be to implicitly allow multiple joins, as in:
join(a, b, c);//wait on 3 threads
except, now, the return value doesn't make much sense anymore, and 
likewise:

join(
async{A},
async{B},
async{C});
is also kind of ugly.

in this case, the syntax:
async! {A}{B}{C};
although, this could also work:
async! {A}, {B}, {C};

either would basically mean async with join, and essentially mean 
something similar to the 3-way join (basically, as syntax sugar). it 
may also imply we don't really care what the return value is.


basically, the ! suffix has ended up on several of my keywords to 
indicate alternate forms, for example: a as int and a as! int 
will have slightly different semantics (the former will return null 
if the cast fails, and the latter will throw an exception).



but, since I got to thinking about it again, I started writing up 
more of the logic for this (adding multiway join logic, ...).





On another note, I agree with the thesis that OO is just message 
passing:


  aResult ? someParameters 'messageName' to anObject ?? so, once 
'to' is defined, APL does OO.


I was thinking 'new' didn't fit, but

   'new' to aClass

convinced me otherwise.

It also means that 'object oriented language' is a category error.



my language is a bit more generic, and loosely borrows much of its 
current syntax from JavaScript and ActionScript.


however, it has a fair number of non-JS features and 

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

2012-06-16 Thread Wesley Smith
 If things are expanding then they have to get more complex, they encompass
 more.

Aside from intuition, what evidence do you have to back this statement
up?  I've seen no justification for this statement so far.  Biological
systems naturally make use of objects across vastly different scales
to increase functionality with a much less significant increase in
complexity.  Think of how early cells incorporated mitochondria whole
hog to produce a new species.

Also, I think talking about minimum bits of information is not the
best view onto the complexity problem.  It doesn't account for
structure at all.  Instead, why don't we talk about Gregory Chaitin's
[1] notion of a minimal program.  An interesting biological parallel
to compressing computer programs can be found in looking at bacteria
DNA.  For bacteria near undersea vents where it's very hot and genetic
code transcriptions can easily go awry due to thermal conditions, the
bacteria's genetic code as evolved into a compressed form that reuses
chunks of itself to express the same features that would normally be
spread out in a larger sequence of DNA.

wes

[1] http://www.umcs.maine.edu/~chaitin/
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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

2012-06-16 Thread Miles Fidelman

Wesley Smith wrote:

If things are expanding then they have to get more complex, they encompass
more.

Aside from intuition, what evidence do you have to back this statement
up?  I've seen no justification for this statement so far.


As I recall, there was a recent Nobel prize that boiled down to: 
Increase the energy flowing into a system, and new, more complex, 
behaviors arise.

Biological
systems naturally make use of objects across vastly different scales
to increase functionality with a much less significant increase in
complexity.  Think of how early cells incorporated mitochondria whole
hog to produce a new species.


Encapsulating complexity (e.g, in mitochondria) doesn't eliminate 
complexity.  Encapsulation and layering MANAGES complexity allowing new 
layers of complexity to be constructed (or emerge) through combinations 
of more complicated building blocks.


Miles Fidelman


--
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-16 Thread BGB

On 6/16/2012 1:39 PM, Wesley Smith wrote:

If things are expanding then they have to get more complex, they encompass
more.

Aside from intuition, what evidence do you have to back this statement
up?  I've seen no justification for this statement so far.  Biological
systems naturally make use of objects across vastly different scales
to increase functionality with a much less significant increase in
complexity.  Think of how early cells incorporated mitochondria whole
hog to produce a new species.


in code, the later example is often called copy / paste.
some people demonize it, but if a person knows what they are doing, it 
can be used to good effect.


a problem is partly how exactly one defines complex:
one definition is in terms of visible complexity, where basically 
adding a feature causes code to become harder to understand, more 
tangled, ...


another definition, apparently more popular among programmers, is to 
simply obsess on the total amount of code in a project, and just 
automatically assume that a 1 Mloc project is much harder to understand 
and maintain than a 100 kloc project.


if the difference is that the smaller project consists almost entirely 
of hacks and jury-rigging, it isn't necessarily much easier to understand.


meanwhile, building abstractions will often increase the total code size 
(IOW: adding complexity), but consequently make the code easier to 
understand and maintain (reducing visible complexity).


often the code using an abstraction will be smaller, but usually adding 
an abstraction will add more total code to the project than that saved 
by the code which makes use of it (except past a certain point, namely 
where the redundancy from the client code will outweigh the cost of the 
abstraction).



for example:
MS-DOS is drastically smaller than Windows;
but, if most of what we currently have on Windows were built directly on 
MS-DOS (with nearly every app providing its own PMode stuff, driver 
stack, ...), then the total wasted HD space would likely be huge.


and, developing a Windows-like app on Windows is much less total effort 
than doing similar on MS-DOS would be.




Also, I think talking about minimum bits of information is not the
best view onto the complexity problem.  It doesn't account for
structure at all.  Instead, why don't we talk about Gregory Chaitin's
[1] notion of a minimal program.  An interesting biological parallel
to compressing computer programs can be found in looking at bacteria
DNA.  For bacteria near undersea vents where it's very hot and genetic
code transcriptions can easily go awry due to thermal conditions, the
bacteria's genetic code as evolved into a compressed form that reuses
chunks of itself to express the same features that would normally be
spread out in a larger sequence of DNA.


yep.

I have sometimes wondered what an organism which combined most of the 
best parts of what nature has to offer would look like (an issue seems 
to be that most major organisms seem to be more advanced in some ways 
and less advanced in others).




wes

[1] http://www.umcs.maine.edu/~chaitin/
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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


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

2012-06-16 Thread David Barbour
On Fri, Jun 15, 2012 at 1:38 PM, Paul Homer paul_ho...@yahoo.ca wrote:

 there is some underlying complexity tied to the functionality that
 dictates that it could never be any less the X lines of code. The system
 encapsulates a significant amount of information, and stealing from Shannon
 slightly, it cannot be represented in any less bits.


A valid question might be: how much of this information should be
represented in code? How much should instead be heuristically captured by
generic machine learning techniques, indeterminate STM solvers, or
stability models? I can think of much functionality today for control
systems, configurations, UIs, etc. that would be better (more adaptive,
reactive, flexible) achieved through generic mechanisms.

Sure, there is a minimum number of bits to represent information in the
system, but code is a measure of human effort, not information in general.



 If things are expanding then they have to get more complex, they encompass
 more.


Complexity can be measured by number of possible states or configurations,
and in that sense things do get more complex as they scale. But they don't
need to become more *complicated*. The underlying structure can become
simpler, more uniform, especially compared to what we have today.

Regards,

David

-- 
bringing s-words to a pen fight
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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

2012-06-16 Thread Miles Fidelman

BGB wrote:


a problem is partly how exactly one defines complex:
one definition is in terms of visible complexity, where basically 
adding a feature causes code to become harder to understand, more 
tangled, ...


another definition, apparently more popular among programmers, is to 
simply obsess on the total amount of code in a project, and just 
automatically assume that a 1 Mloc project is much harder to 
understand and maintain than a 100 kloc project.


And there are functional and behavioral complexity - i.e., REAL 
complexity, in the information theory sense.


I expect that there is some correlation between minimizing visual 
complexity and lines of code (e.g., by using domain specific languages), 
and being able to deal with more complex problem spaces and/or develop 
more sophisticated approaches to problems.


Miles



--
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-16 Thread BGB

On 6/16/2012 2:20 PM, Miles Fidelman wrote:

BGB wrote:


a problem is partly how exactly one defines complex:
one definition is in terms of visible complexity, where basically 
adding a feature causes code to become harder to understand, more 
tangled, ...


another definition, apparently more popular among programmers, is to 
simply obsess on the total amount of code in a project, and just 
automatically assume that a 1 Mloc project is much harder to 
understand and maintain than a 100 kloc project.


And there are functional and behavioral complexity - i.e., REAL 
complexity, in the information theory sense.


I expect that there is some correlation between minimizing visual 
complexity and lines of code (e.g., by using domain specific 
languages), and being able to deal with more complex problem spaces 
and/or develop more sophisticated approaches to problems.




a lot depends on what code is being abstracted, and how much code can be 
reduced by how much.


if the DSL makes a lot of code a lot smaller, it will have a good effect;
if it only makes a little code only slightly smaller, it may make the 
total project larger.



personally, I assume not worrying too much about total LOC, and more 
concern with how much personal effort is required (to 
implement/maintain/use it), and how well it will work (performance, 
memory use, reliability, ...).


but, I get a lot of general criticism for how I go about doing things...


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


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

2012-06-16 Thread Pascal J. Bourguignon
John Zabroski johnzabro...@gmail.com writes:

 On Jun 15, 2012 2:39 PM, Pascal J. Bourguignon p...@informatimago.com 
 wrote:

 John Zabroski johnzabro...@gmail.com writes:


  Sorry, you did not answer my question, but instead presented excuses
  for why programmers misunderstand people.  (Can I paraphrase your
  thoughts as, Because people are not programmers!) 

 No, you misunderstood my answer:
 Because people don't pay programmers enough.

 In the words of comedian Spike Milligan, All I ask is for the chance to 
 prove money can't make me happy.

 But my motto comes from pianist Glenn Gould: the ideal ratio of performers to 
 audience is one. I have never seen a software team produce better results 
 with better pay, but most of
 the great advances in software came from somebody doing something differently 
 because any other way was simply wrong.

 Having seen millionaires throw their money around to build their dream app 
 (the Chandler project featured in Scott Rosenberg's book Dreaming in Code and 
 all of Sandy Klausner's
 vaporware graphical programming ideas), and seeing what road blocks still 
 remained, I disbelieve your answer.

 Who invented the spreadsheet? One person.
 Who invented pivot tables? One person.
 Who invented modeless text editing? One person.

 How much money is enough, anyway?  In the words of John D. Rockefellar, A 
 little bit more?

I wasn't speaking of the work of art programmers would do anyway.

I was speaking of what the customers want.  If they want to have the
same services as offered by plumbers (you don't hold the spanner to a
plumber, or you don't bring your own tubes; you don't get wet;  you just
call him, and let him deal with the leak: simple and nice user
interface, good end-result, including the hefty bill), then you'll have
to pay the same hourly rates as what you pay to plumbers.  Just google
some statistics.


-- 
__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-15 Thread BGB

On 6/14/2012 10:19 PM, John Zabroski wrote:


Folks,

Arguing technical details here misses the point. For example, a 
different conversation can be started by asking Why does my web 
hosting provider say I need an FTP client? Already technology is way 
too much in my face and I hate seeing programmers blame their tools 
rather than their misunderstanding of people.


Start by asking yourself how would you build these needs from scratch 
to bootstrap something like the Internet.


What would a web browser look like if the user didnt need a seperate 
program to put data somewhere on their web server and could just use 
one uniform mexhanism? Note I am not getting into nice to have 
features like resumption of paused uploads due to weak or episodic 
connectivity, because that too is basically a technical problem -- and 
it is not regarded as academically difficult either. I am simply 
taking one example of how users are forced to work today and asking 
why not something less technical. All I want to do is upload a file 
and yet I have all these knobs to tune and things to install and 
none of it takes my work context into consideration.




idle thoughts:
there is Windows Explorer, which can access FTP;
would be better if it actually remembered login info, had automatic 
logic, and could automatically resume uploads, ...


but, the interface is nice, as an FTP server looks much like a 
directory, ...



also, at least in the past, pretty much everything *was* IE:
could put HTML on the desktop, in directories (directory as webpage), ...
but most of this went away AFAICT (then again, not really like IE is 
good).


maybe, otherwise, the internet would look like local applications or 
similar. they can sit on desktop, and maybe they launch windows. IMHO, I 
don't as much like tabs, as long ago Windows basically introduced its 
own form of tabs:

the Windows taskbar.

soon enough, it added another nifty feature:
it lumped various instances of the same program into popup menus.


meanwhile, browser tabs are like Win95 all over again, with the thing 
likely to experience severe lag whenever more than a few pages are open 
(and often have responsiveness and latency issues).


better maybe if more of the app ran on the client, and if people would 
use more asynchronous messages (rather than request/response).


...

so, then, webpages could have a look and feel more like normal apps.




Why do I pay even $4 a month for such crappy service?

On Jun 11, 2012 8:17 AM, Tony Garnock-Jones 
tonygarnockjo...@gmail.com mailto:tonygarnockjo...@gmail.com wrote:


On 9 June 2012 22:06, Toby Schachman t...@alum.mit.edu
mailto:t...@alum.mit.edu wrote:

Message passing does not necessitate a conceptual dependence on
request-response communication. Yet most code I see in the
wild uses
this pattern.


Sapir-Whorf strikes again? ;-)

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.


Perhaps you're not taking into account programs that use the
observer/observable pattern? As a specific example, all the uses
of the dependents protocols (e.g. #changed:, #update:) in
Smalltalk are just this. In my Squeak image, there are some 50
implementors of #update: and some 500 senders of #changed:.

In that same image, there is also protocol for events on class
Object, as well as an instance of Announcements loaded. So I think
what you describe really might be quite common in OO /systems/,
rather than discrete programs.

All three of these aspects of my Squeak image - the dependents
protocols, triggering of events, and Announcements - are
encodings of simple asynchronous messaging, built using the
traditional request-reply-error conversational pattern, and
permitting conversational patterns other than the traditional
request-reply-error.

As an aside, working with such synchronous simulations of
asynchronous messaging causes all sorts of headaches, because
asynchronous events naturally involve concurrency, and the
simulation usually only involves a single process dispatching
events by synchronous procedure call.

Regards,
  Tony
-- 
Tony Garnock-Jones

tonygarnockjo...@gmail.com mailto:tonygarnockjo...@gmail.com
http://homepages.kcbbs.gen.nz/tonyg/

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



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


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


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

2012-06-15 Thread Pascal J. Bourguignon
John Zabroski johnzabro...@gmail.com writes:

 Folks,

 Arguing technical details here misses the point. For example, a
 different conversation can be started by asking Why does my web
 hosting provider say I need an FTP client? Already technology is way
 too much in my face and I hate seeing programmers blame their tools
 rather than their misunderstanding of people.

 Start by asking yourself how would you build these needs from scratch
 to bootstrap something like the Internet.

 What would a web browser look like if the user didnt need a seperate
 program to put data somewhere on their web server and could just use
 one uniform mexhanism? Note I am not getting into nice to have
 features like resumption of paused uploads due to weak or episodic
 connectivity, because that too is basically a technical problem -- and
 it is not regarded as academically difficult either. I am simply
 taking one example of how users are forced to work today and asking
 why not something less technical. All I want to do is upload a file
 and yet I have all these knobs to tune and things to install and
 none of it takes my work context into consideration.


There are different problems.

About the tools and mechanisms, and their multiplicity, it's normal to
have a full toolbox.  Even with evolving technologies some tools are
used less often, each has its specific use and they're all useful.

Also, the point of discrete tools is that they're modular and can be
combined to great effect by a competent professionnal.  You wouldn't
want to dig all the holes with the same tool, be it either a spoon or a
caterpillar.


Now for the other problem, the users, one cause of that problem is the
accessibility and openess of computer and software technology, which
doesn't put clear boundaries between the professionnals and the
customers.  There're all shades of grays, amateurs, students and D.I.Y
in between.

But you're perfectly entitled to have expectations of good service and
ease of use.  You only need to realize that this will come with a cost,
and it won't be cheap.  

Basically, your choice is between:

- here, we have a toolbox, we will gladly lend it to you so you can have
  fun hacking your own stuff.

- tell us what you want, we'll work hard to provide you the easy
  service, and we'll send you the bill.

(ok, there are intermediary choices, but you can basically classify each
offer between a do-it-yourself solution and a everything-s-done-for-you
one).


However the difficulties of the later option is that things evolve so
fast that we may not have the time to develop affordable fine tuned
customer oriented solutions before they become obsolete.  Developing and
refining such services takes time, and money.


And in general, programmers are not paid well enough. 


Just compare the hourly wages of a plumber and a computer programmer,
and you'll understand why you don't get the same easy service from
programmers than what you get from plumbers.   But this is a problem
easily solved: just put the money on the table, and you'll find
competent programmers to implement your easy solution.


But it seems customers prefer crappy service as long as it's cheap (or
free).

-- 
__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-15 Thread John Zabroski
On Fri, Jun 15, 2012 at 6:36 AM, Pascal J. Bourguignon 
p...@informatimago.com wrote:

 John Zabroski johnzabro...@gmail.com writes:

  Folks,
 
  Arguing technical details here misses the point. For example, a
  different conversation can be started by asking Why does my web
  hosting provider say I need an FTP client? Already technology is way
  too much in my face and I hate seeing programmers blame their tools
  rather than their misunderstanding of people.
 
  Start by asking yourself how would you build these needs from scratch
  to bootstrap something like the Internet.
 
  What would a web browser look like if the user didnt need a seperate
  program to put data somewhere on their web server and could just use
  one uniform mexhanism? Note I am not getting into nice to have
  features like resumption of paused uploads due to weak or episodic
  connectivity, because that too is basically a technical problem -- and
  it is not regarded as academically difficult either. I am simply
  taking one example of how users are forced to work today and asking
  why not something less technical. All I want to do is upload a file
  and yet I have all these knobs to tune and things to install and
  none of it takes my work context into consideration.


 There are different problems.

 About the tools and mechanisms, and their multiplicity, it's normal to
 have a full toolbox.  Even with evolving technologies some tools are
 used less often, each has its specific use and they're all useful.

 Also, the point of discrete tools is that they're modular and can be
 combined to great effect by a competent professionnal.  You wouldn't
 want to dig all the holes with the same tool, be it either a spoon or a
 caterpillar.


 Now for the other problem, the users, one cause of that problem is the
 accessibility and openess of computer and software technology, which
 doesn't put clear boundaries between the professionnals and the
 customers.  There're all shades of grays, amateurs, students and D.I.Y
 in between.

 But you're perfectly entitled to have expectations of good service and
 ease of use.  You only need to realize that this will come with a cost,
 and it won't be cheap.

 Basically, your choice is between:

 - here, we have a toolbox, we will gladly lend it to you so you can have
  fun hacking your own stuff.

 - tell us what you want, we'll work hard to provide you the easy
  service, and we'll send you the bill.

 (ok, there are intermediary choices, but you can basically classify each
 offer between a do-it-yourself solution and a everything-s-done-for-you
 one).


 However the difficulties of the later option is that things evolve so
 fast that we may not have the time to develop affordable fine tuned
 customer oriented solutions before they become obsolete.  Developing and
 refining such services takes time, and money.


 And in general, programmers are not paid well enough.


 Just compare the hourly wages of a plumber and a computer programmer,
 and you'll understand why you don't get the same easy service from
 programmers than what you get from plumbers.   But this is a problem
 easily solved: just put the money on the table, and you'll find
 competent programmers to implement your easy solution.


 But it seems customers prefer crappy service as long as it's cheap (or
 free).



Sorry, you did not answer my question, but instead presented excuses for
why programmers misunderstand people.  (Can I paraphrase your thoughts as,
Because people are not programmers!)
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


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

2012-06-15 Thread Miles Fidelman

John Zabroski wrote:


On Fri, Jun 15, 2012 at 6:36 AM, Pascal J. Bourguignon 
p...@informatimago.com mailto:p...@informatimago.com wrote:


John Zabroski johnzabro...@gmail.com
mailto:johnzabro...@gmail.com writes:

 All I want to do is upload a file
 and yet I have all these knobs to tune and things to install and
 none of it takes my work context into consideration.

snip

Basically, your choice is between:

- here, we have a toolbox, we will gladly lend it to you so you
can have
 fun hacking your own stuff.

- tell us what you want, we'll work hard to provide you the easy
 service, and we'll send you the bill.

(ok, there are intermediary choices, but you can basically
classify each
offer between a do-it-yourself solution and a
everything-s-done-for-you
one).

snip

But it seems customers prefer crappy service as long as it's cheap (or
free).



Sorry, you did not answer my question, but instead presented excuses 
for why programmers misunderstand people.  (Can I paraphrase your 
thoughts as, Because people are not programmers!)


Ok.. let's try making it simple:
- you want it easy
- you want it cheap
- you don't want to take the effort to find a tool or service provider 
that makes it easy (plenty of them exist, some of them are cheap, some free)


Guess what, the problem is not the technology, or the programmers - it's 
you.



--
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-15 Thread Paul Homer
I see something deeper in what Zed is saying. 

My first really strong experiences with programming came from the 
data-structures world in the late 80s at the University of Waterloo. There was 
an implicit view that one could decompose all problems into data-structures 
(and a few algorithms and a little bit of glue). My sense at the time was that 
the newly emerging concepts of OO were a way of entrenching this philosophy 
directly into the programming languages.

When applied to tasks like building window systems, OO is an incredibly 
powerful approach. If one matches what they are seeing on the screen with the 
objects they are building in the back, there is a strong one-to-one mapping 
that allows the programmer to rapidly diagnose problems at a speed that just 
wasn't possible before.

But for many of the things that I've built in the back-end I find that OO 
causes me to jump through what I think are artificial hoops. Over the years 
I've spent a lot of time pondering why. My underlying sense is that there are 
some fundamental dualities in computational machines. Static vs. dynamic. Data 
vs. code. Nouns vs. verbs. Location vs. time. It is possible, of course, to 
'cast' one onto the other, there are plenty of examples of 'jumping' 
particularly in languages wrt. nouns and verbs. But I think that decompositions 
become 'easier' for us to understand when we partition them along the 'natural' 
lines of what they are underneath.

My thinking some time ago as it applies to OO is that the fundamental 
primitive, an object, essentially mixes its metaphors (sort of). That is, it 
contains both code and data. I think it's this relatively simple point that 
underlies the problems that people have in grokking OO. What I've also found is 
that that wasn't there in that earlier philosophy at Waterloo. Sure there were 
atomic primitives attached to each data-structure, but the way we build 
heavy-duty mechanics was more often to push the 'actions' to something like an 
intermediary data-structure and then do a clean simple traversal to actuate it 
(like lisp), so fundamentally the static/dynamic duality was daintily skipped 
over.

It is far more than obvious that OO opened the door to allow massive systems. 
Theoretically they were possible before, but it gave us a way to manage the 
complexity of these beasts. Still, like all technologies, it comes with a 
built-in 'threshold' that imposes a limit on what we can build. If we are too 
exceed that, then I think we are in the hunt for the next philosophy and as Zed 
points out the ramification of finding it will cause yet another technological 
wave to overtake the last one.

Just my thoughts.


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


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

2012-06-15 Thread David Leibs
I have kinda lost track of this thread so forgive me if I wander off in a 
perpendicular direction.

I believe that things do not have to continually get more and more complex.  
The way out for me is to go back to the beginning and start over (which is what 
this mailing list is all about).
I constantly go back to the beginnings in math and/or physics and try to 
re-understand from first principles.  Of course every time I do this I get less 
and less further along the material continuum because the beginnings are so 
darn interesting.

Let me give an example from arithmetic which I learned from Ken Iverson's 
writings years ago.

As children we spend a lot of time practicing adding up numbers. Humans are 
very bad at this if you measure making a silly error as bad. Take for example:

   365
+  366
--

this requires you to add 5  6, write down 1 and carry 1 to the next column
then add 6, 6, and that carried 1 and write down 2 and carry a 1 to the next 
column
finally add 3, 3 and the carried 1 and write down 7
this gives you 721, oops, the wrong answer.  In step 2 I made a totally 
dyslexic mistake and should have written down a 3.

Ken proposed learning to see things a bit differently and remember the  digits 
are a vector times another vector of powers.
Ken would have you see this as a two step problem with the digits spread out.

   3   6   5
+  3   6   6


Then you just add the digits. Don't think about the carries.

   3   6   5
+  3   6   6

   6  12  11


Now we normalize the by dealing with the carry part moving from right to left 
in fine APL style. You can almost see the implied loop using residue and 
n-residue.
6  12 11
6  13  0
7   3  0

Ken believed that this two stage technique was much easier for people to get 
right.  I adopted it for when I do addition by had and it works very well for 
me. What would it be like if we changed the education establishment and used 
this technique?  One could argue that this sort of hand adding of columns of 
numbers is also dated. Let's don't go there I am just using this as an example 
of going back and looking at a beginning that is hard to see because it is 
just too darn fundamental. 

We need to reduce complexity at all levels and that includes the culture we 
swim in.

cheers,
-David Leibs

On Jun 15, 2012, at 10:58 AM, BGB wrote:

 On 6/15/2012 12:27 PM, Paul Homer wrote:
 
 I wouldn't describe complexity as a problem, but rather an attribute of the 
 universe we exist in, effecting everything from how we organize our 
 societies to how the various solar systems interact with each other.
 
 Each time you conquer the current complexity, your approach adds to it. 
 Eventually all that conquering needs to be conquered itself ...
 
 
 yep.
 
 the world of software is layers upon layers of stuff.
 one thing is made, and made easier, at the cost of adding a fair amount of 
 complexity somewhere else.
 
 this is generally considered a good tradeoff, because the reduction of 
 complexity in things that are seen is perceptually more important than the 
 increase in internal complexity in the things not seen.
 
 although it may be possible to reduce complexity, say by finding ways to do 
 the same things with less total complexity, this will not actually change the 
 underlying issue (or in other cases may come with costs worse than internal 
 complexity, such as poor performance or drastically higher memory use, ...).
 
 
 Paul.
 
 From: Loup Vaillant l...@loup-vaillant.fr
 To: fonc@vpri.org 
 Sent: Friday, June 15, 2012 1:54:04 PM
 Subject: Re: [fonc] The Web Will Die When OOP Dies
 
 Paul Homer wrote:
  It is far more than obvious that OO opened the door to allow massive
  systems. Theoretically they were possible before, but it gave us a way
  to manage the complexity of these beasts. Still, like all technologies,
  it comes with a built-in 'threshold' that imposes a limit on what we can
  build. If we are too exceed that, then I think we are in the hunt for
  the next philosophy and as Zed points out the ramification of finding it
  will cause yet another technological wave to overtake the last one.
 
 I find that a bit depressing: if each tool that tackle complexity
 better than the previous ones lead us to increase complexity (just
 because we can), we're kinda doomed.
 
 Can't we recognized complexity as a problem, instead of an unavoidable
 law of nature?  Thank goodness we have STEPS project to shed some light.
 
 Loup.
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc
 
 
 
 
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc
 
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc

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


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

2012-06-15 Thread Pascal J. Bourguignon
David Leibs david.le...@oracle.com writes:

 I have kinda lost track of this thread so forgive me if I wander off
 in a perpendicular direction.

 I believe that things do not have to continually get more and more
 complex.  The way out for me is to go back to the beginning and start
 over (which is what this mailing list is all about).  I constantly go
 back to the beginnings in math and/or physics and try to re-understand
 from first principles.  Of course every time I do this I get less and
 less further along the material continuum because the beginnings are
 so darn interesting.

 Let me give an example from arithmetic which I learned from Ken
 Iverson's writings years ago.

 As children we spend a lot of time practicing adding up
 numbers. Humans are very bad at this if you measure making a silly
 error as bad. Take for example:

365
 +  366
 --

 this requires you to add 5  6, write down 1 and carry 1 to the next
 column then add 6, 6, and that carried 1 and write down 2 and carry a
 1 to the next column finally add 3, 3 and the carried 1 and write down
 7 this gives you 721, oops, the wrong answer.  In step 2 I made a
 totally dyslexic mistake and should have written down a 3.

 Ken proposed learning to see things a bit differently and remember the
 digits are a vector times another vector of powers.  Ken would have
 you see this as a two step problem with the digits spread out.

3   6   5
 +  3   6   6
 

 Then you just add the digits. Don't think about the carries.

3   6   5
 +  3   6   6
 
6  12  11

 Now we normalize the by dealing with the carry part moving from right
 to left in fine APL style. You can almost see the implied loop using
 residue and n-residue.

 6  12 11
 6  13  0
 7   3  0

 Ken believed that this two stage technique was much easier for people
 to get right.  I adopted it for when I do addition by had and it works
 very well for me. What would it be like if we changed the education
 establishment and used this technique?  One could argue that this sort
 of hand adding of columns of numbers is also dated. Let's don't go
 there I am just using this as an example of going back and looking at
 a beginning that is hard to see because it is just too darn
 fundamental. 

It's a nice way to do additions indeed.

When doing additions mentally, I tend to do them from right to left,
predicting whether we need a carry or not by looking ahead the next
column.  Usually carries don't carry over more than one column, but
even if it does, you only have to remember a single digit at a time.

There are several ways to do additions :-)


Your way works as well for substractions:

3  6  5
-   3  7  1
---
0 -1  4
0 -10 + 4 = -6

3  7  1
 -  3  6  5
---
0  1 -4
   10 -4 = 6

and of course, it's already how we do multiplications too.



 We need to reduce complexity at all levels and that includes the
 culture we swim in.

Otherwise, you can always apply the KISS principle 
(Keep It Simple Stupid).


-- 
__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-15 Thread Paul Homer
Hi David,

The often used quote by Einstein is:

Make everything as simple as possible, but not simpler

People interpret that in a lot of interesting ways, but it does point to a 
'minimum simplicity'. 


In software, you might build a system with 100,000 lines of code. Someone else 
might come along and build it with 20,000 lines of code, but there is some 
underlying complexity tied to the functionality that dictates that it could 
never be any less the X lines of code. The system encapsulates a significant 
amount of information, and stealing from Shannon slightly, it cannot be 
represented in any less bits.

If you let your imagination go wild, you can envision a system with twice as 
much functionality. Now it may be that it requires less than 2X lines of code, 
but it still has a minimum. 


All modern systems we have today exist in silos. Many interact with each other, 
but for the most part we are forced to deal with them individually. If we 
wanted to get closer to what Zed was describing, we'd have to integrate them 
with each other. Given that there are probably huge redundancies it wouldn't 
end up being N*X lines of code, but given the amount of information we've 
encoded it our various systems it would still be stunningly large. 


I think Windows is up around 50M. There may be systems out there that are 
larger. I certainly can imagine a system that might contain 500M lines of code. 
It would be a pretty nice piece of software, but I honestly doubt that we could 
build such a thing (as a single thing*) given our current technologies.

*One could take the Internet as a whole with its 2.3 billion users and untold 
number of machines as a 'single system'. I might accept that, but if it were so 
I'd have to say that its overall quality is very low in the sense that as one 
big piece it is a pretty messy piece. Parts of it work well, parts of it don't.


If things are expanding then they have to get more complex, they encompass 
more. Our usage of computers is significant, but it isn't hard to imagine them 
doing more for us. To get there, we have to expand our usage and thus be able 
to handle more complexity. Big integrated systems that make life better by 
keeping it more organized are probably things we absolutely need right now. Our 
modern societies are outrageously complex and many suspect unsustainable. The 
promise of computers has been that we could embed our intellect into them so 
that we could use them as tools to tame that problem, but to get there we need 
systems that dwarf our current ones.


Paul.






 From: David Leibs david.le...@oracle.com
To: Fundamentals of New Computing fonc@vpri.org 
Sent: Friday, June 15, 2012 3:17:19 PM
Subject: Re: [fonc] The Web Will Die When OOP Dies
 

I have kinda lost track of this thread so forgive me if I wander off in a 
perpendicular direction.


I believe that things do not have to continually get more and more complex.  
The way out for me is to go back to the beginning and start over (which is 
what this mailing list is all about).
I constantly go back to the beginnings in math and/or physics and try to 
re-understand from first principles.  Of course every time I do this I get 
less and less further along the material continuum because the beginnings are 
so darn interesting.


Let me give an example from arithmetic which I learned from Ken Iverson's 
writings years ago.


As children we spend a lot of time practicing adding up numbers. Humans are 
very bad at this if you measure making a silly error as bad. Take for example:


   365
+  366
--


this requires you to add 5  6, write down 1 and carry 1 to the next column
then add 6, 6, and that carried 1 and write down 2 and carry a 1 to the next 
column
finally add 3, 3 and the carried 1 and write down 7
this gives you 721, oops, the wrong answer.  In step 2 I made a totally 
dyslexic mistake and should have written down a 3.


Ken proposed learning to see things a bit differently and remember the  digits 
are a vector times another vector of powers.
Ken would have you see this as a two step problem with the digits spread out.


   3   6   5
+  3   6   6



Then you just add the digits. Don't think about the carries.


   3   6   5
+  3   6   6

   6  12  11




Now we normalize the by dealing with the carry part moving from right to left 
in fine APL style. You can almost see the implied loop using residue and 
n-residue.
6  12 11
6  13  0
7   3  0


Ken believed that this two stage technique was much easier for people to get 
right.  I adopted it for when I do addition by had and it works very well for 
me. What would it be like if we changed the education establishment and used 
this technique?  One could argue that this sort of hand adding of columns of 
numbers is also dated. Let's don't go there I am just using this as an example 
of going back and looking at a beginning that is hard to see because it is 
just too darn

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

2012-06-15 Thread David Leibs
Speaking of multiplication.  Ken Iverson teaches us to do multiplication by 
using a * outer product to build a times table for the digits involved.
+-++
| | 3  6  6|
+-++
|3| 9 18 18|
|6|18 36 36|
|5|15 30 30|
+-++

Now you sum each diagonal:
   (9) (18+18) (18+36+15) (36+30) (30)
 936   6966 30
And just normalize as usual:

   9 36 69 66 30
   9 36 69 69 0
   9 36 75 9  0
   9 43 5  9  0
  13 3  5  9  0
 1 3 3  5  9  0

The multiplication table is easy and just continued practice for your 
multiplication facts.

You don't need much more machinery before you have the kids doing Cannon's 
order n systolic array algorithm for matrix multiply, on the gym floor, with 
their bodies.  This assumes that the dance teacher is coordinating with the 
algorithms teacher. Of course if there isn't something relevant going on that 
warrants matrix multiply then all is lost. I guess that's a job for the 
motivation teacher. :-)

-David Leibs

On Jun 15, 2012, at 12:57 PM, Pascal J. Bourguignon wrote:

 David Leibs david.le...@oracle.com writes:
 
 I have kinda lost track of this thread so forgive me if I wander off
 in a perpendicular direction.
 
 I believe that things do not have to continually get more and more
 complex.  The way out for me is to go back to the beginning and start
 over (which is what this mailing list is all about).  I constantly go
 back to the beginnings in math and/or physics and try to re-understand
 from first principles.  Of course every time I do this I get less and
 less further along the material continuum because the beginnings are
 so darn interesting.
 
 Let me give an example from arithmetic which I learned from Ken
 Iverson's writings years ago.
 
 As children we spend a lot of time practicing adding up
 numbers. Humans are very bad at this if you measure making a silly
 error as bad. Take for example:
 
   365
 +  366
 --
 
 this requires you to add 5  6, write down 1 and carry 1 to the next
 column then add 6, 6, and that carried 1 and write down 2 and carry a
 1 to the next column finally add 3, 3 and the carried 1 and write down
 7 this gives you 721, oops, the wrong answer.  In step 2 I made a
 totally dyslexic mistake and should have written down a 3.
 
 Ken proposed learning to see things a bit differently and remember the
 digits are a vector times another vector of powers.  Ken would have
 you see this as a two step problem with the digits spread out.
 
   3   6   5
 +  3   6   6
 
 
 Then you just add the digits. Don't think about the carries.
 
   3   6   5
 +  3   6   6
 
   6  12  11
 
 Now we normalize the by dealing with the carry part moving from right
 to left in fine APL style. You can almost see the implied loop using
 residue and n-residue.
 
 6  12 11
 6  13  0
 7   3  0
 
 Ken believed that this two stage technique was much easier for people
 to get right.  I adopted it for when I do addition by had and it works
 very well for me. What would it be like if we changed the education
 establishment and used this technique?  One could argue that this sort
 of hand adding of columns of numbers is also dated. Let's don't go
 there I am just using this as an example of going back and looking at
 a beginning that is hard to see because it is just too darn
 fundamental. 
 
 It's a nice way to do additions indeed.
 
 When doing additions mentally, I tend to do them from right to left,
 predicting whether we need a carry or not by looking ahead the next
 column.  Usually carries don't carry over more than one column, but
 even if it does, you only have to remember a single digit at a time.
 
 There are several ways to do additions :-)
 
 
 Your way works as well for substractions:
 
3  6  5
 -   3  7  1
 ---
0 -1  4
0 -10 + 4 = -6
 
3  7  1
 -  3  6  5
 ---
0  1 -4
   10 -4 = 6
 
 and of course, it's already how we do multiplications too.
 
 
 
 We need to reduce complexity at all levels and that includes the
 culture we swim in.
 
 Otherwise, you can always apply the KISS principle 
 (Keep It Simple Stupid).
 
 
 -- 
 __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

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


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

2012-06-15 Thread Andre van Delft
Fascinating.
How did Iverson do division?

Op 15 jun. 2012, om 23:08 heeft David Leibs het volgende geschreven:

 Speaking of multiplication.  Ken Iverson teaches us to do multiplication by 
 using a * outer product to build a times table for the digits involved.
 +-++
 | | 3  6  6|
 +-++
 |3| 9 18 18|
 |6|18 36 36|
 |5|15 30 30|
 +-++
 
 Now you sum each diagonal:
(9) (18+18) (18+36+15) (36+30) (30)
  936   6966 30
 And just normalize as usual:
 
9 36 69 66 30
9 36 69 69 0
9 36 75 9  0
9 43 5  9  0
   13 3  5  9  0
  1 3 3  5  9  0
 
 The multiplication table is easy and just continued practice for your 
 multiplication facts.
 
 You don't need much more machinery before you have the kids doing Cannon's 
 order n systolic array algorithm for matrix multiply, on the gym floor, with 
 their bodies.  This assumes that the dance teacher is coordinating with the 
 algorithms teacher. Of course if there isn't something relevant going on that 
 warrants matrix multiply then all is lost. I guess that's a job for the 
 motivation teacher. :-)
 
 -David Leibs
 
 On Jun 15, 2012, at 12:57 PM, Pascal J. Bourguignon wrote:
 
 David Leibs david.le...@oracle.com writes:
 
 I have kinda lost track of this thread so forgive me if I wander off
 in a perpendicular direction.
 
 I believe that things do not have to continually get more and more
 complex.  The way out for me is to go back to the beginning and start
 over (which is what this mailing list is all about).  I constantly go
 back to the beginnings in math and/or physics and try to re-understand
 from first principles.  Of course every time I do this I get less and
 less further along the material continuum because the beginnings are
 so darn interesting.
 
 Let me give an example from arithmetic which I learned from Ken
 Iverson's writings years ago.
 
 As children we spend a lot of time practicing adding up
 numbers. Humans are very bad at this if you measure making a silly
 error as bad. Take for example:
 
   365
 +  366
 --
 
 this requires you to add 5  6, write down 1 and carry 1 to the next
 column then add 6, 6, and that carried 1 and write down 2 and carry a
 1 to the next column finally add 3, 3 and the carried 1 and write down
 7 this gives you 721, oops, the wrong answer.  In step 2 I made a
 totally dyslexic mistake and should have written down a 3.
 
 Ken proposed learning to see things a bit differently and remember the
 digits are a vector times another vector of powers.  Ken would have
 you see this as a two step problem with the digits spread out.
 
   3   6   5
 +  3   6   6
 
 
 Then you just add the digits. Don't think about the carries.
 
   3   6   5
 +  3   6   6
 
   6  12  11
 
 Now we normalize the by dealing with the carry part moving from right
 to left in fine APL style. You can almost see the implied loop using
 residue and n-residue.
 
 6  12 11
 6  13  0
 7   3  0
 
 Ken believed that this two stage technique was much easier for people
 to get right.  I adopted it for when I do addition by had and it works
 very well for me. What would it be like if we changed the education
 establishment and used this technique?  One could argue that this sort
 of hand adding of columns of numbers is also dated. Let's don't go
 there I am just using this as an example of going back and looking at
 a beginning that is hard to see because it is just too darn
 fundamental. 
 
 It's a nice way to do additions indeed.
 
 When doing additions mentally, I tend to do them from right to left,
 predicting whether we need a carry or not by looking ahead the next
 column.  Usually carries don't carry over more than one column, but
 even if it does, you only have to remember a single digit at a time.
 
 There are several ways to do additions :-)
 
 
 Your way works as well for substractions:
 
3  6  5
 -   3  7  1
 ---
0 -1  4
0 -10 + 4 = -6
 
3  7  1
 -  3  6  5
 ---
0  1 -4
   10 -4 = 6
 
 and of course, it's already how we do multiplications too.
 
 
 
 We need to reduce complexity at all levels and that includes the
 culture we swim in.
 
 Otherwise, you can always apply the KISS principle 
 (Keep It Simple Stupid).
 
 
 -- 
 __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
 
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc

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


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

2012-06-15 Thread Mark Haniford
Paul,

I found your post interesting in that it might reflect a fundamental
problem that I have with normal, average OO, and that is that
methods belong with data.  I have never bought that ideaever.   I
remember feeling stupid because I could never grok that idea and then
felt better when the chief scientist at Franz (who of course produce
Franz Lisp) said that functions don't belong with data.  So of course
in Common Lisp we have generic functions.

There's this continuous mental dilenma with me about what belongs in a
class.  It's just a big bowl of wrong (TM Jeff Garlin) where we have
everything that can ever be done to a class belong to that class.  So
that's why I subscribe to anemic classes, despite what Fowler and
others say.  The exception I have is valid state (factories), but even
then I find that I want to bring extension methods (in c#) back into
the proper class.

We're doing something wrong, but I'm just a joe-average programmer and
like subscribing to newsgroups like this to hear what the big brains
are saying :)

On Fri, Jun 15, 2012 at 11:45 AM, Paul Homer paul_ho...@yahoo.ca wrote:
 I see something deeper in what Zed is saying.

 My first really strong experiences with programming came from the
 data-structures world in the late 80s at the University of Waterloo. There
 was an implicit view that one could decompose all problems into
 data-structures (and a few algorithms and a little bit of glue). My sense at
 the time was that the newly emerging concepts of OO were a way of
 entrenching this philosophy directly into the programming languages.

 When applied to tasks like building window systems, OO is an incredibly
 powerful approach. If one matches what they are seeing on the screen with
 the objects they are building in the back, there is a strong one-to-one
 mapping that allows the programmer to rapidly diagnose problems at a speed
 that just wasn't possible before.

 But for many of the things that I've built in the back-end I find that OO
 causes me to jump through what I think are artificial hoops. Over the years
 I've spent a lot of time pondering why. My underlying sense is that there
 are some fundamental dualities in computational machines. Static vs.
 dynamic. Data vs. code. Nouns vs. verbs. Location vs. time. It is possible,
 of course, to 'cast' one onto the other, there are plenty of examples of
 'jumping' particularly in languages wrt. nouns and verbs. But I think that
 decompositions become 'easier' for us to understand when we partition them
 along the 'natural' lines of what they are underneath.

 My thinking some time ago as it applies to OO is that the fundamental
 primitive, an object, essentially mixes its metaphors (sort of). That is, it
 contains both code and data. I think it's this relatively simple point that
 underlies the problems that people have in grokking OO. What I've also found
 is that that wasn't there in that earlier philosophy at Waterloo. Sure there
 were atomic primitives attached to each data-structure, but the way we build
 heavy-duty mechanics was more often to push the 'actions' to something like
 an intermediary data-structure and then do a clean simple traversal to
 actuate it (like lisp), so fundamentally the static/dynamic duality was
 daintily skipped over.

 It is far more than obvious that OO opened the door to allow massive
 systems. Theoretically they were possible before, but it gave us a way to
 manage the complexity of these beasts. Still, like all technologies, it
 comes with a built-in 'threshold' that imposes a limit on what we can build.
 If we are too exceed that, then I think we are in the hunt for the next
 philosophy and as Zed points out the ramification of finding it will cause
 yet another technological wave to overtake the last one.

 Just my thoughts.


 Paul.


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

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


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

2012-06-15 Thread Miles Fidelman

Pascal J. Bourguignon wrote:

John Zabroski johnzabro...@gmail.com writes:



Sorry, you did not answer my question, but instead presented excuses
for why programmers misunderstand people.  (Can I paraphrase your
thoughts as, Because people are not programmers!)

No, you misunderstood my answer:
Because people don't pay programmers enough.



I think that might be an inaccurate statement in two regards:

- programmers make VERY good money, at least in some fields (if you know 
where to find good, cheap coders, in the US, let me know where)


- (a lot of programmers) do NOT have a particularly user-focused mindset 
(just ask a C coder what they think of Hypercard - you'll get all kinds 
of answers about why end-users can't do any useful; despite a really 
long track record of good stuff written in Hypercard, particularly by 
educators)


Note: This is irrelevant vis-a-vis Jon's question, however.  The answer 
to why he can't find easy ways to upload files, is because he isn't looking.


Miles

--
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-15 Thread Miles Fidelman

Paul Homer wrote:


In software, you might build a system with 100,000 lines of code. 
Someone else might come along and build it with 20,000 lines of code, 
but there is some underlying complexity tied to the functionality that 
dictates that it could never be any less the X lines of code. The 
system encapsulates a significant amount of information, and stealing 
from Shannon slightly, it cannot be represented in any less bits.


Of course, going from 100k lines to 20k lines might be a result of:
- coding tricks that lead to incomprehensible code, particularly in 
languages that encourage such things (APL and perl come to mind)
- re-writing in a domain-specific language (more powerful, but more 
specialized constructs that shift complexity into the underlying platform)


Just saying :-)


--
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-15 Thread Igor Stasenko
On 16 June 2012 02:23, Mark Haniford markhanif...@gmail.com wrote:
 Paul,

 I found your post interesting in that it might reflect a fundamental
 problem that I have with normal, average OO, and that is that
 methods belong with data.  I have never bought that ideaever.   I
 remember feeling stupid because I could never grok that idea and then
 felt better when the chief scientist at Franz (who of course produce
 Franz Lisp) said that functions don't belong with data.  So of course
 in Common Lisp we have generic functions.


I also thought that so called OO is just a mere coupling of data and functions..
but after learning smalltalk and especially an image-based development,
i came to conclusion, that it is often not necessary to separate those two,
it's all just data or, if you like another word, - an information.
Information describing some numbers or connections between multiple
entities, or their groups,
and information which describes how computer system operates with
those entities.

And that's IMO fairly easy to get.

 There's this continuous mental dilenma with me about what belongs in a
 class.  It's just a big bowl of wrong (TM Jeff Garlin) where we have
 everything that can ever be done to a class belong to that class.  So
 that's why I subscribe to anemic classes, despite what Fowler and
 others say.  The exception I have is valid state (factories), but even
 then I find that I want to bring extension methods (in c#) back into
 the proper class.

 We're doing something wrong, but I'm just a joe-average programmer and
 like subscribing to newsgroups like this to hear what the big brains
 are saying :)

 On Fri, Jun 15, 2012 at 11:45 AM, Paul Homer paul_ho...@yahoo.ca wrote:
 I see something deeper in what Zed is saying.

 My first really strong experiences with programming came from the
 data-structures world in the late 80s at the University of Waterloo. There
 was an implicit view that one could decompose all problems into
 data-structures (and a few algorithms and a little bit of glue). My sense at
 the time was that the newly emerging concepts of OO were a way of
 entrenching this philosophy directly into the programming languages.

 When applied to tasks like building window systems, OO is an incredibly
 powerful approach. If one matches what they are seeing on the screen with
 the objects they are building in the back, there is a strong one-to-one
 mapping that allows the programmer to rapidly diagnose problems at a speed
 that just wasn't possible before.

 But for many of the things that I've built in the back-end I find that OO
 causes me to jump through what I think are artificial hoops. Over the years
 I've spent a lot of time pondering why. My underlying sense is that there
 are some fundamental dualities in computational machines. Static vs.
 dynamic. Data vs. code. Nouns vs. verbs. Location vs. time. It is possible,
 of course, to 'cast' one onto the other, there are plenty of examples of
 'jumping' particularly in languages wrt. nouns and verbs. But I think that
 decompositions become 'easier' for us to understand when we partition them
 along the 'natural' lines of what they are underneath.

 My thinking some time ago as it applies to OO is that the fundamental
 primitive, an object, essentially mixes its metaphors (sort of). That is, it
 contains both code and data. I think it's this relatively simple point that
 underlies the problems that people have in grokking OO. What I've also found
 is that that wasn't there in that earlier philosophy at Waterloo. Sure there
 were atomic primitives attached to each data-structure, but the way we build
 heavy-duty mechanics was more often to push the 'actions' to something like
 an intermediary data-structure and then do a clean simple traversal to
 actuate it (like lisp), so fundamentally the static/dynamic duality was
 daintily skipped over.

 It is far more than obvious that OO opened the door to allow massive
 systems. Theoretically they were possible before, but it gave us a way to
 manage the complexity of these beasts. Still, like all technologies, it
 comes with a built-in 'threshold' that imposes a limit on what we can build.
 If we are too exceed that, then I think we are in the hunt for the next
 philosophy and as Zed points out the ramification of finding it will cause
 yet another technological wave to overtake the last one.

 Just my thoughts.


 Paul.


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

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



-- 
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-11 Thread Tony Garnock-Jones
On 9 June 2012 22:06, Toby Schachman t...@alum.mit.edu wrote:

 Message passing does not necessitate a conceptual dependence on
 request-response communication. Yet most code I see in the wild uses
 this pattern.


Sapir-Whorf strikes again? ;-)


 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.


Perhaps you're not taking into account programs that use the
observer/observable pattern? As a specific example, all the uses of the
dependents protocols (e.g. #changed:, #update:) in Smalltalk are just
this. In my Squeak image, there are some 50 implementors of #update: and
some 500 senders of #changed:.

In that same image, there is also protocol for events on class Object, as
well as an instance of Announcements loaded. So I think what you describe
really might be quite common in OO *systems*, rather than discrete programs.

All three of these aspects of my Squeak image - the dependents protocols,
triggering of events, and Announcements - are encodings of simple
asynchronous messaging, built using the traditional request-reply-error
conversational pattern, and permitting conversational patterns other than
the traditional request-reply-error.

As an aside, working with such synchronous simulations of asynchronous
messaging causes all sorts of headaches, because asynchronous events
naturally involve concurrency, and the simulation usually only involves a
single process dispatching events by synchronous procedure call.

Regards,
  Tony
-- 
Tony Garnock-Jones
tonygarnockjo...@gmail.com
http://homepages.kcbbs.gen.nz/tonyg/
___
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 t...@alum.mit.edu 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
p...@informatimago.com 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