Programming Language (CS 550)

 Announcments  Lectures  Programs  Course Resources   Assignments and Labs  Grading Policy
Course Description
Covers basic concepts of the design and implementation of programming languages, including data representation and types, functions, sequence control, environments, block structure, subroutines and coroutines, storage management. Emphasizes language features and implementation, not mastery of any particular languages.
This is a core course for graduate Computer Science students and is an elective for graduate Software Engineering students. The course is available to other students with sufficient programming experience (see prerequisites) who have an interest in programming languages (e.g. Information Systems, Computer Engineering, etc.).
Course Themes
  1. Evaluation and implementation of of programming languages
  2. Tools for describing and analyzing languages, including syntax, semantics, and pragmatics
  3. Programming paradigms (especially functional)
  4. Proving properties of programs and programming languages
  5. Formal methods including the use of a proof assistant
Course Objectives
  1. Be able to formally specify the syntax and semantics of programming languages.
  2. Be able to prove properties of programs using both equational reasoning and structural induction.
  3. Be able to use a proof assistant to formally verify proofs.
  4. Be able to implement an interpreter for a simple programming language.
  5. Be able to formally specify a type system and understand the type inference process.
  6. Understand how to use a strongly typed language's type system to capture program invariants.
Course Benefits
  1. Better able to formally express concepts and reason about them
  2. Become a better programmer and write programs with fewer bugs
  3. Improved ability to select appropriate languages and programming constructs
  4. Better understand programming languages and their design tradeoffs
  5. Easier to learn new languages
  6. Able to design and implement new languages (domain specific languages, interface specifications, protocols)
CS 520 (Foundations of CS), CS 570 (Programming Foundations), and CS 571 (Programming Tools and Environments). Assumes familiarity with the basics of logic (predicate calculus), recursion and induction, data structures, automata, and grammars. All students should be proficient with at least one object-oriented programming language (e.g. java, C++) - inheritance, polymorphism, and should have seen at least two different programming languages.
Jeremy Johnson
Office: University Crossings 139
e-mail: jjohnson AT cs DOT drexel DOT edu
office hours: M 8-9 (online) and R 4-6 (UC 139 and online) additional hours by appointment.
Meeting Time
Thursday 6:30-9:30 in Rush 213 and online. The online and in class sections of the course will be identical and graded as one class. In class lectures will be recorded and posted on BBLearn and are available to all students. Online students may view the lecture live and participate through BBLearn collaborate.
Course Discussion Groups
Piazza will be used for class discussion and announcements - check regularly


  1. Functional Programming and Equational Reasoning (SICP)
  2. Metacircular Interpreter for Scheme (SICP)
  3. Streams and Delayed Evaluation (SICP)
  4. Lambda Calculus (TAPL)
  5. Types, Polymorphism and Type Inference in Haskell (LYHGG)
  6. Introduction Coq (SF)
  7. Operational Semantics (SF,TAPL)
  8. Proving Program Equivalence (SF,TAPL)
  9. Hoare Logic (SF,TAPL)
  10. Type Systems and Type Checking (SF,TAPL)
  11. Simply Typed Lambda Calculus (SF,TAPL)


  1. Homework (5 x 10% = 50%)
  2. Participation (10 x 2% = 20%)
  3. Online midterm during week 6 [3 hour block selected by student] (15%)
  4. Online final during exam week [3 hour block selected by student] (15%)
Grade determined by weighted total in BBLearn. Curve only used if median too low.

Academic Honesty

  1. Students must abide by the University Academic Integrity policy
  2. All work must be your own unless otherwise explicitly stated.
  3. You may not copy code from any source, including from other students, nor may you show your code to other students.


Reference Books
  1. Alfred V. Aho and Jeffrey D. Ullman, Foundations of Computer Science - C Edition, W. H. Freeman and Company, 1995.
  2. Michael L. Scott, Programming Language Pragmatics, 3rd Ed., Morgan Kaufmann Publishers, 2009.
  3. Adam Chilapa, Certified Programming with Dependent Types
Web Pages
  1. Lambda Calculus Calculator
  2. PLT Redex


See piazza.


This list is tentative and may be modified at the instructor's discretion.
  1. Lecture 1: Functional Programming (SICP Ch. 1)
  2. Lecture 2: Equational Reasoning and Structural Induction (Notes)
  3. Lecture 3: Operational Semantics for Scheme (SICP Sections 3.1, 3.2 and 4.1)
  4. Lecture 4: Streams, Delayed Evaluation and Variants of Scheme (SICP Sections 3.5, 4.2 and 4.3)
  5. Lecture 5: Lambda Calculus (TAPL Chapters 5-7)
  6. Lecture 6: Simply Typed Lambda Calculus (TAPL Chapters 3,5,8,9)


Assignments and Labs


Created: 4/3/17 [last updated 4/20/17] by jjohnson AT cs DOT drexel DOT edu