CSC 232, Winter 2026
1 Welcome!
2 Names, Times, Locations
2.1 Instructor
2.2 Lecture & Lab
2.3 Office Hours
2.4 Web Page
3 Team Submissions
4 Lecture Classroom
5 Diversity and Inclusivity
6 Computing Environment
7 Readings
8 Communication
9 Honesty
9.1 If it is late and you are desperate
10 Generative AI
11 Labs
12 Assignments
13 Grading Code
13.1 Grading code in 430
14 Quizzes and Exams
15 Grades
16 Checking your Grade
17 Canvas
9.0

CSC 232, Winter 2026🔗

1 Welcome!🔗

Okay, so here we are! Let me first say: thanks for reading this! I’m grateful.

The goal of this course is to give you the programming skills you’ll need in your careers, or as close as we can get in a few hours a week over a ten-week quarter. It will focus on general principles of programming, while still getting the chance to read, write and run actual programs.

At the end of this course, you should be able to
  • Read problem statements and decide whether you can write a program to solve them,

  • Map problem elements to Pyret and Python types and values,

  • Write simple functions that operate on those values, and

  • Break down somewhat larger problems into smaller ones.

This course requires Math 118, which is described, approximately, as "pre-calculus algebra without trigonometry".

2 Names, Times, Locations🔗

2.1 Instructor🔗

  • John Clements, clements@calpoly.edu

2.2 Lecture & Lab🔗

Section 01/02 (Clements):

  • Lecture: 14:10–15:00, MWF, room 14-301

  • Lab: 15:10–16:00, MWF, room 14-301

2.3 Office Hours🔗

2.4 Web Page🔗

This is the course web page, its link is https://www.brinckerhoff.org/clements/2262-csc232/.

3 Team Submissions🔗

This quarter, we’re planning to be working in teams of two. We’ll be forming the groups with the input of surveys that you complete, and a large dose of random-number-generator.

If you already know another person in the course that you want to work with, you’ll have an opportunity to specify that in the team formation survey. We want to help you to work with the person that will help you learn.

There may be some of you that have no desire to work in a pair. That’s fine, and we’re happy to grade your work individually. However, we do want to know this in advance. If you want to work individually, specify that on the pair formation survey.

For the rest of you, that are interested in working in pairs, we’ll require you to submit your assignments as part of your pair, as specified in the handin instructions below. Note that some coordination on your part is probably a good idea; if Pat and Alex are on the same team but not in contact with each other, it might be that Alex submits after Pat, but Pat doesn’t know it, and is surprised later to discover that the graded assignment isn’t the one that they expected.

4 Lecture Classroom🔗

I think that an interactive and lively classroom is a better learning environment. In particular, I will almost certainly learn everyone’s name, and I’m likely to notice if you’re missing. My experience is that if you come to class reliably, you’re extremely likely to pass the class—there’s a reason that we conduct classes face-to-face; it keeps you engaged, and ensures that you’re connected to the other students in the class.

In addition, I’m likely to call on you, in places during the lecture where I want to see if you’re following what’s going on. If you don’t know, it’s totally fine to say "no, I have no idea." In particular, this is probably evidence that I’m going too fast or not explaining things well. However, I try to respect the wishes of students for whom this technique is disruptive. Please let me know if you don’t want me to call on you.

Finally, my experience standing in front of classes and more especially my experience of sitting behind classes has convinced me that laptops are useful for note-taking in approximately 1% of cases. Essentially, never.

Indeed, there’s now a mountain of evidence indicating that laptops are distracting to students and to those around them, and that even when these distractions are eliminated, taking notes on laptops fails to create learning in effective ways. I’ll just cite this one paper, because it’s got copious references to other sources.

For this reason, I do not allow the use of laptops in class without special dispensation. If you need to use a laptop to take notes, please come and talk to me; otherwise, just put it away and take notes on paper.

5 Diversity and Inclusivity🔗

Diversity and Inclusivity have many components. Here are just a few of them.

  • First and foremost, our classroom must respect ways of being that are different from our own. We all have biases, both implicit and explicit (dynamic scope! Grr, I hate it!) and our job is to try to be aware of our own biases and try to prevent those biases from preventing people in our course from learning and participating.

  • Second, diversity is not just an obstacle, it’s an opportunity. As we will hopefully discover, programming languages are first and foremost about human interfaces: what are the best ways for us to express programs? In this context, diversity is crucial: when languages are all designed by a particular kind of person, the results are really useful ... but only for that particular kind of person.

  • Third, one of the most important components of a viable learning environment is that you feel like you belong, and that you are valued. We are a learning community, and it is not my course, it’s our course. I try to conduct the orchestra, but you’re the ones that are both playing and listening to the music. I have expectations about your contributions to the course, and it’s incumbent on me to shape those contributions to try to create a good learning environment for all of us.

6 Computing Environment🔗

Some of the assignments in this course will be completed using Pyret, available online at https://code.pyret.org.

Later assignments will be completed using Python.

7 Readings🔗

The majority of the readings in this course will be from A Data-Centric Introduction to Computing, by Shriram Krishnamurthi.

8 Communication🔗

This class will use EdStem. This will be the principal means that I’ll use to notify you of deadlines, organizational updates, and changes to assignments. If you’re not keeping up with the group, you’re going to be missing important information.

It’s also the best way for you to direct questions to me and/or the class. Feel free to e-mail me with personal questions, but use the EdStem group as your main means of communication. It’s possible to post anonymously, if you like.

You should already have received an invitation to the EdStem group; let me know if you need an invite.

Don’t post your code or test cases to the group; anything else is fair game.

Also, please keep in mind that I (and everyone else) judge you based in part on your written communication. Spelling, complete sentences, and evidence of forethought are important in all of your posts & e-mails. One easy rule of thumb: just read over what you’ve written before clicking post or send, and imagine others in the class reading it.

9 Honesty🔗

We strongly encourage collaboration among students in almost every aspect of the course. See, for example, the following section on "Labs", which are designed for collaboration.

One exception is for quizzes and tests, which must be entirely your own work.

The other exception is for programming assignments: you may not copy another team’s code, not even test cases. You are also responsible that no other teams see your code, either during this course or afterwards, either deliberately or through negligence (e.g. via a non-private repo).

A very effective automated tool will review submissions for evidence of copying. Students believed to be cheating, i.e. both parties involved in a transfer of code, will in the first instance typically receive a 0 score for the assignment, and an additional unspecified penalty on the quizzes and tests that follow, often about 10%. We reserve the right to assign a failing grade in the class when appropriate.

Please note that the baseline score for assignments that you DON’T HAND IN AT ALL is typically about 15%. Plagiarism will result in sacrificing that 15% baseline. This means that copying code is likely to produce a score that is lower than doing nothing at all.

9.1 If it is late and you are desperate🔗

Please submit what you have. You will get partial credit, even if the handin server says "handin failed". It is way better to submit something terrible that is your own work than to submit someone else’s code. It’s okay. Let’s talk about it. Keep in mind that I want you to succeed.

10 Generative AI🔗

So, have you noticed that whenever an administrator talks about AI, they immediately pivot to how awesome it will be to equip students with new AI skills that will help them get amazing jobs? Sigh.

The problem here is that generative AI, by and large, is like that jerk in class who knows all the answers and makes you feel like a loser; even when it’s giving you the right answer, it’s kind of snide and supercilious, and gives you the sense you should just get out of the way and let them do all the work. Bleah.

The AI policy in this course is this: I do not forbid the use of AI. However, there are a whole bunch of skills that this course is intended to give you, and you need to be able to do those things, without the use of AI, on quizzes and tests (and when talking to your boss at work).

For these reasons, I strongly suggest disabling the in-your-face just-let-me-write-that-for-you tools that VS Code is pushing; don’t copy the code, type it yourself.

Also, you will be expected to explain the choices you made in designing your code. If I ask you what a particular piece of code does, and your response is that you have no idea it’s just what gen-ai decided to put there, that’s not going to get you credit.

To bolster this: if the code you turn in for an assignment turns out to be hugely similar to another team’s code, you will get a zero for that assignment, even if the similarity is because both of you dumped the assignment text into a generative AI tool. Ugh, don’t do that.

11 Labs🔗

Labs in this course take the form of simple exercises to be completed in a week during lab periods, designed to help you understand the lecture material and to lead you toward solutions for the larger assignments.

We’ll be checking these off during the lab; you’re responsible for demo-ing your lab solutions for me. Your marks on these labs will be simple credit/no-credit.

The labs will be due at the end of your lab period on the day specified, typically Friday. If we run out of time to check them, we will generally elect to accept them during the following lab session, but you cannot rely on this occurrence; the labs are due on the day specified on the schedule.

In labs, you are heartily encouraged to collaborate like crazy. Look at everyone else’s code, copy and paste, type on your neighbor’s keyboard, whatever. Labs need not be entirely your own work.

When you successfully demonstrate a lab, I will give you a number. You may enter these numbers at https://handin-1.brinckerhoff.org/servlets/standalone.rkt (also linked from the top of this page).

12 Assignments🔗

Programming assignments will be due at 10:00 PM. You must submit programming assignments using Gradescope.

From time to time, we may examine student code in lecture. Try to ensure that the code you submit is something you’d be proud to show to the others in the class.

Late Policy: Except for exceptional circumstances, late assignments will be given 0 points.

13 Grading Code🔗

I will be grading your code repeatedly in this class. On most assignments, you will receive a score of 0, 1, 2, 3, or 4 on an assignment. A score of four means that you did a good job, that things look generally good, and that your code passes most or all of my tests. A score of three means that your code has some problems, but seems broadly in line with the assignment requirements. A score of two suggests serious problems, and a score of zero or one means that your code was seriously broken, that you missed most of the assignment, or perhaps that you turned in nothing at all.

Under certain circumstances, it may be possible to re-submit assignments for an improvement of up to two points on that assignment.

13.1 Grading code in 430🔗

For most of the assignments in this class, I’ll expect to see these things at the top, in this order:
  • Types and Data Structures,

  • the definition of top-interp,

  • the definition of interp, and

  • the rest of the program.

Per the style guide, please don’t follow the "one closing brace per line" style that’s common in Java and C; your Racket code will be reasonably deeply nested, and this convention causes such programs to consume huge amounts of vertical space.

14 Quizzes and Exams🔗

My experience suggests that frequent quizzes are a good way to ensure that you’re understanding what I’m teaching, and that I’m teaching things that you understand.

This class will have quizzes on Wednesdays, probably during the first six or seven weeks of the class. These quizzes will probably be fifteen minutes long, and will probably take place during lab.

There will be a midterm and a final exam in the course. The midterm will be during a lecture period in the sixth week of class. The quizzes will be open-note (paper notes only, let me know if you need help printing them out). On exams, you will be allowed a single double-sided page or two single-sided pages of notes.

Quizzes will be given during lab, unless otherwise specified.

15 Grades🔗

Grades will be determined by performance on programming projects, the exams, and class interaction. A small fraction of the grade is determined by the labs, and by the instructor’s whim. The breakdown of the grade is as follows:

  • Assignments : 20%

  • Quizzes : 20%

  • Midterm : 20%

  • Final : 25%

  • Labs : 10%

  • Wiggle Room: 5%

In addition, however, certain score combinations may guarantee a higher grade than would otherwise be computed. Specifically, if you earn at least an 85% on the Assignments, Quizzes, Midterm, Final, and Labs, I will guarantee you an A in the course. Similarly, if you earn at least a 75% on the Assignments, Quizzes, Midterm, Final, and Labs, I will guarantee you at least a B in the course.

16 Checking your Grade🔗

I like to share your current grade in the class with you. It usually takes me a few weeks to get this set up, but you should eventually be able to check your student grade at

https://users.csc.calpoly.edu/~clements/student-grades/<your-login>/current-grade.txt

That’s not a clickable link, because you’ll have to edit it to add your login. So, for instance, if your name is Annette Czernikoff and your login is aczernik@calpoly.edu, you’d put aczernik in the login spot.

17 Canvas🔗

I’m not a huge fan of Canvas. It’s a proprietary system, and it doesn’t fit well with the forms of automation that I like. Its API is kind of a mess.

With that said, there are certain affordances that Canvas provides. The most important of these is handin deadlines. I will make a concerted effort to make sure that Canvas deadlines match those on the actual course schedule, in order to allow you to coordinate your life in a reasonable way.