Coronavirus information for applicants and offer-holders

We understand that prospective students and offer-holders may have concerns about the ongoing coronavirus outbreak. The University is following the advice from Universities UK, Public Health England and the Foreign and Commonwealth Office.

Read our latest coronavirus information

BEng Computer Systems Engineering / Course details

Year of entry: 2021

Course unit details:
Programming Languages & Paradigms

Unit code COMP26020
Credit rating 20
Unit level Level 2
Teaching period(s) Full year
Offered by Department of Computer Science
Available as a free choice unit? No

Overview

There is a variety of programming languages designed with different features aiming to address different types of problems. The unit is an advanced course for students who have already mastered one programming language. It is trying to consider the broad spectrum of different programming paradigms and how these can be used and translated.

Pre/co-requisites

Unit title Unit code Requirement type Description
Programming 1 COMP16321 Pre-Requisite Compulsory
Programming 2 COMP16412 Pre-Requisite Compulsory

COMP16321 and COMP16412 are pre-requisites for COMP26020

Aims

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.
 

 

Learning outcomes

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
 
 
 

 

Syllabus

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
Monads
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 and learning 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.
 

Knowledge and understanding

 
On the successful completion of the course, students will be able to:  
ILO 1 Design, implement, modify, test, debug and evaluate programs in C, C++, Solidity and Haskell
 
 
 
ILO 2 Compare and contrast the appropriateness of various programming languages and paradigms with respect to real-world problems
 
 
 
ILO 3 Explain the advantages and disadvantages of functional programming with respect to imperative programming
 
 
 
ILO 4 Describe the principles, outline the problems, and discuss methods and techniques applied to the compilation process
 
 
 
ILO 5 Explain the role of each of the basic components of a standard compiler
 
 
 
ILO 6 Write C/C++ code conforming to best practice
 
 
 
ILO 7 Explain the impact of concurrency or blockchain on programming
 
 
 
ILO 8 Identify the impact of modern trends in programming languages

Practical skills

Analytical skills
Innovation/creativity
Problem solving
 

Assessment methods

Method Weight
Written exam 80%
Written assignment (inc essay) 20%

Recommended reading

COMP26020 reading list can be found on the Department of Computer Science internal pages

Study hours

Scheduled activity hours
Lectures 44
Practical classes & workshops 20
Independent study hours
Independent study 200

Teaching staff

Staff member Role
Rizos Sakellariou Unit coordinator

Return to course details