Skip to navigation | Skip to main content | Skip to footer

COMP26020 Programming Languages & Paradigms syllabus 2021-2022

COMP26020 Programming Languages & Paradigms

Level 2
Credits: 20
Enrolled students: 365

Course leader: Rizos Sakellariou

Additional staff: view all staff


  • Pre-Requisite (Compulsory): COMP16321
  • Pre-Requisite (Compulsory): COMP16412

Additional requirements

  • COMP16321 and COMP16412 are pre-requisites for COMP26020

Assessment methods

  • 80% Written exam
  • 20% Coursework
Sem 1 w1-5,7-12 Lecture Engineering Building A 2A.040 Lecture Theatre B Mon 11:00 - 12:00 -
Sem 1 w2,4,7,9,11-12 Lab 1.8+1.10 Fri 11:00 - 13:00 -
Sem 1 w2,4,7,9,11-12 Lab 1.8+1.10 Fri 14:00 - 16:00 -
Sem 1 w2,4,7,9,11-12 Lab 1.8+1.10 Fri 16:00 - 18:00 -
Sem 2 w20-27,31-34 Lecture Engineering Building A 2A.040 Lecture Theatre B Tue 15:00 - 16:00 -
Sem 2 w21,23,25,27,32,34 Lab 1.8+1.10 Thu 09:00 - 11:00 G
Sem 2 w21,23,25,27,32,34 Lab 1.8+1.10 Tue 11:00 - 13:00 F
Sem 2 w21,23,25,27,32,34 Lab 1.8+1.10 Mon 16:00 - 18:00 -


This course unit covers in some reasonable depth the principles of different programming language paradigms for students who already have good knowledge of one programming language.  In the first part, the unit will use as a vehicle the C/C++ and Haskell programming languages to discuss the advantages and disadvantages of the imperative and functional programming paradigm. In the second part, the unit will cover topics such as compilation of programming languages, concurrency and contemporary trends in programming languages.

This course unit detail provides the framework for delivery in 20/21 and may be subject to change due to any additional Covid-19 impact.  Please see Blackboard / course unit related emails for any further updates.


This module aims to introduce students to the key principles of different programming language paradigms. It aims to compare and contrast the advantages and disadvantages of the imperative and functional programming paradigms, describe the key principles of compilation and highlight the impact of modern trends on programming languages.


The course unit will be structured according according to 4 complementary parts:
Part I: Overview and the imperative programming paradigm: C, C++
Overview of the main programming paradigms: imperative vs declarative, structured, object-oriented, concurrent, functional
Structured imperative programming in C
Syntax, type system, control flow, build/debugging tools
Dynamic memory allocation, pointers
Introduction to Object Oriented programming in C++
Polymorphism and Inheritance
C/C++ use cases
high performance computing, systems/kernel programming
Memory (un)safety in C/C++ programs, memory errors: vulnerabilities, attacks, defenses
Part II: Functional programming: Haskell
Basic concepts of functional programming: datatypes and recursive functions
Haskell basics
List comprehension, Case study: sorting algorithms
Trees, Case study: binary search trees, red-black trees
Using higher-order functions: lambda, map, fold
Type classes
Lazy Evaluation
Case study: Parser combinators
Part III: Compilation of Programming Languages
Introduction: What is a compiler, high-level view of compilation, a general structure of a compiler.
The Front-End: Lexical analysis, syntax analysis, semantic analysis
The Middle-End: Intermediate representation, code optimisation
The Back-End: Code generation
Part IV: Advanced Topics
Introduction to Solidity
Concurrent Execution
Blockchains and Smart Contracts
Contemporary Trends in Languages

Teaching methods

Lectures: 40 in total, 2 per week
Laboratories: 10 2-hour sessions
Feedback: Formative feedback based on assessment of solutions to small problems. Feedback is also provided by teaching assistants in the laboratory.
Assessment: one 2-hour exam at the end of the module.

Study hours

  • Lectures (44 hours)
  • Practical classes & workshops (20 hours)



Practical skills

Analytical skills
Problem solving

Learning outcomes

On successful completion of this unit, a student will be able to:

Design, implement, modify, test, debug and evaluate programs in C, C++, Solidity and Haskell
Compare and contrast the appropriateness of various programming languages and paradigms with respect to real-world problems
Explain the advantages and disadvantages of functional programming with respect to imperative programming
Describe the principles, outline the problems, and discuss methods and techniques applied to the compilation process
Explain the role of each of the basic components of a standard compiler
Write C/C++ code conforming to best practice
Explain the impact of concurrency or blockchain on programming
Identify the impact of modern trends in programming languages

Reading list

No reading list found for COMP26020.