Programming Languages: Applications and Design - CO663

Looking for a different module?

Module delivery information

This module is not currently running in 2020 to 2021.


This module shows students what trade-offs are involved in designing a programming language, and how those trade-offs ultimately influence programmer productivity. The module starts with a quick, example-based introduction to the basics of programming languages. It then continues with a series of problems that are each solved in several programming languages. After each problem, we stop and reflect on which language features help and which hinder. Finally, towards the end of the module, several of the language features previously identified are discussed in a more general setting. Indicative examples are:
• Basics of programming languages, such as: C++, C#, Dart, Go, Haskell, Java, Javascript, MATLAB, OCaml, Pyret, Python, Scala, Swift, R, Racket, Rust.
• Problem solving, in multiple languages. The problems will involve concepts such as parsing, evaluation, trees, graphs, memoization, randomization, big data algorithms, reactive user interfaces.
• Language features: pattern matching, first order functions, polymorphism, effects, exceptions, types, algebraic data types, modules, objects, classes.


This module appears in the following module collections.

Contact hours

Total contact hours: 32 hours
Private study hours: 118 hours
Total study hours: 150 hours

Method of assessment

13.1 Main assessment methods

Programming Assignment (30%)
Participatory Exercises (15%)
Paper Presentation (25%)
Examination 2 hours (30%)

13.2 Reassessment methods
Like for like.

Indicative reading

Bird, R. (2014). Thinking Functionally with Haskell, Cambridge University Press.
Hutton, G. (2016) Programming in Haskell, 2nd edition. Cambridge University Press
Krishnamurthi, S. (2015) [available for free online]. Programming Languages: Application and Interpretation.
Lopes, C.V. (2014). Exercises in Programming Style. Chapman and Hall/CRC.
Minsky, Y., et al. (2013). Real World OCaml, O'Reilly Media.

See the library reading list for this module (Canterbury)

Learning outcomes

8. The intended subject specific learning outcomes.
On successfully completing the module students will be able to:
8.1 Describe and compare programming paradigms: declarative, functional, imperative, object-oriented.
8.2 Solve small-scale programming problems in a range of programming languages.
8.3 Compare programming languages objectively, in order to choose the right tool for a given task.
8.4 Make effective use of a range of tools, such as editors, compilers and interpreters.

9. The intended generic learning outcomes.
On successfully completing the module students will be able to:
9.1 Demonstrate comprehension of the trade-offs involved in design-choices.
9.2 Make effective use of IT facilities for solving problems.
9.3 Manage their own learning and development, through self-directed study and working on continuous assessment.


  1. ECTS credits are recognised throughout the EU and allow you to transfer credit easily from one university to another.
  2. The named convenor is the convenor for the current academic session.
Back to top

University of Kent makes every effort to ensure that module information is accurate for the relevant academic session and to provide educational services as described. However, courses, services and other matters may be subject to change. Please read our full disclaimer.