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

W
Sep 1
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.


F
Sep 3
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.

Week 2 : A miscellany
M
Sep 6
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
Sep 10
class 7

Pause for breath

We pause to review some concepts from our first week of programming.

Week 3 : Software design / Thinking recursively
M
Sep 13
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.


W
Sep 15
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

F
Sep 17
class 10

Lists

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

Week 4 : Recursion, continued
M
Sep 20
class 11

Lists, revisited

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


W
Sep 22
class 12

Regular expressions

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


F
Sep 24
class 13

Local bindings

We consider why and how to name values within procedures.

Week 5 : Stateful programming
M
Sep 27
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
Sep 29
class 15

Testing with Rackunit

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


F
Oct 1
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.

Lab
  • No lab
Week 6 : Structuring data
M
Oct 4
class 17

Introduction to list recursion, continued

We continue our introductory exploration of recursion in Racket.


W
Oct 6
class 18

Recursion practice

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

Reading
  • No reading

F
Oct 8
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
Week 7 : Sorting and such
M
Oct 11
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.


W
Oct 13
class 21

F
Oct 15
class 22

Recursion, expanded

We consider a host of other issues in the design of recursive procedures.

Reading
  • No reading
Fall Break :
M
Oct 18
class 23

Higher-order recursive design

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


W
Oct 20
class 24

Randomness

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


F
Oct 22
class 25

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.

Week 8 : ???
M
Oct 25
class 26

Dictionaries and hash tables

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


W
Oct 27
class 27

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.


F
Oct 29
class 28

Trees

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

Week 9 : ???
M
Nov 1
class 29

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

W
Nov 3
class 30

Tree recursion

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


F
Nov 5
class 31
Week 10 : ???
M
Nov 8
class 32

Notes from SoLA 3

We consider ideas from SoLA 3

Reading
  • No reading
Lab
  • No lab

W
Nov 10
class 33

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.


F
Nov 12
class 34

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
Week 11 : ???
M
Nov 15
class 35

Wrapup

We conclude the course.

Reading
  • No reading
Lab
  • No lab

W
Nov 17
class 36

Reading day

A chance to ask questions, for those who want it.

Reading
  • No reading
Lab
  • No lab

F
Nov 19
class 37

Final set of learning assessments (optional)

We have one more opportunity to check our learning.

Reading
  • No reading
Lab
  • No lab
Week 12 : ???
M
Nov 22
class 38

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.

Reading
  • No reading
Lab
  • No lab/Discussion day

W
Nov 24
class 39

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.

Thanksgiving Break :
Week 13 : ???
M
Nov 29
class 40

W
Dec 1
class 41

Computational pipelines

We consider a different way to decompose sequences of operations.


F
Dec 3
class 42

Building Web pages

We consider languages other than Scheme, particularly languages used to describe Web pages and similar resources.

Week 14 : ???
M
Dec 6
class 43

Regular expressions

We consider ways to search for patterns in text and to use the results of those searches. We also explore how to extract data from text files.

Finals Week
Winter Break