Katie Cunningham’s Purpose-first Programming: Glass box scaffolding for learning to code for authentic contexts

June 21, 2021 at 7:00 am 9 comments

Last month, Katie Cunningham presented her CHI 2021 paper “Avoiding the Turing Tarpit: Learning Conversational Programming by Starting from Code’s Purpose.” The video of her presentation is available here. This is the final study from her dissertation work, about which I blogged here.

Katie is trying to support the kinds of programming learners whom she discovered in her work on tracing — students who want to write programs, but have no interest in understanding the details of how programs work. As one said to her (which became the title of her ICLS 2020 paper), “I’m not a computer.” Block-based programming won’t work for her learners because, like most conversational programmers, the authenticity of the language they’re learning matters. They don’t want to use blocks. They want to see the code that developers see — a form of what Cindy Hmelo-Silver and I called “glass-box scaffolding.”

Katie focused on one particular purpose: writing Python code to scrape Web pages using Beautiful Soup. She and Rahul Bejarano dug into Beautiful Soup code on Github and identified a set of code chunks (“plans”) that were really used for this purpose and which could be recombined in useful ways. She then developed a curriculum as a Runestone ebook for teaching those plans where she taught students how to combine them (using Parsons Problems) and, importantly, how to tailor them for specific needs. Here’s a figure from her paper with an example plan with a description of the “slots” for tailoring.

My favorite part of this study is her analysis of how students debugged using these plans. They did make mistakes, and they fixed them. They reasoned about their programs in terms of the plans. In a think aloud, they talked about the names of the plans and the slots, and where they tailored the plan wrong. It’s not that they were just copying and pasting chunks of Python code. They were reasoning about the chunks — but they were not doing much reasoning about Python. In some sense, she defined a task-specific programming language whose components happened to be defined in terms of visible lines of Python code.

My favorite outcome of the study is that students came away excited and felt that they were doing something “realistic” — from a half hour lesson. One participant asked if she could do this kind of learning for different purposes every week, a kind of DuoLingo for programming. Those are strong results from a short intervention. It is a pretty amazing intervention.

I blogged for CACM this month on how we we predict about knowledge transferring between programming languages may be based on an assumption of mathematics background which might have been true in the 1970’s but is less likely to be true today (see post here). I suggest that we need to develop ways of teaching programming that doesn’t relate to mathematics, that instead connect to the programmer’s purpose and task. Katie’s work is what I had in mind as an example.

Entry filed under: Uncategorized. Tags: , , .

Call for Nominations for Editor-in-Chief of ACM Transactions on Computing Education Rules work as a way of communicating computation at a mechanistic level without teaching programming

9 Comments Add your own

  • 1. alanone1  |  June 21, 2021 at 7:31 am

    Am pondering this …

    The last time I looked, children in K-12 are supposed to acquire a mathematics background, and the last time I looked at this, what they are supposed to acquire is more than enough to provide transfer for learning to program. Is the idea here that this has failed?

    Similarly, children in K-12 are supposed do get fluent and reading, writing, and the thought patterns and knowledge from the literature of ideas. Is the idea here that this has also failed?

    If so, then what we might be seeing here is something that one might expect to find in “schools that train” for various kinds of jobs — a worthy enough goal, but not supposed to be the primary function of actual education, especially in colleges and universities.

    To me, the most interesting things mentioned were the combination of (a) “students who want to write programs, but have no interest in understanding the details of how programs work”, and (b) “Block-based programming won’t work for her learners because, like most conversational programmers, the authenticity of the language they’re learning matters”.

    It is hard to see this combination as other than “pop culture goals and talismans”.

    When trying to teach someone — or designing a UI for them — you have to start where they are. So this is good information to have.

    However, to go along with really bad ideas like these have, is the act of marketing people not educators. The distinction of the latter is that the prime calling of “educator” is to try to teach learners what they need if what they want is at odds with what they need.

    It is not a good idea for those who originally were drawn to be educators to dilute and replace the calling with “low versions and definitions of ‘success’ “. I don’t think it helps the learners either.

    • 2. Mark Guzdial  |  June 21, 2021 at 8:18 am

      Students in K-12 may learn sufficient mathematical background to use it in programming, but they may have also developed a fear or a dislike of mathematics. If students refuse to engage with an activity, it’s not possible to distinguish between (a) have the knowledge but are not motivated to engage or (b) don’t have the knowledge. Our work these days is about motivation. How do we get students to engage?

      I’m driven by the fact that many states have 40% or more of their high schools offering computer science classes, but less than 5% of their high school students taking computer science (e.g., California, Texas, and Georgia). The barriers to learning computer science are students’ disinterest. We have to address the problem at the University level if we want students to use programming as a tool in their learning, because it’s not working yet at the K-12 level — mostly because students aren’t opting to try it. So yes, some of what we’re doing can be seen as a marketing problem.

      We don’t know anything about how Katie’s work might motivate students into engaging more deeply with programming later. It’s only a half hour intervention. It could be that a few hours of purpose-first programming is an effective intervention for raising interest and self-efficacy so that students can then fade the scaffolding of the plans and learn the Python in terms of the language syntax and semantics. It may be that doing purpose-first programming in multiple classes helps students to develop an understanding of the visible program code to scaffold deeper learning. Those questions are all for future studies. For now, we have an intervention that leads to more learning and more engagement with a group of participants who were not succeeding at traditional computer science classes. I call that a significant contribution.

      • 3. alanone1  |  June 21, 2021 at 8:46 am

        Hi Mark

        I think you are partly saying that K-12 education is qualitatively failing a large percentage of students, many of whom seem to be getting into college somehow anyway. And some larger part of society — including K-12 — is failing with regard to motivation (they are somehow motivated to want to attend college, but lack the motivation that a real college experience requires).

        I think this has to be stated up front.

        Once done, then I think the larger context of what you are writing about is one part of a much larger remedial process that is required in order for college to actually mean something educationally for far too many students.

        I have a feeling that the recent reformulation — that a university as a business with “customers” (where “the customer is always right”) — is disastrously swamping real education (where “the learner doesn’t know what should be learned”), and will soon do it in for most attendees.

        I agree that motivation is part of what is needed. (But consider that some of the “old school” motivation was simply not wanting the college to throw you out! So you were definitely more motivated to go along with what the college had set up as official process. The newer business notions of “retention” have more or less wiped this out.)

        The report here seems to be that the students liked the experience. But shouldn’t this be coupled with ” … and this got them to be willing to (a) learn what programming is actually about, and (b) not to worry about “fake authenticity” but to understand that they can learn deep programming with “blocks”, etc.” ?

        As I mentioned in my first comment, it is important to find out what the learners think and know. But in analogy to finding this out about physics students, if what they think and know is anti-what-the-field-is-about, then it’s the job of the teachers to find ways to set them on a better path towards the real deal. Am I missing something here?

        • 4. Mark Guzdial  |  June 21, 2021 at 11:20 am

          Hi Alan,

          Katie found more than they liked the experience. They saw it as authentic (e.g., they were learning something like what developers use), and they were able to write and debug successful programs that did web-scraping. For a 30 minute lesson in programming, that’s significant. This is a great starting place for a course where students do go deeper. This isn’t in lieu of going deeper. This is creating a starting place that doesn’t scare them off.

          I see a possible outcome of our work as defining multiple “real deals.” You’ve pointed out that many Universities (including my current home) have multiple Biology departments. The differences are about what’s a valid research question, but even go deeper into different introductory courses and even epistemology. It’s not that epidemiologists or environmentalists don’t know or care about cells (as an example). They’re not “anti-cell.” They need to know about cells to talk to the rest of biology, but studying cells may not be the right level of analysis for much of what they’re doing. I would like to see multiple computing departments/programs/paths in the future, and I would like to see significant use of computing in most if not all University departments. They’re not all going to care about program code in the same way.

          • 5. alanone1  |  June 21, 2021 at 11:52 am

            Hi Mark

            I’m happy to 100% completely go along with your analogy to multiple Biology departments. You might not if you were to examine the nature of these closer.

            I would extremely happy if all the various computer “departments” and “sub-genres” only required a base as comprehensive as Bio does. I think most computer people would be taken aback — even awestruck — at what the base in Bio is of e.g, understanding cells long before you get to the multiple departments.

            Further, the problem with the term “authentic” is that you are letting the students use their own definitions for this. I don’t see that what they want and what they are doing is remotely “authentic” with regard to what computing is all about. It certainly cannot be the differences between textual and block based forms of real programming languages (that would be (and is) ridiculous).

            And this isn’t about not very well designed computer languages — whether Java or Pascal. A real basis in computing cannot be about a particular language — especially a commercial language that has had thousands of barnacles added by thousands of hackers. (This is way off.)

            As I said, I think what has happened is that “normal” has been shifted from understanding to training, from continuing of schooling to remediation, and from education to marketing/business (and worse). People are acting as though the “new normal” is just “normal” and are trying to cope with it.

            I’m not at all against good trade schools and good training. And there is nothing wrong with the same students doing both.

            I think it is a really bad idea to not to have these ideas and processes quite distinct from what education is supposed to be about, and what it means to learn the basis of a field.

            It’s worth noting however, that taking Engineering in the Eng school and Physical Sciences in Arts and Science will have a much stronger base of common knowledge than what seems to be contemplated in the discussion above.

  • 6. BKM  |  June 21, 2021 at 9:44 am

    What I gather from this description is that students in a highly scaffolded class (instructors identified the code chunks for the, and taught them explicitly how to combine them) were able to successfully build a programming project. What isn’t clear to me is whether they have learned to do this on their own. The process of identifying chunks of code and then tailoring them to specific needs is a common strategy employed by professional developers. But the hardest part of this process is being able to identify code chunks that are actually useful, and this process involves the ability to read code at a low level. Have these students learned how to do this by themselves? Have they learned which pieces of the code need to be customized, again, on their own?

    • 7. Mark Guzdial  |  June 21, 2021 at 11:09 am

      Those are among the next questions! My guess is that they’re not ready to do it by themselves after a half hour lesson. We’d probably have to teach them explicitly how to do that. What’s important is that this a valid and interesting way to start learning to code. Students are successful within 30 minutes writing useful programs, and they come away confident and interested in going further.

      • 8. alanone1  |  June 21, 2021 at 11:55 am

        Hi Mark

        But this was even more the case with Etoys (and with Scratch). What children could do after 30 minutes with Etoys is qualitatively far beyond in actually learning computing from what is being described here.

  • […] of becoming technology professionals. This includes K-12 CS teachers, end-user programmers, and conversational programmers. This kind of research sometimes appears in venues like CHI, CSCW, and VL/HCC, and occasionally in […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 10,185 other subscribers


Recent Posts

Blog Stats

  • 2,060,329 hits
June 2021

CS Teaching Tips

%d bloggers like this: