The following are the recommendations of the research study, along with my thoughts and reactions to these recommendations and how to apply them to teaching young kids 8-16 programming:
1. Space learning over time. Arrange to review key elements of course content
after a delay of several weeks to several months after initial presentation.
I would say I am not good at this, I tend to cram a lot of learning into a small period of time. I need to think about this and how to incorporate review of key concepts.
students alternate between reading already worked solutions and trying to solve
problems on their own.
While I have thought about about providing kids "good literature" to read (aka, well written pieces of code) I rarely do it in practice. Instead I try to find kids who write good code (or better code) and ask them to show that code to the class while complimenting them on what I see are the important lessons for all to learn from that code and the way it evolved.
Now how do you do this with "Free-Range Students" (not sure what is meant by that, but I assume students outside of a traditional classroom setting who are self learners) is a much harder challenge. One possible method would be to do an "Etoy Challenge" type project.
"Etoys Challenge" is a Tutorial embedded in the Etoys image where a select set of scripting tiles are available and visible for the learner to solve a particular problem/challenge. So after they complete the various challenges (drawing the triangle, square and pentagon), I could have the Etoy project show them their different scripts all on the same page to facilitate easier comparison. I would then ask them "What's the same about these scripts and what is different". Still not all kids will get this and a teacher/mentor to guide them would be needed.
Now the report did not mention (at least not in this section, but I guess they did in a way in other recommendations) what kinds of "worked examples" work best. For example in their report they show a Worked Algebra problem:
Below is an example solution to the problem:
“Solve 12 + 2x = 15 for x”
Study each step in this solution, so that you
can better solve the next problem
on your own:
12 + 2x = 15
2x = 15-12
2x = 3
x = 3/2
x = 1.5
Now using Algebra as an example (because it is a lot easier for me to explain my point using an Algebra example than to come up with a programming example) What I would do if teaching this and incorporating examples is to:
- Show there is more than one way to solve the problem. "you don't really know something unless you know it multiple ways" - Marvin Minsky
- Make the invisible visible and highlight key concepts, such as balance and reduce to drive home that fundamental method. Here I might use visuals such as a balance scale.
- Provide opportunities for concrete practice in solving the problem (perhaps a virtual interactive showing a balance scale, with UI elements to add/subtract/... to the scale pans.
Items 2 and 3 are inline with recommendations in the report. I did not see item 1 mentioned and would be curious if there is research on this.
Hopefully we will learn in the class about some good worked programming examples we can use.
There are 5 more recommendations from the report which I will think about and blog about later, but why wait read the report, its well worth your time.