So I am sharing my blog post Why Is programming an unnatural activity?Hoping to get some feedback from the community.
“Why?” Is programming an unnatural activity? Could programming be made easier in a different form? Could programming be taught in a different way that makes learning easier? Or maybe we just have no idea how to actually measure what students know about programming. (1).
My main problem with the Guzdial paper (this was more my problem than a problem with the paper) is I felt it didn't provide enough details or specifics on "Why it is so hard to learn to Program?" I need specifics and examples to get my head around things. Roy Pea, was a great find and perhaps not surprisingly (for me at least) the Resnick article was very useful.
Pea (et al) talked about three classes of bugs:
Parrallelism Bugs
The Parallelism Bugs, is basically an "assumption of different lines in a program can be active or known by the computer at the same time or in parallel". For example, look at this code:
When High School students. in their second year of programming course, were asked what they thought the program would print 8 out of 15 predicted "Hello" would print after "10".
Intentionality Bugs
The Intentionality Bugs, is the idea in the child's mind that "the program has goals and knows or sees what will happen elsewhere in itself."
Egocentrism Bugs
The Egocentrism Bugs, stem from the belief that there "is more of their meaning for what they want to accomplish in the program than is actually present in the code." Funny, I see these kinds of bugs all the time in my code and those of other experience programmers :)
The Super Bug
He concludes that all these derive from the Super Bug:
The idea that there is a "hidden mind somewhere inside the programming language that has intelligent and interpretive powers." Not surprising since most of kids experiences are with semi-intelligent beings (aka Parents)
Resnick, noted that: "This sequential paradigm does not match the way the real world works: people and animals act in parallel, objects interact in parallel. As a result, many real-world activities can not be modelled in a natural way with sequential programming."
Thus developed a concurrent or parrallel version of Logo (Multi-Logo), so they kids had a language/environment that more closely matched their view of the world. Although he did not go "parrallel" enough, and in his lessons learned asked "
SideNote: I used to think and say that Concurrent Programming was really really hard. I had plenty of evidence to back this up and had heard and read much smarter people than me saying the same thing. Then I encountered Etoys (and later Scratch) and started teaching these to kids. And realized that Concurrent Programming is actually easier (although you do have the added complexity of syntonization issues) . The problem was not the topic/idea, it was the language we use to think about it.
Resnick noted that "In general, students appropriated the idea of agents sending messages to one another quite easily." Too bad we don't teach more Smalltalk.
He identified three types of bugs specific to concurrent programming:
Problem Decomposition Bugs
"These bugs arise out of students' difficulties decomposing problems into actions to be performed concurrently by multiple agents." Here there are two types of decomposition:
Synchronization Bugs "These bugs arise out of students' difficulties coordinating and orchestrating the activities of multiple agents."
These bugs he divides into two type: Unintended Sequentiality and Unintended Concurrency. In these cases the student expected Sequetiality and got Concurrence (or vice versa).It seems that in designing Multi-Logo to deal with synchronization he provided two mechanisms: ask and demand. Where when you "ask" an agent something (ex: flash light - for 20 seconds) the request is queued up to be executed in the order received. When you "demand" the agent interrupts what is going on to perform the request (or it might simply put it at the head of the queue, I am not sure). It is interesting, at least to me, that Scratch, developed later by Resnick and his team, got rid of the ask and demand and went with a "broadcast" "wait" and "do for X seconds" to allow for synchronization. I believe this simplifies and avoids a number of problems for novice programmers.
Object Oriented Bugs
"These bugs arise out of students' confusion among different types of "objects" Multi-Logo has multiple types of objects: agents, turtle, and on the Lego Interface box (think early NXT) ports and sensors. Part of this confusion may have been the overloading of "halt" which for an agent,
Another quote for Guzial:
Resnick's Lessons Learned
"It is a good idea for students to "play agent"--that is, act out what each agent is supposed to do. This activity requires a group of students, each playing the role of a different agent." I really like this approach with novices and often warn students "Step away from the computer and no one will get hurt". Having them act out the program and program each other is a good way to do this.
In designing Multi-Logo he realized he did not go far enough in parallelism: "An alternate approach, of course, is to change the design of MultiLogo to match students' preconceptions. For example, I could redesign MultiLogo agents so that each agent could do several things at the same time, in line with students' expectations of "excessive parallelism." He later did have agents that can do several things at the same time.
He also discussed the idea of design the environment match the students pre-conceptions. Would be interesting to find out what problems it solves (and those it doesn't) and what new problems it creates.
FInally, for a real treat at some possibilities for a new programming environment see this:
References:
NOTE: If you have limited time, I would recommend reading (2) then (5), then for a real treat watch the Brett Victor talk (7)
(1) Why Is It So Hard to Learn to Program - Mark Guzdial
_______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
I don't know why programming is so hard, but it's a fascinating question. I blog on it regularly. I did blog on the Bret Victor video, too: Bret
Victor's "Inventing on Principle," and the trade-off between usability and learning
Cheers,
Mark
From: [hidden email] [[hidden email]] on behalf of Steve Thomas [[hidden email]]
Sent: Wednesday, February 29, 2012 4:35 AM To: squeakland; iaep Subject: [squeakland] Why Is programming an unnatural activity? So I am sharing my blog post
Why
Is programming an unnatural activity?Hoping to get some feedback from the community.
“Why?” Is programming an unnatural activity? Could programming be made easier in a different form? Could programming be taught in a different way that makes learning easier? Or maybe we just have no idea how to actually measure what students know about programming. (1).
My main problem with the Guzdial paper (this was more my problem than a problem with the paper) is I felt it didn't provide enough details or specifics
on "Why it is so hard to learn to Program?" I need specifics and examples to get my head around things. Roy Pea, was a great find and perhaps not surprisingly (for me at least) the Resnick article was very useful.
Pea (et al) talked about three classes of bugs:
Parrallelism Bugs
The Parallelism Bugs,
is basically an "assumption of different lines in a program can be active or known by the computer at the same time or in parallel". For example, look at this code:
When High School students. in their second year of programming course, were asked what they thought the program would print 8 out of 15 predicted
"Hello" would print after "10".
Intentionality Bugs
The Intentionality Bugs,
is the idea in the child's mind that "the program has goals and knows or sees what will happen elsewhere in itself."
Egocentrism Bugs
The Egocentrism Bugs,
stem from the belief that there "is more of their meaning for what they want to accomplish in the program than is actually present in the code." Funny, I see these kinds of bugs all the time in my code and those of other experience programmers :)
The Super Bug
He concludes that all these derive from the Super Bug:
The idea that there is a "hidden mind somewhere inside the programming language that has intelligent and interpretive powers." Not surprising since
most of kids experiences are with semi-intelligent beings (aka Parents)
Resnick, noted that:
"This sequential paradigm does not match the way the real world works: people and animals act in parallel, objects interact in parallel. As a result, many real-world activities can not be modelled in a natural way with sequential programming."
Thus developed a concurrent or parrallel version of Logo (Multi-Logo), so they kids had a language/environment that more closely matched their view
of the world. Although he did not go "parrallel" enough, and in his lessons learned asked "
SideNote: I used to think and say that Concurrent Programming was really really hard. I had plenty of evidence to back this up and had heard and read much smarter people than me saying the same thing. Then I encountered Etoys (and later Scratch) and started teaching these to kids. And realized that Concurrent Programming is actually easier (although you do have the added complexity of syntonization issues) . The problem was not the topic/idea, it was the language we use to think about it.
Resnick noted that "In
general, students appropriated the idea of agents sending messages to one another quite easily." Too bad we don't teach more Smalltalk.
He identified three types of bugs specific to concurrent programming:
Problem Decomposition Bugs
"These bugs arise out of students' difficulties decomposing problems into actions to be performed concurrently by multiple agents." Here there are
two types of decomposition:
Synchronization Bugs
"These bugs arise out of students' difficulties coordinating and orchestrating the activities of multiple agents."
These bugs he divides into two type: Unintended Sequentiality and Unintended Concurrency. In these cases the
student expected Sequetiality and got Concurrence (or vice versa).
It seems that in designing Multi-Logo to deal with synchronization he provided two mechanisms: ask and demand. Where when you "ask" an agent something (ex: flash
light - for 20 seconds) the request is queued up to be executed in the order received. When you "demand" the agent interrupts what is going on to perform the request (or it might simply put it at the head of the queue, I am not sure). It is interesting,
at least to me, that Scratch, developed later by Resnick and his team, got rid of the ask and demand and went with a "broadcast" "wait" and "do for X seconds" to allow for synchronization. I believe this simplifies and avoids a number of problems for novice
programmers.
Object Oriented Bugs
"These bugs arise out of students' confusion among different types of "objects" Multi-Logo has multiple types of objects: agents,
turtle, and on the Lego Interface box (think early NXT) ports and sensors. Part of this confusion may have been the overloading of "halt" which for an agent,
Another quote for Guzial:
Resnick's Lessons Learned
"It is a good idea for students to "play agent"--that is, act out what each agent is supposed to do. This activity requires a group of students,
each playing the role of a different agent." I really like this approach with novices and often warn students "Step away from the computer and no one will get hurt". Having them act out the program and program each other is a good way to do this.
In designing Multi-Logo he realized he did not go far enough in parallelism: "An
alternate approach, of course, is to change the design of MultiLogo to match students' preconceptions. For example, I could redesign MultiLogo agents so that each agent could do several things at the same time, in line with students' expectations of "excessive
parallelism." He later did have agents that can do several things at the same time.
He also discussed the idea of design the environment match the students pre-conceptions. Would be interesting to find out what problems it solves
(and those it doesn't) and what new problems it creates.
FInally, for a real treat at some possibilities for a new programming environment see this:
References:
NOTE: If you have limited time, I would recommend reading
(2) then (5), then for a real treat watch the Brett Victor talk (7)
(1) Why Is It So Hard to Learn to Program - Mark Guzdial
_______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
In reply to this post by Steve Thomas
On Wed, Feb 29, 2012 at 10:35 AM, Steve Thomas <[hidden email]> wrote: Is it not that concise description or definition of any issue is hard.
Most stuff we think or say is quite general and has all sorts of context and preconsieved notion. Once we have to work out the details we run into problems and that is where the hard comes from.
Karl
_______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
In reply to this post by Steve Thomas
On Wed, Feb 29, 2012 at 1:29 PM, Yamaplos . <[hidden email]> wrote: Steve,
Thanks for the correction. Brilliant! The latter being the majority by far, ergo, as a general thing I actually regret using the word "unnatural" and would now switch to "hard" (although I still agree it is "unnatural" or non-universal)
Ideologically this is very inconvenient, of course, since it is quite Well I would be careful in saying "some people can and others can't" and that some are "naturals." I agree and have no problem saying we are not all born or created equal as far as intelligence, size or looks are concerned (I got more than my fair share of good looks, ego and bad eyesight ;)
Yet, I come from the point of view that if kids don't get it it's my fault, not the kids, perhaps not totally realistic, but it pushes me to do better and that really is all I have control over.
Also, I would ask what is it about the way we teach programming and (I think perhaps more importantly) the languages (programming and the words we use and think with) and problems we use to teach, that allows certain kids to "get it" and others not? For example as shown by Etoys and Scratch, parallel programming is actually easier (unless perhaps if you start with the sequential view and get trapped in thinking in that paradigm and are asked to do concurrency with Pthreads)
Another thing that comes to mind is that all my kids can sing, yet neither my wife nor I have would every be asked to sing (more likely we would be asked to stop). Perhaps they got a lucky draw, but I think more likely it is the music exposure we were fortunate enough to be able to give them and the great teachers and programs we found. I think we need different types of programs for teaching "programming" as well, to appeal to more kids and allow them opportunity to be as successful as they are capable of becoming.
This still leaves me with trying to figure out who it makes sense to Thank you please share what you learn. Of course, even then we are left with trying to figure out how to beat Well you could spend time trying to figure out how to "beat socioeconomics" and as my Great Aunt Suslie used to say "I wish you lots of luck," or simply do what you can to leave the world a bit better wherever you are :)
Stephen
_______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
In reply to this post by Steve Thomas
On Wed, Feb 29, 2012 at 3:30 PM, Christopher Lindgren <[hidden email]> wrote:
While some may have an affinity for programming languages, as they are, I'm not so sure that programming should be constructed upon a binary of natural/unnatural. This binary limits the potential for creating other identities around the scope of who and what a programmer should be, do, examine, and create. Agreed and "hard" would have been a better word. Literacy acquisition is far more complex than naturalness to the medium of any structured/unstructured language, and Miriam Posner just posted on some of those constructions that consequently produce such social stratification: http://miriamposner.com/blog/?p=1135 No offense taken or perceived "crossness" in any of the emails in this chain.
Agreed. That is the one areas where I believe the Scratch Web Site has been really successful and we can learn a lot. We really need a web site for kids to share what they create, re-mix and interact. That is a big missing I hope to be able to help address some time this year (volunteer programmers welcome!!!)
Thanks, Stephen
_______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
In reply to this post by Karl Ramberg
On Wed, Feb 29, 2012 at 7:36 PM, karl ramberg <[hidden email]> wrote:
Karl, Can you explain in more detail what you mean? If I understand you correctly, I would say its not that the concise description or definition is hard, but getting there is and so is getting a full understanding and the implications of those descriptions and definitions.
I have read many a concise definition, that I found hard to understand, because the road the expert took to get there and all that they forgot is hidden and I have not yet traveled and learned from the road they traveled.
Stephen _______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
On Wed, Feb 29, 2012 at 7:36 PM, karl ramberg wrote:
>>> >>> Is it not that concise description or definition of any issue is hard. >> >> Most stuff we think or say is quite general and has all sorts of context >> and preconsieved notion. >> Once we have to work out the details we run into problems and that is >> where the hard comes from. That makes sense to me. In a similar way, it is hard for parliaments and appeals courts to draft new laws, and, I imagine it is hard to write diagnostic manuals (for physicians). Yet such things are applied by people: they can fall back on the discretion and good intentions of the doctor, official or judge that applies them. Machines have no such intentions or discretion, which probably makes programming even harder. Have fun! David _______________________________________________ squeakland mailing list [hidden email] http://lists.squeakland.org/mailman/listinfo/squeakland |
Free forum by Nabble | Edit this page |