Computer Science 275

Programming Abstractions

Spring 2020

 

 

Me:

Bob Geitz, King 125

   x-8386

Office Hours:

MWF 11-12; Thursdays 1:30-3, or by appointment

I am in my office withh the door open most of the day when I am not in class.

 Overview

This is a course on the principles behind programming languages. We will learn the language Scheme and use it to think about the features of programming languages and how they are implemented.

Learning Goals: Here is what you should get out of this course:

Textbook:

The Little Schemer by Friedman and Felleisen (MIT Press, 1996) We will only use this for the first few weeks of the course. After that, everything you are expected to learn will be developed in class. Coming to class would be a good idea.

 

We will also use clickers this semester. You should already have a clicker from CSCI 150, 151, or 241. You should bring it to class every day,

 

You may find these resources from the web helpful:

Class Notes:

I will post all of my Powerpoint slides and all of the code we do in class on the class website:
               www.cs.oberlin.edu/~bob/cs275

 

Exams and Grading:

We will have 2 in-class exams during the semester and a comprehensive final exam. Here is how the grades for the course will be composed:

Note that the final exam will be Thursday, May 14 at 2pm This time is set by the Registrar and I cannot change it for the class or for individuals. If you have issues with this time you should talk to Bo Arbogast or Donna Russell in the AARC immediately.

Late Labs

The labs in this class are closely tied to the course content. If you fall behind in the labs you won't have a clue of what is going on in the lectures and you won't be able to do the next assignment. Because of this we have a strict late-lab policy. Each assignment will be worth 50 points. We will deduct 10 points for each day your homework is late. After 5 days there is no point in handing an assignment in. If you are sick, tell me in advance. One thing in your favor is that, unlike most of the Java labs, the labs in this class are divided into lots of small programs. You can get most of the credit for an assignment even if you don't have it all working. I strongly suggest that you not put off the homework until the night before it is due.

The Honor Code

The Honor Code has a straightforward application to this class. On all of the exams you are responsible for your own work; you may neither give nor receive any information during the course of the exam. If someone takes an exam at a different time than the rest of the class there may be no communication concerning the exam between that person and anyone else in the class, not even whether the exam was easy or difficult. The atmosphere is much more relaxed for the homework assignments. You may discuss the homework, including details of the programming code, with anyone else in the class, but in the end you must write your own code. Making a copy of someone else's code and handing it in as your own, even if you change the names of the variables in the program, is a violation of the Honor Code. You should be learning to think structurally about code, so talk to anyone about functionality and then write the code yourself.

Course outline

Here is an outline that we might not stick to, but at least it gives you an idea of the course structure:

 

Week

Topic

HW/Labs

Week 1
Feb 4, 6

Your new friends car, cdr and cons

Let expressions and lambda expressions

Lab 01: The Basics
Due Tuesday, February 11

Week 2
Feb 11, 13

Environments and closures. Set! and variations on Let.

Lab 02: Lists and Recursion
Due Tuesday, February 18

Week 3
Feb 18, 20

Structured lists. Higher level functions: Map, Apply and Fold

Lab 03: Structured Lists
Due Tuesday, February 25

Week 4
Feb 25, 27

Unrestricted lambda, Map and Apply examples. Fold

Lab 04: Higher Order Functions
Due Tuesday, March 3

Week 5
March 3, 5

More on Recursion:

The Y-Combinator

Exam 1 (probably Thursday March 5 )

Week 6
March 10, 12
Backtracking. Lab 05: Backtracking
Due Friday, March 19

Week 7
March 17, 19

Datatypes.

Overview of the interpreter.

Lab 06: Interpreters 1: Creating an Environment
Due Wedmesday, April 1

SPRING  BREAK!!!

Week 8
March 31, Apr 2

Interpreters

Lab 07: Interpreters II Interpreting Basic Expressions
Due Thursday, April 9

Week 9
April 7-9

Interpreters


Week 10
April 14-16

Define-syntax

Lab 08: Interpreters III: Lambdas, Set! and Letrec
Due Friday, April 17

Week 11

April 21-23

Streams

Lab 9: Streams
Due Thursday, April 30

Exam 2 (possibly Tuesday, April 21)

Week 12
April 28-30

Continuations

Lab 10: Continuations
Due Friday, May 8

Week 13
May 5,7

Continuation-passing Style, call/cc

 

Final Exam: Thursday, May 14, 2pm