Introduction to Programming

Introduction to Programming

Programming is magic, a very practical kind of magic you can make use of in art, science, business or whatever other activity interests you. This course teaches you how to read and write the structured code and data languages that can machines understand. It also teaches you how to use these language skills to tell a computer what to do and to figure out what it actually did (these are rarely the same thing on the first try!). You'll be writing programs in the Java language by the end, but you'll see a broad family of useful little languages along the way.

Lecture: Attendance is optional outside of scheduled exams, but you won't want to miss exciting interactive demonstrations and guest speakers.

Lab: Attendance in your assigned lab section is required. You'll follow TA-guided hands-on activities. You can use the machines in the lab if needed, but it's best to use our own laptop.

Homework: The bulk of the raw material of this class will come from interacting with the CodeHS website. You'll also get exposure to computing culture and draw connections to current events through readings (often in the form of videos or webpages).

Textbook: None required! If you like learning from books, we can recommend this one:

Course Staff & Office Hours


Adam Smith (Please call me "Adam" or "Professor Smith")

Office hours: Wednesdays 4pm-5pm and Thursdays 11am-noon in E2-269.

Teaching Assistants:

Dhawal Joharapurkar  [Monday labs] [Office Hours: Wednesdays 10am-11am in Graduate Student Commons (entry door next to Cafe Ivéta in the Quarry Plazza) Room 206]

Kenneth Chang  [Tuesday labs] [Office Hours: Thurs. 1-2PM in Baskin Engineering 119]

Lee Taber  [Wednesday labs] [Office Hours: Monday 1:30-2:30 in Social Sciences 2 305]

Abdul Jawad  [Thurdsay labs] [Office Hours: Thursday 7:00-8:00 PM in BE, Room 119]

Tiffany Thang  [Friday labs] [Office Hours: Wednesday 11:00AM-12:00 PM in Engineering 2 309]

Batu Aytemiz  [TA Team Lead]


Mondays, Wednesdays, and Fridays, 2:40pm-3:45pm, Classroom Unit 2

Grading Policy

  • CodeHS Homework: 35%
  • Reading Homework: 10%
  • Lab Activities: 20%
  • Midterm Exam: 15%
  • Final Exam: 20%

The mapping from scores to letter grades will be determined by a discussion among the course staff at the end of the quarter, taking into account the overall distribution of scores for students in this experimental iteration of the course.

Late work policy: Reading and CodeHS homework may be submitted/completed late for full credit up until 8am on Monday of Finals week. No late work on CodeHS past this point will be considered. Missed labs may be made up in TA office hours or in another lab section with specific TA permission for half credit. Exams may not be retaken to improve your scores.

Disability Resources

UC Santa Cruz is committed to creating an academic environment that supports its diverse student body. If you are a student with a disability who requires accommodations to achieve equal access in this course, please submit your Accommodation Authorization Letter from the Disability Resource Center (DRC) to me privately during my office hours or by appointment, preferably within the first two weeks of the quarter. At this time, I would also like us 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 DRC by phone at 831-459-2089, or by email at

Academic Honesty

The Baskin School of Engineering has a zero tolerance policy for any incident of academic dishonesty. If cheating occurs, consequences may range from getting zero on a particular assignment to failing the course. In addition every case of academic dishonesty is referred to the students’ college Provost, who sets in motion an official disciplinary process. Cheating in any part of the course may lead to failing the course, suspension or dismissal from the Baskin School of Engineering, or from UCSC.

For CodeHS and reading homework, you are encouraged to find classmates and work through the assignments in the same room. You are encouraged to talk through the problems and help one another understand the requirements. However, the free-form text you enter or multiple choice options selected should represent your own knowledge. During exams, you should work alone and not attempt to communicate with other students about the exam (even when stepping out of the classroom for a moment). The course staff present can clarify the requirements for you.

The course staff is intent on setting up the course with many opportunities for you to learn from your peers and to not create unnecessary situations that might trap you into academic dishonesty.

Lecture Notes

Webcast videos of each lecture will be available here: (username: cmps-5j-1 password: programming). Adam's Google Slides for each lecture will be posted below (ideally) before the beginning of each day's meeting.

L01: Course Introduction

L02: Computer Languages and Natural Languages

L03: Karel versus the Real World

L04: Programming in the Age of the Internet

L05: Digital Representations of Information

L06: Building Data with Code

L07: Above, Below, and Behind the Code and Data

L08: Sequences and Collections

L09: Tables and Grids

L10: Objects that Refer to Other Objects

L11: How to Succeed in this Course

Guest speaker: Joël Franusic

L12: Midterm Examination Preparation

L13: When you should write a program, and when not

L14: Programming != Computer Science

L15: Methods

L16: Building a Visual Drum Sequencer

L17: String Processing

L18: Teaching Methods

L19: Java's Keywords

L20: Object-oriented Programming

L21: A Java Program You'll Care About

L22: Final Review Part 1

L23: Final Review Part 2

L24: Course Recap

Course Summary:

Date Details