What we want kids to learn through coding: Requirements for task-specific programming languages for learning
April 22, 2019 at 7:00 am 3 comments
Marina Umaschi Bers has an essay from last year that I’ve been thinking about more since the discussion about task-specific programming languages (see previous post here). Her essay is: What Kids Can Learn Through Coding.
In creating her ScratchJr kitten, Liana practiced some of the most powerful ideas of computer sciences:
- She learned that a programing language has a set of rules in which symbols represent actions.
- She understood that her choices had an impact on what was happening on the screen.
- She was able to create a sequence of programming blocks to represent a complex behavior (such as appearing and disappearing).
- She used logic to correctly order the blocks in a sequence.
- She practiced and applied the concept of patterns, which she had learned earlier during math time in class.
ScratchJr is just what the name suggests — a programming language like Scratch, but made even simpler and aimed at young children. See a description of activities with ScratchJr here.
What I particularly like about Marina’s list is how it connects to the learning trajectories work that I’ve been talking about here and highlighted in my 2019 SIGCSE Keynote (as described in Ann Leftwich’s tweet). Ideas like “Precision and completeness are important when instructions in advance” are hard to learn. Knowing that the computer requires precision and isn’t trying to understand you like a human is really the first step to getting past Roy Pea’s “Superbug.” These are important ideas to learn. I’ll bet that most students don’t have that insight (even when they get to undergraduate education). That would be an interesting research question — what percentage of University students know ideas like the importance of precision and completeness in computer instructions?
I have a hypothesis that these fundamental ideas (what Marina is pointing out, what Katie Rich et al. are noting in their learning trajectories) even transfer. These aren’t higher-order thinking skills. This isn’t about learning a programming language to be used across the curriculum. Rather, these concepts are about recognizing, “The nature of programming.” I bet that students will learn these and remember them in new contexts, because it’s about what the computer and programming is. Once you learn that computer instructions require precision and completeness, I predict that you always remember that programming has that requirement.
What else do we want students to get from coding?
Please note that I’m not talking about “computational thinking.” I’m setting aside the possibility of more general “mindset” benefits. Right now, I’m thinking in pragmatic and measurable terms. We can measure students learning the concepts in the trajectories. We can measure if those concepts are retained and applied later.
This is why task-specific programming languages are interesting to me. The goal isn’t “learning programming” (and I’ll argue in a few weeks that that isn’t a thing). The goal is using code to improve learning about something other than programming skills. Notice the term that Marina uses in her essay: “the most powerful ideas of computer sciences.” She’s not teaching students how to program. She is teaching them what programming is.
A task-specific programming language used in an educational context should improve learning in that context. It should provide some leverage that wasn’t there previously (i.e., without the computer).
- For the social studies educators with whom I am working, programming allowed them to build visualizations to highlight the features that they wanted to highlight, from large data sets. They found it easier to get the visualization they wanted via code than via Excel (or so they told us). The programming managed scale (e.g., if you had three data points, you could graph them by hand pretty easily).
- The programming language can find mistakes that the student might not notice, and provide feedback. That’s how I’m trying to use programming in a history class. A program can represent an argument. A computer can find gaps and weaknesses in an argument that a student might not see.
- The Bootstrap folks argue for the value of rigor. I think they’re referring to the specificity that a program requires. Writing a program requires students to specify a problem and a solution in detail, and can lead to greater insight.
- A program can make something “real.” Bootstrap: Algebra works, in part, because the students’ algebra makes a video game. It breathes life into the mathematics. That a program executes is a powerful motivator.
I think what Alan was telling me in the comments to an earlier blog post about task-specific programming and again in the blog post on multiple languages in schools is that it should also lead to generativity. If I teach you a programming language that solves your task and doesn’t connect to more powerful ideas and languages, then I have taught you a dead-end solution. I might achieve the goals I’ve identified earlier, but I’m not helping you to solve the next problems or the problems you’re going to face next year or next class. I’m not sure right now how to achieve that goal, but I recognize the value of it.
What are other requirements for the use of task-specific languages for learners?
Entry filed under: Uncategorized. Tags: computing across curriculum, computing education research, programming languages, task-specific programming.
1.
orcmid | April 22, 2019 at 3:51 pm
I think the attention to precision is a big deal. Thanks for featuring that.
In a way, the 3Rs also feature precision, although arithmetic is perhaps the closest in terms of trajectories. I am discouraged that being able to check ones work is apparently not a taught feature though, in my limited observation of youngsters just wanting to get the answer the teacher wants. Mystifying. Maybe task-oriented computation will help get around that to what matters.
2.
Michael Mannix | April 23, 2019 at 11:49 am
In my next generation of using Snap! in my ninth grade honors physics classes, I plan to provide starter files for the students that will contain just the blocks they need to complete the task at hand. I see this flexibility of Snap! as a means to sort of create a task-specific language from a full-featured language for each phase of the learning. This is not so much a requirement for the use of a task-specific language as a recognition that Snap! (and maybe others) can be tailored to be task-specific.
Thanks. This blog is a good resource that makes me think more deeply about what I am trying to do.
3.
Task Specific Programming will only matter if it solves a user’s problem (Precalculus TSP Part 4 of 5) | Computing Education Research Blog | September 30, 2019 at 7:00 am
[…] Now, there’s another way in which we might argue that these prototypes help with education — maybe they help with learning something about computer science? Here’s a slide from my SIGCSE 2019 keynote, referencing the learning trajectories work by Katie Rich, Carla Strickland, T. Andrew Binkowski, Cheryl Moran, and Diana Franklin (see this blog post). […]