Topic Name Description
Course Introduction Page Course Syllabus
Page Course Terms of Use
Unit 1: Introduction to Programming Languages Page Unit 1 Learning Outcomes
1.1: Evolution of Programming Languages URL Wright State University: T.K. Prasad's "Evolution of Programming Languages"

Read these slides, which provide a history of development of programming languages along the three major paradigms: Imperative, Functional, and Object-oriented. It also briefly discusses modern scripting languages.

URL Johns Hopkins University: Mike Grant, Zachary Palmer, and Scott Smith's "Principles of Programming Languages"

Read chapter 1, which provides an overview of the pre-history and the early history of programming languages and an introduction to lambda calculus.

Page Indian Institute of Technology, Delhi: S. Arun Kumar's "Introduction to Programming Languages"

Watch this lecture, which provides a detailed introduction to programming languages.

Write a few paragraphs describing the impacts of Internet on the evolution of programming languages. Which programming languages were developed specifically for the Web?

URL 99 Bottles of Beer

This website collects code fragments for the song "99 bottles of beer" in 1500 different programming languages and variations. Write your own code to generate the lyrics for the song in a programming language that you know (for example, C or Java). The lyrics of the song can be found here. Check your code against what was submitted to the library for the language that you used. Compare that code with what was written for Prolog, Pascal, Scala, Scheme, Lisp, ML, C#, F#, and Haskel.

1.2: Lambda Calculus URL University of Texas at Austin: Thomas Dillig's "Basic Lambda Calculus"

Read these slides, which will introduce you to lambda calculus. Skip the first 8 slides, which are about the organization of the CS 312 course. What are the four expressions in lambda calculus?

URL New York University: Chris Baker's "Lambda Tutorial"

This is a great tutorial on lambda calculus. Browse to "Examples and practice," which have several exercises on lambda calculus. Guess the result of each expression before clicking "Reduce." Feel free to explore the rest of the page as well as the various recommended resources on lambda calculus.

1.3: Syntax as a Language's Form URL Wright State University: T.K. Prasad's "Syntax Specification: Grammars"

Read these slides, which will introduce you to syntax as a language. The first few slides provide an overview of compiler, interpreter, and lexical analyzer.

Page Indian Institute of Technology, Delhi: S. Arun Kumar's "Syntax and Grammar"

Watch these lectures.

1.4: Semantics as the Meaning URL University of Texas at Austin: Thomas Dillig's "Operational Semantics I"

Read these slides. While there are several forms of language semantics (axiomatic, denotational, and operational), we will focus on operational semantics in this course. Make sure that you understand the difference between eager versus lazy evaluation, and call-by-name vs call-by-value.

URL University of Texas at Austin: Thomas Dillig's "Operational Semantics II"

Read these slides.

Page Indian Institute of Technology, Delhi: S. Arun Kumar's "Semantics"

Watch this video, which explains semantics and highlights several basic principles underlying semantics.

Unit 2: Types Page Unit 2 Learning Outcomes
2.1: Principle of Typing URL University of Texas at Austin: Thomas Dillig's "Principles of Typing"

Read these slides, which will define typing, and explain why we need typing and how types compute. What is the difference between dynamic and static typing? Do you know any language with dynamic typing?

URL Johns Hopkins University: Scott F. Smith's "Principles of Programming Languages"

Read Chapter 6, which discusses type systems.

2.2: Type Checking URL University of Texas at Austin: Thomas Dillig's "Basic Typing Rules and Proofs"

Read these slides, which discuss how to construct type systems for multiple languages and prove/show soundness of a type system.

URL University of Virginia: Wes Weimer's "Type Checking and Static Semantics"

Read these slides, which discuss typed programming languages.

Page Indian Institute of Technology, Delhi: S. Arun Kumar's "Type Checking"

Watch this lecture, which discusses type checking.

2.3: Polymorphic Typing and Type Inference URL University of Texas at Austin: Thomas Dillig's "Polymorphic Tpying and Type Inference"
Unit 3: Functional Programming Page Unit 3 Learning Outcomes
3.1: Overview URL Haskell Wiki: "Functional Programming”

Read this article for an overview of functional programming.

Page University of California, Berkeley: Brian Harvey's "Functional Programming"

Watch these lectures for an overview of functional programming.

3.2: Higher-order Functions Page University of California, Berkeley: Brian Harvey's "Higher-Order Procedures"

Watch this lecture for examples of higher-order functions and procedures in functional programming.

3.3: Pure Functional Functions URL Paul Hudak, John Peterson, and Joseph Fasel's "Values, Types, and Other Goodies"

Read this page about values and types in Haskell.

URL Paul Hudak, John Peterson, and Joseph Fasel's "Functions"

Read this page about functions in Haskell.

3.4: Real Languages: Haskell URL University of Texas at Austin: Thomas Dillig's "Real programming languages: Haskell"

Read this overview of Haskell, a major functional programming language.

3.5: MapReduce URL Ralf Lammel's "Google's MapReduce Programming Model - Revisited"

Read this article, which gives an overview of the famous MapReduce algorithm invented by Google and its implementation in Haskell.

Unit 4: Imperative Programming Page Unit 4 Learning Outcomes
4.1: Introduction to Imperative Programming URL University of Texas at Austin: Thomas Dillig's "Introduction to Imperative Languages"

Read these slides. What are the advantages and disadvantage of GOTO statements?

4.2: Pointers URL University of Texas at Austin: Thomas Dillig's "Operational Semantics of an Imperative Language with Pointers"

Read these slides.

Unit 5: Object-Oriented Programming Page Unit 5 Learning Outcomes
5.1: Introduction and Fundamental Features of Object Oriented Programming URL University of Texas at Austin: Thomas Dillig's "Object-Oriented Languages"

Read these slides.

URL Johns Hopkins University: Scott F. Smith's "Principles of Programming Languages"

Read Chapter 5, which discusses object-oriented languages and why they have become popular.

Page University of California, Berkeley: Brian Harvey's "Object-Oriented Programming"

Watch these lectures for an introduction to object-oriented programming. The second lecture discusses the implementation of object-oriented programming in SmallTalk, as well as several basic concepts in object-oriented programming languages, such as inheritance, class, superclass, exceptions, simulation, message sending and type declaration. The third lecture discusses the specific and fundamental features in object-oriented programming languages.

5.2: Object Types and Subtyping URL Johns Hopkins University: Scott F. Smith's "Principles of Programming Languages"

Read Chapter 6 on Type Systems for a discussion of statically-typed object-oriented languages and the similarities and differences between C++ and Java implementations of object system.

5.3: Java Virtual Machine URL Young Telecaster's "Java tutorial-Lecture 3-Basic Introduction 3"

Watch this brief overview of Java Virtual Machine, method lookup, verifier analysis, and Java security. What is the difference between a complier and a virtual machine?

5.4: Templates and Generics URL Chris Szalwinski's "Overview of Polymorphism"

Read this introduction to parametric polymorphism for object-oriented programming through in-depth analysis of C++ Templates and Java Generics.

Unit 6: Scripting Languages Page Unit 6 Learning Outcomes
6.1: What Is a Scripting Language? URL John K. Ousterhout's "Scripting: Higher Level Programming for the 21st Century"

Read this introduction to scripting languages. You will learn to distinguish between system programming languages and scripting languages (e.g strong versus weak typing, compiled versus interpreted).

URL University of Maryland, Baltimore County: Daniel J. Hood's "Introduction to Scripting Languages"

Read this brief overview of scripting languages, including short scripts in major scripting languages such as Ruby, Perl, JavaScript, PHP, and Python.

6.2: Regular Expressions URL University of Maryland, Baltimore County: Daniel J. Hood's "Regular Expressions"

Read each of the pages under "Notes". Regular expressions are sets of symbols and syntactic elements used to match patterns of text.

6.3: Ruby URL University of Maryland, Baltimore County: Daniel J. Hood's "Ruby"

Read each of the pages under "Notes" for examples relating to Ruby, a popular programming language.

6.4: Python URL University of Maryland, Baltimore County: Daniel J. Hood's "Python"

Read each of the pages under "Notes" for examples relating to the Python scripting language.

6.5: JavaScript URL University of Maryland, Baltimore County: Daniel J. Hood's "JavaScript"

Read the pages under "Notes" for examples relating to JavaScript.

Unit 7: Logical Programming Page Unit 7 Learning Outcomes
7.1: Overview URL University of Oxford: Michael Spivey's "An Introduction to Logic Programming through Prolog"

Read Chapter 1 for an introduction to logic programming.

Page Indian Institute of Technology, Kharagpur: P. Dasgupta's "Prolog"

Watch this lecture for an overview of logic programming, using Prolog as an example.

7.2: Basic Features and Examples Page University of California, Berkeley: Brian Harvey's "Logic Programming"

Watch these lectures for an overview of the fundamental features of logic programming using several Scheme examples.