This site is under construction. Please expect some changes.

Schedule

Due dates for major assignments will not change. However, the particular topics we cover each day may change as we discover that we need more (or less) time on each topic.

Week 0 : Introduction
F
Aug 30
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.

Reading
  • To be announced…
Lab
  • To be announced…
Week 1 : Decomposition
M
Sep 2
class 2

W
Sep 4
class 3

Algorithmic decomposition

[Slides]

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


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

Due
  • Assessment 1 Pre-reflection
Week 2 : Expressions and Types
M
Sep 9
class 5

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”.

NOTE: We forgot to post the second reading, “Mental models of computation,” on time. You do not need to include it in your reading response, but we recommend that you read through it carefully on your own as mental models is an essential topic for the course.


W
Sep 11
class 6

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. We also continue building our mental model.



F
Sep 13
class 7

Booleans, predicates, and conditionals

[Slides]

We consider how one writes procedures that make decisions.

Week 3 : Computing with Colors
M
Sep 16
class 8

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.


W
Sep 18
class 9

RGB colors

[Slides]

We explore one of the basic color models used by computers.

Due
  • Assessment 2 Post-reflection
  • Assessment 3 Pre-reflection

F
Sep 20
class 10

Transforming images

[Slides]

We expand our understanding of RGB transformations to image transformations.

Week 4 : Software Engineering Fundamentals
M
Sep 23
class 11

Local bindings

[Slides]

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


W
Sep 25
class 12

Pair programming

[Slides]

We explore the whys and hows of working with others.


F
Sep 27
class 13

Exam #1

The first core examination.

Reading
  • To be announced…
Lab
  • To be announced…
Due
  • Exam 1
Week 5 : List Processing
M
Sep 30
class 14

Lists

[Slides]

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


W
Oct 2
class 15

Processing lists

[Slides]

We explore ways to use lists to work with collections of drawings using “the big three” list procedures: map, reduce, and filter.

Due
  • Assessment 4 Pre-reflection

F
Oct 4
class 16

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.

Week 6 : Recursively-defined Functions
M
Oct 7
class 17

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 9
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.

Due
  • Assessment 4 Post-reflection
  • Assessment 5 Pre-reflection

F
Oct 11
class 19

List motions

[Slides]

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

Week 7 : Recursive Design
M
Oct 14
class 20

W
Oct 16
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.

Reading
  • (No required reading for today!)
Due
  • Assessment 5 Post-reflection
  • Assessment 6 Pre-reflection

F
Oct 18
class 22

Higher-order Recursive Programming

[Slides]

We combine higher-order functions and recursive programming to implement the “big three” operations over lists. (Extra topic: Tail recursion – We look at an advanced version of recursion that is ubiquitous in functional programming, tail recursion.)

Fall Break
Week 8 : Additional Topics in Recursive Design
M
Oct 28
class 23

Higher-order Recursive Programming

[Slides]

We combine higher-order functions and recursive programming to implement the “big three” operations over lists. (Extra topic: Tail recursion – We look at an advanced version of recursion that is ubiquitous in functional programming, tail recursion.)


W
Oct 30
class 24

Dictionaries

[Slides]

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

Reading
  • (Review association lists reading)
Due
  • Assessment 6 Post-reflection
  • Exam 2 Pre-reflection

F
Nov 1
class 25

Exam 2

The second core examination.

Reading
  • To be announced…
Lab
  • To be announced…
Due
  • Exam 2
Week 9 : Effectful Programming
M
Nov 4
class 26

Vectors

[Slides]

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


W
Nov 6
class 27

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.

Due
  • Assessment 7 Pre-reflection

F
Nov 8
class 28

Randomness

[Slides]

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

Week 10 : Colors In More Detail
M
Nov 11
class 29

Per-pixel manipulation

[Slides]

We dive deeper into how images are represented underneath the hood in anticipation for our final projects.


W
Nov 13
class 30

Animation

[Slides]

We examine Scamper’s facilities for interactive, media-based programming.

Reading
Due
  • Assessment 7 Post-reflection

F
Nov 15
class 31

Project kick-off

[Slides]

We kick-off the final project, finalizing topics, forming groups, and building a plan of action!

Lab
  • none
Due
  • Quiz 7
Week 11 : Structures and Tree-like Data
M
Nov 18
class 32

Structures

[Slides]

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


W
Nov 20
class 33

Trees

[Slides]

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

Reading
Due
  • Assessment 8 Pre-reflection

F
Nov 22
class 34

Project work day!

[Slides]
Reading
  • none
Lab
  • none
Due
  • Quiz 8
  • Final Project Milestone 2
Week 12 : Tree Recursion
M
Nov 25
class 35

Tree recursion

[Slides]

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


W
Nov 27
class 36

Project work day!

[Slides]

Before Thanksgiving break, we pause to give everyone time to make substantial progress on their final projects.

Reading
  • To be announced…
Lab
  • To be announced…
Thanksgiving Break
Week 13 : Computational Complexity
M
Dec 2
class 37

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.

Due
  • Final Project Milestone 3
  • Assessment 8 Post-reflection

W
Dec 4
class 38

Pause for breath

[Slides]

We review the material in this final leg of the course before the third exam.

Reading
  • To be announced…
Lab
  • To be announced…
Due
  • Exam 3 Pre-reflection

F
Dec 6
class 39

Exam 3

The third core examination.

Reading
  • To be announced…
Lab
  • To be announced…
Due
  • Exam 3
Week 14 : Conclusion
M
Dec 9
class 40

Case study: searching and sorting

As a case study of looking at computational complexity, we examine different ways of performing two ubiquitous operations in programming, searching and sorting.


Tu
Dec 10
 
Due
  • Final Project Milestone 4

W
Dec 11
class 41

Project presentations

[Slides]
Reading
  • None
Lab
  • None
Due
  • Exam 3 Post-reflection

F
Dec 13
class 42

Presentation wrap-up and conclusion

[Slides]
Reading
  • None
Lab
  • None
Due
  • Final Project Milestone 5
Finals Week
W
Dec 18
class 43

Exam 4

2-5 pm in our regular classroom

Reading
  • None
Lab
  • None
Due
  • Exam 4

F
Dec 20
 
Due
  • Last revision period closes. No work may be accepted after 5pm (as required by the college).
Winter Break