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
Th
Apr 1
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 : Scheme/Racket basics
M
Apr 5
class 3

Algorithmic and image decomposition

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


Tu
Apr 6
class 4

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
Apr 7
class 5

Expressions and types

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



F
Apr 9
class 7

Pause for breath

We take some time to review concepts and catch up.

Reading
  • No reading
Lab
  • No lab
Week 2 : A miscellany
M
Apr 12
class 8

Pair programming

We explore the whys and hows of working with others. We also catch up on any confusing issues from the first week of class as we prepare for the first set of learning assessment.


Tu
Apr 13
class 9

First set of learning assessments

We check in to make sure that we’re beginning to master the first set of concepts.

Reading
  • No reading
Lab
  • No lab
Due
  • First set of LAs

W
Apr 14
class 10

Lists

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


Th
Apr 15
class 11

Lists, revisited

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


F
Apr 16
class 12

Regular Expressions

We begin to explore regular expressions, tools used to identify patterns in strings.

Week 3 : Software design / Thinking recursively
M
Apr 19
class 13

Local bindings

We consider why and how to name values within procedures.


Tu
Apr 20
class 14

Documenting your code

We consider documentation for your programs: Why to write documention, when to write documentation, how to write documentation. We also explore various styles of documentation that we use in this course.


W
Apr 21
class 15

Testing with Rackunit

We consider testing: When, why, and how you might test the procedures and programs that you write.


Th
Apr 22
class 16

Introduction to 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.


F
Apr 23
class 17

Class Cancelled

Reading
  • No reading
Lab
  • No lab
Week 4 : Recursion, continued
M
Apr 26
class 18

Recursive skeletons, Lists and Numbers

We explore some basic patterns of list recursIon.


Tu
Apr 27
class 19

Second set of learning assessments

We check in to make sure that we’re beginning to master the second set of concepts. We revisit concepts missing from the first learning assessment inventory.

Reading
  • No reading
Lab
  • No lab
Due

W
Apr 28
class 20

Tail Recursion

We consider a particular kind of recursion that tends to lead to more efficient code.


Th
Apr 29
class 21

Higher-order recursive Design

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


Week 5 : Stateful programming
M
May 3
class 22

Randomness

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


Tu
May 4
class 23

Pairs and Vectors

We explore pairs, the basic building blocks of lists, and consider other, non-list structures one might build from pairs.
We also explore vectors, an alternative to lists for storing data. We consider how data are stored in memory.


W
May 5
class 24

Dictionaries and hash tables

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


Th
May 6
class 25

Third set of learning assessments

We check in to make sure that we’re beginning to master the third set of concepts. We revisit any missing concepts from earlier assessments.

Reading
  • No reading
Lab
  • No lab

Week 6 : Structuring data
M
May 10
class 26

Trees

We consider a common hierarchial mechanism for structuring data and its relationship to Scheme/Racket and XML/HTML.


Tu
May 11
class 27

Tree recursion

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


W
May 12
class 28

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.


Th
May 13
class 29

Sorting

We explore the problem of sorting. When you sort a list, vector, or other collection, you put the elements in order. The order of the elements usually corresponds to the type of the elements. We might sort strings alphabetically, grades numerically, colors by brightness, and so on and so forth. We also reflect on one common sorting algorithm.


F
May 14
class 30

Case study: Insertion Sort

We continue our exploration of sorting by considering the applicability of the divide-and-conquer approach to the problem of sorting. We look at one particular divide-and-conquer algorithm, insertion sort. We explore the relationship between the number of steps the algorithm typically takes and the number of values in the list we are sorting.

Due
Week 7 : Sorting and such
M
May 17
class 31

Fourth set of learning assessments

We check in on the last set of topics and revisit any necessary topics from earlier in the term.

Reading
  • No reading
Lab
  • No lab

Tu
May 18
class 32

Case study: Mergesort

We continue our exploration of sorting by considering the applicability of the divide-and-conquer approach to the problem of sorting. We look at one particular divide-and-conquer algorithm, merge sort. We explore the relationship between the number of steps the algorithm typically takes and the number of values in the list we are sorting.


W
May 19
class 33

Th
May 20
class 34

Open Office Hours

This class is an optional class in which you can come ask questions..

Reading
  • No reading
Lab
  • No lab

F
May 21
class 35

Reading day

No class!

Reading
  • No reading
Lab
  • No lab
Finals (Half-)Week
M
May 24
class 36

Last set of learning assessments (optional)

We have one more opportunity to check our learning.

Reading
  • No reading
Lab
  • No lab
Due
  • Final MP 3 Redo (costs a token)
  • Final MP 4 Redo (costs a token)
  • MP 5 Redo
  • Last chance for LA redos
Summer Break