Where to find Guzdial and Ericson Web Resources post-Georgia Tech: Bookmark this post

Georgia Tech has now shut down the web servers that Barbara Ericson and I have been using to share resources for the last umpteen years.  They warned us back in the Fall that they were going to, so we have been moving Web resources over to the University of Michigan.

Here are links to where to find some of our most often accessed resources (not all links and images will work, since some were hardcoded to Georgia Tech URLs):

We do not have everything moved over.  I believe that there were FERPA concerns about some of our websites (that we might be referencing student names), so we were not able to download those. We are recreating those resources best we can. Barbara has now set up a new blog for her AP CS A tracking data (see http://cs4all.home.blog), and I have uploaded my Computational Freakonomics slides and coursenotes to U-M.

Bookmark this post, and as I find more resources in the stash I downloaded, I’ll link them from here.


March 22, 2019 at 7:00 am 3 comments

Code Smells might suggest a different and better Notional Machine: Maybe students want more than one main()

There is a body of research that looks for “code smells” in Scratch projects. “Code smells” are characteristics of code that suggest a deeper problem (see Wikipedia description here). I have argued that these shouldn’t be applied to Scratch, that we’re confusing software engineering with what students are doing with computing (see post here).

One of the smells is having code lying around that isn’t actually executed from the Go button, the green flag in Scratch. The argument is that code that’s not executed from the Go button is unreachable.  That’s a very main() oriented definition of what matters. There was a discussion on Twitter about that “smell” and why it’s inappropriate to apply to Scratch. I know that when I program in GP (another block-based program), I often leave little bits of maintenance code lying around that I might use to set the world’s state.

There’s another possibility for code lying around that isn’t connected and thus doesn’t executd properly — it should execute properly. There’s evidence that novice students are pretty comfortable with the idea of programs/functions/codechunks executing in parallel. They want more than one main() at once. It’s our programming systems that can’t handle this idea well.  Our languages need to step up to the notional machines that students can and want to use.

For example, in Squeak eToys, it’s pretty common to create multiple scripts to control one object. In the below example, one script is continually telling the car to turn, and the other script is continually telling the car to go forward. The overall effect is that the car turns in circles.

I was on Kayla DesPortes dissertation committee (now at NYU!). She asked novice programmers to write a script to make two lights on an Arduino to blink. She gave them the code to blink one light: In a Forever loop, they raise the voltage on a pin high, then wait a bit, then lower the voltage, then wait a bit. That makes a single light blink.

The obvious thing that more than half of the participants in her study did was to duplicate the code — either putting it in parallel or putting in sequence. One block blinked the light on one pin, and the other block blinked the light on the other pin. However, both blocks were Forever loops. Only script can execute on Arduino at a time.

On the Arduino, what the students did was buggy. It “smelled” because the second or parallel Forever block would never execute.

These examples suggest that parallel execution of scripts might be normal and even expected for novices. Maybe parallel execution is an attribute of a notional machine that is natural and even easier for students than trying to figure out how to do everything in one loop. Maybe concurrency is more natural than sequentiality.

Something that “smells” to a software engineer might actually be easier to understand for a layperson.

March 18, 2019 at 7:00 am 13 comments

Open Research Questions from the CS Education Research class, February 2019

Each time I teach the CS Education Research class, we have one session where we brainstorm the questions that this class thinks are interesting and still open (see 2017 edition here and 2015 edition here). This is my first time teaching the class at the University of Michigan. It’s a joint undergraduate and graduate class. We have 22 students total (11 from each of undergrad/grad) — which is terrific for a special topics class on education research!

We put up five terms on the white board as seeds for the questions. Questions were placed strategically near a given term or between two terms. I can’t represent between very well here, so I’m going to organize questions in terms of the closest term (by my eyeball of the photos I took of the whiteboards) and close to the bottom/top of the list to suggest connection to next/prior.

These questions are amazing — I’m really impressed by the insights about what’s interesting, quality of questions, and breadth of topics. #proudTeacher

Community of Practice/Identity

Is there a difference in climate between liberal arts and engineering based CS? Does that climate impact diversity?

What factors make near-peer mentors more effective?

Is there a correlation in “defensive climate” in other subjects with factors like % of male faculty, % minorities in the field, etc.?

How can we get CS educators to change their practices?

How does having diverse/representative course staff impact student attitudes about CS and retention in CS classes/degrees?

How do initiatives of active learning bridge the communities of students learning CS from different backgrounds?

How do visually impaired programmers become part of the larger community of programming practice?

How does the ordering of topics in an Informatics-centric CS1 vs. a CS-centric CS1 effect performance on a pseudocode test of overlapping concepts?

Development (cognitive, learning trajectories, teacher, etc.)

Would question proofing before posting on Piazza increase frequency of questions posted and in turn motivate help-seeking behavior?

How do non-CS majors develop their knowledge and practice of debugging?

How does the interest of a lecturer impact how students learn within the course? Should we force tenure-track professors to teach who don’t want to teach? Can student lecturers make the same impact on student learning and attitudes as professional lecturers and/or tenure-track faculty?

Cognitive/Learning Sciences

What are effect of class sizes and teaching methods on CS student learning?

Does teacher belief that their students have (or don’t have) a “Geek Gene” affect student performance?

How do the language learned in CS classes and their relevancy in industry affect retention rate (if at all)?

What is the best programming language for introduction to CS, and how would you define “best”?

Do we want to teach everyone computer science or computational thinking?

Would subgoal-labeled assertion-evidence slides improve student retention in an introductory data structures course?

Empirically, how does increasing the emphasis on reading code (vs primarily writing code) affect student learning? Does a focus on reading make the fMRI distinction on reading prose or reading code decrease faster (that is, with less experience as a function of time)?

What metaphors in teaching lead to the most successful learning of notional machines? What metaphors do students invent, and which lead to the most successful learning of notional machines?

What is the role of communicating the redesign of a CS1 for recruitment (matriculation) and retention? If you improve your CS1 and you tell prospective students that you changed it, does that change recruitment or retention? Or do prior attitudes/opinions outweigh the re-design?

How can we better understand students’ mental models of notional machines?

How do measure student disconnect in MOOCs?

How can we integrate lecture videos with student hands-on practice in data science or programming MOOCs?


Does engagement on Piazza (common on-line discussion forum) impact CS student performance?

Should course staff promote discussions or start discussions on Piazza? Are benefits to students different if it’s staff starting the discussions or students?

How does national or state standardization of CS class topics or curriculum effect enrollment rates and diversity in high school CS classes?

How do parents’ education level/career influence student choices in CS, e.g. ,to take a CS class, to get a CS degree, to seek a CS job, etc.?

Do students with learning disabilities (e.g., dyslexia) view code differently? Could we use fMRI or eye tracking to measure this?

Why don’t more lower-income students go into CS? What percentage of current CS students are lower-income? How many lower-income students have the opportunity to learn CS and don’t take it?


What would it cost to implement a CS program in all high schools in Michigan?

March 11, 2019 at 7:00 am 7 comments

Barbara Ericson’s AP CS Report for 2018 and her new blog cs4all.home.blog

Barb has written her blog post about the 2018 AP data (see 2017 report here and 2016 report here), and this year, she’s using it to launch her own blog!  Find it at https://cs4all.home.blog/

Every year I gather and report on the data for AP CS from the College Board which is at http://research.collegeboard.org/programs/ap/data/

There was a huge increase in Advanced Placement (AP) Computer Science Principles (CSP) exam takers nationally (from 43,780 in 2017 to 70, 864 in 2018 – a 62% increase). The Computer Science A (CSA) exam also grew (from 56,088 in 2017 to 60,040 in 2018 – a 7% increase).

Source: AP CS Report for 2018

March 4, 2019 at 7:00 am Leave a comment

A crowdsourced blog post about my SIGCSE Keynote: Computing Education as a Foundation for 21st Century Literacy


I had an unusual (and lazy) idea for my SIGCSE Keynote. I didn’t have the time or energy to write a blog post. How about if I asked everyone to tweet my talk, and I’ll just copy-paste them together? I got a response — too large of a response. There were well over 1000 tweets!

I couldn’t review all of them.  I selected a set that covered the key points in the talk, grouped around topics/order in the talk. All the slides are available on Slideshare.net here. A complete “live blogging” account is here.

Starting out


History of Computer Science and Teaching CS to Everyone

From Computational Thinking to Scientific, Engineering, and Historical Thinking

Examples: Sound Demonstration and Subgoal Labeling

I had several requests for the code I ran in the demo:

def increaseVolume(sound):
  for sample in getSamples(sound):
    value = getSampleValue(sample)
    setSampleValue(sample, value * 4)

def maximize(sound):
 for sample in getSamples(sound):
   value = getSampleValue(sample)
   if value >= 0:
   if value < 0:
     setSampleValue(sample, -32600)

The sound visualization GP project is here.

You can get GP at http://gpblocks.org.

Call to Action

Q & A


March 2, 2019 at 8:00 am 1 comment

Thanks. For all the fish, and everything else.

This morning, I’m giving the keynote at the SIGCSE Symposium after receiving the 2019 SIGCSE Award for Outstanding Contribution to Computer Science Education.

SIGCSE_2019_Agenda_by_WhovaThis award is so important to me. It comes from the SIGCSE Community, which I’ve been part of since 1995.  It’s an award that’s woven into our community.  I’ve been fortunate to win other awards, but those are over there.  They come from and are awarded someplace outside of the mainstream. Every year, the Outstanding Contributor gets in front of the SIGCSE Community and has his or her say.  It’s here, among all of us. I can’t tell you how many of those speeches I’ve attended.  Of course, I’ve wondered, “What if I was up there? What would I say to this community?” This year, I get my chance.

Sometimes, the award winner thanks the people who got them there.  I feel that same urge. I am so very grateful to all my collaborators over the years, without whom, I would not have done the work that got me to this award. But the audience isn’t so keen on hearing the Thank You’s. I want to use this opportunity to say something to the community — about how important they are, about our history, and about what we need to do next.

In the last few weeks, I’ve been interviewed twice where I got the chance to acknowledge some of my collaborators, influences, and mentors — in Marc Lesser’s podcast and in the recent SIGCSE bulletin. I’m grateful to have had those opportunities so that I could tell my stories and give thanks.  I’m so glad that Marc asked me how I got here. I have had the advantage of significant preparatory privilege.  My parents sent me to a private, parochial high school in 1976 that had two computer science teachers and classes in both Basic and Fortran. I had a microcomputer store open up a block from my house, where I was hired as an assistant in 1979.  By the time I got to Wayne State University, I had programmed in several high level languages and four assembler languages (6502, 6800, 8080, and Z-80). I started teaching computer science in 1980. I’m lucky — I had great parents and amazing opportunities.

In this blog post, let me just say three more BIG THANK YOU’s.

First, my wonderful students.  Everyone knows that work by a professor is work done by the graduate students, with a bit of the professor’s direction.  My PhD students have inspired me, taught me, and done the most important research in my career: Noel Rappin, Colleen Kehoe, Jochen Rick, Brian Landry, Allison Elliott Tew, Brian Dorn, Lijun Ni, Mike Hewner, Briana Morrison, Miranda Parker, Amber Solomon, Katie Cunningham, and Bahare Naimipour. Then there are all the PhD students whom I didn’t directly advise, but who collaborated with me on some terrific work: Jennifer Turns, Andrea Forte, Lana Yarosh, Lauren Margulieux, and many others. I am grateful to all of them for all the papers on this list and the many times they’re mentioned in the 10 years of this blog.

Second, my mentors.  At the start of Learner-Centered Design of Computing Education Researchthere is this dedication page.


That’s Elliot Soloway (my advisor and longest-time mentor), Janet Kolodner (who taught me how to be a learning scientist), Jim Foley (who continues to be my model for academic leadership, and who gave the green light to MediaComp), Peter Freeman (the Dean who hired me at Georgia Tech), Rich LeBlanc (who introduced me to SIGCSE), John Stasko (who has been my big brother in academia for over 25 years), and Alan Kay (who inspired me to get my PhD and has been my mentor for literally decades). “All my mentors” include people like Bob Kozma who convinced me to do this joint PhD thing, Joe Krajcik who taught me science education research, Kurt Eiselt who convinced Jim to green light MediaComp, Rick Adrion who explained US education public policy to me, and Carl Berger who continues to inspire me with his curiosity about everything. I am grateful for their guidance and support, and to many of them, for taking a chance on me.

Third, but most important, is Dr. Barbara Ericson.  Barbara and I were married in 1985 in July, and started our MS in CSE at the University of Michigan in September. We have supported each other through two PhD’s, umpteen papers, the only joint ACM Karlstrom award, some significant NSF grants — and three children, two homes, multiple jobs, and 30+ years of marriage.  Barb is my most important collaborator, critic, proponent, and dearest friend. I really can’t express the depth of my gratitude to and love for Barb.



March 1, 2019 at 8:00 am 3 comments

SIGCSE 2019 Papers from the Blogosphere

I’m gathering blog posts from others about their SIGCSE 2019 papers. Here’s what I’ve got:

From Katie Rich:


Rich, K. M., Strickland, C., Binkowski, T. A., & Franklin, D. (2019). A K – 8 debugging learning trajectory derived from research literature. In Proceedings of the 2019 ACM SIGCSE Technical Symposium on Computer Science Education (pp. 745–751). New York: ACM.

From Shuchi Grover:


(Paper) Non-Programming Activities for Engagement with Foundational Concepts in Introductory Programming (Shuchi Grover, Nicholas Jackiw, & Patrik Lundh) | Mar 2, 12 – 12:30pm, Hyatt: Greenway B/C (2nd floor)

(Poster) Integrating Computational Thinking in Informal and Formal Science and Math Activities for Preschool Learners (Shuchi Grover, Ximena Dominguez, Danae Kamdar, Phil Vahey, Savitha Moorthy, Sara Gracely & Ken Rafanan) | Mar 1, 10am-noon, Hyatt Exhibit Hall

(Demo) Integrating Computational Modeling in K-12 STEM Classrooms (Gautam Biswas, Nicole Hutchins, Akos Ledeczi, Shuchi Grover & Satabdi Basu) | Feb 28, 10-10:45am, Hyatt Exhibit Hall

(Lightning Talk): Thinking about Computational Thinking: Lessons from Education Research (Shuchi Grover) | Feb 28, 4pm, Hyatt Lake Bemidji (4th Floor)

From Brett Becker

First Things First: Providing Metacognitive Scaffolding for Interpreting Problem Prompts. 


50 Years of CS1 at SIGCSE: A Review of the Evolution of Introductory Programming Education Research


From Austin Cory Bart


PythonSneks: An Open-Source, Instructionally-Designed Introductory Curriculum with Action-Design Research

Austin Cory Bart, University of Delaware, Newark, DE, USA

Allie Sarver, Virginia Tech, Blacksburg, VA, USA

Michael Friend, Virginia Tech, Blacksburg, VA, USA

Larry Cox II, Virginia Tech, Blacksburg, VA, USA

From Lauren Margulieux


Lauren Margulieux, Tuba Ketenci, and Adrienne Decker.

Review of Measurements Used in Computing Education Research and Suggestions for Increasing Standardization

From Felienne Hermans


Early Programming Education and Career Orientation: the Effects of Gender, Self-Efficacy, Motivation and Stereotypes

Efthimia Aivaloglou and Felienne Hermans



February 28, 2019 at 9:15 am Leave a comment

Older Posts

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

Join 6,163 other followers


Recent Posts

Blog Stats

  • 1,621,276 hits
March 2019
« Feb    

CS Teaching Tips