SHE Level 3
SCQF Credit Points 20.00
ECTS Credit Points 10.00
Module Code M3I322912
Module Leader Martin Gallacher
School School of Computing, Engineering and Built Environment
Subject Computing
  • B (January start)

Summary of Content

This module aims to encourage students to become polyglot programmers. It will equip them with a broad understanding of the nature of a range of programming paradigms and the support provided for each paradigm in currently popular programming languages. Thus it will equip students to be able to make appropriate choices to best meet the requirements of a specific programming problem. The module also introduces a range of advanced programming techniques, such as asynchronous messaging, parallel computation and distributed programming. The module will additionally provide coverage of current and emerging programming paradigms, languages and techniques.


Comparison of programming paradigms - Object-oriented - Functional - Procedural - Declarative - Logic - Classifying languages Functional programming - Lambda calculus - First-class functions - Higher -order functions - Effect-free functions - Recursive types - Function closures - Functional reactive programming - Functional features of object-oriented languages Declarative programming - Markup languages - Regular expressions - Domain Specific Languages - Rules engines Scripting languages - Static/Dynamic typing - Interpreted languages - Integrating scripts with compiled code Managed vs. unmanaged languages - Memory management & pointers - Static and dynamic libraries - Integrating managed and unmanaged code Advanced programming techniques - Lazy evaluation and infinite streams - Control abstractions: exception handling, continuations, monads - Object-oriented abstractions: multiple inheritance, mixins, traits, multimethods - Dynamic code evaluation ("eval") - Asynchronous and parallel computation - Remote procedure calls - Messages and queues Emerging trends in programming

Learning Outcomes

On successful completion of this module, students should be able to:1. Explain the nature and applicability of a range of programming paradigms, including object-oriented, functional, procedural, declarative, and the support provided for each in currently popular programming languages.2. Explain the nature and applicability of a range of programming language types with respect to whether they are compiled/dynamic, managed/unmanaged, concurrent or domain specific.3. Evaluate emerging trends in advanced programming languages and techniques.4. Develop and test a software application by selecting a programming language appropriate to the requirements and making appropriate use of a range of advanced programming techniques available within that language.

Teaching / Learning Strategy

The university 'Strategy for Learning' documentation has informed the learning and teaching strategy for this module. The module's material will be introduced through lectures, while practical exercises, based on the lecture material, will be given to students for their laboratory sessions. Tutorials will be used to help explain and elaborate on both the lecture material and the laboratory exercises. All lecture, laboratory and tutorial material will be made available on GCU Learn and links will be provided to appropriate external material such as podcasts, MOOCs, videos and literature. During all lab and tutorial sessions students will receive formative feedback on their performance in undertaking the laboratory and tutorial exercises. Summative feedback and grades will also be provided for the coursework assignment undertaken as part of the module using GCU Learn. GCU Learn will also be used to provide the students with module specific forums and wiki's to stimulate student and lecturer interaction outwith the normal lecture, laboratory and tutorial sessions.

Indicative Reading

Chiusano, P & Bjarnason, R (2014) Functional Programming in Scala, Manning Evans, B J & Verburg, M (2012) The Well-Grounded Java Developer: Vital Techniques of Java 7 and Polyglot Programming, Manning Subramaniam, V (2013) Programming Groovy 2: Dynamic Productivity for the Java Developer, Pragmatic Bookshelf Scott, M L (2009) Programming Language Pragmatics, Morgan Kaufmann Abelson, H (1996) Structure and Interpretation of Computer Programs, 2 nd ed, MIT Press Fowler, M & Parsons, R (2010) Domain Specific Languages, Addison Wesley Ary, J (2013) Instant Drools Starter

Transferrable Skills

D1 Specialist knowledge and application D2 Critical thinking and problem solving D4 Communication skills, written, oral and listening D5 Numeracy D7 Computer literacy D8 Self confidence, self discipline & self reliance (independent working) D10 Creativity, innovation & independent thinking D15 Ability to prioritise tasks and time management

Module Structure

Activity Total Hours
Independent Learning (FT) 134.00
Lectures (FT) 24.00
Practicals (FT) 12.00
Tutorials (FT) 12.00
Assessment (FT) 18.00

Assessment Methods

Component Duration Weighting Threshold Description
Course Work 02 n/a 50.00 35% Written Report
Course Work 01 n/a 50.00 35% Practically based programming assignment