Welcome! This is the website for Lindsey Kuper’s Winter 2020 edition of CSE30 (“Programming Abstractions: Python”), a lower-division undergraduate course in the Computer Science and Engineering Department at the UC Santa Cruz Baskin School of Engineering. For more information, read the rest of this page, then check out the schedule of topics.

Course staff


Lindsey Kuper

Hi, I’m Lindsey Kuper! (Call me “Lindsey”.)

  • Email: lkuper@ucsc.edu
  • Office location: Engineering 2, Room 349B
  • Winter 2020 office hours: Mondays 1-2pm, Wednesdays 11am-noon
  • Research areas: Programming languages, distributed systems, parallelism, concurrency, verification

If you want to meet with me, the best way to do that is during office hours. Feel free to ask questions about anything you want at office hours, whether it’s related to this course or not. Or just come to see the pretty flowers.

Lindsey’s office hours policy: If you show up at office hours and people are already there, come right in! Don’t just wait outside in the hall. You can either join the conversation in progress, or hang out in my office until I get to talk to you. And it might turn out that someone else had the same question as you (this happens a lot). If you need to speak to me confidentially about a private matter, let me know when you arrive, and we can arrange to speak privately. (I got the idea for this approach to office hours from Philip Guo.)

Teaching assistants

Four grad student TAs are here to support your learning in this course! The TAs will teach sections and hold office hours.

Ravina Gelda

Ravina Gelda

  • Email: rgelda@ucsc.edu
  • Sections: CSE30-01G (Wednesday, 4:00-5:05pm), CSE30-01B (Thursday, 8:00-9:05pm)
  • Office hours: Fridays, 1-2pm, Baskin Engineering, Room 151

David Lang

David Lang

  • Email: yilang@ucsc.edu
  • Sections: CSE30-01H (Wednesday, noon-1:05pm), CSE30-01D (Friday, 4:30-5:35pm)
  • Office hours: Thursdays, 12:00-1:00pm, Baskin Engineering, Room 153A

Abhay Pande

Abhay Pande

  • Email: abpande@ucsc.edu
  • Section: CSE30-01F (Monday, 4:00-5:05pm)
  • Office hours: Tuesdays, 3-5pm, Baskin Engineering, Room BE-153A

Andy Port

Andy Port

  • Email: aaport@ucsc.edu
  • Sections: CSE30-01A (Tuesday, 8:00-9:05pm), CSE30-01C (Thursday, 2:00-3:05pm)
  • Office hours: Mondays, 12:45-1:45pm, Engineering 2, Room 209

Group tutors

Nine undergrad group tutors are also here to support your learning! They’ll hold group tutoring sessions to help you understand the course material. Most of them are undergrads who took the course previously and did well, and they’re equipped to help you do the same.

Andre Assadi

Andre Assadi

  • Email: anassadi@ucsc.edu
  • Tutoring sessions:
    • Mondays/Wednesdays: 4-6pm, McHenry 3360
    • Fridays: 10am-noon, McHenry 3360

Terry Guan

Terry Guan

  • Email: teguan@ucsc.edu
  • Tutoring sessions: Tuesdays/Thursdays, 1-3pm, McHenry 4364

Noor Haider

Noor Haider

  • Email: mnhaider@ucsc.edu
  • Tutoring sessions: Mondays/Wednesdays/Fridays, 4-6pm, College Nine Namaste Lounge (jointly with Maxwell Kunes)

David Klopukh

David Klopukh

  • Email: dklopukh@ucsc.edu
  • Tutoring sessions: Mondays/Wednesdays, 4-6pm, Crown Library (jointly with Xin Yan)

Maxwell Kunes

Maxwell Kunes

  • Email: mkunes@ucsc.edu
  • Tutoring sessions: Mondays/Wednesdays/Fridays, 4-6pm, College Nine Namaste Lounge (jointly with Noor Haider)

Michelle Kwong

Michelle Kwong

  • Email: mkwong6@ucsc.edu
  • Tutoring sessions: Tuesdays/Thursdays, 1:30-4pm, College Ten Rec Lounge

Vela Rajesh

Vela Rajesh

  • Email: sirajesh@ucsc.edu
  • Tutoring sessions: Tuesdays/Thursdays, 5-9pm, College Nine Namaste Lounge

Jessalyn Wang

Jessalyn Wang

  • Email: jwang456@ucsc.edu
  • Tutoring sessions: Tuesdays/Thursdays/Saturdays, 1-3pm, Crown Library

Xin Yan

Xin Yan

  • Email: xyan87@ucsc.edu
  • Tutoring sessions: Mondays/Wednesdays/Fridays, 4-6pm, Crown Library (jointly with David Klopukh on Mondays/Wednesdays)


  • All ten colleges represented!
  • Around fifteen different majors represented! Nice!

A few essential details about the course


Section attendance is optional, but the sections are the place to go if you need help with your work. Sections are taught by the TAs.

You should feel free to attend any section, not just the one you happen to be enrolled in (subject to seating availability).

Some sections are held in computer labs, where you can work on the class using the computers there; the rest are held in a classroom, and you will need to bring your own laptop to be able to work on the assignments. Here are the available sections to choose from:

Section Day Time Location Lab? TA
CSE30-01F Monday 4:00-5:05pm Physical Sciences 136 No Abhay
CSE30-01A Tuesday 8:00-9:05pm Baskin Engineering 109 Yes Andy
CSE30-01H Wednesday noon-1:05pm Physical Sciences 136 No David
CSE30-01G Wednesday 4:00-5:05pm Physical Sciences 136 No Ravina
CSE30-01C Thursday 2:00-3:05pm Ming Ong Computer Lab at Merrill College Yes Andy
CSE30-01B Thursday 8:00-9:05pm Baskin Engineering 109 Yes Ravina
CSE30-01D Friday 4:30-5:35pm Ming Ong Computer Lab at Merrill College Yes David

There was originally a CSE30-01E section (Thursday 11:40am-12:45pm), but it’s been cancelled. If you were enrolled in that section, please attend one of the others listed above (and thank you for your understanding and flexibility!).

Official course description

Introduction to software development in Python focusing on structuring software in terms of objects endowed with primitive operations. Introduces concepts and techniques via a sequence of concrete case studies. Coursework consists of programming assignments and a final examination.

(In our case, the part about the final exam is a lie.)

Background you’ll need

This is the second course in the new CSE lower-division programming sequence; before taking this course, you should have taken and passed (or tested out of) an introductory Python course such as CSE 20, or your self-study of Python should be sufficient to have passed the CSE 20 testout exam.

What will we do in this course?

The goal of this course is to introduce you to basic techniques for solving lots of programming problems common in computer science. The approach we will take is to consider what objects are useful for representing a problem, what operations can be defined on those objects, and what mathematical properties those operations should have. For more specifics on the material we’ll cover, take a look at the schedule.

All the programming work we do in this course will be done in Python, using Jupyter notebooks. A notebook is an interactive document that can contain live code (in Python and other languages, although we’ll only be using Python), narrative text, visualizations, and equations. Jupyter notebooks are incredibly widely used in industry and research.

In particular, we’ll be using the Google Colaboratory (“Colab” for short) hosted notebook environment. This approach has several advantages: there’s nothing to install or maintain on your computer, you can work from any machine with an internet connection, your work is automatically saved and backed up in Google Drive, and if you want to share your in-progress homework with the course staff, all you have to do is share a URL with them, and they’ll see exactly what you see.

If you don’t want to use a proprietary Google product, you can also install Jupyter Notebook locally and do the homework that way, but you do so at your own risk and inconvenience. I’m sympathetic to not wanting to use Google products, but the course staff cannot help you debug issues with your local Python environment (a non-issue if you use Colab), and you won’t get the peace of mind that comes with automatic backups.


  • Lecture attendance: 5%
  • Participation: 5%
  • Homework assignments: 90%

We will not have midterm exams or a final exam in this course.

Lecture attendance will count towards 5% of your grade. Attendance will be taken in class via QR codes displayed on the projection screen. These QR codes lead you to forms where you can register your attendance (and provide feedback about the class). Thus, you need a mobile device with a camera. We will excuse up to three absences without need for justification, and more as appropriate with valid justification.

Participation is another 5% of the course grade. (Just showing up to lecture doesn’t count as participation in and of itself.) We evaluate participation in a holistic way, including participation in lectures and sections (i.e., speaking up often enough to make an impression on course staff), in office hours, in tutoring hours, on Piazza (answering your classmates’ questions well, and/or asking good questions), and beyond. You do not have to participate in all these ways to get full participation credit, but if you participate in none or almost none of them, don’t expect to get much participation credit.

Late homework policy

We will not accept late homework. The homework is graded automatically in large part, and we cannot accept late homework; we don’t have a way to grade it. (Thus you should turn in however much you have done by the deadline, even if it’s only partially complete.)

Collaboration policy

All the homework you turn in for this course must be your own, independent work. You can ask the TAs and tutors for advice, but you cannot copy from others: once you understand the concepts, you must write your own code. While you work on your own solution, you can:

  • Discuss with others the general techniques involved (without sharing your code with them).
  • Use the Python documentation, and any other public website. If you use code you find elsewhere, properly attribute it (using a comment with the full URL). For example, if you use code from (say, for example) https://stackoverflow.com/questions/952914/how-to-make-a-flat-list-out-of-list-of-lists, you should cite that entire URL in a comment. Don’t just leave a comment saying “I got this from Stack Overflow”.

You cannot:

  • Copy from password-protected sites, such as homework exchange sites.
  • Share the homework notebooks that are provided to you with anyone other than the course staff.

Course expectations

In addition to standard expectations like “come to lecture” and “don’t cheat”, I have the following expectations of all students who take this course. (This list of expectations is based on David Evans and Mohammad Mahmoody’s Course Pledge for their fall 2017 CS2102: Discrete Math course at the University of Virginia.)

  • I will do what I can to help my fellow classmates learn. Except when specifically instructed not to, this means that when other students ask me for help, I will attempt to provide it. I will look at their work and discuss what I think is good or bad about it. I will help others improve their work, but will not give them my answers directly or share code with them. I will try to teach them what they need to know to discover solutions themselves.

  • I will ask for help. I will make a reasonable effort to do things on my own first, but will ask my classmates or the course staff for help before getting too frustrated. There are many ways to ask for help, including office hours and Piazza.

  • I grant the course staff permission to reproduce and distribute excerpts from my homework submissions for teaching purposes. I may opt out of this by adding a comment to my code, but without an explicit opt-out comment, the course staff will assume I agree to it. My work will be attributed when it is shown in a positive way. If it is used to illustrate common pitfalls or other issues, it will be shown anonymously.

  • I will provide useful feedback. I realize that this is a relatively new course, and it is important that I let the course staff know what they need to do to improve the course. I will not wait until the end of the course to make the course staff aware of any problems. I will provide feedback either anonymously or by contacting the course staff directly. I will fill out all requested surveys honestly and thoroughly.

What should I do if I’m struggling in this course?

Talk to the course staff right away! Tell us what you’re having trouble with; it’s our job to help. Ask questions in lecture, in sections, in office hours, in tutoring sessions, and/or on Piazza. Keep coming to class, keep turning in the homework (again, turn it in even if it’s only partially done!), and continue to make a good-faith effort to succeed in the course. Do not wait until the last minute to come talk to us; do not assume that you can catch up later if you fall behind. Later course material builds on earlier course material, so if you become lost, it will be hard to catch up unless you come talk to us, but a few minutes at office hours can save you hours of frustration later.

Modified Supplemental Instruction

Learning Support Services is supporting this course with Modified Supplemental Instruction (MSI). Our Learning Assistant is Dane Cross.

Dane will be holding MSI sessions at the following times and places:

  • Monday 10:40-11:40am, Social Sciences II, room 137
  • Monday 12-1pm, Crown 104
  • Wednesday 4-5pm, Crown 105
  • Friday 1:20-2:20pm, ARCenter room 202

Please reach out to Dane or the LSS staff if you would like more information about MSI.

Disability accommodations

If you have a disability and you require accommodations to achieve equal access in this course, please submit your Accommodation Authorization Letter from the Disability Resource Center (DRC) to me using this confidential form. I am eager to discuss ways we can ensure your full participation in the course.

I encourage all students who may benefit from learning more about DRC services to contact the DRC.


This course is based on Luca de Alfaro’s CSE 30 course design, and the course materials are based on those that he created for his fall 2019 version of the course. (That said, I take full responsibility for my own course, so if you don’t like the design of this course, you should complain to me, not Luca.)