Schedule

The schedule below shows the tentative dates for all class topics, readings, and assignments. You should complete all assigned reading before class on the day it is listed. Labs will be available shortly before the assigned lab day. There may be some revisions to the schedule during the semester, but I will make sure to announce these changes in class.

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 25
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
Aug 30
class 3

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 1
class 4

Algorithmic decomposition

We consider a key technique in algorithmic thinking, how one “decomposes” a more complex problem or algorithm into simpler ones.

Week 2 : Fundamentals of scheme programming
M
Sep 4
class 5

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.


W
Sep 6
class 6

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 8
class 7

Booleans, predicates, and conditionals

We consider how one writes procedures that make decisions.

Week 3 : Computational pipelines
M
Sep 11
class 8

Lists

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


W
Sep 13
class 9

Computational pipelines

We continue our exploration of lists in Scheme, including “the big three” list procedures: map, fold, and filter.


F
Sep 15
class 10

Anonymous procedures

We explore ways to write procedures without using define (and, sometimes, without even using lambda). We also consider why we might do so.

Week 4 : Deep Breath
M
Sep 18
class 11

Collaborative problem solving

We explore the whys and hows of working with others, in particular, the pair programming techniques we use in this course.

Lab
  • (Presented in class!)

W
Sep 20
class 12

Randomness

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

Reading
  • (No required reading for today!)
Assigned
  • Pre-Metacognitive Assessment for Exam 1

F
Sep 22
class 13

Musical compositions

We introduce the musical composition features of Scamper as well as give a gentle introduction to music theory.

Assigned
  • Core Exam 1
Due
  • Pre-Metacognitive Assessment for Exam 1
Week 5 : Software engineering in the small
M
Sep 25
class 14

Software engineering fundamentals

We consider the trifecta of software engineering: documentation, testing, and debugging.


W
Sep 27
class 15

Local bindings

We explore the issue of redundacy in code: why is it bad? How can we use let-bindings to reduce redundancy?

Assigned
  • Post-Metacognitive Assessment for Exam 1
Due
  • Core Exam 1

F
Sep 29
class 16

Ethical considerations in computing

As we close the course, we take a step back from technical material and look at the problem of ethical computing with seasoned programmer-eyes. As newly-informed citizens, what must we be aware of with respect to ethics in computing?

Reading
  • No reading
Due
  • Post-Metacognitive Assessment for Exam 1
Week 6 : Thinking recursively
M
Oct 2
class 17

Thinking recursively

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.


W
Oct 4
class 18

Introduction to list recursion

We explore how to design recursive functions involving lists.


F
Oct 6
class 19

List motions

We continue to explore list recursion by examining how we use recursion to perform basic motions over lists.

Week 7 : Recursion, continued
M
Oct 9
class 20

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.

Assigned
  • Pre-Metacognitive Assessment for Exam 2
Due
  • Quiz 6 (2.5 List Recursion)

W
Oct 11
class 21

Higher-order Recursive Programming

We combine higher-order functions and recursive programming to implement the “big three” operations over lists.

Reading
  • (No required reading for today!)

F
Oct 13
class 22

Tail Recursion

We look at an advanced version of recursion that is ubiquitous in functional programming, tail recursion.

Assigned
  • Core Exam 2
Due
  • Pre-Metacognitive Assessment for Exam 2
Fall Break
Week 8 : Vectors and effects
M
Oct 23
class 23

Maps and association lists

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

Due

W
Oct 25
class 24

Vectors

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

Reading
Assigned
  • Post-Metacognitive Assessment for Exam 2
Due
  • Core Exam 2

F
Oct 27
class 25

Sequencing and effects

We examine mutable variables in Scheme and how we sequence these effectul operations in our code.

Due
  • Post-Metacognitive Assessment for Exam 2
Week 9 : Organizing data
M
Oct 30
class 26

Data abstraction and structured data

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 1
class 27

The Final Project (and Pre-Reg!)

We introduce the final project for the semester as well as wrap up the labs from this week.

Lab
  • No lab

F
Nov 3
class 28

The Final Project (continued)

We introduce the final project for the semester as well as wrap up the labs from this week.

Lab
  • No lab
Week 10 : Trees
M
Nov 6
class 29

Trees

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


W
Nov 8
class 30

Tree recursion

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


F
Nov 10
class 31

Project work day!

Reading
  • No reading
Lab
  • No lab
Week 11 : Audio signal processing
M
Nov 13
class 32

Waveforms and signals

We look at how sound is represented at a low-level in a computer program and how we might manipulate that representation.


W
Nov 15
class 33

Manipulating Waveforms

We investigate how to construct and manipulate waveforms.


F
Nov 17
class 34

Project work day!

Reading
  • No reading
Lab
  • No lab
Due
  • Quiz 10 (3.5 Tree Recursion)
Week 12 : Complexity
M
Nov 20
class 35

Complexity and runtime

We discuss how we measure the efficiency of code and explore the topic of algorithmic complexity and runtime.

Due
  • Quiz 11 (1.3 Tracing, 2.1 Code Style, 3.4 Diagramming Structures)

W
Nov 22
class 36

Project work day!

Reading
  • No reading
Lab
  • No lab
Thanksgiving Break
Week 13 : Algorithms
M
Nov 27
class 37

Case study: searching

We delve into a common problem: finding elements inside of a collection.


W
Nov 29
class 38

Case study: sorting

We dive into a related problem: sorting the elements of a sequence.


F
Dec 1
class 39

Project work day!

Reading
  • No reading
Lab
  • No lab
Week 14 : Wrap-up
M
Dec 4
class 40

Project work day!

Reading
  • No reading
Lab
  • No lab

W
Dec 6
class 41

Project presentations!

All groups present their final projects!

Reading
  • No reading
Lab
  • No lab

F
Dec 8
class 42

Wrap-up

We conclude the course with some final thoughts and reflection.

Reading
  • No reading
Lab
  • No lab
Finals Week
Winter Break