share this page

Structure

In the programme the student has to take 5 Mandatory modules (25 ECTS) and 3 electives (15 ECTS). In addition to taught modules the student will have to complete a research project (20 ECTS). Further detail on these modules are outlined below. All modules are 5 ECTS unless indicated.

Mandatory Modules
Software Architecture & Design (M) Software architects are typically responsible for the definition of software “systems by applying abstract knowledge and proven methods to a set of technologies with the goal of creating an extensible and maintainable solution” [Hofstader, 2009]. In this module, students will learn about the principles of software architecture and design and how and when to apply software design and architecture patterns to solve common problems when designing and developing software with the goal of creating an extensible and maintainable software solution.
Software Process Engineering (M) Traditionally, software architects were responsible for the design and technological decisions of the software development process. Over the past decade, the traditional role of the software architect has changed. Agile development methodologies has meant the adoption of tools and practices that help avoid or decouple up front systems or architectural design. Agile teams focus on smaller local decisions, restructuring the system through refactoring maintaining the development pace. In this module, students will be introduced to the main software development methodologies and development operations (DevOps) processes designed to support the development of software and software based systems. As part of this module, students will examine the challenges that architects, developers and testers face in this environment and strategies and best practices to minimise risk and maximise the quality of the software produced.
Scalable Microservices (M) Over the past number of years, a new paradigm for software architecture has emerged, referred to as microservices. Microservices are singular in terms of their responsibility and can be independently scaled, tested and deployed. Services developed using this approach are built around business capabilities using best practices from domain-driven-design and are autonomous and isolated. In this module the student will learn a framework technology and using this framework will develop skills to build, automate, scale and manage a distributed system created from a number of collaborating components represented as microservices.
Algorithm Analysis & Design (M) This module explores techniques for the analysis and design of efficient algorithms for a wide range of real-life problems. In this module the learner will be introduced to a set of graph algorithms available for solving network flow problems, shortest paths, minimum spanning trees, and graph connectivity. Additionally, the module covers the strengths and limitations of approximation algorithms to tackle hard computational problems (NP-hard).
Computing Research & Practice (M) The purpose of this module is to introduce students to the tools and techniques for doing research. In this module the nature of research will be examined and the methods to undertake investigations across a broad range of subjects presented. On completion of this module students will have identified a research topic and developed a research proposal outlining the context of the topic, its research aims, objectives, methodologies, work plan etc.
Electives
(The electives indicated below are a sample set that could be offered in any given semester)
Declarative & Concurrent Programming (E) In this module, learners will be introduced to parallel, concurrent and distributed programming, which are key concepts for correctly designing distributed-based applications and architectures. As part of this module students will be introduced to an industrial declarative programming language called Erlang, which is a programming language that has built in support for concurrency, distribution and fault tolerance. Using Erlang, students will design and implement applications that support concurrency and will access applications built using Erlang in terms of their scalability and resiliency.
Scripting for System Automation (E) The continued push towards automating not just the software development process but also infrastructure management has greatly increased the efficiency of modern software organizations. It has also led to some of the responsibility for such automation shifting from system administrators to developers, empowered by many new 'DevOps' tools. This module will address the scripting skills that system administrators, developers and testers need to automate tasks in development, operations and infrastructure management.
Data Analytics (E) Data analytics (DA) is the science of examining raw data with the purpose of drawing conclusions about that information. Data analytics is used in many industries to allow companies and organizations to make better business decisions and in the sciences to verify or disprove existing models or theories. Data analytics is distinguished from data mining by the scope, purpose and focus of the analysis. Data analytics focuses on inference, the process of deriving a conclusion based solely on what is already known by the researcher. This module explores the most recent trends in this fast growing field.
Programming Language Design (E) Programming languages are an important tool in software development. The knowledge and understanding of their implementation is valuable to design, develop and maintain software systems. Knowing the language features and their implementation allows the software engineer to: evaluate the performance, efficiency, robustness, reliability and security of applications and; choose the most appropriate language to implement an application. In this module, the student will design and implement a language processor using different architectural and design patterns. As part of the module the student will complete a practical software development project that combines areas in software engineering such as formal languages, grammars, automata, software architecture and design, programming, operating systems, computer structure and model-driven development.
Decision Analytics (E) In many real-life applications with underlying constraints there are several parameters to configure. Solving such problems involves finding configurations that satisfy the constraints associated to the problem. In addition, many times there are certain criteria to optimise. Many configurations are incompatible and only few are the best (optimal solutions). In this module, students will learn to model optimisation problems and apply algorithms that facilitate decision making leading to optimal solutions.
Software Vulnerabilities (E) When developing code, developers and designers often unwittingly introduce software vulnerabilities because they are unaware how they are caused or how to avoid them. These vulnerabilities are often very difficult to find and while testers and developers are trained how to test for and locate software bugs, the same is not true for vulnerabilities. In this module students will learn how to design and develop software so that security is an integral part of the process. In addition, students will learn how to locate and identify software vulnerabilities and how to prevent the inclusion of such vulnerabilities in software.


In addition to the above in order to fulfill the requirements for the award the student must complete a project and dissertation. This project is 20 ECTS and further information on this module is indicated below.

Computer Science Project Implementation (M) (20 ECTS) Prior to completing this module the student through the employment of various research methods and selected practices will have identified their chosen research question. As part of this module, the student will complete their research project and implementation relevant to their field or domain of expertise. The student will be expected to disseminate the research work and outcomes through an oral/poster presentation and submission of a dissertation.