Computer Science @ University of St Andrews

University of St Andrews crest

CS2006 Advanced Programming Projects

This module introduces the functional and dynamic programming paradigms, using languages such as Haskell and Python. Understanding is reinforced through extensive practical exercises.



The aims of this module are:

  • To enhance the student's understanding of programming techniques by exposing them to different ways of thinking about computer programming,

Learning Outcomes

On successful completion of this module, the student should:

  • Understand the key issues involved in using a functional programming language.
  • Understand the key issues involved in using a dynamic programming language.
  • Understand how to apply functional/dynamic programming techniques in other language settings.
  • Have completed 3-4 substantial practical projects, split between the two languages, and undertaken in small teams (2-3 students)


Introduction to functional programming
The Haskell language; types and classes; list comprehensions; recursive functions; higher-order functions; lazy evaluation; using the Haskell compilation system and other tools; inter-language working.
Introduction to dynamic/interpreted programming languages
Introduction to working with Python; the basic principles of the Python language; basic data types, functions, and dealing with errors; file-oriented input/ouput; core data structures (lists, sets, tuples, dictionaries), some example uses (e.g. network programming, WWW programming, graphics programming).

Compulsory Elements

See the School of Computer Science Handbook for general information about compulsory elements.

This module has the following compulsory elements in addition to those common to all modules (tutorials and class tests).

  • Pass all pieces of coursework.
  • Actively participate in collaborative development.
  • Participate in demonstration sessions.

Module Delivery