The fourth R

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
16 messages Options
Reply | Threaded
Open this post in threaded view
|

The fourth R

Trygve
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve



--

Trygve Reenskaug      mailto: [hidden email]
Morgedalsvn. 5A       http://folk.uio.no/trygver/
N-0378 Oslo             http://fullOO.info
Norway                     Tel: (+47) 22 49 57 27

Walzing-Wikipedia.gif (190K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

kilon.alios
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

this kind of ideology is why Python has been so successful. It has also inspired jokes like this

http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 

Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve



--

Trygve Reenskaug      mailto: [hidden email]
Morgedalsvn. 5A       http://folk.uio.no/trygver/
N-0378 Oslo             http://fullOO.info
Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" value="+4722495727" target="_blank">(+47) 22 49 57 27

Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Alain Busser
Strangely, I am preparing a Python session for pupils who are supposed ti know almost nothing about programming; and I finally came up with the turtle module! I realized that

*COBOL has been invented so that people who work in banks and do not know how to program, can program
*Basic was supposed to be usable by beginners (hence the "b" letter); which imho is false
*LOGO has been invented so that such silly creatures as robots could program; and of course children could program in LOGO (and even, as I read, tech programmation at the age of 4)
*Smalltalk has been created to cope with the mice and windows, but thinking about programmation for children (hence, Etoys and Scratch)
*In France there was a thing called "LSE" which was supposed to help writing the program in a language neighboring French language. No one remembers that, but there were other experiments like "execalgo" or "algobox" (not mentionning MathsOntologie ;-))


Seeing that, I realize that a programming tool especially made for children is not really a new idea, but Python is cool for that. In France too Python is heavily used, especially for students. What surprises me is that the English government choose Python for *children* instead of, say, Scratch. I would not use xMaxima to teach fractions just because xMaxima is able to compute integrals!

To conclude, for me, Phratch on Android is the future in that domain ;-)

Alain


On Sun, Sep 7, 2014 at 2:29 PM, kilon alios <[hidden email]> wrote:
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

this kind of ideology is why Python has been so successful. It has also inspired jokes like this

http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 

Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve



--

Trygve Reenskaug      mailto: [hidden email]
Morgedalsvn. 5A       http://folk.uio.no/trygver/
N-0378 Oslo             http://fullOO.info
Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" value="+4722495727" target="_blank">(+47) 22 49 57 27


Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Offray
In reply to this post by kilon.alios
Hi,

Really nice to see this talks here. My two cents would be around
supporting a model that can grow with the user and trying to create a
connected experience. I have been previously teaching Introduction to
Informatics  to young (17-21 years old) newbies and they include
introductory programming. For that I have taught with Scheme, Python,
Scratch/Etoys/Bots Inc and recently I been creating some data narratives
on health with IPython. From this two experience (newbies teaching and
data narratives) separated like ten years between them, I think that the
idea of a continuous environment one that not only is connected across
time (supporting your learning in time) but also in space, connecting
several ways of programming and other environments. The idea of
programming as a kind of literacy has point me to visual data narratives
as a practical way to build this two axes continuum, of course, video
games and (web) app building are others, but I think they're more
specialized.

I think that Pharo now with Roassal and Moose can be vehicles for this
visual data narratives, with the advantage that once you learn the
language to tell this stories, you can also change the tools for
build/express your understanding of the world, making use of the turtles
all the way down metaphor, but for that we need exploring the say that
Pharo can play better with others (for example pharo/python bridges).

Cheers,

Offray


On 09/07/2014 05:29 AM, kilon alios wrote:

> Python has no competition. Sure there are languages that are more popular than
> Python for their own reasons. There have been simpler languages before python,
> there have been more popular languages, more cross platform languages etc etc
> but Python fills a gap that no language was able to fill before it , easy to use
> very powerful well documented libraries. Python is a language that you can teach
> to a kid now and make a living later on using until his or her old age. Its not
> because the language is simple , its simple enough but not the simplest. Its
> because the culture surrounding the creation of libraries . That culture has a
> name its called "pythonic"
>
>    Beautiful is better than ugly.
>       Explicit is better than implicit.
>       Simple is better than complex.
>       Complex is better than complicated.
>       Flat is better than nested.
>       Sparse is better than dense.
>       Readability counts.
>       Special cases aren't special enough to break the rules.
>       Although practicality beats purity.
>       Errors should never pass silently.
>       Unless explicitly silenced.
>       In the face of ambiguity, refuse the temptation to guess.
>       There should be one-- and preferably only one --obvious way to do it.
>       Although that way may not be obvious at first unless you're Dutch.
>       Now is better than never.
>       Although never is often better than *right* now.
>       If the implementation is hard to explain, it's a bad idea.
>       If the implementation is easy to explain, it may be a good idea.
>       Namespaces are one honking great idea -- let's do more of those!
>
>
> this kind of ideology is why Python has been so successful. It has also inspired jokes like this
>
>
> http://xkcd.com/353/
>
> it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity.
>
> So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet.
>
>
> Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways.
>
> Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
>
> Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different.
>
> So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading.
>
>
>
> On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>      I have for some time been pondering two problems.  One is to identify the
>      fourth R in *R*eading, w*R*iting, a*R*ithmetic, and p*R*ogramming.  There
>      are many contenders for the kids' first step. I believe the English
>      government has chosen Phyton as a first language. Scratch has a certain
>      popularity, there are many others. My concern is "what comes next"? I want
>      the kid to gradually build a mental model of what computing is all about.
>      Learn a little, do a little, lean more, do more, etc. up do old age. This
>      goes much deeper than any programming language. It's a bit as learning to
>      read. Personally, I "broke the reading code"at an early age. Since then, I
>      have been learning more and more. What I read today would have been
>      incomprehensible to me 75  years ago.  But my basic mental model of what
>      reading is all about has remained unchanged. I have never had to unlearn
>      anything.
>
>      I suggest that true object orientation (not class orientation) can form the
>      foundation for the human mental model of computing. Internalize it and live
>      with it forever.
>      -------------------------------------
>      The other problem is to find a better example for DCI presentations. It should
>
>       1.      Be executable and have a cool demo effect.
>       2.      Its domain model should be obvious from the demo.
>       3.      It should have very few and  very simple Data classes.
>       4.      It should have a Context that is clearly and obviously separate
>          from the Data.
>       5.      It should scale to any number of Contexts (use cases) without
>          changing the Data classes.
>
>      -----------------------------------------
>      /Last night I got an idea for an example: A waltzing couple. (See the
>      attached for a picture and Wikipedia for a movie of the use case)./
>
>      The program needs one simple class for a moveable shape and a DCI Context
>      for each dance (waltz, foxtrot, tango, ... for two role, polonaise for
>      more.)  The example will clearly demonstrate the wisdom in separating what
>      the system IS from what the system DOES since the simple Shape class would
>      be overloaded with instance methods for all dances.
>
>      What do you think?
>
>        --Trygve
>
>
>
>      --
>
>      Trygve Reenskaug      mailto: [hidden email] <mailto:[hidden email]>
>      Morgedalsvn. 5A http://folk.uio.no/trygver/
>      N-0378 Oslo http://fullOO.info
>      Norway                     Tel: (+47) 22 49 57 27
>      <tel:%28%2B47%29%2022%2049%2057%2027>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

kilon.alios
A Python bridge is what I am working on with my project Ephestos, using a socket  server / client relationship between Pharo and Python. So far it has been going quite well and is already usable for calling python libraries etc. It seems to work very well even for more complex python code, like class definition , function definitions etc. I use it to communicate with and control Blender. The same concept could well apply to any other languages Its definitely a project  I am very interested so Python libraries are coming to Pharo sooner or later. Probably sooner ;)


On Sun, Sep 7, 2014 at 9:34 PM, Offray Vladimir Luna Cárdenas <[hidden email]> wrote:
Hi,

Really nice to see this talks here. My two cents would be around supporting a model that can grow with the user and trying to create a connected experience. I have been previously teaching Introduction to Informatics  to young (17-21 years old) newbies and they include introductory programming. For that I have taught with Scheme, Python, Scratch/Etoys/Bots Inc and recently I been creating some data narratives on health with IPython. From this two experience (newbies teaching and data narratives) separated like ten years between them, I think that the idea of a continuous environment one that not only is connected across time (supporting your learning in time) but also in space, connecting several ways of programming and other environments. The idea of programming as a kind of literacy has point me to visual data narratives as a practical way to build this two axes continuum, of course, video games and (web) app building are others, but I think they're more specialized.

I think that Pharo now with Roassal and Moose can be vehicles for this visual data narratives, with the advantage that once you learn the language to tell this stories, you can also change the tools for build/express your understanding of the world, making use of the turtles all the way down metaphor, but for that we need exploring the say that Pharo can play better with others (for example pharo/python bridges).

Cheers,

Offray



On 09/07/2014 05:29 AM, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than
Python for their own reasons. There have been simpler languages before python,
there have been more popular languages, more cross platform languages etc etc
but Python fills a gap that no language was able to fill before it , easy to use
very powerful well documented libraries. Python is a language that you can teach
to a kid now and make a living later on using until his or her old age. Its not
because the language is simple , its simple enough but not the simplest. Its
because the culture surrounding the creation of libraries . That culture has a
name its called "pythonic"

   Beautiful is better than ugly.
      Explicit is better than implicit.
      Simple is better than complex.
      Complex is better than complicated.
      Flat is better than nested.
      Sparse is better than dense.
      Readability counts.
      Special cases aren't special enough to break the rules.
      Although practicality beats purity.
      Errors should never pass silently.
      Unless explicitly silenced.
      In the face of ambiguity, refuse the temptation to guess.
      There should be one-- and preferably only one --obvious way to do it.
      Although that way may not be obvious at first unless you're Dutch.
      Now is better than never.
      Although never is often better than *right* now.
      If the implementation is hard to explain, it's a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      Namespaces are one honking great idea -- let's do more of those!


this kind of ideology is why Python has been so successful. It has also inspired jokes like this


http://xkcd.com/353/

it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity.

So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet.


Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways.

Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.

Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different.

So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading.



On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]
<mailto:[hidden email]>> wrote:

     I have for some time been pondering two problems.  One is to identify the
     fourth R in *R*eading, w*R*iting, a*R*ithmetic, and p*R*ogramming.  There
     are many contenders for the kids' first step. I believe the English
     government has chosen Phyton as a first language. Scratch has a certain
     popularity, there are many others. My concern is "what comes next"? I want
     the kid to gradually build a mental model of what computing is all about.
     Learn a little, do a little, lean more, do more, etc. up do old age. This
     goes much deeper than any programming language. It's a bit as learning to
     read. Personally, I "broke the reading code"at an early age. Since then, I
     have been learning more and more. What I read today would have been
     incomprehensible to me 75  years ago.  But my basic mental model of what
     reading is all about has remained unchanged. I have never had to unlearn
     anything.

     I suggest that true object orientation (not class orientation) can form the
     foundation for the human mental model of computing. Internalize it and live
     with it forever.
     -------------------------------------
     The other problem is to find a better example for DCI presentations. It should

      1.      Be executable and have a cool demo effect.
      2.      Its domain model should be obvious from the demo.
      3.      It should have very few and  very simple Data classes.
      4.      It should have a Context that is clearly and obviously separate
         from the Data.
      5.      It should scale to any number of Contexts (use cases) without
         changing the Data classes.

     -----------------------------------------
     /Last night I got an idea for an example: A waltzing couple. (See the
     attached for a picture and Wikipedia for a movie of the use case)./

     The program needs one simple class for a moveable shape and a DCI Context
     for each dance (waltz, foxtrot, tango, ... for two role, polonaise for
     more.)  The example will clearly demonstrate the wisdom in separating what
     the system IS from what the system DOES since the simple Shape class would
     be overloaded with instance methods for all dances.

     What do you think?

       --Trygve



     --

     Trygve Reenskaug      mailto: [hidden email] <mailto:[hidden email]>
     Morgedalsvn. 5A http://folk.uio.no/trygver/
     N-0378 Oslo http://fullOO.info
     Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" value="+4722495727" target="_blank">(+47) 22 49 57 27
     <tel:%28%2B47%29%2022%2049%2057%2027>





Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

pdigonzelli1
I think  your work is very interesting kilon. 
May be you can create framework for call python libraries from pharo.




Ing. Pablo Digonzelli
Software Solutions
IP-Solutiones SRL
Metrotec SRL
25 de Mayo 521
Email: [hidden email]
[hidden email]
Cel: 5493815982714


De: "kilon alios" <[hidden email]>
Para: "Any question about pharo is welcome" <[hidden email]>
Enviados: Domingo, 7 de Septiembre 2014 16:19:39
Asunto: Re: [Pharo-users] The fourth R

A Python bridge is what I am working on with my project Ephestos, using a socket  server / client relationship between Pharo and Python. So far it has been going quite well and is already usable for calling python libraries etc. It seems to work very well even for more complex python code, like class definition , function definitions etc. I use it to communicate with and control Blender. The same concept could well apply to any other languages Its definitely a project  I am very interested so Python libraries are coming to Pharo sooner or later. Probably sooner ;)


On Sun, Sep 7, 2014 at 9:34 PM, Offray Vladimir Luna Cárdenas <[hidden email]> wrote:
Hi,

Really nice to see this talks here. My two cents would be around supporting a model that can grow with the user and trying to create a connected experience. I have been previously teaching Introduction to Informatics  to young (17-21 years old) newbies and they include introductory programming. For that I have taught with Scheme, Python, Scratch/Etoys/Bots Inc and recently I been creating some data narratives on health with IPython. From this two experience (newbies teaching and data narratives) separated like ten years between them, I think that the idea of a continuous environment one that not only is connected across time (supporting your learning in time) but also in space, connecting several ways of programming and other environments. The idea of programming as a kind of literacy has point me to visual data narratives as a practical way to build this two axes continuum, of course, video games and (web) app building are others, but I think they're more specialized.

I think that Pharo now with Roassal and Moose can be vehicles for this visual data narratives, with the advantage that once you learn the language to tell this stories, you can also change the tools for build/express your understanding of the world, making use of the turtles all the way down metaphor, but for that we need exploring the say that Pharo can play better with others (for example pharo/python bridges).

Cheers,

Offray



On 09/07/2014 05:29 AM, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than
Python for their own reasons. There have been simpler languages before python,
there have been more popular languages, more cross platform languages etc etc
but Python fills a gap that no language was able to fill before it , easy to use
very powerful well documented libraries. Python is a language that you can teach
to a kid now and make a living later on using until his or her old age. Its not
because the language is simple , its simple enough but not the simplest. Its
because the culture surrounding the creation of libraries . That culture has a
name its called "pythonic"

   Beautiful is better than ugly.
      Explicit is better than implicit.
      Simple is better than complex.
      Complex is better than complicated.
      Flat is better than nested.
      Sparse is better than dense.
      Readability counts.
      Special cases aren't special enough to break the rules.
      Although practicality beats purity.
      Errors should never pass silently.
      Unless explicitly silenced.
      In the face of ambiguity, refuse the temptation to guess.
      There should be one-- and preferably only one --obvious way to do it.
      Although that way may not be obvious at first unless you're Dutch.
      Now is better than never.
      Although never is often better than *right* now.
      If the implementation is hard to explain, it's a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      Namespaces are one honking great idea -- let's do more of those!


this kind of ideology is why Python has been so successful. It has also inspired jokes like this


http://xkcd.com/353/

it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity.

So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet.


Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways.

Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.

Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different.

So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading.



On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]
<mailto:[hidden email]>> wrote:

     I have for some time been pondering two problems.  One is to identify the
     fourth R in *R*eading, w*R*iting, a*R*ithmetic, and p*R*ogramming.  There
     are many contenders for the kids' first step. I believe the English
     government has chosen Phyton as a first language. Scratch has a certain
     popularity, there are many others. My concern is "what comes next"? I want
     the kid to gradually build a mental model of what computing is all about.
     Learn a little, do a little, lean more, do more, etc. up do old age. This
     goes much deeper than any programming language. It's a bit as learning to
     read. Personally, I "broke the reading code"at an early age. Since then, I
     have been learning more and more. What I read today would have been
     incomprehensible to me 75  years ago.  But my basic mental model of what
     reading is all about has remained unchanged. I have never had to unlearn
     anything.

     I suggest that true object orientation (not class orientation) can form the
     foundation for the human mental model of computing. Internalize it and live
     with it forever.
     -------------------------------------
     The other problem is to find a better example for DCI presentations. It should

      1.      Be executable and have a cool demo effect.
      2.      Its domain model should be obvious from the demo.
      3.      It should have very few and  very simple Data classes.
      4.      It should have a Context that is clearly and obviously separate
         from the Data.
      5.      It should scale to any number of Contexts (use cases) without
         changing the Data classes.

     -----------------------------------------
     /Last night I got an idea for an example: A waltzing couple. (See the
     attached for a picture and Wikipedia for a movie of the use case)./

     The program needs one simple class for a moveable shape and a DCI Context
     for each dance (waltz, foxtrot, tango, ... for two role, polonaise for
     more.)  The example will clearly demonstrate the wisdom in separating what
     the system IS from what the system DOES since the simple Shape class would
     be overloaded with instance methods for all dances.

     What do you think?

       --Trygve



     --

     Trygve Reenskaug      mailto: [hidden email] <mailto:[hidden email]>
     Morgedalsvn. 5A http://folk.uio.no/trygver/
     N-0378 Oslo http://fullOO.info
     Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" target="_blank" data-mce-href="tel:%28%2B47%29%2022%2049%2057%2027">(+47) 22 49 57 27
     <tel:%28%2B47%29%2022%2049%2057%2027>






Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

kilon.alios
thats the idea yes. Actually I can already call python libraries from pharo with my project. However I need to add a way to fetch python values and store them inside Pharo variables. I am also interested in implementing callbacks, so that python code can call pharo code. This two way communication would allow Pharo to act as an IDE for Python and Python to take advantage of Pharo abilities. But this is also up to the Pharo community to create wrappers for python libraries in pharo or make the communication smoother in practice. Or maybe someone else comes up with a better implementation that does not rely on socket and instead on NB FFI and parsing of syntax. There is only so much an inexperienced single part time Pharo coder can do :) 


On Sun, Sep 7, 2014 at 11:11 PM, Pablo R. Digonzelli <[hidden email]> wrote:
I think  your work is very interesting kilon. 
May be you can create framework for call python libraries from pharo.




Ing. Pablo Digonzelli
Software Solutions
IP-Solutiones SRL
Metrotec SRL
25 de Mayo 521
Email: [hidden email]
[hidden email]
Cel: 5493815982714


De: "kilon alios" <[hidden email]>
Para: "Any question about pharo is welcome" <[hidden email]>
Enviados: Domingo, 7 de Septiembre 2014 16:19:39
Asunto: Re: [Pharo-users] The fourth R


A Python bridge is what I am working on with my project Ephestos, using a socket  server / client relationship between Pharo and Python. So far it has been going quite well and is already usable for calling python libraries etc. It seems to work very well even for more complex python code, like class definition , function definitions etc. I use it to communicate with and control Blender. The same concept could well apply to any other languages Its definitely a project  I am very interested so Python libraries are coming to Pharo sooner or later. Probably sooner ;)


On Sun, Sep 7, 2014 at 9:34 PM, Offray Vladimir Luna Cárdenas <[hidden email]> wrote:
Hi,

Really nice to see this talks here. My two cents would be around supporting a model that can grow with the user and trying to create a connected experience. I have been previously teaching Introduction to Informatics  to young (17-21 years old) newbies and they include introductory programming. For that I have taught with Scheme, Python, Scratch/Etoys/Bots Inc and recently I been creating some data narratives on health with IPython. From this two experience (newbies teaching and data narratives) separated like ten years between them, I think that the idea of a continuous environment one that not only is connected across time (supporting your learning in time) but also in space, connecting several ways of programming and other environments. The idea of programming as a kind of literacy has point me to visual data narratives as a practical way to build this two axes continuum, of course, video games and (web) app building are others, but I think they're more specialized.

I think that Pharo now with Roassal and Moose can be vehicles for this visual data narratives, with the advantage that once you learn the language to tell this stories, you can also change the tools for build/express your understanding of the world, making use of the turtles all the way down metaphor, but for that we need exploring the say that Pharo can play better with others (for example pharo/python bridges).

Cheers,

Offray



On 09/07/2014 05:29 AM, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than
Python for their own reasons. There have been simpler languages before python,
there have been more popular languages, more cross platform languages etc etc
but Python fills a gap that no language was able to fill before it , easy to use
very powerful well documented libraries. Python is a language that you can teach
to a kid now and make a living later on using until his or her old age. Its not
because the language is simple , its simple enough but not the simplest. Its
because the culture surrounding the creation of libraries . That culture has a
name its called "pythonic"

   Beautiful is better than ugly.
      Explicit is better than implicit.
      Simple is better than complex.
      Complex is better than complicated.
      Flat is better than nested.
      Sparse is better than dense.
      Readability counts.
      Special cases aren't special enough to break the rules.
      Although practicality beats purity.
      Errors should never pass silently.
      Unless explicitly silenced.
      In the face of ambiguity, refuse the temptation to guess.
      There should be one-- and preferably only one --obvious way to do it.
      Although that way may not be obvious at first unless you're Dutch.
      Now is better than never.
      Although never is often better than *right* now.
      If the implementation is hard to explain, it's a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      Namespaces are one honking great idea -- let's do more of those!


this kind of ideology is why Python has been so successful. It has also inspired jokes like this


http://xkcd.com/353/

it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity.

So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet.


Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways.

Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.

Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different.

So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading.



On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]
<mailto:[hidden email]>> wrote:

     I have for some time been pondering two problems.  One is to identify the
     fourth R in *R*eading, w*R*iting, a*R*ithmetic, and p*R*ogramming.  There
     are many contenders for the kids' first step. I believe the English
     government has chosen Phyton as a first language. Scratch has a certain
     popularity, there are many others. My concern is "what comes next"? I want
     the kid to gradually build a mental model of what computing is all about.
     Learn a little, do a little, lean more, do more, etc. up do old age. This
     goes much deeper than any programming language. It's a bit as learning to
     read. Personally, I "broke the reading code"at an early age. Since then, I
     have been learning more and more. What I read today would have been
     incomprehensible to me 75  years ago.  But my basic mental model of what
     reading is all about has remained unchanged. I have never had to unlearn
     anything.

     I suggest that true object orientation (not class orientation) can form the
     foundation for the human mental model of computing. Internalize it and live
     with it forever.
     -------------------------------------
     The other problem is to find a better example for DCI presentations. It should

      1.      Be executable and have a cool demo effect.
      2.      Its domain model should be obvious from the demo.
      3.      It should have very few and  very simple Data classes.
      4.      It should have a Context that is clearly and obviously separate
         from the Data.
      5.      It should scale to any number of Contexts (use cases) without
         changing the Data classes.

     -----------------------------------------
     /Last night I got an idea for an example: A waltzing couple. (See the
     attached for a picture and Wikipedia for a movie of the use case)./

     The program needs one simple class for a moveable shape and a DCI Context
     for each dance (waltz, foxtrot, tango, ... for two role, polonaise for
     more.)  The example will clearly demonstrate the wisdom in separating what
     the system IS from what the system DOES since the simple Shape class would
     be overloaded with instance methods for all dances.

     What do you think?

       --Trygve



     --

     Trygve Reenskaug      mailto: [hidden email] <mailto:[hidden email]>
     Morgedalsvn. 5A http://folk.uio.no/trygver/
     N-0378 Oslo http://fullOO.info
     Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" target="_blank">(+47) 22 49 57 27
     <tel:%28%2B47%29%2022%2049%2057%2027>







Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

pdigonzelli1
exellent !!!!Risa



Ing. Pablo Digonzelli
Software Solutions
IP-Solutiones SRL
Metrotec SRL
25 de Mayo 521
Email: [hidden email]
[hidden email]
Cel: 5493815982714


De: "kilon alios" <[hidden email]>
Para: "Any question about pharo is welcome" <[hidden email]>
Enviados: Domingo, 7 de Septiembre 2014 17:39:51
Asunto: Re: [Pharo-users] The fourth R

thats the idea yes. Actually I can already call python libraries from pharo with my project. However I need to add a way to fetch python values and store them inside Pharo variables. I am also interested in implementing callbacks, so that python code can call pharo code. This two way communication would allow Pharo to act as an IDE for Python and Python to take advantage of Pharo abilities. But this is also up to the Pharo community to create wrappers for python libraries in pharo or make the communication smoother in practice. Or maybe someone else comes up with a better implementation that does not rely on socket and instead on NB FFI and parsing of syntax. There is only so much an inexperienced single part time Pharo coder can do :) 


On Sun, Sep 7, 2014 at 11:11 PM, Pablo R. Digonzelli <[hidden email]> wrote:
I think  your work is very interesting kilon. 
May be you can create framework for call python libraries from pharo.




Ing. Pablo Digonzelli
Software Solutions
IP-Solutiones SRL
Metrotec SRL
25 de Mayo 521
Email: [hidden email]
[hidden email]
Cel: 5493815982714


De: "kilon alios" <[hidden email]>
Para: "Any question about pharo is welcome" <[hidden email]>
Enviados: Domingo, 7 de Septiembre 2014 16:19:39
Asunto: Re: [Pharo-users] The fourth R


A Python bridge is what I am working on with my project Ephestos, using a socket  server / client relationship between Pharo and Python. So far it has been going quite well and is already usable for calling python libraries etc. It seems to work very well even for more complex python code, like class definition , function definitions etc. I use it to communicate with and control Blender. The same concept could well apply to any other languages Its definitely a project  I am very interested so Python libraries are coming to Pharo sooner or later. Probably sooner ;)


On Sun, Sep 7, 2014 at 9:34 PM, Offray Vladimir Luna Cárdenas <[hidden email]> wrote:
Hi,

Really nice to see this talks here. My two cents would be around supporting a model that can grow with the user and trying to create a connected experience. I have been previously teaching Introduction to Informatics  to young (17-21 years old) newbies and they include introductory programming. For that I have taught with Scheme, Python, Scratch/Etoys/Bots Inc and recently I been creating some data narratives on health with IPython. From this two experience (newbies teaching and data narratives) separated like ten years between them, I think that the idea of a continuous environment one that not only is connected across time (supporting your learning in time) but also in space, connecting several ways of programming and other environments. The idea of programming as a kind of literacy has point me to visual data narratives as a practical way to build this two axes continuum, of course, video games and (web) app building are others, but I think they're more specialized.

I think that Pharo now with Roassal and Moose can be vehicles for this visual data narratives, with the advantage that once you learn the language to tell this stories, you can also change the tools for build/express your understanding of the world, making use of the turtles all the way down metaphor, but for that we need exploring the say that Pharo can play better with others (for example pharo/python bridges).

Cheers,

Offray



On 09/07/2014 05:29 AM, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than
Python for their own reasons. There have been simpler languages before python,
there have been more popular languages, more cross platform languages etc etc
but Python fills a gap that no language was able to fill before it , easy to use
very powerful well documented libraries. Python is a language that you can teach
to a kid now and make a living later on using until his or her old age. Its not
because the language is simple , its simple enough but not the simplest. Its
because the culture surrounding the creation of libraries . That culture has a
name its called "pythonic"

   Beautiful is better than ugly.
      Explicit is better than implicit.
      Simple is better than complex.
      Complex is better than complicated.
      Flat is better than nested.
      Sparse is better than dense.
      Readability counts.
      Special cases aren't special enough to break the rules.
      Although practicality beats purity.
      Errors should never pass silently.
      Unless explicitly silenced.
      In the face of ambiguity, refuse the temptation to guess.
      There should be one-- and preferably only one --obvious way to do it.
      Although that way may not be obvious at first unless you're Dutch.
      Now is better than never.
      Although never is often better than *right* now.
      If the implementation is hard to explain, it's a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      Namespaces are one honking great idea -- let's do more of those!


this kind of ideology is why Python has been so successful. It has also inspired jokes like this


http://xkcd.com/353/

it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity.

So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet.


Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways.

Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.

Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different.

So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading.



On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]
<mailto:[hidden email]>> wrote:

     I have for some time been pondering two problems.  One is to identify the
     fourth R in *R*eading, w*R*iting, a*R*ithmetic, and p*R*ogramming.  There
     are many contenders for the kids' first step. I believe the English
     government has chosen Phyton as a first language. Scratch has a certain
     popularity, there are many others. My concern is "what comes next"? I want
     the kid to gradually build a mental model of what computing is all about.
     Learn a little, do a little, lean more, do more, etc. up do old age. This
     goes much deeper than any programming language. It's a bit as learning to
     read. Personally, I "broke the reading code"at an early age. Since then, I
     have been learning more and more. What I read today would have been
     incomprehensible to me 75  years ago.  But my basic mental model of what
     reading is all about has remained unchanged. I have never had to unlearn
     anything.

     I suggest that true object orientation (not class orientation) can form the
     foundation for the human mental model of computing. Internalize it and live
     with it forever.
     -------------------------------------
     The other problem is to find a better example for DCI presentations. It should

      1.      Be executable and have a cool demo effect.
      2.      Its domain model should be obvious from the demo.
      3.      It should have very few and  very simple Data classes.
      4.      It should have a Context that is clearly and obviously separate
         from the Data.
      5.      It should scale to any number of Contexts (use cases) without
         changing the Data classes.

     -----------------------------------------
     /Last night I got an idea for an example: A waltzing couple. (See the
     attached for a picture and Wikipedia for a movie of the use case)./

     The program needs one simple class for a moveable shape and a DCI Context
     for each dance (waltz, foxtrot, tango, ... for two role, polonaise for
     more.)  The example will clearly demonstrate the wisdom in separating what
     the system IS from what the system DOES since the simple Shape class would
     be overloaded with instance methods for all dances.

     What do you think?

       --Trygve



     --

     Trygve Reenskaug      mailto: [hidden email] <mailto:[hidden email]>
     Morgedalsvn. 5A http://folk.uio.no/trygver/
     N-0378 Oslo http://fullOO.info
     Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" target="_blank">(+47) 22 49 57 27
     <tel:%28%2B47%29%2022%2049%2057%2027>








Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

jannik laval
In reply to this post by Alain Busser
Hi,

2014-09-07 13:02 GMT+02:00 Alain Busser <[hidden email]>:
Strangely, I am preparing a Python session for pupils who are supposed ti know almost nothing about programming; and I finally came up with the turtle module! I realized that

*COBOL has been invented so that people who work in banks and do not know how to program, can program
*Basic was supposed to be usable by beginners (hence the "b" letter); which imho is false
*LOGO has been invented so that such silly creatures as robots could program; and of course children could program in LOGO (and even, as I read, tech programmation at the age of 4)
*Smalltalk has been created to cope with the mice and windows, but thinking about programmation for children (hence, Etoys and Scratch)
*In France there was a thing called "LSE" which was supposed to help writing the program in a language neighboring French language. No one remembers that, but there were other experiments like "execalgo" or "algobox" (not mentionning MathsOntologie ;-))


Seeing that, I realize that a programming tool especially made for children is not really a new idea, but Python is cool for that. In France too Python is heavily used, especially for students. What surprises me is that the English government choose Python for *children* instead of, say, Scratch. I would not use xMaxima to teach fractions just because xMaxima is able to compute integrals!

To conclude, for me, Phratch on Android is the future in that domain ;-)

Thank you to make advertisement  for phratch. I hope to see it on Android soon.

Cheers,
Jannik
 


Alain


On Sun, Sep 7, 2014 at 2:29 PM, kilon alios <[hidden email]> wrote:
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

this kind of ideology is why Python has been so successful. It has also inspired jokes like this

http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 

Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve



--

Trygve Reenskaug      mailto: [hidden email]
Morgedalsvn. 5A       http://folk.uio.no/trygver/
N-0378 Oslo             http://fullOO.info
Norway                     Tel: <a href="tel:%28%2B47%29%2022%2049%2057%2027" value="+4722495727" target="_blank">(+47) 22 49 57 27





--
Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Trygve
In reply to this post by kilon.alios
Hi kilon alios,
I want to go deeper than any programming language. "What is a computer?" Almost all programming languages build  on the von Neumann architecture with data processing as " The execution of a systematic sequence of operations
performed upon data." I believe this is unnecessarily low-level and complex  for general use. Much closer to the human mind is to build on an object computer  where the unit of storage is the object rather than the bit or byte. Data processing becomes "the systematic exchange of messages between objects." Lots of stuff that's of no interest to the general user is then hidden under the hood.

The users of immediate importance may be power users. Computational chemists are my favorite examples. What shall be their mental model, what do we teach them and how do we form our programs such that they can understand and modify what goes on on the computer?

I foresee that (virtual) object computers will supersede our current computers for general programming. They will be supported by experts doing systems programming on various levels from virtual machines down to microcode and hardware. When this is achieved; Java, Ruby, C++, C, Haxe, etc. will no longer be used for general application programming. (Smalltalk is, of course, not a language but an object computer.)

The "pythonic" culture should permeate more than Phyton, it should  be behind all we do. Thanks for sharing it.
C. A. R. Hoare says it succintly:
   " There are two ways of constructing a software design:
-        One way is to make it so simple that there are  obviously no deficiencies
-        The other way is to make it so complicated that there are no obvious deficiencies."
and
    "The first method is far more difficult…."
also:
    "The price of reliability is the pursuit of the utmost simplicity"
      
I think we are in agreement about the need for readable code. But I disagree when you say "We need very complex solutions to very complex problems". I believe we can attain simple solutions to very complex problems.  If the complexity is in the user's mental model then a direct mapping of this model into code will be simple as seen from the user's point of view. If the program is more complex than the user's mental model, the program should be simplified.

It would be helpful if you would suggest an example where Phyton leads to more readable code than say Pharo.


On 07.09.2014 12:29, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
this kind of ideology is why Python has been so successful. It has also inspired jokes like this
http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 
Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve

Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

philippeback
"Smalltalk is not a language, it is an object computer"

Wow, that nails it quite nicely.

And it feels a lot like that, especially with tools like GT-Playground.

Now, the most complicated bit is for me to get the user to discuss with the object computer through the UI in a satisfying way. Getting the right UI for delivering the value is taking a very long time.

Phil

On Thu, Sep 11, 2014 at 5:42 PM, Trygve Reenskaug <[hidden email]> wrote:
Hi kilon alios,
I want to go deeper than any programming language. "What is a computer?" Almost all programming languages build  on the von Neumann architecture with data processing as " The execution of a systematic sequence of operations
performed upon data." I believe this is unnecessarily low-level and complex  for general use. Much closer to the human mind is to build on an object computer  where the unit of storage is the object rather than the bit or byte. Data processing becomes "the systematic exchange of messages between objects." Lots of stuff that's of no interest to the general user is then hidden under the hood.

The users of immediate importance may be power users. Computational chemists are my favorite examples. What shall be their mental model, what do we teach them and how do we form our programs such that they can understand and modify what goes on on the computer?

I foresee that (virtual) object computers will supersede our current computers for general programming. They will be supported by experts doing systems programming on various levels from virtual machines down to microcode and hardware. When this is achieved; Java, Ruby, C++, C, Haxe, etc. will no longer be used for general application programming. (Smalltalk is, of course, not a language but an object computer.)

The "pythonic" culture should permeate more than Phyton, it should  be behind all we do. Thanks for sharing it.
C. A. R. Hoare says it succintly:
   " There are two ways of constructing a software design:
-        One way is to make it so simple that there are  obviously no deficiencies
-        The other way is to make it so complicated that there are no obvious deficiencies."
and
    "The first method is far more difficult…."
also:
    "The price of reliability is the pursuit of the utmost simplicity"
      
I think we are in agreement about the need for readable code. But I disagree when you say "We need very complex solutions to very complex problems". I believe we can attain simple solutions to very complex problems.  If the complexity is in the user's mental model then a direct mapping of this model into code will be simple as seen from the user's point of view. If the program is more complex than the user's mental model, the program should be simplified.

It would be helpful if you would suggest an example where Phyton leads to more readable code than say Pharo.


On 07.09.2014 12:29, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
this kind of ideology is why Python has been so successful. It has also inspired jokes like this
http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 
Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve


Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Trygve
In reply to this post by kilon.alios

On 07.09.2014 12:29, kilon alios wrote:

...
Referring to the rest of your post I dont agree that we need to separate Data from Code,
I don't know of anybody who wants to separate data and code.  May be you are thinking about DCI without having grokked it.

Smalltalk sees an object as an entity that has a unique and immutable identity and that encapsulates state and behavior.
DCI builds on this definition and has a powerful separation of concerns:
  1. An object seen in isolation is specified by a class.
    This is observing the object from within its encapsulation boundary.
    A class says everything about how an object is constructed and nothing about how it collaborates with others.
    A DCI Data object is an object that does not collaborate with objects in its environment.
  2. An ensemble of objects that collaborate to achieve a certain goal is specified by a DCI Context.
    The observation point is in the space between the objects.
    The objects are observed from outside their encapsulation boundaries,
    The message flow is visible and can be reasoned about.
    A DCI Context says everything about how objects collaborate to achieve a common goal
    and nothing about how they are constructed.
The Class and the Context are orthogonal concepts and form the basis of my mental model of an object computer.

Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Trygve
In reply to this post by philippeback
Hi Phil,
Have you tried BabyUML? A horrible hack and not yet portable to other Squeaks, but it is a start.
    http://fulloo.info/Downloads/BabyIDE.zip
This is set up for Windows, but the .image and .changes files should work anywhere (assuming the Squeak VM hasn't been improved so that it has  lost backward compatibility).
--Trygve

On 11.09.2014 18:10, [hidden email] wrote:
"Smalltalk is not a language, it is an object computer"

Wow, that nails it quite nicely.

And it feels a lot like that, especially with tools like GT-Playground.

Now, the most complicated bit is for me to get the user to discuss with the object computer through the UI in a satisfying way. Getting the right UI for delivering the value is taking a very long time.

Phil

Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Offray
In reply to this post by philippeback
Hi,



On 09/11/2014 11:10 AM, [hidden email] wrote:
> "Smalltalk is not a language, it is an object computer"
>
> Wow, that nails it quite nicely.

Agreed! :-)


> And it feels a lot like that, especially with tools like GT-Playground.
>
> Now, the most complicated bit is for me to get the user to discuss with the
> object computer through the UI in a satisfying way. Getting the right UI for
> delivering the value is taking a very long time.

For me, with GT-Playground, the proper interface is tree-like
interactive documents/writing, specially because that's what 500 years
of printing have prepared us for. I'm making really slow process on this
idea and I don't know what to do when a question thread gets frozen to
move it forward but, anyway I will keep the list posted about my
advances, or frustrations for not getting any.

Cheers,

Offray



Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

kilon.alios
In reply to this post by Trygve
"If the program is more complex than the user's mental model, the program should be simplified." this where we diverge , my opinion is "no you should not simplify the programm itself unless the programm is doing something it does need or should not do and instead simplify the interface with the user". 

by saying we "need complex solutions to complex problems" I am not saying this what we should do I am saying this is the only thing we can do. We have no choice, because the world we live in is incredible complex. "Simplicity" is an illusion of the brain , its the way of the brain of saying "I understand this". Take two simple things, walking and talking. To you and me those things are incredible simple but it takes the brain years to understand these concepts and it also takes a lot of effort and a lot of failures and a pain. So they are not simple at all, yet each time you walk you dont even think about it, you just do it. 

What you say about mapping to the mental model of the user is true , its a way to implement simplicity the problem however is that the user is not made to think as a coder and programming language and development environment even as sophisticated as pharo are made for coders. Even if those coders are kids. They are still coders and they have to learn the coding philosophy. That takes years of practice like walking and talking. So coding can never be truly simple. 

The only way you can create a software that maps to the mental model of the average user is to create AI software that can communicate to the user as if it was human. Then you have a simple enough interface for your user but still the implementation will be extremely complex.

Python is not easier because its more readable than Pharo its easier because its fully documented, Pharo is not. Its also easier to use because it comes with a great collection of libraries to fit many diffirent needs , Pharo does not. Unfortunately those weakness are closely related with the unpopularity of a language. Its unavoidable. So I cannot recommend Pharo as easier to use than Python to a kid, because it is not. 

I have also to state here that I am not a fan of belief that readable code is  very important, its important only if you want to change the system but people rarely do. When it comes to personal code itself its far easier to understand code based on documentation than it is to read and also far faster.Of course the more readable is the code the better.

But readability itself does not depend so much on the language as the habbits of the coder itself. Its actually very easy to produce very difficult to read code in both Python and Pharo. 

I also find that languages are not very important , they are important because its the base on top of which one builds the software but they are too abstract. Actually they are too abstract. So I find libraries a lot more useful , powerful and the big reason why a language is easy or not easy to use. 

Saying I love Pharo and I am incredible excited to be a contributor to it , even though not a very active one. I want to see Pharo succeed because for me Pharo is closer to the AI system I am dreaming of than any other language out there and I really like its overall design. I hope Pharo evolves not to another programming language but rather to a human language and a human environment liberating the user from the technicalities of the system. Pharo is small but is going to a very promising direction. 

All hail Pharo :)  

On Thu, Sep 11, 2014 at 6:42 PM, Trygve Reenskaug <[hidden email]> wrote:
Hi kilon alios,
I want to go deeper than any programming language. "What is a computer?" Almost all programming languages build  on the von Neumann architecture with data processing as " The execution of a systematic sequence of operations
performed upon data." I believe this is unnecessarily low-level and complex  for general use. Much closer to the human mind is to build on an object computer  where the unit of storage is the object rather than the bit or byte. Data processing becomes "the systematic exchange of messages between objects." Lots of stuff that's of no interest to the general user is then hidden under the hood.

The users of immediate importance may be power users. Computational chemists are my favorite examples. What shall be their mental model, what do we teach them and how do we form our programs such that they can understand and modify what goes on on the computer?

I foresee that (virtual) object computers will supersede our current computers for general programming. They will be supported by experts doing systems programming on various levels from virtual machines down to microcode and hardware. When this is achieved; Java, Ruby, C++, C, Haxe, etc. will no longer be used for general application programming. (Smalltalk is, of course, not a language but an object computer.)

The "pythonic" culture should permeate more than Phyton, it should  be behind all we do. Thanks for sharing it.
C. A. R. Hoare says it succintly:
   " There are two ways of constructing a software design:
-        One way is to make it so simple that there are  obviously no deficiencies
-        The other way is to make it so complicated that there are no obvious deficiencies."
and
    "The first method is far more difficult…."
also:
    "The price of reliability is the pursuit of the utmost simplicity"
      
I think we are in agreement about the need for readable code. But I disagree when you say "We need very complex solutions to very complex problems". I believe we can attain simple solutions to very complex problems.  If the complexity is in the user's mental model then a direct mapping of this model into code will be simple as seen from the user's point of view. If the program is more complex than the user's mental model, the program should be simplified.

It would be helpful if you would suggest an example where Phyton leads to more readable code than say Pharo.



On 07.09.2014 12:29, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
this kind of ideology is why Python has been so successful. It has also inspired jokes like this
http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 
Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve


Reply | Threaded
Open this post in threaded view
|

Re: The fourth R

Trygve

On 11.09.2014 19:43, kilon alios wrote:
"If the program is more complex than the user's mental model, the program should be simplified." this where we diverge , my opinion is "no you should not simplify the programm itself unless the programm is doing something it does need or should not do and instead simplify the interface with the user". 

by saying we "need complex solutions to complex problems" I am not saying this what we should do I am saying this is the only thing we can do. We have no choice, because the world we live in is incredible complex. "Simplicity" is an illusion of the brain , its the way of the brain of saying "I understand this". Take two simple things, walking and talking. To you and me those things are incredible simple but it takes the brain years to understand these concepts and it also takes a lot of effort and a lot of failures and a pain. So they are not simple at all, yet each time you walk you dont even think about it, you just do it.
Yes, the real world is complex. Humans have been trying to model it as long as humans have existed. The human arm is a complex multi-dimensional mechanism.  Between the human arm and the robot arm there must be a human brain that designs the robot.  If this design is expressed under a modeling paradigm that can be directly transcribed into the code for the control computer, then the code can be simple and easy to read for the person who understands the design.

Douglas Engelbart, the inventor of the mouse, proposed that computers should be used to augment the human intellect. He is talking about man-machine symbiosis, not automation.

What you say about mapping to the mental model of the user is true , its a way to implement simplicity the problem however is that the user is not made to think as a coder and programming language and development environment even as sophisticated as pharo are made for coders. Even if those coders are kids. They are still coders and they have to learn the coding philosophy. That takes years of practice like walking and talking. So coding can never be truly simple.
Yes and no. Like reading, coding is not simple. But the threshold to be low. That's why we need a new foundation for programming that is designed for general use. Smalltalk-72 was such a foundation, but it didn't scale to large problems. As I understand the history, Smalltalk-76  solved the scaling problem, but  lost the kids. The challenge as I see it is to regain 'children of all ages'  while keeping the scaling. This is a goal of DCI.
The only way you can create a software that maps to the mental model of the average user is to create AI software that can communicate to the user as if it was human. Then you have a simple enough interface for your user but still the implementation will be extremely complex.
AI is only way but not the only one.  A computer can basically do three things: It can store data, it can transform data, and it can communicate data. Simple and powerful. I want this simplicity to follow through to the end user.

Python is not easier because its more readable than Pharo its easier because its fully documented, Pharo is not. Its also easier to use because it comes with a great collection of libraries to fit many diffirent needs , Pharo does not. Unfortunately those weakness are closely related with the unpopularity of a language. Its unavoidable. So I cannot recommend Pharo as easier to use than Python to a kid, because it is not.

I have also to state here that I am not a fan of belief that readable code is  very important, its important only if you want to change the system but people rarely do. When it comes to personal code itself its far easier to understand code based on documentation than it is to read and also far faster.Of course the more readable is the code the better.
Psychologists say that people don't ask for something that they don't know exists. Apple has been very good at giving people new capabilities they had never missed. My favorite user, the computational chemist, uses many sophisticated applications and miss better facilities for integrating their use.

But readability itself does not depend so much on the language as the habbits of the coder itself. Its actually very easy to produce very difficult to read code in both Python and Pharo. 

I also find that languages are not very important , they are important because its the base on top of which one builds the software but they are too abstract. Actually they are too abstract. So I find libraries a lot more useful , powerful and the big reason why a language is easy or not easy to use.
Yes. We need a more concrete platform.

Saying I love Pharo and I am incredible excited to be a contributor to it , even though not a very active one. I want to see Pharo succeed because for me Pharo is closer to the AI system I am dreaming of than any other language out there and I really like its overall design. I hope Pharo evolves not to another programming language but rather to a human language and a human environment liberating the user from the technicalities of the system. Pharo is small but is going to a very promising direction. 

All hail Pharo :)  

On Thu, Sep 11, 2014 at 6:42 PM, Trygve Reenskaug <[hidden email]> wrote:
Hi kilon alios,
I want to go deeper than any programming language. "What is a computer?" Almost all programming languages build  on the von Neumann architecture with data processing as " The execution of a systematic sequence of operations
performed upon data." I believe this is unnecessarily low-level and complex  for general use. Much closer to the human mind is to build on an object computer  where the unit of storage is the object rather than the bit or byte. Data processing becomes "the systematic exchange of messages between objects." Lots of stuff that's of no interest to the general user is then hidden under the hood.

The users of immediate importance may be power users. Computational chemists are my favorite examples. What shall be their mental model, what do we teach them and how do we form our programs such that they can understand and modify what goes on on the computer?

I foresee that (virtual) object computers will supersede our current computers for general programming. They will be supported by experts doing systems programming on various levels from virtual machines down to microcode and hardware. When this is achieved; Java, Ruby, C++, C, Haxe, etc. will no longer be used for general application programming. (Smalltalk is, of course, not a language but an object computer.)

The "pythonic" culture should permeate more than Phyton, it should  be behind all we do. Thanks for sharing it.
C. A. R. Hoare says it succintly:
   " There are two ways of constructing a software design:
-        One way is to make it so simple that there are  obviously no deficiencies
-        The other way is to make it so complicated that there are no obvious deficiencies."
and
    "The first method is far more difficult…."
also:
    "The price of reliability is the pursuit of the utmost simplicity"
      
I think we are in agreement about the need for readable code. But I disagree when you say "We need very complex solutions to very complex problems". I believe we can attain simple solutions to very complex problems.  If the complexity is in the user's mental model then a direct mapping of this model into code will be simple as seen from the user's point of view. If the program is more complex than the user's mental model, the program should be simplified.

It would be helpful if you would suggest an example where Phyton leads to more readable code than say Pharo.



On 07.09.2014 12:29, kilon alios wrote:
Python has no competition. Sure there are languages that are more popular than Python for their own reasons. There have been simpler languages before python, there have been more popular languages, more cross platform languages etc etc but Python fills a gap that no language was able to fill before it , easy to use very powerful well documented libraries. Python is a language that you can teach to a kid now and make a living later on using until his or her old age. Its not because the language is simple , its simple enough but not the simplest. Its because the culture surrounding the creation of libraries . That culture has a name its called "pythonic" 

 Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!
this kind of ideology is why Python has been so successful. It has also inspired jokes like this
http://xkcd.com/353/
it may look funny and it says thinks about overestimating the simplicity of those libraries but python does feel at times as simple as this, as simple as importing antigravity. 
So if a kid comes to me and ask me "what language should I learn" , I will recommend a language that is fairly easy to learn , has powerful library , easy to use libraries , well documented and its a language that will able to keep using even if his or her needs change, forever. For that only Python is the language that has been able to succeed and I think its adoption will continue to progress in educational institutions pretty much everywhere on the planet. 
Referring to the rest of your post I dont agree that we need to separate Data from Code, I think quite opossite that a kid needs to be taught why Code and Data are one and what that means in practice. I also don't agree that OO or functional programming or any other programming paradigm I am aware of are the future. They are simple solutions for simpler times. The coding community at large the way I see it is in denial hoping to apply simple recipes to solve complex problems. We need very complex solutions to very complex problems , we need tools that can interact with the user in many diffirent ways. 
Pharo is definitely showing the future, the close integration of IDE , language and environment. But thats is just the start, the next step is powerful tools that can deeply interact with code and solve automagically logical coding problems. Obviously all that has to be wrapped to an easy enough interface for the user even if the solutions is very complex.
Fortunately this where the rest of the coding world is heading. For example iPython is one of the most popular python projects right and it offers a highly interactive environment for python coders that shares a lot of similarities with Pharo though the implementation is very different. 
So the future is no longer languages , is no longer IDEs , its not even environments but tools that are produced in these environments that can vastly automate coding and hide the increasing complexity of coding solutions. Maybe one day a child will be able to describe to a computer what kind of software he or she needs and the computer automatically generate the code for it. That day is not close enough but is where we are heading. 


On Sun, Sep 7, 2014 at 12:34 PM, Trygve Reenskaug <[hidden email]> wrote:
I have for some time been pondering two problems.  One is to identify the fourth R in Reading, wRiting, aRithmetic, and pRogramming.  There are many contenders for the kids' first step. I believe the English government has chosen Phyton as a first language. Scratch has a certain popularity, there are many others. My concern is "what comes next"? I want the kid to gradually build a mental model of what computing is all about. Learn a little, do a little, lean more, do more, etc. up do old age. This goes much deeper than any programming language. It's a bit as learning to read. Personally, I "broke the reading code"at an early age. Since then, I have been learning more and more. What I read today would have been  incomprehensible to me 75  years ago.  But my basic mental model of what reading is all about has remained unchanged. I have never had to unlearn anything.

I suggest that true object orientation (not class orientation) can form the foundation for the human mental model of computing. Internalize it and live with it forever.
-------------------------------------
The other problem is to find a better example for DCI presentations. It should
  1.     Be executable and have a cool demo effect.
  2.     Its domain model should be obvious from the demo.
  3.     It should have very few and  very simple Data classes.
  4.     It should have a Context that is clearly and obviously separate from the Data.
  5.     It should scale to any number of Contexts (use cases) without changing the Data classes.
-----------------------------------------
Last night I got an idea for an example: A waltzing couple. (See the attached for a picture and Wikipedia for a movie of the use case).

The program needs one simple class for a moveable shape and a DCI Context for each dance (waltz, foxtrot, tango, ... for two role, polonaise for more.)  The example will clearly demonstrate the wisdom in separating what the system IS from what the system DOES since the simple Shape class would be overloaded with instance methods for all dances.

What do you think?

 --Trygve