Lectures for COMS12100
Intro to Software Engineering
The lecturers are Ian Holyer
for weeks 13-18, James
Marshall for weeks 19-24.
See notes on
rooms and
books.
| Chapter | View | Edit | |
|---|---|---|---|
| 1 Introduction | intro.pdf | intro6.pdf | intro.odp |
| 2 Straight Line Programming | straight.pdf | straight6.pdf | straight.odp |
| 3 Structured Code | code.pdf | code6.pdf | code.odp |
| 4 Classes and Objects | classes.pdf | classes6.pdf | classes.odp |
| 5 Object Oriented Design | ood.pdf | ood6.pdf | ood.odp |
| 6 Reports | reports.pdf | reports6.pdf | reports.odp |
| 7 Library Classes | libraries.pdf | libraries6.pdf | libraries.odp |
| 8 Graphics | graphics.pdf | graphics6.pdf | graphics.odp |
| 9 Structures | structures.pdf | structures6.pdf | structures.odp |
| Programming Challenge | challenge | ||
| 10 Complexity | Intro to complexity | Print version | Latex |
The slides in .odp format were written using Open Office at www.openoffice.org
To view a pdf file in Unix, use acroread (Acrobat Reader) command; on a PC install Acrobat Reader direct. To print, use the print option in Acrobat Reader.
| Chapter | Monday | Thursday | Friday |
|---|---|---|---|
| I Meet Haskell | Introduction. What is functional programming? Why do it? (Thompson chapter 1) | What's in Haskell? The Prelude. Basic types and syntax (Thompson chapters 2 and 3) | Designing a functional program, primitive and general recursion, testing (Thompson chapter 4) |
| II Basic Data Types | Tuples, lists and strings, list comprehensions, polymorphic lists and overloading (Thompson chapter 5) | Functions over lists: primitive and general recursion, sorting (Thompson chapter 7) | Lazy programming: lazy evaluation, infinite lists, Sieve of Erastosthenes (Thompson chapter 17) |
| III Advanced Haskell | Postponed previous lecture | Patterns of computation over lists: maps, filtering, folding, splitting (Thompson chapter 9) | Functions as values: composition, partial application, lambda notation (Thompson chapter 10) |
| III Advanced Haskell (cont) | Classes, types and algebraic types (Thompson chapters 12-14) | See Chapter IV | See Chapter IV |
| IV Reasoning About Programs | See Chapter III | Proof: definedness, termination and finiteness, induction and structural induction (Thompson chapter 8) | Complexity: notation recap, divide-and-conquer, the Master Theorem (notes) |
| V Graph Theory | Bank Holiday | Graph theory and algorithms (slides) (Prim's demo) | Lecture cancelled |
| V Graph Theory (cont) | Graph theory and algorithms (cont) (Dijkstra's demo) | See Chapter VI | See Chapter VI |
| VI Theory of Computation | See Chapter V | Computational equivalence, uncomputability, complexity classes P and NP, NP-complete problems (Turing Machine demo) | Lecture cancelled |
James Marshall's lectures on functional programming will be a fusion of the old-fashioned (writing on OHP slides) and the new (live demonstrations of Haskell programming). There will be almost no printed handouts or slides; students are expected to take notes. The lectures will closely follow the structure and content of the course text 'The Craft of Functional Programming' by Simon Thompson. For each lecture the appropriate chapter(s) in Thompson will be indicated. There are several copies of this book available from the library, or you can buy your own (new or used) for quite a reasonable price.
We will use the Glasgow Haskell Compiler (GHC) for this course, rather than the Haskell User's System (Hugs) used in Thompson. GHC is installed in the Linux labs: interactive mode should suffice for all your development, just type ghci filename in a terminal window to run functions in the file filename.hs. To download GHC for your own computer consult our Haskell Online Tutorial (H.O.T.)
The Haskell programs used in the course text, and during the lectures, are available from Simon Thompson's web-pages:
The documentation for the Prelude is available from the GHC page:
To supplement the lectures, by kind permission of Dr Tony Field and the Department of Computing, Imperial College London, you can work through the following notes in your own time and during the timetabled labs. These will help you with the more technical details of writing Haskell programs. The lectures will concentrate more on the concepts of functional programming. You might also work through our own Haskell Online Tutorial
- Lecture notes from Department of Computing, Imperial College London (4-up)
- Haskell Online Tutorial (H.O.T.)
Haskell in the real world: issue 7 of The Mondad Reader has an article on Haskell in the world of finance:
Worksheets:
- Worksheet 1 - Divide and Conquer Complexity (Solutions)
- Worksheet 2 - Proof by Induction (Solutions)
Interesting Books (available from the library):
- Cormen, Leiserson, Rivest and Stein (2001) Introduction to Algorithms (2nd ed.)
- Sipser (1997) Introduction to the Theory of Computation.
Previous years' lecture notes:
Lecture notes 2006-7
Lecture notes 2005-6
Lecture notes 2004-5
Lecture notes 2003-4
Lecture notes 2002-3

