Programming Languages (CS302 2006S)

CS302 2006S At A Glance

This is an abbreviated course syllabus. Like everything else in this course, it is likely to change.

Weeks: 1, 2, 3, 4, 5, 6, 7, 8, break, 9, 10, 11, 12, 13, 14.

Week 1: Background
(01) Monday, January 23, 2006
Introduction to the Course
What is a programming language? How should we study programming languages? Why study programming languages? Course details.
Assignments: Read Sebesta's Evolution of the Major Programming Langauges.
(02) Wednesday, January 25, 2006
No class. Thought question.
(03) Friday, January 27, 2006
An Abbreviated History of Programming Languages
Exercise: Dating key ideas. An abbreviated history of programming languages.
Assignments: Read N. Wirth's On the Design of Programming Languages (due Monday) Read C. A. R. Hoare's Hints on Programming Language Design (due Monday).
Week 2: Design, Continued
(04) Monday, January 30, 2006
Basics of Programming Language Design
Notes from the readings. Choosing a language. Key design criteria.
Assignments: Read Paul Graham's Revenge of the Nerds (due Wed.). Read John McCarthy's History of LISP (sorry, only in PDF) (due Wed.). Read John McCarthy's Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I (due Fri.). You may find it useful to refer to Paul Graham's The Roots of Lisp to understand the second McCarthy paper (due Fri.).
(05) Wednesday, February 1, 2006
Hoare's Examples
More examples from Hoare. Why recurse?
Assignments: Read John McCarthy's Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I (due Fri.). Read Paul Graham's The Roots of Lisp (due Fri.).
(06) Friday, February 3, 2006
Why Functional Programming?
Why LISP? Higher-order functions, revisited. Notes on the readings.
Assignments: Using Graham's example, implement a simple LISP that includes lambdas, defines, and lets. You should start with cons, car, cdr, nil, null? eval, cond, quote, atom?, eq?. For a C, use Scheme as your implementation language (that is, you need not implement these basic operations). For a B, use Java or C (that is, you'll need to implement the basic operations first). For an A, add input and output. Due next Friday.
Week 3: LISP, Continud
(07) Monday, February 6, 2006
McCarthy's LISP
What's the point? Terminology. Grahams eval.
(08) Wednesday, February 8, 2006
Lambda Calculus
Historical aspects. Notation basics. Currying.
Assignments: Read Section 20.1 of Paul Graham's On Lisp. Read the portion of The Revised5 Report on the Algorithmic Language Scheme that deals with call-with-current-continuation. That portion falls on pages 33 and 34 of the standard printed version.
(09) Friday, February 10, 2006
Continuation Basics
Week 4: Scheme, In Depth (1)
(10) Monday, February 13, 2006
Continuation Lab
Assignments: Read section 1-6 of The Revised5 Report on the Algorithmic Language Scheme.
(11) Wednesday, February 15, 2006
The Scheme Report
Why read R5RS? Your questions. Preparation.
Assignments: Read Section 7.1 of the Revised5 Report on the Algorithmic Language Scheme.
(12) Friday, February 17, 2006
Scheme Syntax
Quasiquotation. Other Syntax Questions. Preparing to Read the Semantics.
Assignments: Read Section 7.2 of R5RS up to the second equation of the second column of p. 41. Also read the definitions (on the subsequent) of any utility procedures used in those first few equations.. Due: Homework 1: Implement Lisp.
Week 5: Scheme Semantics
(13) Monday, February 20, 2006
Scheme Semantics (1)
Why have a semantics? What is denotational semantics? Starting to read the Scheme semantics.
Assignments: Read the definitions of script-E of lambda expressions on column two of p. 41 of R5RS.
(14) Wednesday, February 22, 2006
Scheme Semantics (2)
The semantic functions. Your first few meanings.
Assignments: Read the definitions of script-E of lambda expressions on column two of p. 41 of R5RS.
(15) Friday, February 24, 2006
Scheme Semantics (3)
Notation, revisited. Revisiting hold. Function application. Lambda definitions.
Assignments: For Monday: Find or write a good definition of object-oriented programming (and send it to me) and explain the difference between polymorphism and overloading.
Week 6: Object-Oriented Programming
(16) Monday, February 27, 2006
Basics of Object-Oriented Programming
What is object-oriented programming? Three key issues: Encapsulation, Inheritance, Polymorphism. Why OOP? A biased history. Polymorphism vs. Overloading.
Assignments: Read (and comment on) Chapters 1-3 of Beyond Java.
(17) Wednesday, March 1, 2006
Java as Object-Oriented Language
A brief history of Java. Why was Java successful? How do we measure success? Other perspectives on object-orientation.
Assignments: Read Tate, chapters 4, 5, and 8. Homework 2: Semantics of D.
(18) Friday, March 3, 2006
Growing a Language
Week 7: Java, Revisited
(19) Monday, March 6, 2006
Introspection in Java
Introspection basics. A problem: Serializing. A problem: Profiling. Assignments: Summarize what an anonymous inner class is and why you might want to use one.
(20) Wednesday, March 8, 2006
Anonymous Inner Classes
Anonymous values. Encapsulation and inner classes. Anonymous inner classes. Applications.
(21) Friday, March 10, 2006
Pause for Breath
Week 8: Java, Concluded
(22) Monday, March 13, 2006
Class Cancelled
(23) Wednesday, March 15, 2006
Java Generics
Limitations to Java's Strong Type Checking. A (Partial) Solution: Java Generics. Restricting Parameter Classes. Subtleties. Behind the Scenes.
Assignments: Reading: Finish Beyond Java. Read Generics in the Java Programming Language.
(24) Friday, March 17, 2006
Beyond Java
Dynamic Languages. Some Key Questions. Tate's Criteria.
Spring Break
Week 9: Types and Type Checking
(25) Monday, April 3, 2006
Types (1)
An Introduction to Types. Simple Data Types. Type Constructors.
(26) Wednesday, April 5, 2006
Types (2)
Types, Revisited. Describing Types. Types as Sets, Revisited. References, Pointers, and Variables. Notes on Liskov et al.
Assignments: Read selected sections of Cardelli and Wegner.
(27) Friday, April 7, 2006
Types (3)
Type Equivalence. Structural Equivalence, Revisited. Assignment Compatibility. Type Coercion. Design Issues.
Week 10: Declarative Languages (1): SQL and Relational Databases
(28) Monday, April 10, 2006
Declarative Langauges
What is a declarative language? Common forms of declarative languages. Why have declarative languages?
Assignments: Post-mid-semester Examination.
(29) Wednesday, April 12, 2006
SQL (1): The Relational Model
Context. Codd's Contributions. Why Read This Paper?. Thinking About Relations. Operations on Relations.
(30) Friday, April 14, 2006
Combining relations. Relations as programming language. Describing a language. General SEQUEL and SQUARE issues. What's missing from SEQUEL?
Week 11: Declarative Languages (2): Logic Programming
(31) Monday, April 17, 2006
Logic Programming (1)
Declarative Programming, Revisited. Predicate Logic. Predicate Logic Programming. Assignments: Class Presentations.
(32) Wednesday, April 19, 2006
Logic Programming (2)
Prolog: Imposing Fixed Control on Horn-Clause Logic. Some Examples. The Need for Backtracking. Problems with Resolution. Affecting Control: Cut.
(33) Friday, April 21, 2006
Logic Programming (3)
Detour: Notation. Numbers. List Operations. Polynomials.
Due: Mid-semester Examination. Assignments: Read the first five sections (Introduction; Values, Types, and Other Goodies; Functions; Case Expressions and Pattern Matching; Type Classes and Overloading) of A Gentle Introduction to Haskell.
Week 12: Another Functional Perspective: Haskell
(34) Monday, April 24, 2006
Haskell (1)
An Introduction to Haskell. Haskell Syntax. Types in Haskell. Patterns in Haskell.
(35) Wednesday, April 26, 2006
Haskell (2)
Types in Haskell. Patterns and Data Structures. Lazy Evaluation and the Sieve of Eratothenes.
Due: Topics for presentations. Assignments: Read Sections 1 (Evolution) and 2 (Distinguishing Features) of Hudak's Conception, Evolution, and Application of Functional Programming Languages.
(36) Friday, April 28, 2006
Haskell (3)
Lazy lists. Listing primes.
Week 13: Student Presentations
(37) Monday, May 1, 2006
Presentations (1): Ruby Basics
(38) Wednesday, May 3, 2006
Presentations (2): Ruby Advanced
(39) Friday, May 5, 2006
Presentations (3): FP, Another View of Functional Programming
Week 14: Wrapup
(40) Monday, May 8, 2006
Programming Epigrams
Epigrams and Languages. Confusing Epigrams. Grouping Epigrams.
(41) Wednesday, May 10, 2006
Scheme, Revisited
(42) Friday, May 12, 2006
Evaluation and Wrapup

Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Wed May 10 09:02:22 2006.
The source to the document was last modified on Tue Jan 31 08:33:46 2006.
This document may be found at

You may wish to validate this document's HTML ; Valid CSS! ; Check with Bobby

Samuel A. Rebelsky,