Schedule

Check back often for updates to our schedule and deadlines.

Week 1 : Scamper
W
Jan 21
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)

F
Jan 23
class 2

Getting started with Scheme

[Slides]

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

Week 2 : Tools for creating programs
M
Jan 26
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”.


W
Jan 28
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.


F
Jan 30
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/Scamper programs.

Week 3 : Lists

M
Feb 2
class 6

Booleans, predicates, and conditionals

[Slides]

We consider how one writes procedures that make decisions.


W
Feb 4
class 7

Lists

[Slides]

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

Due
  • Quiz 1 (primitive types, tracing)

F
Feb 6
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.

Week 4 : Software Engineering Fundamentals

M
Feb 9
class 9

Style and List Processing Practice

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


W
Feb 11
class 10

Pair programming

[Slides]

We explore the whys and hows of working with others.

Lab
  • TBD
Due
  • Quiz 2 (conditionals, procedural abstraction)

F
Feb 13
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.

Week 5 : Data

M
Feb 16
class 12

Local bindings

[Slides]

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


W
Feb 18
class 13

Breather Day

[Slides]

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

Reading
  • None today
Due
  • Quiz 3 (lists, decomposition)

F
Feb 20
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.

Week 6 : Recursion

M
Feb 23
class 15

Reading Lists and Tables from Files

[Slides]

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


W
Feb 25
class 16

Breather Day

We take a day to review topics and catch up as needed.

Reading
  • No reading today
Lab
  • No lab today
Due
  • Quiz 4 (Lambda-free anonymous procedures, testing)

F
Feb 27
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.

Week 7 : Recursive Design

M
Mar 2
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.


W
Mar 4
class 19

List recursion continued

Continue working on recursion over lists.

Reading
  • None
Lab
  • None
Due
  • Quiz 5 (documentation, local bindings)

F
Mar 6
class 20

List motions

[Slides]

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

Spring Break
Week 8 : Additional Topics in Recursive Design
M
Mar 23
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.


W
Mar 25
class 22

Tail Recursion

[Slides]

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

Due
  • Quiz 6 (list recursion)

F
Mar 27
class 23

Higher-order Recursive Programming

[Slides]

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

Week 9 : Effectful Programming

M
Mar 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.


W
Apr 1
class 25

Randomness

[Slides]

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

Due
  • Quiz 7 (numeric recursion, higher-order procedures)

F
Apr 3
class 26

Vectors

[Slides]

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

Week 10 : Miscellany

M
Apr 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.


W
Apr 8
class 28

Data Visualization

[Slides]

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


F
Apr 10
class 29

Data Visualization continued

[Slides]
Reading
  • No reading today
Week 11 : Project Kick-Off

M
Apr 13
class 30

Structures

[Slides]

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


W
Apr 15
class 31

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 (data abstraction)

Week 12 : Trees
M
Apr 20
class 33

Class cancelled

Reading
  • None
Lab
  • None

W
Apr 22
class 34

Breather Day

We take the whole day to tackle quiz problems

Reading
  • None
Lab
  • None
Due
  • Quiz 10 (no new topics)

F
Apr 24
class 35

Project work day!

Reading
  • none
Lab
  • none
Week 13 : Computational Complexity
M
Apr 27
class 36

Trees

[Slides]

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


W
Apr 29
class 37

Project work day!

Reading
  • none
Lab
  • none

F
May 1
class 38

Tree recursion

[Slides]

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

Week 14 : Conclusion
M
May 4
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
May 6
class 40

Project presentations

[Slides]
Reading
  • None
Lab
  • None
Due

F
May 8
class 41

Cancelled Class

Reading
  • None
Lab
  • None
Finals Week
Su
May 11
class 42

Final Quiz Makeup opportunity

CSC-151-01 Wednesday 2-5pm; CSC-151-02 Thursday 2-5pm; CSC-151-03 Wednesday 9am-12pm

Reading
  • None
Lab
  • None
Summer Break