- induction lecture

**Foundations**- Foundations
- Lecture slides, 10 Jan - 24 Jan. Powerpoint, PDF handout.
**Handout 0**: Historical development of "programming" concepts, 10 Jan.**Handout 1**: Extensional functions and Types, 12 Jan- Exercise 0: Warm-up
exercise, 16 Jan (1 week),
*Model solutions* - Exercise 1:
Extensional functions and set theory, 16 Jan (2 weeks).
*Model solutions*

- Foundations
**Functional programming**- Basic Functional programming: Haskell
- Lecture slides, 10 Jan - 24 Jan. Powerpoint, PDF handout.
- Chapter 5: Introduction to Haskell from Concepts in Programming Languages. 24 Jan
- HaskellWiki - Lots of good examples of Haskell programs and explanations.
- Learn You a Haskell (popular text with students).
- Exercise 2: Functional programming,
23 Jan (1 week),
*Model solutions* - Class Test 1, 9 Feb.
*Model solutions*

- More Functional programming
**Handout 2**: Specification and verification of functional programs (Intro), 26 Jan.- Haskell Examples from the lectures: comprehensions.hs, higher-order.hs
- Java examples: polymorphic List class, polymorphic List operations.
- Recommended reading: Bird and Wadler text
- Exercise 3:
Functional programs and reasoning, 30 Jan.
*Model solutions*. - Exercise 4 (in-class): Higher-order functions, 6 Feb.
- Exercise 4 (homework): Higher-order
functions, 6 Feb.
*Model Solutions*.

- Basic Functional programming: Haskell
**Type systems**- Type systems 1
- Handout 10 from Models of Computation (for Review)
**Handout 3**: Simply typed lambda calculus, 13 Feb.

- Wikibooks Haskell: Fix and recursion
**Handout 4**: The 'calculus' of the lambda calculus, 16 Feb.

**Handout 5**: Functional languages as typed lambda calculi, 23 Feb.

- Exercise 5: Simply typed lambda
calculus, 13 Feb.
*Model Solutions* - Exercise 6: (More) Simply typed lambda
calculus, 20 Feb.
*Model Solutions* - Class Test 2, 2 Mar.
*Model Solutions* - Exercise 7: (Lambda
calculus basics), 6 Mar. (misprinted originally as "Exercise Sheet 6")
*Model Solutions*

- Type systems 2
**Handout 6**: Polymorphic lambda calculus (draft), 7 Mar**Handout 7**: Data abstraction: Abstract data types, 9 Mar.- Code examples: SortedListADT.hs, QueueADT.hs
**Handout 8**: Relational reasoning for Parametric polymorphism, 16 March.- Exercise 8 Data abstraction and
parameric polymorphism (Exercises embedded in the Handouts 7
and 8). 13 & 16 March.
*Model solutions* - Class Test 3, 23
March.
*Model solutions*

- Type systems 1
**Imperative programming**- Imperative programs
**Handout 9**: Imperative programs and state, 21 Mar. (not examined)**Handout 10**: Imperative programs and lambda calculus, 21 Mar.- Wikibooks Haskell: Monads and I/O, Mutable objects
- Code examples in Haskell: imperative.hs
- Exercise 9: Imperative lambda calculi, 21 Mar. Model soluitons

- Imperative programs

- Weekly exercises (unassessed)
- 3 Class tests (20%)
- Report for
**extended**version of the module (10%) - Final exam (80% for UG module, 70% for
**extended**module)

Room 210 Computer Science

Tel: (+44) 121 414 2740

Email: U.S.Reddy 'at' cs.bham.ac.uk

Office hours: Tuesdays, 3:00-4:00 and 5:00-6:00, in 210 Computer Science

- Historical development of Programming Languages

- Current issues in Programming Languages
- JaneStreet Capital talk at CMU on functional programming on the Wall Street
- Google's use of higher-order functions 'map' and 'reduce' (another name for fold), Research paper on the same topic
- Grand Challenges in Programming Languages (Notes from a conference session: 2009 ACM Symposium on Principles of Programming Languages)
- Stack Exchange Q&A site for programming language research
- Why Functional Programming Matters by John Hughes

- Wikipedia pages on topics
- Wikipedia pages on scientists:
- Mathematical Geneology: Alonzo Church, Christopher Strachey
- Fundamental concepts in programming languages by Christopher Strachey (Local access in Birmingham)
- Abelson and Sussman's 'Structure and and Interpretation of Computer Programs' (online edition from MIT Press)

- Main text book:
John
Mitchell,
*Concepts in Programming Languages*, Link to Stanford course - Additional reading:
Michael
Scott:
*Programming Language Pragmatics*(any edition). - Richard Bird and Philip
Wadler,
*Introduction to Functional Programming*(1988) - Zohar
Manna,
*Mathematical Theory of Computation*(any edition) - Reading list at the library