Teaching "Programming by Demonstration" by Demonstration; Deep Learning Augmented Programming

25 views
Skip to first unread message

John Carlson

unread,
Jul 10, 2017, 4:33:02 PM7/10/17
to augmented-...@googlegroups.com

Group,

 

Dance Dance Revolution and Guitar Hero are video/arcade games where the human apes what the computer is doing. Can we teach humans programming by having the computer demonstrate a programming concept and then have the human ape the computer?  And learning programming might actually be fun for more people? Or is learning a group thing?

 

Wouldn’t this be a good way of brining PbD and software visualization together?


The practical example would be teaching current deep learning techniques to more people.

Is anyone doing the bonsai.ai programming language in a more non-textual way that a program can teach visually or kinesthetically to people?


However, I can’t stand step-by-step tutorials or dance dance revolution or guitar hero. If the computer can teach me, then it can do it on it’s own, right?  Why don’t step-by-step tutorials come with “Do it on my machine” button(s)? Tessa Lau can probably answer that one.

 

Thanks,

 

John Carlson

 

 

 

Sean McDirmid

unread,
Jul 10, 2017, 5:40:11 PM7/10/17
to augmented-...@googlegroups.com

This isn't technically "programming by demonstration" but rather "learning programming by demonstration". 


Most people have no problem learning how to "program" if it just involves the structure and meaning of the spells that the computer will recognize, but they get hung up on how to think like the computer so they can solve problems abstractly enough for the computer to understand. 


A reasonable way to go about it is to "hey, here are some problems, here is how the problems are solved, now go solve a hundred of these as homework." However, programming problems are not as nice as math problems (and even then, the math we learn that way is fairly worthless). We have to teach thinking, not doing.  



From: augmented-...@googlegroups.com <augmented-...@googlegroups.com> on behalf of John Carlson <yott...@gmail.com>
Sent: Monday, July 10, 2017 1:33 PM
To: augmented-...@googlegroups.com
Subject: Teaching "Programming by Demonstration" by Demonstration; Deep Learning Augmented Programming
 
--
You received this message because you are subscribed to the Google Groups "Augmented Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to augmented-progra...@googlegroups.com.
To post to this group, send email to augmented-...@googlegroups.com.
Visit this group at https://groups.google.com/group/augmented-programming.
For more options, visit https://groups.google.com/d/optout.

John Carlson

unread,
Jul 10, 2017, 6:05:39 PM7/10/17
to augmented-...@googlegroups.com

Thinking is something we do.  I think.


Most things take practice to learn. People need to practice thinking.  How does one practice thinking?  By doing thinking.

 

It’s not “I do, therefore I am”. Animals do things.  We’re trying to raise people from doers into thinkers, and one way of doing that is showing them examples of thinking. Lists are ways to organize your mind around a subject “Things to do.”   So we show people examples of lists.  I learn well by example. Perhaps some do not? What is dance dance revolution and guitar hero but lists of things to do? So we give people lists of things to think? This is beginning to sound like koans.


To teach one how to think, what lists should one be presented with?  How does one teach how to organize those lists in a reasonable fashion? Is it one huge list? What order does one proceed through the list?  Etc. etc.

 

Those concrete math problems are presented before the abstract ones.   Should we start with concrete examples, or abstract examples?

 

John

 

Sent from Mail for Windows 10

 

From: Sean McDirmid
Sent: Monday, July 10, 2017 5:40 PM
To: augmented-...@googlegroups.com
Subject: Re: Teaching "Programming by Demonstration" by Demonstration; DeepLearning Augmented Programming

 

This isn't technically "programming by demonstration" but rather "learning programming by demonstration". 

 

Most people have no problem learning how to "program" if it just involves the structure and meaning of the spells that the computer will recognize, but they get hung up on how to think like the computer so they can solve problems abstractly enough for the computer to understand. 

 

A reasonable way to go about it is to "hey, here are some problems, here is how the problems are solved, now go solve a hundred of these as homework." However, programming problems are not as nice as math problems (and even then, the math we learn that way is fairly worthless). We have to teach thinking, not doing.  

 

From: augmented-...@googlegroups.com <augmented-...@googlegroups.com> on behalf of John Carlson <yott...@gmail.com>
Sent: Monday, July 10, 2017 1:33 PM
To: augmented-...@googlegroups.com
Subject: Teaching "Programming by Demonstration" by Demonstration; Deep Learning Augmented Programming

 

Group,

 

Dance Dance Revolution and Guitar Hero are video/arcade games where the human apes what the computer is doing. Can we teach humans programming by having the computer demonstrate a programming concept and then have the human ape the computer?  And learning programming might actually be fun for more people? Or is learning a group thing?

 

Wouldn’t this be a good way of brining PbD and software visualization together?


The practical example would be teaching current deep learning techniques to more people.

Is anyone doing the bonsai.ai programming language in a more non-textual way that a program can teach visually or kinesthetically to people?


However, I can’t stand step-by-step tutorials or dance dance revolution or guitar hero. If the computer can teach me, then it can do it on it’s own, right?  Why don’t step-by-step tutorials come with “Do it on my machine” button(s)? Tessa Lau can probably answer that one.

 

Thanks,

 

John Carlson

 

 

 

--
You received this message because you are subscribed to the Google Groups "Augmented Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to augmented-progra...@googlegroups.com.
To post to this group, send email to augmented-...@googlegroups.com.
Visit this group at https://groups.google.com/group/augmented-programming.
For more options, visit https://groups.google.com/d/optout.

Sean McDirmid

unread,
Jul 10, 2017, 6:14:44 PM7/10/17
to augmented-...@googlegroups.com

People will learn to abstract math by doing lots of concrete math. The problem is, programming is the art of abstraction, so we get into these meta discourse problems (can we learn abstracting by abstracting over concrete abstraction tasks?). 


Showing someone what a list is is very different from showing them how a list is used. Or more to the point, you need to get them to try to solve a problem without lists, reaching a very bad place, then introducing them to lists (or nudging them to invent lists themselves) so they can solve the problem in a better way. 


DDR is not about dancing. It isn't supposed to be about dancing, that isn't even part of the design! Guitar hero isn't about learning how to play the guitar. I played DDR a lot when I was younger, to me, and most of us who played it, it was just a fun rhythm game that helped you work up a sweat. Only idiots and jocks who were clueless about the game itself would confuse it with real dancing. Guitar here is the same thing (only someone who has never played it before would confuse it with being something about playing a real guitar, it isn't!). But if you want to do programming games in that manner, be my guest! They might be fun, but they don't have anything to do with real programming. 




Sent: Monday, July 10, 2017 3:05 PM
To: augmented-...@googlegroups.com
Subject: RE: Teaching "Programming by Demonstration" by Demonstration; DeepLearning Augmented Programming
 

John Carlson

unread,
Jul 11, 2017, 1:40:34 AM7/11/17
to augmented-...@googlegroups.com

People used to flip bit switches to program a computer [ real programming ], and read off output from binary lights, so perhaps the DDR idea in my original message is not that far out.  These days, people barely have to know about bits to program.  Computer input and output has advanced, and we should take advantage of it.  No I don’t want to program like DDR at all.  DDR is just the example of an abstract idea.  Definition of dance: move rhythmically to music, typically following a set sequence of steps (google). Obviously, we cannot program a computer following a set sequence of steps.  Or can we??? Doesn’t that depend on the steps?

 

Here’s an example set sequence of steps for programming a computer (they are vastly simplified).  Sit down at a computer.  Double-Click on the IDE icon. Move mouse pointer over text entry region. Press down and release many keys (but not in a sequence). Move mouse over Run button. Press Run. Wow, you’ve programmed a computer.  The 4th step is where the thinking comes in, correct? You have to decide which key to press.  Are you thinking “I’d like to create a package” or something more simpler, like “press and release the p key”?

 

My point is, these “steps” can be broken into smaller steps which ultimately, are repetitive, not unlike dance. The trick behind programming seems to be how we *order* the steps.  I believe in a dance, the order is typically fixed. However, there are different styles of dancing that we can take advantage of, and different performances.  Let’s call a performance an “programme” to be more plain. We can duplicate the choreographer’s "programme” by reading his/her notation or by watching the "programme” and recording the "programme” in notation.  Similarly, we can read duplicate the programmer’s program either reading the program or by keeping track of all the input that the programmer made (in whatever form) and IDE state while programming the program and then and recording the program a separate file.

 

Thus a beginning programmer learns how to program by watching another programmer program, abeit in time delay.  The question remains whether there need to be additional studies or interaction, or whether merely watching is good enough.  I think that the beginning programmer should at least ape the other programmer a while to catch on.

 

A programmer programmed DDR.  They may have used metaphors instead of actual dance steps and controller presses, but essentially, they created a program for players to ape. It may not look like a program to someone playing it, but how many times did you play it? Have you been programmed? Are you a computer?

 

John

 

Sent from Mail for Windows 10

 

From: Sean McDirmid
Sent: Monday, July 10, 2017 6:14 PM
To: augmented-...@googlegroups.com
Subject: Re: Teaching "Programming by Demonstration" by Demonstration;DeepLearning Augmented Programming

 

People will learn to abstract math by doing lots of concrete math. The problem is, programming is the art of abstraction, so we get into these meta discourse problems (can we learn abstracting by abstracting over concrete abstraction tasks?). 

 

Showing someone what a list is is very different from showing them how a list is used. Or more to the point, you need to get them to try to solve a problem without lists, reaching a very bad place, then introducing them to lists (or nudging them to invent lists themselves) so they can solve the problem in a better way. 

 

DDR is not about dancing. It isn't supposed to be about dancing, that isn't even part of the design! Guitar hero isn't about learning how to play the guitar. I played DDR a lot when I was younger, to me, and most of us who played it, it was just a fun rhythm game that helped you work up a sweat. Only idiots and jocks who were clueless about the game itself would confuse it with real dancing. Guitar here is the same thing (only someone who has never played it before would confuse it with being something about playing a real guitar, it isn't!). But if you want to do programming games in that manner, be my guest! They might be fun, but they don't have anything to do with real programming. 

 

From: augmented-...@googlegroups.com <augmented-...@googlegroups.com> on behalf of John Carlson <yott...@gmail.com>
Sent: Monday, July 10, 2017 3:05 PM
To: augmented-...@googlegroups.com
Subject: RE: Teaching "Programming by Demonstration" by Demonstration; DeepLearning Augmented Programming

 

Thinking is something we do.  I think.


Most things take practice to learn. People need to practice thinking.  How does one practice thinking?  By doing thinking.

 

It’s not “I do, therefore I am”. Animals do things.  We’re trying to raise people from doers into thinkers, and one way of doing that is showing them examples of thinking. Lists are ways to organize your mind around a subject “Things to do.”   So we show people examples of lists.  I learn well by example. Perhaps some do not? What is dance dance revolution and guitar hero but lists of things to do? So we give people lists of things to think? This is beginning to sound like koans.


To teach one how to think, what lists should one be presented with?  How does one teach how to organize those lists in a reasonable fashion? Is it one huge list? What order does one proceed through the list?  Etc. etc.

 

Those concrete math problems are presented before the abstract ones.   Should we start with concrete examples, or abstract examples?

 

John

 

Sent from Mail for Windows 10

 

From: Sean McDirmid
Sent: Monday, July 10, 2017 5:40 PM
To: augmented-...@googlegroups.com
Subject: Re: Teaching "Programming by Demonstration" by Demonstration; DeepLearning Augmented Programming

 

This isn't technically "programming by demonstration" but rather "learning programming by demonstration". 

 

Most people have no problem learning how to "program" if it just involves the structure and meaning of the spells that the computer will recognize, but they get hung up on how to think like the computer so they can solve problems abstractly enough for the computer to understand. 

 

A reasonable way to go about it is to "hey, here are some problems, here is how the problems are solved, now go solve a hundred of these as homework." However, programming problems are not as nice as math problems (and even then, the math we learn that way is fairly worthless). We have to teach thinking, not doing.  

 

cid:image001.png@01D2F9A7.21C8D430

1C8F0AE1B7F642DAAE2FB6B261469BAB.png

Paul Tarvydas

unread,
Jul 11, 2017, 11:22:31 AM7/11/17
to augmented-...@googlegroups.com
Not everyone likes to think in terms of "steps".

I, for one, tend to think of programs as diagrams of concurrent boxes
(many with FSM's inside) (see Rob Pike's talk "Concurrency is not
Parallelism"). (FBP, Conway's COBOL compiler, etc). Many programmers do
not think in diagrams and some have accused me a faking it when I showed
them real computer programs compiled from diagrams.

Several decades ago, I was taught an interesting lesson about how
non-programmers think. Declarative and functional.

A particular non-programmer staff member always came in early. I tried
to get that person to do daily backups in the morning by writing out the
recipe for doing backups, thinking of every possibility. In those days,
the place was populated with 24x80 terminals, and, most of the staff
"forgot" to log out before going home in the evenings.

My recipe started with:

IF you see a prompt

C>

type "LOGOUT"

THEN, when you see "LOGIN:" type OPERATOR and then, when you see
"PASSWORD:" type <yyy>. Then, type BACKUP.

After two weeks of thinking that daily backups were being done, I came
in early one morning and saw the following on EVERY terminal in the place:

C> LOGOUT
LOGIN: OPERATOR
PASSWORD: <yyy>
C> LOGOUT
LOGIN: OPERATOR
PASSWORD: <yyy>
C> LOGOUT
LOGIN: OPERATOR
PASSWORD: <yyy>
C> LOGOUT
... ad infinitum (completely filling every screen) ...

Apparently, this person did not perceive this recipe as a sequence of
steps, but rather as a declarative spec. Every time a prompt arrived,
the spec would be read anew and restarted from scratch.

I realized that the idea of sequencing was something drummed into me in
my early years of learning about programming.

To this day, I find certain (food) cookbooks to be insanely frustrating
because the sequence of steps is unclear.

I conclude that a large portion of the population does not think in
terms of sequences and that it is dangerous for us to assume that they do.

pt

Raoul Duke

unread,
Jul 11, 2017, 11:37:09 AM7/11/17
to augmented-programming
cooking for engineers diagrams

Paul Tarvydas

unread,
Jul 11, 2017, 11:49:36 AM7/11/17
to augmented-...@googlegroups.com
On 2017-07-11 11:37 AM, Raoul Duke wrote:
cooking for engineers diagrams

Pinterest!

John Carlson

unread,
Jul 11, 2017, 5:14:28 PM7/11/17
to augmented-...@googlegroups.com
Do you think of emails as functional and declarative, or as a sequence of sentences? 

Probably you do not write out the sentences sequentially.   Would being on a typewriter make any difference? Would you write out your ideas before getting on the typewriter?

I agree that there are other ways to program.  You can also program diagrams as steps.

Computers generally use steps and jumps to read your program.   Is it important to know what the computer is doing?

I don't disagree that thinking declaratively and function is superior.  However, I would suggest looking at previous prices and not just the current price for stocks before buying in.

Seems like you are blaming the operator when your spec was bad.  A computer might do the same thing the operator did.

We train ourselves with music, dance, tai chi, etc. to think sequentially.

We think and act parasequentially to come up with a new word.  Most programming languages are hybrids of that thinking.  Even in an expression with many terms, we think of each term as executing in parallel, not as steps.

John


--
You received this message because you are subscribed to the Google Groups "Augmented Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email to augmented-programming+unsubscri...@googlegroups.com.
To post to this group, send email to augmented-programming@googlegroups.com.

John Carlson

unread,
Jul 11, 2017, 6:41:08 PM7/11/17
to augmented-...@googlegroups.com

Functional programming is steps.  You have to apply an inner function before you apply an outer function, unless of course, you rewrite the two functions as a new function. Do people really think to rewrite functions (currying) though?  I would be curious.  There may be a lot more parallel actions in functional programming.

 

Is typing on the keyboard functional or steps?   Is using the mouse functional or steps? Good questions!   I think we’ve arrived at my next duality.

 

John

 

Sent from Mail for Windows 10

 

From: Paul Tarvydas
Sent: Tuesday, July 11, 2017 11:22 AM
To: augmented-...@googlegroups.com
Subject: Re: Teaching "Programming by Demonstration" byDemonstration;DeepLearning Augmented Programming

 

Not everyone likes to think in terms of "steps".

--

John Carlson

unread,
Jul 11, 2017, 7:16:58 PM7/11/17
to augmented-...@googlegroups.com

Do you have multi concurrent state FSMs (petri nets) or single concurrent state FSMs (DFAs)?  A single concurrent state FSM is steps from one state to the next. Any transition from one state to the next is a step.

 

I am not accusing you of faking anything. It’s basically sequential versus parallel or concurrent programming. I think we need both, I think people do both. Leaning to heavily on one or the other leaves you unbalanced.  If you rely on parallel thinking, you try to do to many things at once, and remain exhausted.  If you rely on sequential thinking, you’re just dripping along.  Ideally, there’s a happy medium.

 

I believe DDR has parallel steps.  There are many dancers in a performance often. There are many programmers programming an API.

 

Ulimately we are bound sequentially by time, I believe.  If you are not bound by time, please clue me into the secret! Is functional thinking the secret to I Ching and escaping time?

 

I am not saying there can’t be parallel time.  I fully believe there are multiple timelines that I am alternating between.  However, my current consciousness only follows one at a time.  If your consciousness follows multiple timelines, how do you do it?  Frankly, I could use some training.

 

Are we talking “Next”?  I call this continuous hierarchy (in time).

 

I don’t like thinking in steps either. I’m an air sign.  An air sign thinking sequentially is like an aerosol can with a straw.  Way too strong at the end.  I need multiple escape valves.


Perhaps I should pick up Lisp or Scheme again?  I’ve been working with JavaScript, but it’s pretty much single threaded.


How do I have more than one active window on my computer?

 

John

Sent from Mail for Windows 10

 


Sent: Tuesday, July 11, 2017 11:22 AM

To: augmented-...@googlegroups.com
Subject: Re: Teaching "Programming by Demonstration" byDemonstration;DeepLearning Augmented Programming

 

Not everyone likes to think in terms of "steps".

--

Reply all
Reply to author
Forward
0 new messages