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
Oct 29
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
Nov 2
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
Nov 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.


W
Nov 4
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
Nov 6
class 7

Lists

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

Week 2 : A miscellany
M
Nov 9
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
Nov 10
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

W
Nov 11
class 10

Th
Nov 12
class 11

Lists, revisited

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


F
Nov 13
class 12
Week 3 : Software design / Thinking recursively
Su
Nov 15
 
Due
  • Mini-project 1 redo

M
Nov 16
class 13

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.


Tu
Nov 17
class 14

Testing with Rackunit

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


W
Nov 18
class 15

Pause for breath

We pause to talk about some issues of interest.


Th
Nov 19
class 16

Detour on code tracing with conditionals

We continue our exploration of tracing, revisiting the tracing of conditionals.

Reading
  • No reading
Lab
  • No lab

F
Nov 20
class 17

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.

Week 4 : Recursion, continued

Tu
Nov 24
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

W
Nov 25
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.

Turkey Break
Week 5 : Stateful programming
M
Nov 30
class 21

Tail recursion

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


Tu
Dec 1
class 22

Higher-order recursive design

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


W
Dec 2
class 23

Recursion revisited and other random topics

We pause to review some concepts of recursion. We also start our exploration of randomness in Racket.


Th
Dec 3
class 24

Randomness

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

Reading
  • No reading

F
Dec 4
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 6 : Structuring data
Su
Dec 6
 
Due
  • Mini-project 3 redo

M
Dec 7
class 26

Dictionaries and hash tables

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


Tu
Dec 8
class 27

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
Dec 9
class 28

Trees

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


Th
Dec 10
class 29

Tree recursion

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


F
Dec 11
class 30

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 7 : Sorting and such
Su
Dec 13
 
Due
  • Mini-project 4 redo

M
Dec 14
class 31

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

Tu
Dec 15
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
Dec 16
class 33

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

Th
Dec 17
class 34

Wrapup

We conclude the course.

Reading
  • No reading
Lab
  • No lab

F
Dec 18
class 35

Reading day

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

Reading
  • No reading
Lab
  • No lab
Finals (Half-)Week
M
Dec 21
class 36

Last set of learning assessments (optional)

We have one more opportunity to check our learning.

Reading
  • No reading
Lab
  • No lab
Due
  • SoLA 5

Tu
Dec 22
 
Due
  • Mini-project 5 redo
  • Mini-project 1-4 second redo
  • Late labs, late readings, lab redos, reading redos
Winter Break