Purpose-first programming: A programming learning approach for learners who care most about what code achieves: Katie Cunningham’s Defense

November 30, 2020 at 7:00 am 11 comments

On Wednesday, Katie Cunningham is defending her dissertation, “Purpose-First Programming: A Programming Learning Approach for Learners Who Care Most About What Code Achieves.” I’m proud of the work Katie has done with Barb and me over the years. Let me relate the story here, with links to the blog posts.

I first met Katie through through an on-line essay she wrote explaining the issues of gender and CS to her faculty (see my blog post referencing at link here). After she graduated, she worked on the CSin3 project at California State University at Monterey Bay which helped Latino and Latina students get undergraduate degrees in CS in three years. The paper she and the CSin3 team wrote won a Best Paper award at SIGCSE 2018 (see paper here).

Katie started her PhD research studying how students traced code when trying to understand and predict program behavior. She published her findings at ICER 2017 (see blog post). As you’d expect, students who traced programs line-by-line were more likely to get prediction problems (What is the output? What is this variable’s value?) correct. But not always. Most intriguing: Students who stopped mid-way through a trace were more likely to get the problems wrong than those who never traced at all.

In her next study, she replicated the original experiment and then brought into the lab those students who had stopped mid-way in order to ask them “why?” A common answer was that the students were trying to see the “pattern” of the program, and once they saw the pattern, they were able to predict the answer. The problem is that the students were novices. They didn’t know many patterns. They often guessed wrong. Katie presented this paper at ITiCSE 2019 (see blog post).

Katie did a think-aloud study where she could watch students tracing, and something unexpected and interesting happened — two participants refused to trace. These were data science students who did program successfully, but they were unwilling to trace code at the line-by-line level. She wrote an ICLS 2020 paper about their reasons (see blog post). She decided to study that population.

A 2018 CHI paper by another U-M student, April Wang, had talked about how computing education fails conversational programmers (see paper here). Katie decided to build a new kind of curriculum that addressed her data science students and April’s conversational programmers. How do you teach programming to students who (1) don’t want to become professional programmers and (2) are dissuaded from high cognitive load activities like tracing code? This is a very different problem than most of CS education at the undergraduate level where we have eager CS majors who want to get software development jobs. Katie was dealing with issues both of motivation and of cognitive load.

Katie invented purpose-first programming. I don’t want to say too much about it here — her dissertation and her future papers will go more into it. I’ll give you a sense for her process. She used Github repositories and expert interviews to identify a few programming plans (just like Elliot Soloway and Jim Spohrer studied years ago) that were in common use in a domain that her participants cared about. She then taught those plans. Students modified and combined the plans to create programs that the students found useful. Rather than start with syntax or semantics, she started with the program’s purpose. The results were very positive in terms of learning, performance, and affect. Rather than be turned away, they wanted more. One student asked if she could create a whole set of curricula like this, each for a different purpose. That’s the idea exactly. Katie may be on her way to inventing the Duolingo of programming.

Katie already has a post-doc lined up. She’ll be a CI Fellow with Nell O’Rourke at Northwestern. The defense will be on Zoom — feel free to come and cheer her on!

The School of Information is pleased to announce the oral defense of Kathryn Cunningham:

Title: Purpose-First Programming: A Programming Learning Approach for Learners Who Care Most About What Code Achieves

Date: Wednesday, December 2nd

Time: 10 am – 12 pm EST

Place: This defense will be held virtually for the public to attend. Please use this link.

Barbara Ericson and Mark Guzdial, serving as committee chairs, will preside over the oral defense.

All are welcome to (virtually) attend!

Entry filed under: Uncategorized. Tags: , , .

Define Computer Science so CS Departments include CS Ed Dijkstra’s Truths about Computing Education Aren’t: The many kinds of programming

11 Comments Add your own

  • 1. joek  |  November 30, 2020 at 10:00 am

    Happy to see “purpose” centre stage. I was very happy when Mitch Resnick at scratch2017bdx talked about a 5th P (for purpose) in addition to his “Give P’s a chance” (peers, passion, play, projects). Most of the time he doesn’t mention purpose, but this may help 🙂

    Click to access Designing-Constructionist-Futures.pdf

  • 2. orcmid  |  November 30, 2020 at 10:40 am

    Years ago — many years ago — Fred Gruenberger introduced the notion of “purposive computing” at a time before the GUI became commonplace. The idea, as expressed by my colleague Bill Anderson, is that “all systems are embedded systems” or, more-simply, information systems are *situated.”

    I look forward to Katie’s treatment of purpose-first programming and how that might bring treatment of software more-toward suitability for purpose.

    I also wonder how this will fit into notions of on-ramps and learning curves. I am reminded how youngsters are/were taught arithmetic and penmanship (at one time) first, not unlike keyboarding and programming first these days, with context seeming to come later for those who endure it. There is always a gap between what a program is and what a program is intended for. Purpose seems to be neglected in appraisal of programming and artificial examples don’t help.

  • 3. Hans  |  November 30, 2020 at 6:50 pm

    Very cool ideas to measure student learning via their approaches and to teach a different kind high-level thinking.

  • 4. Purpose-First Programming - GistTree  |  November 30, 2020 at 10:40 pm

    […] November 30, 2020 at 7: 00 am […]

  • 5. Purpose-First Programming | صحافة حرة FREE PRESS  |  December 1, 2020 at 2:21 am

    […] November 30, 2020 at 7:00 am […]

  • 6. Rob Toyota  |  December 2, 2020 at 12:17 pm

    This blog post showed up in my news feed, and this caught my attention because I while I’m not an educator, I’m a programmer who spends a fair bit of time helping non-developer coworkers and friends learn enough to do some sort of small, purpose-driven task since I was a kid. I’ve spent my life fumbling through trying to figure out how to teach someone “what they need to know for their purpose”, without getting too deep into the low level information.

    I just finished watching DOCTOR Katie’s defence (congratulations from Canada!), and I found it very enlightening! Is it possible to have the Zoom recording uploaded to youtube or something, so that I can come back to it and pull out some of the core concepts? I watched while working from home, so I wasn’t able to take notes.

    In the Q&A, Katie started talking about how this sort of teaching might be done in informal settings, and personally, I think that’s where this is really useful. While there is value in teaching like this in schools, there are tons of people like me in the world who want to empower everyone else to be able to write basic code. Katie’s paper showed how she was able to convey the concept of web scraping through beautifulsoup in 90 minutes, and that’s amazing for someone like me, who’s trying to teach someone during my own work hours, or worse – trying to teach someone who ISN’T being paid to sit and listen to me haha.

    Congratulations again, Katie! You’ve helped inspire me to look at better ways to teach my friends and colleagues.

    • 7. orcmid  |  December 2, 2020 at 12:28 pm

      @Rob, I share your reaction to the discussion of informal settings, one that can apply to post-studies practitioners/enthusiasts. I also trust that this Zoom “defense” marks the onset of a trend. Awesome @Mark

  • 8. Dört kısa bağlantı: 1 Aralık 2020 | CEOgelişim  |  December 7, 2020 at 7:58 am

    […] Amaç-İlk Programlama – Bazı öğrenciler, program yürütme simülasyonunun bilişsel olarak ağır görevlerine direnirler. Bu insanlara programlamayı öğretmenin sırrı “amaca yönelik programlama” olabilir: Katılımcılarının önemsediği bir alanda ortak kullanımda olan birkaç programlama planını (tıpkı Elliot Soloway ve Jim Spohrer’in yıllar önce çalıştığı gibi) belirlemek için Github depolarını ve uzman görüşmelerini kullandı. Daha sonra bu planları öğretti. Öğrenciler, yararlı buldukları programları oluşturmak için planları değiştirdiler ve birleştirdiler. Sözdizimi veya anlambilimle başlamak yerine, programın amacı ile başladı. 90’ların sonundaki Perl ve PHP kopyala ve değiştir kodlama patlamasını anımsatan, o sırada CS kurslarından gelenlere göre çok daha fazla sayıda insan programlama emri aldı. […]

  • 9. Four short links: 1 Dec 2020 | Techno Guru G  |  December 8, 2020 at 1:16 am

    […] Purpose-First Programming — Some students resist the cognitively-heavy tasks of simulating program execution. The secret to teaching those folks to program may be “purpose-first programming”: She used Github repositories and expert interviews to identify a few programming plans (just like Elliot Soloway and Jim Spohrer studied years ago) that were in common use in a domain that her participants cared about. She then taught those plans. Students modified and combined the plans to create programs that the students found useful. Rather than start with syntax or semantics, she started with the program’s purpose. Very reminiscent of the late 90s Perl and PHP copy-and-change coding boom that got orders of magnitude more people programming than were coming through CS courses at the time. […]

  • 10. Cuatro enlaces cortos: 1 de diciembre de 2020  |  December 13, 2020 at 1:24 am

    […] Programación con un propósito primero – Algunos estudiantes se resisten a las tareas cognitivamente pesadas de simular la ejecución de un programa. El secreto para enseñar a esas personas a programar puede ser la “programación con un propósito primero”: Usó repositorios de Github y entrevistas con expertos para identificar algunos planes de programación (como los que estudiaron Elliot Soloway y Jim Spohrer hace años) que eran de uso común en un dominio que interesaba a sus participantes. Luego enseñó esos planes. Los estudiantes modificaron y combinaron los planes para crear programas que los estudiantes encontraron útiles. En lugar de comenzar con la sintaxis o la semántica, comenzó con el propósito del programa. Recuerda mucho al auge de la codificación de copia y cambio de PHP y Perl de finales de los 90 que consiguió que muchas más personas programaran de las que recibían los cursos de informática en ese momento. […]

  • […] simply give up on programming tasks that they don’t think that they’ll be successful at (see blog post on Katie’s dissertation defense). Self-efficacy is likely an important variable in recruitment and retention, particularly of […]


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 )

Google photo

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

Twitter picture

You are commenting using your Twitter 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 8,422 other followers


Recent Posts

Blog Stats

  • 1,829,333 hits
November 2020

CS Teaching Tips

%d bloggers like this: