View on GitHub

python-bakery

Main website for the Python Bakery Project

Hello, and welcome to the Python Bakery! This is an open-source CS1 curriculum, with all batteries included. Or at least, that’s our goal.

This page is meant for instructors teaching the course.

For instructors, please read over this page to learn more about the teaching philosophy, goals, and suggestions for how to teach with this course. Thanks for giving us a shot!

The Python Bakery

Our goal is to provide a CS1 curriculum for instructors who want to teach Computer Science with a modern version of Python. Although our original audience was freshmen Computer Science majors at an R1 university, we hope to develop a curriculum that can work for high school students.

Primary Learning Goal: The goal of the course is not to teach programming, Python, or Software Engineering. The goal of the course is to teach the fundamentals of Computer Science, through programming in Python. Students are not likely to see the difference, but instructors should. The goal is to teach a kind of problem-solving that is more enduring than just what a single language provides. Of course, it’s virtually impossible to do that without teaching an awful lot of programming material - we believe that is a feature, not a drawback.

Prior Knowledge: The curriculum does not expect students to have prior Computer Science knowledge. Indeed, we recommend you use our pretest to identify students who do not belong in this course and promote them out (we usually reserve this for students who make excellent progress on the final programming problem, on their own, but we do interview each one of them individually). Students should be able to come in having never programmed before, although our data reflects that prior experience is associated with higher final exam scores (shocker, I know).

The curriculum requires little math, mostly just algebra. And even that Algebra knowledge is pretty limited (there’s a few questions early on that students might need help with, if they have weaker math skills).

Students do need computers and reliable access to the internet, even during classroom activities. This is not an unplugged curriculum.

Size of Audience: All the assignments are meant to scale to hundreds of students. The textbook is fully autograded and requires minimal oversight. The classroom activities are oriented around group submissions or autograded individual assignments. To be truly manageable, you will need teaching assistants, but a substantial portion of this Staff Course is built for teaching and managing them.

Curriculum Infrastructure

The first Canvas course that you get is the Staff Course. This course holds not only the “instructor guide” for the curriculum, but also a way to track the teaching assistants, giving them feedback, and making sure they are working reliably. Students will never see this course (and please never give them access!).

Separately, you will have one or more Student Canvas Courses, forked from the template Student Staging Course. We recommend combining as many of these as you can, to reduce bookkeeping and copy/paste errors. Your institution may have rules about this (our’s sure does). However, this is where students actually go to complete assignments.

The actual textbook, quizzes, and coding assignments are secretly delivered through BlockPy Bakery Curriculum, which is a BlockPy course embedded in Canvas via LTI. We suggest using our platform if only for its LTI connection to Canvas (allowing automatic student registration and grade passback). Technically, there is also a second BlockPy course for the exams, but we do not provide access to external instructors to that course. There will also be separate BlockPy courses automatically created for each corresponding Student Canvas Course. And finally, there’s also a BlockPy course for the practice problems.

There are some Poll Everywhere questions that we provide for the lectures; these are kept on the Poll Everywhere site. We share them with our instructors using the PE mechanism, but external instructors may find it easier to make their own copy.

One last critical resource that we provide is the Bakery Google Drive (link). This is where we hold our lecture/practicum slides, worksheets and reference solutions, and the form templates that we suggest using. In addition to our Drive, you will almost certainly want to create your own Google Drive to house your version of the course materials.

Course Structure

The course is designed with two major threads: the in-person classroom activities (divided into instructor-led Lecture and TA-led Practicum) and the asynchronous textbook readings/quizzes/coding problems. The material in these two threads overlaps, but is actually distinct: we use the textbook to teach the fundamentals, and then classtime to explore bigger, squishier ideas (seeking help, debugging, thinking about good test cases, ethics).

What did we mean by “Batteries Included”? Well, besides the nod to Python’s philosophy, we mean that we’re trying to make instructors lives easier by providing all the things that you might need to teach the course. That includes:

We won’t pretend that we have all this for the entire curriculum, yet. The goal is to eventually package all of this into one convenient place. We’re actually pretty close to having all this data, it’s mostly just been a matter of formally dumping it so that you have access to it. Please bear with us!

Textbook Structure

The Bakery textbook is delivered through BlockPy, embeded as an LTI tool in Canvas. The material is divided into almost a dozen Chapters, with each chapter meant to approximate a single week of the course. Some weeks represent projects and/or exams, but most have the same recurring substructure:

The Primer summarizes the entire chapter briefly, to give a “sneak preview” of what they are learning. The Primer to be read before students come to lecture/practicum that week.

The other two Parts are the actual content, broken up into a semi-weekly cadence (otherwise students try to wait until the end of the week to get started). The major element of the parts are the Lessons, of which there are 2-8 (the quantity decreases as the semester moves along). Each lesson has a Reading (provided as text or a video) followed by a mastery Quiz (multiple choice, true/false, matching, fill-in-the-blank, etc.). Most lessons also have several Coding Problems associated with them. This material makes up the bulk of the course’s actual learning content.

All of the textbook is autograded and attempts to give feedback. We discuss this more later on with the Pedal system. You should definitely look through the assignments on Canvas to understand what your students are expected to do each week. You may also find it helpful to consult the flat Bakery Textbook View of just the Readings.

Textbook Curriculum

The diagram below captures all of the topics that we aim to cover, and roughly their order. We place the topics loosely on the spectrum from Data (Abstraction) to Algorithms.

Overview Diagram of the Bakery curriculum topics

The Role of the Classroom

We mentioned the divide between textbook and classroom activities. We think that the time spent in the classroom is the most valuable time you have. Your primary goal should be to develop a meaningful learning community where all of your students feel welcome and engaged with the course. They should get to know you, the staff, and their classmates. They should feel welcome to ask questions and to not know things. Community, culture, and relationships are the key to successful teaching. Never forget that!

Some of the activities we suggest are more about building up community than strictly about the core content. Many of the activities are about developing their abilities to work in groups, to dissect ethics, to prevent imposter syndrome, and otherwise develop their so-called “softer” skills (which are often more important than their coding skills, in the long run).

There are also a lot of high-level concepts that will not really land for students until they have been programming for a while: good variable naming, the power of writing good tests, how to decompose complicated functions… These are ideas that only take root when you’ve had to fight really terrible codebases. We cover them in lecture, but recognize that your job is to expose the students, not to build mastery.

Scaling enrollments often means that students will compete with hundreds of classmates for their instructors attention. You cannot be everywhere all the time, so you probably have teaching assistants, who may host their own lab. We call these sessions the Practicum, and encourage teaching assistants to build as much community as possible there. These smaller in-person learning experiences have potential to be more impactful thanks to their smaller, more intimate nature. We encourage you to give your teaching staff agency in these sessions and for them to get to know each of their assigned students.

In addition to the lecture and practicum (lab), we encourage you to adopt an asychronous chat platform, like Discord or Slack. If you can get students to engage there, that is also a form of community. Recognize and remember that not everyone may want to participate there, though, including students who are particularly vulnerable.

Classroom Curriculum

So what do we actually do in the classroom? Each week is described below; the parenthetical next to the week describes what the textbook is covering.

What About Cheating?

A common question is, “if everything is open-source, won’t my students cheat?”

Pedal: Semi-automated Feedback and Autograding

Earlier, we referred to “autograding code/logic”. This is all done through Pedal, a Python library for semi-automated feedback of student Python code. Think of Pedal as a collection of tools that can analyze student code to give feedback and evaluate correctness. This is more than just unit testing (although it does do unit testing) - there are tools for syntactical structure analysis, liveness checking, type checking, and so much more. Its feedback is meant to be focused on beginners and avoids many of the issues that conventional error messages and simple unit testing feedback introduces.

A classic example is when a unit test fails, the error shown to students will often show that the instructor code failed; some students may complain that their code is perfect, instead the instructor code is broken. However, they fail to understand that the instructor code worked perfectly, the error was in the function that students defined. Although eventually students must understand this anyway, Pedal will manipulate stack traces to make it clear that errors are in the students’ code and not the instructors.

More information about Pedal can be found on its own page: https://pedal-edu.github.io/