Programming Languages (CS302 2007S)

CS302 2007S 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: A History of Programming Languages
(01) Monday, January 22, 2007
Introduction to the Course
What is a programming language? How should we study programming languages? Why study programming languages? Course details.
Assignments: Do Wednesday's readings. HW1: Intro Survey.
(02) Wednesday, January 24, 2007
An Abbreviated History of Programming Languages
Some questions from the readings. Exercise: Dating key ideas. An abbreviated history of programming languages.
Reading: Byte Magazine: A Brief History of Programming Languages, Wikipedia: History of Programming Languages, and Jean Sammet - Programming Languages: History and Future
(03) Friday, January 26, 2007
The Evolution of Some Key Language Features
The Story of Mel, a Real Programmer. Reading Ryder et al. Major Characteristics. Relating to Past Papers.
Assignments: Homework 2: Permutations.
Reading: Barbara Ryder et al. - The Impact of Software Engineering Research on Modern Programming Languages and Ed Nather - The Story of Mel, a Real Programmer
Week 2: On the Design of Programming Languages
(04) Monday, January 29, 2007
Goto Considered Harmful
Context. Dijkstra's Famous Letter. Permutation with Repetitions.
Reading: Edsger W. Dijkstra - Goto Considered Harmful and P. Bratley - Algorithm 306: Permutation with Repetitions
(05) Wednesday, January 31, 2007
Basics of Programming Language Design
Permutation with repetitions. Choosing a language. Key design criteria. Notes from the readings.
Reading: C.A.R. Hoare - Hints on Programming Language Design and Richard Gabriel - The End of History and the Last Programming Language
(06) Friday, February 2, 2007
Hoare's Examples, Revisited
Examples from Hoare. Choosing a language. Key design criteria. More notes from the readings.
Due: Homework 2: Permutation with Repetitions. Assignments: Homework 3: Removing Recursion.
Reading: C.A.R. Hoare - Hints on Programming Language Design
Week 3: Higher-Order Programming through Graphical Computation
(07) Monday, February 5, 2007
Getting Started with Script-Fu
About this week. Lab.
Reading: Samuel A. Rebelsky - Scripting the GIMP with Script-Fu
(08) Wednesday, February 7, 2007
Higher-Order Graphics
The basics of higher-order procedures. Lab.
Reading: Samuel A. Rebelsky - Higher-Order Graphics
(09) Friday, February 9, 2007
Representing Drawings
Due:HW3. Assignments: HW4.
Reading: Samuel A. Rebelsky - Points, Lines, and Images
Week 4: Detour: Some Notes on C Programming
(10) Monday, February 12, 2007
Notes on HW3
Testing and Loop Invariants. Citing Code. Segmenting Programs.
(11) Wednesday, February 14, 2007
Macros and More
Background: Refactoring. A Domain: Quicksort. Macros: Basic Concepts. Enumerated Types. Macros: Some Hacks.
(12) Friday, February 16, 2007
More C Stuff, Including a Bit on Make
Quicksort, continued. Representing points.
Due:HW4. Assignments: HW5.
Week 5: LISP
(13) Monday, February 19, 2007
Why lists? Graham's differences. Other issues.
Reading: Paul Graham - The Revenge of the Nerds, Paul Graham - What Made Lisp Different, and John McCarthy - History of LISP
(14) Wednesday, February 21, 2007
Class Cancelled
(15) Friday, February 23, 2007
The Design of LISP
Summary of the Paper. S-Expressions, S-Functions, and M-Expressions. Eval. Other Topics.
Reading: John McCarthy - Recursive Functions of Symbolic Epxressions and Their Computation by Machine, Part I
Week 6: Continuations
(16) Monday, February 26, 2007
Implementing LISP
eval, continued. Flaws in eval. Graham's Claims. Implementing Lisp. Garbage Collection.
Reading: Paul Graham - The Roots of LISP
(17) Wednesday, February 28, 2007
Continuation Basics
Basics of Continuations. Some Examples. Some Applications of Continuations. Continaution-Passing Style.
Reading: Paul Graham - Scheme Continuations and R. Kent Dybvig - Continations and Continuation Passing Style
(18) Friday, March 2, 2007
Continuations and Web Servers
Continuations and the Web. Sam's sample code. Applications of continuations, revisited. Continuation-Passing Style.
Reading: Christian Queinnec - The Influence of Browsers on Evaluators or, Continuations to Program Web Servers and Samuel Rebelsky - webcont.scm
Week 7: Object-Oriented Programming
(19) Monday, March 5, 2007
Basics of Object-Oriented Programming
What is object-oriented programming? Three key issues: Encapsulation, Inheritance, Polymorphism. Why OOP? A biased history. Polymorphism vs. Overloading.
Reading: CS302 Students: Answers to Questions on Polymophism and Overloading
(20) Wednesday, March 7, 2007
Growing a Language
Reading: Guy L. Steele, Jr.: Growing a Language
(21) Friday, March 9, 2007
The Design of C++
Reading: Bjarne Stroustrup: The Design of C++
Week 8: Introspection and Reflection in Java
(22) Monday, March 12, 2007
Introspection in Java
Introspection basics. A problem: Factory Methods. A problem: Dynamic Loading. A problem: Serializing. A problem: Profiling.
Reading: Sun Microsystems: Trail: The Reflection API
(23) Wednesday, March 14, 2007
Anonymous Inner Classes
Anonymous values. Encapsulation and inner classes. Anonymous inner classes. Applications.
(24) Friday, March 16, 2007
Java Generics
Limitations to Java's Strong Type Checking. A (Partial) Solution: Java Generics. Restricting Parameter Classes. Subtleties. Behind the Scenes.
Due: Mid-Semester Exam.
Spring Break
Week 9: Discussion of Mid-Semester Examination
(25) Monday, April 2, 2007
Preliminary Discussion of Mid-Semester Examination
General Issues. Problem 1. Problem 2. Problem 3. Problem 4.
(26) Wednesday, April 4, 2007
Continued Discussion of Mid-Semester Examination
What should we do? Problem 3, continued. Problem 4. Presentations (if time).
(27) Friday, April 6, 2007
Mid-Semester Examination, Concluded
Problem 3, Concluded. Problem 4. Presentations.
Week 10: Ruby - Another Approach to Object-Oriented Programming
(28) Monday, April 9, 2007
Ruby (1)
Rhetoric of Readings. Java Basics Reviews. New Ruby Features. Ruby Syntax.
Reading: whytheluckystiff - A Quick (and Hopefully Painless) Ride Through Ruby (with Cartoon Foxes); Marick - Chapter 1 of A Little Ruby, A Lot of Objects; and Marick - Chaper 2 of A Little Ruby, A Lot of Objects
(29) Wednesday, April 11, 2007
Ruby (2)
(30) Friday, April 13, 2007
Ruby (3)
About the Presentations. Rails. Convention and Introspection. Ruby vs. Java, Revisited.
Reading: Walton & Hibbs - Rolling with Ruby on Rails Revisited and Walton - Rolling with Ruby on Rails Revisited, Part 2
Week 11: Types and Type Checking
(31) Monday, April 16, 2007
Types (1)
An Introduction to Types. Simple Data Types. Type Constructors.
(32) Wednesday, April 18, 2007
Types (2)
Types, Revisited. Types as Sets. Lessons from CLU. References, Pointers, and Variables.
Reading: Barbara Liskov et al. - Abstraction Mechanisms in CLU
(33) Friday, April 20, 2007
Types (3)
The CLU Reading. Cardelli and Wegner. Type Equivalence. Structural Equivalence, Revisited. Assignment Compatibility. Type Coercion. Design Issues.
Reading: Luca Cardelli & Peter Wegner: On Understanding Types
Week 12: Declarative Languages: SQL and Relational Databases
(34) Monday, April 23, 2007
Declarative Langauges
Language Paradigms, Revisited. Abstraction, Revisited. Common Categories of Declarative Languages. Predicate Logic Languages. Regular Expression Languages. Database Languages.
(35) Wednesday, April 25, 2007
SQL (1): The Relational Model
Context. Codd's Contributions. Why Read This Paper? Thinking About Relations. Operations on Relations.
Reading: Codd - A Relational Model for Large Shared Data Banks
(36) Friday, April 27, 2007
Codd's Contributions. Why Read This Paper? Thinking About Relations. Operations on Relations. Relations as Programming Language. Describing a Language. What's Missing from SEQUEL?
Reading: Chamberlin and Boyce - SEQUEL: A Structured English Query Language
Week 13: Student Presentations
(37) Monday, April 30, 2007
Presentations (1) - Garbage Collection
(38) Wednesday, May 2, 2007
Presentations (2) - Prolog
(39) Friday, May 4, 2007
Presentations (3) - Postscript
Week 14: Wrapup
(40) Monday, May 7, 2007
Presentations (4) - Scripting Languages
(41) Wednesday, May 9, 2007
Programming Epigrams
Epigrams and Languages. Confusing Epigrams. Grouping Epigrams.
Reading: Alan J. Perlis: Epigrams on Programming
(42) Friday, May 11, 2007
Evaluation and Wrapup
Grading. About the final. About the midsem. Wrapup. Evaluation forms.

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 Sun Apr 29 11:24:54 2007.
The source to the document was last modified on Sat Jan 20 21:48:29 2007.
This document may be found at

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

Samuel A. Rebelsky,