Schedule

The schedule below shows the tentative dates for all class topics, readings, and major assignments (MPs and SoLAs). You should complete all assigned readings by 10 p.m. on the night before the class in which they are listed. You should complete all lab writeups before the next class session. You can find the full list of due dates on Gradescope.

Due dates for major assignments will not change. However, the particular topics we cover each day may change as we discover that we need more (or less) time on each topic.

If the title of a class session is blue, you should be able to click on it to view the eboard for that class session.

If you view this page with JavaScript enabled you can jump to the current week on the schedule, and you should see the next day of class highlighted in the schedule below.

Week 0 : Preliminaries
F
Aug 28
class 1

An introduction to algorithms

We begin the class by exploring the definition of computer science and by trying to write some basic algorithms.

Reading
  • No reading
Lab
  • No lab
Week 1 : Preliminaries


W
Sep 2
class 3

Reading and writing procedures

We consider ways to write your own procedures and why you might do so. We also explore how one interprets the algorithms others write. And we develop some mental models for what happens when we run Scheme/Racket programs.


F
Sep 4
class 4

RGB colors

We explore one of the basic color models used by computers.

Due
  • LA 1 (Decomposition)
  • LA 2 (Procedural Abstraction)
Week 2 : Fundamentals of Scheme programming
M
Sep 7
class 5

Labor Day

We take a day off from class to celebrate the value of union labor.

Reading
  • No reading
Lab
  • No lab

W
Sep 9
class 6

Computation via expressions

We look at the fundamental building block of computation in functional programming languages, the expression, and build an appropriate model of how expressions “compute”.


F
Sep 11
class 7

Function composition and image transformation

We expand our understanding of RGB transformations to image transformations.

Week 3 : Models of computation
M
Sep 14
class 8

Transforming images, revisited

We continue our explorations from the previous class.



W
Sep 16
class 9

Expressions and types

We explore many of the basic types of values in Scheme, the capabilities Scheme provides for working with those types, and how one builds more complex expressions. We also continue building our mental model.


F
Sep 18
class 10

Characters and strings

We explore the ways in which we represent text in Scheme, including both strings and the characters we use to build strings.

Due
  • LA 4 (Lambda-free anonymous procedures)
Week 4 : A miscellany

W
Sep 23
class 12

Booleans, predicates, and conditionals

We consider how one writes procedures that make decisions.


F
Sep 25
class 13

Lists

We return to Scheme’s list data structure and some ways to use lists to work with collections of data.

Due
  • LA 5 (Collaboration)
  • LA 6 (Conditionals)
Week 5 : Thinking with lists
M
Sep 28
class 14

Processing lists

We explore ways to use lists to work with collections of drawings using “the big three” list procedures: map, reduce, and filter. We also consider other ways of processing lists, particularly how we sort lists and tally individual values in lists.


Tu
Sep 29
 
Due
  • MP2

W
Sep 30
class 15

Other ways to build lists

We continue our exploration of lists through some “finer-grained” operations.


F
Oct 2
class 16

Ethical considerations in computing

Now that we’ve spent some time exploring various issues in computing, we take a step back and consider problems of ethical computing with seasoned programmer-eyes. As newly-informed citizens, what must we be aware of with respect to ethics in computing?

Week 6 : Another miscellany
M
Oct 5
class 17

Software engineering fundamentals

We consider the trifecta of software engineering: documentation, testing, and debugging. That is, we explore why and how you document your code, why and how you test your code, and how you might find errors in your code.


W
Oct 7
class 18

Introduction to list recursion

We begin our exploration of recursion, the most general form of repetition available in Scheme. You can use recursion to both build and iterate over different kinds of values.

Lab
  • No lab

F
Oct 9
class 19

Local bindings

We explore issues of redundacy in code and mechanisms for reducing such reducnancy.

Due
  • LA 9 (Documentation)
  • LA 10 (Testing)
Week 7 : Introducting recursion
M
Oct 12
class 20

Introduction to list recursion, continued

We continue our introductory exploration of recursion in Scheme.


Tu
Oct 13
 
Due
  • MP3

W
Oct 14
class 21

Recursion practice

We continue to continue our introductory exploration of recursion in Racket.


F
Oct 16
class 22

Pause for breath

We pause to reflect on various recursion issues.

Reading
  • No reading
Lab
  • No lab
Due
  • LA 11 (List recursion)
  • LA 12 (Local bindings)
Fall Break
Week 8 : Expanding our notions of recursion
M
Oct 26
class 23

Recursion over numbers

We consider a slightly different kind of recursion, numeric recursion. In this technique, we once again have procedures call themselves. However, the parameter that we “simplify” at every step is a number, rather than a list.


W
Oct 28
class 24

Pairs

We explore pairs, the basic building blocks of lists, and consider other, non-list structures one might build from pairs.


F
Oct 30
class 25

Vectors

We explore vectors, an alternative to lists for storing data. We consider how data are stored in memory.

Reading
Due
  • LA 13 (Numeric recursion)
Week 9 : Thinking with data
M
Nov 2
class 26

Vectors, continued

We continue to explore vectors.

Reading
  • No reading

Tu
Nov 3
 
Due
  • MP4

W
Nov 4
class 27

Randomness

We consider Scheme’s random procedure and how one might use that procedure in generating images.


F
Nov 6
class 28

Dictionaries and hash tables

We consider structures that allow us to store information for quick retrieval.

Due
  • LA 14 (Vectors)
  • LA 15 (Diagramming structures)
Week 10 : More thinking with data
M
Nov 9
class 29

Data abstraction

We build upon the structures we have encountered so far to design our own types and reflect on mechanisms for separating the interface to a type from the implementation of the type.


W
Nov 11
class 30

Structured data

We consider Racket’s techniques for creating structured data types.

Topics: Structured data. Using structs. Mutable and immutable structs.


F
Nov 13
class 31

Higher-order recursive design

We explore patterns of recursion in the design of programs, particularly with regards to higher-order procedures.

Due
  • LA 16 (Randomness)
  • LA 17 (Dictionaries)
Week 11 : Abstracting data
M
Nov 16
class 32

Tail recursion

We continue to stretch our brains with recursive thinking. In particular, We consider tail recursion, an advanced version of recursion that is ubiquitous in functional programming.


Tu
Nov 17
 
Due
  • MP5

W
Nov 18
class 33

Project kickoff

We introduce the final project for the semester.

Lab
  • No lab
Assigned
  • MP6 (final project)

F
Nov 20
class 34

Trees

We consider a common hierarchial mechanism for structuring data and how to realize it in Scheme.

Reading
Due
  • LA 18 (Randomness)
  • LA 19 (Data abstraction)
Week 12 : Yet another miscellany
M
Nov 23
class 35

Tree recursion

We consider how to write recursive programs that process trees and other tree-like structures.


W
Nov 25
class 36

Project work day

We provide class time for students to their projects.

Reading
  • No reading
Lab
  • No lab
Thanksgiving Break
Week 13 : Binary trees
M
Nov 30
class 37

Project work day

More class time to work on projects.

Reading
  • No reading
Lab
  • No lab

W
Dec 2
class 38

Pause for breath

Perhaps a space for shifting topics. Perhaps a project work day.

Reading
  • No reading
Lab
  • No lab

Th
Dec 3
 
Due
  • MP6 (final project)

F
Dec 4
class 39

We explore techniques for analyzing the number of calls made in evaluating procedures, particularly recursive procedures. We consider why such analysis is useful. We then delve into a common problem: That of finding values in a collection.

Week 14 : Wrappping up
M
Dec 7
class 40

Project presentations

Students present their projects

Reading
  • No reading
Lab
  • No lab

W
Dec 9
class 41

Case study: Sorting

We ground our exploration of sorting in some details.


F
Dec 11
class 42

Wrapup

We conclude the course.

Reading
  • No reading
Lab
  • No lab
Finals Week
W
Dec 16
 
Due
  • Final Exam (2–5pm), Section 1

F
Dec 18
 
Due
  • Final Exam (9am–noon), Section 3
  • Final Exam (2–5pm), Section 2
  • Everything remaining due by 5pm!
Winter Break