Schedule

Check back often for updates to our schedule and deadlines.

Week 0 : Introduction
F
Aug 29
class 1

An introduction to algorithms

[Slides]

We begin the class by exploring the definition of computer science and by trying to write some basic algorithms.

Readings
  • None
Labs
  • None
Assigned
  • Intro survey (find on gradescope)
Week 1 : Scamper
W
Sep 3
class 2

Getting started with Scheme

[Slides]

We consider Scheme, the programming language we will use throughout the course.


F
Sep 5
class 3

Computation via expressions

[Slides]

We look at the fundamental building block of computation in functional programming languages, the expression, and build an appropriate model of how expressions “compute”.

Week 2 : Tools for creating programs
M
Sep 8
class 4

Expressions and types

[Slides]

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.


W
Sep 10
class 5

Reading and writing procedures

[Slides]

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.



F
Sep 12
class 6

Booleans, predicates, and conditionals

[Slides]

We consider how one writes procedures that make decisions.

Week 3 : Lists
M
Sep 15
class 7

Lists

[Slides]

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


W
Sep 17
class 8

Processing lists, algorithmic decomposition

[Slides]

We explore ways to use lists using “the big three” list procedures: map, reduce, and filter. We also consider a key technique in algorithmic thinking, how one “decomposes” a more complex problem or algorithm into simpler ones.



F
Sep 19
class 9

Breather Day

[Slides]

We take a day to review important topics, and catch up on things.

Reading
  • None today
Lab
  • TBD
Week 4 : Software Engineering Fundamentals
M
Sep 22
class 10

Style and List Processing Practice

[Slides]

We continue practicing list process with the “big three.” Additionally, we also take the time to consider good style in programming.


W
Sep 24
class 11

Software engineering fundamentals

[Slides]

We consider the trifecta of software engineering: documentation, testing, and debugging. That is, we explore why and how you document your code, why and how you test your code, and how you might find errors in your code.



F
Sep 26
class 12

Pair programming

[Slides]

We explore the whys and hows of working with others.

Week 5 : Data
M
Sep 29
class 13

Local bindings

[Slides]

We explore issues of redundacy in code and mechanisms for reducing such reducnancy.


W
Oct 1
class 14

Tables and Compound Data

[Slides]

We consider how to deal with compound data, such as the title, latitude, longitude, time, and date of an event.

Due
  • Quiz 4 (decomposition, testing)


F
Oct 3
class 15

Reading Lists and Tables from Files

[Slides]

We consider a variety of techniques for gathering lists and tables of data from files.

Week 6 : Recursion
M
Oct 6
class 16

Thinking recursively

[Slides]

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

Breather Day

We take the whole day to tackle quiz problems.

Reading
  • No reading today
Lab
  • No lab today
Due
  • Quiz 5 (documentation, local bindings)


F
Oct 10
class 18

Introduction to list recursion

[Slides]

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 7 : Recursive Design
M
Oct 13
class 19

List motions

[Slides]

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


W
Oct 15
class 20

Breather Day

Another day to spend on quizzes.

Reading
  • No reading today
Lab
  • No lab today
Due
  • Quiz 6 (list recursion)

F
Oct 17
class 21

Recursion over numbers

[Slides]

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.

Fall Break
Week 8 : Additional Topics in Recursive Design
M
Oct 27
class 22

Tail Recursion

[Slides]

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


W
Oct 29
class 23

Higher-order Recursive Programming

[Slides]

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


F
Oct 31
class 24

Dictionaries

[Slides]

We consider how we might use list recursion to build structures that allow us to store information for quick retrieval.

Week 9 : Effectful Programming
M
Nov 3
class 25

Data Visualization

[Slides]

We explore techniques for displaying simple kinds of data such as coordinate pairs or counts of categorical data.


W
Nov 5
class 26

Breather / Catch-up day

[Slides]
Reading
  • No reading today
Due
  • Quiz 7 (numeric recursion, higher-order procedures)


F
Nov 7
class 27

Vectors

[Slides]

We explore vectors, an alternative to lists for storing data.

Week 10 : Miscellany
M
Nov 10
class 28

Sequencing and effects

[Slides]

We discuss (finally!) what a side-effect is, why they are useful, and how functional programming (correctly) encourages us to moderate their use.


W
Nov 12
class 29

Randomness

[Slides]

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

Due
  • Quiz 8 (lambda-free procedures, dictionaries)


F
Nov 14
class 30

Structures

[Slides]

We consider the struct, a way to define new types in Scheme.

Week 11 : Project Kick-Off

W
Nov 19
class 32

Project kick-off

[Slides]

We kick-off the final project, think about topics, forming groups, and build a plan of action!

Lab
  • none
Due
  • Quiz 9 (vectors, data abstraction)

F
Nov 21
class 33

Trees

[Slides]

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

Week 12 : Trees
M
Nov 24
class 34

Project work day!

Reading
  • none
Lab
  • none

W
Nov 26
class 35

Breather Day

We take the whole day to tackle quiz problems

Reading
  • None
Lab
  • None
Due
  • Project Proposal
  • Quiz 10 (no new topics, all redos)
Thanksgiving Break
Week 13 : Computational Complexity
M
Dec 1
class 36

Snow day

Reading
  • none
Lab
  • none

W
Dec 3
class 37

Project work day!

Reading
  • none
Lab
  • none

F
Dec 5
class 38

Tree recursion

[Slides]

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

Week 14 : Conclusion
M
Dec 8
class 39

Counting operations

[Slides]

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.


W
Dec 10
class 40

Project presentations

[Slides]
Reading
  • None
Lab
  • None
Due
  • Project Presentations

F
Dec 12
class 41

Presentation wrap-up and conclusion

Reading
  • None
Lab
  • None
Finals Week
M
Dec 15
class 42

Final Quiz Makeup opportunity

All locations are to be determined. Dates and times for each section listed. Section 01 (Wednesday December 17 at 9am) Section 02 (Thursday December 18 at 9am) Section 03 (Tuesday December 16 at 2pm) Section 04 (Wednesday December 17 at 9am)

Reading
  • None
Lab
  • None
Winter Break