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.
We consider Racket, the programming language we will use throughout the course.EBoard 02 (Section 1): The Lab Equipment (aka MathLAN and DrRacket)
We consider a key technique in algorithmic thinking, how one “decomposes” a more complex problem or algorithm into simpler ones.EBoard 03 (Section 1): Images and Decomposition
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.EBoard 04 (Section 1): Defining procedures
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.EBoard 05 (Section 1): Expressions and Types
We begin to explore regular expressions, tools used to identify patterns in strings. We also consider files, structures that store data, often for use by other programs.EBoard 10 (Section 1): Files (and Regular Expressions)
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.EBoard 12 (Section 1): Recursion
We consider documentation for your programs: Why to write
documention, when to write documentation, how to write
We also consider testing: When, why, and how you might test the procedures and programs that you write.
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.EBoard 18 (Section 1): Numeric Recursion
We consider structures that allow us to store information for quick retrieval.EBoard 24 (Section 1): Dictionaries, Maps, and Hash Tables
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.EBoard 25 (Section 1): Abstract Data Types
We begin to consider the content and structure of the course, exploring both our laboratory environment (Linux workstations) and mechansisms for representing and styling text.EBoard 27 (Section 1): Marking Text
Topics: Getting started with Linux. Generalized markup with XML. Web markup with HTML. Page styling with CSS.
We consider how one writes programs that process HTML and XML.EBoard 28 (Section 1): Marking Text
Topics: XML, revisited. Representing XML in Racket. Expressing patterns in XML. Seaching XML. Constructing new documents from old.
We consider additional ways to extract data from XML documents or to transform XML documents into new XML documents.EBoard 29 (Section 1): Processing and Transforming XML
Topics: Replacing elements. Inserting elements. Deleting elements.
We consider how to write recursive programs that process trees and other tree-like structures.EBoard 36 (Section 1): Tree Recursion and Binary Search Trees
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.EBoard 37 (Section 1): Algorithm Analysis and Searching
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.EBoard 39 (Section 1): Sorting algorithms