Master of Science in Computer Science: Software Engineering

Fully Online
18 months
2250 hours | 90 ECTS
Degree
Scaler Neovarsity
Accreditation:
EQF7

About

The course teaches students comprehensive and specialised subjects in computer science; it teaches students cutting-edge engineering skills to solve real-world problems using computational thinking and tools. Most of this program is the case (or) project-based where students learn by solving real-world problems end to end. This program has core courses that focus on computational thinking and problem solving from first principles. The core courses are followed by specialization courses that teach various aspects of building real-world systems. This is followed by more advanced courses that focus on research-level topics, which cover state-of-the-art methods. The program also has a capstone project at the end, wherein students can either work on building end-to-end solutions to real-world problems (or) work on a research topic. The program also focuses on teaching the students the “ability to learn” so that they can be lifelong learners constantly upgrading their skills. Students can choose from a spectrum of courses to specialize in a specific sub-area of Computer Science like Artificial Intelligence and Machine Learning, Cloud and Full Stack Development, etc.

Target Audience

-  Ages 19-30, 31-65, 65+
  • Target Group

    • This course is designed for individuals who wish to enhance their knowledge of computer science and its various applications used in different fields of employment. It is designed for those that will have responsibility for planning, organizing, and directing technological operations. In all cases, the target group should be prepared to pursue substantial academic studies. Students must qualify for the course of study by entrance application. A prior computer science degree is not required; however the course does assume technical aptitude; and it targets students with finance, engineering, or STEM training or professional experience.

  • Mode of attendance

    • Online/Blended Learning

  • Structure of the programme - Please note that this structure may be subject to change based on faculty expertise and evolving academic best practices. This flexibility ensures we can provide the most up-to-date and effective learning experience for our students.The Master of Science in Computer Science combines asynchronous components (lecture videos, readings, and assignments) and synchronous meetings attended by students and a teacher during a video call. Asynchronous components support the schedule of students from diverse work-life situations, and synchronous meetings provide accountability and motivation for students. Students have direct access to their teacher and their peers at all times through the use of direct message and group chat; teachers are also able to initiate voice and video calls with students outside the regularly scheduled synchronous sessions. Modules are offered continuously on a publicly advertised schedule consisting of cohort sequences designed to accommodate adult students at different paces. Although there are few formal prerequisites identified throughout the programme, enrollment in courses depends on advisement from Woolf faculty and staff.The degree has 3 tiers: The first tier is required for all students, who must take 15 ECTS. In the second tier, students must select 45 ECTS from elective tiers. Under the guidance of the Academic Staff at Woolf, students may either select exclusively from one specialization track (in which case they will earn that specialization), or they may mix tracks (in which case they will finish without a specialization). Tier Three may be completed in two different ways: a) by completing a 30ECTS Advanced Applied Computer Science capstone project, or b) by completing a 10 ECTS Applied Computer Science project and 20 ECTS of electives from the program.

  • Grading System

    • Scale: 0-100 points

    • Components: 60% of the mark derives from the average of the assignments, and 40% of the mark derives from the cumulative examination

    • Passing requirement: minimum of 60% overall

  • Dates of Next Intake

    • Rolling admission

  • Pass rates

    • 2023 pass rates will be publicised in the next cycle, contingent upon ensuring sufficient student data for anonymization.

  • Identity Malta’s VISA requirement for third country nationals: https://www.identitymalta.com/unit/central-visa-unit/

    • Passing requirement: minimum of 60% overall

  • Dates of Next Intake

    • Rolling admission

  • Pass rates

Supporting your global mobility
Supporting your global mobility

Global Recognition

Woolf degrees align with major international qualification frameworks, ensuring global recognition and comparability. Earn your degree in the most widely recognized accreditation system in the world.

Learn More About Degree Mobility

Our accreditation through the Malta Further and Higher Education Authority (MFHEA) provides a solid foundation for credential recognition worldwide.

Success stories
Success stories

How students have found success through Woolf

"As a working parent, I needed something flexible and manageable. Woolf’s structure fit me perfectly. I was nervous at first, balancing work, parenting, and midnight classes, but the support, resources, and sense of community kept me going."
Andreia Caroll
Clinical Research Nurse
“Woolf and Scaler’s hands-on Master’s program gave me the practical skills and confidence I was missing after my undergraduate degree. Real projects, professional tools, and mentorship transformed how I think, build, and solve problems — leading me to a career as a Software Engineer.”
Bhavya Dhiman
Master’s in Computer Science
"Woolf provided me flexibility, a strong community, and high quality education. It really broadened my perspective and significantly improved my communication skills. I graduated not just more knowledgeable, but also more confident and well-rounded."
Brian Etemesi
Software Engineer
“Woolf’s flexible, accredited program gave me structure, community, and the confidence to grow. From landing my dream internship to winning a hackathon, Woolf opened doors and shaped both my career and mindset.”
Dominion Yusuf
Higher Diploma in Computer Science
"As a working parent, I needed something flexible and manageable. Woolf’s structure fit me perfectly. I was nervous at first, balancing work, parenting, and midnight classes, but the support, resources, and sense of community kept me going."
Andreia Caroll
Clinical Research Nurse
“Woolf and Scaler’s hands-on Master’s program gave me the practical skills and confidence I was missing after my undergraduate degree. Real projects, professional tools, and mentorship transformed how I think, build, and solve problems — leading me to a career as a Software Engineer.”
Bhavya Dhiman
Master’s in Computer Science
"Woolf provided me flexibility, a strong community, and high quality education. It really broadened my perspective and significantly improved my communication skills. I graduated not just more knowledgeable, but also more confident and well-rounded."
Brian Etemesi
Software Engineer
“Woolf’s flexible, accredited program gave me structure, community, and the confidence to grow. From landing my dream internship to winning a hackathon, Woolf opened doors and shaped both my career and mindset.”
Dominion Yusuf
Higher Diploma in Computer Science
- Design and implement software modules adhering to object-oriented programming principles and best practices - Write effective unit tests to identify and debug software defects - Utilize version control systems to manage code changes effectively and collaborate within a development team

Course Structure

Introduction to Problem-Solving Techniques: Part 1
125 hours | 5 ECTS

About

The ability to solve problems is a skill, and just like any other skill, the more one practices, the better one gets. So how exactly does one practice problem solving? Learning about different problem-solving strategies and when to use them will give a good start. Problem solving is a process. Most strategies provide steps that help you identify the problem and choose the best solution.

Building a toolbox of problem-solving strategies will improve problem solving skills. With practice, students will be able to recognize and choose among multiple strategies to find the most appropriate one to solve complex problems. The course will focus on developing problem-solving strategies such as abstraction, modularity, recursion, iteration, bisection, and exhaustive enumeration.

The course will also introduce arrays and some of their real-world applications, such as prefix sum, carry forward, subarrays, and 2-dimensional matrices. Examples will include industry-relevant problems and dive deeply into building their solutions with various approaches, recognizing each’s limitations (i.e when to use a data structure and when not to use a data structure).

By the end of this course a student can come up with the best strategy which can optimize both time and space complexities by choosing the best data structure suitable for a given problem.

Teachers

Khalil Salhi
Khalil Salhi
ben salah meriam
ben salah meriam
Obinna David Okeke
Obinna David Okeke
Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a specialised knowledge of key strategies related to structuring data
  • Acquire knowledge of various methods for structuring data in arrays
  • Critically assess the relevance of theories of problem-solving for business applications in the domain of software development
  • Develop a critical understanding of problem-solving strategies in computing
  • Critically evaluate diverse scholarly views on the appropriateness of various problem-solving strategies
Skills
  • Creatively apply various programming methods to develop critical and original solutions to computational problems
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Apply an in-depth domain-specific knowledge and understanding to problem solving
Competencies
  • Create synthetic contextualised discussions of key issues related to problem-solving, and moving from algorithmic to heuristic problem-solving strategies.
  • Solve problems and be prepared to take leadership decisions related to applying problem-solving heuristics
  • Efficiently manage interdisciplinary issues that arise in connection to problem solving
  • Demonstrate self-direction in research and originality in solutions developed for solving problems related to data structures
  • Act autonomously in identifying research problems and solutions related to arrays and their real-world applications
  • Apply a professional and scholarly approach to research problems pertaining to data structures
Relational Databases
125 hours | 5 ECTS

About

This is a core and foundational course which aims to equip the student with the ability to model, design, implement and query relational database systems for real-world data storage & processing needs. Students would start with diagrammatic tools (ER-diagram) to map a real world data storage problem into entities, relationships and keys. Then, they learn to translate the ER-diagram into a relational model with tables. SQL is then introduced as a de facto tool to create, modify, append, delete, query and manipulate data in a relational database. Due to SQL’s popularity, the course spends considerable time building the ability to write optimized and complex queries for various data manipulation tasks. The module exposes students to various real world SQL examples to build solid practical knowledge. Students then move on to understanding various trade-offs in modern relational databases like the ones between storage space and latency. Designing a database would need a solid understanding of normal forms to minimize data duplication, indexing for speedup and flattening tables to avoid complex joins in low-latency environments. These real-world database design strategies are discussed with practical examples from various domains. Most of this course uses the opensource MySQL database and cloud-hosted relational databases (like Amazon RDS) to help students apply the concepts learned on real databases via assignments.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Acquire knowledge of SQL as tool to create, modify, append, delete, query and manipulate data in a relational database
  • Develop a critical knowledge of relational databases
  • Critically evaluate diverse scholarly views on relational databases
  • Develop a specialised knowledge of key strategies related to Relational Databases
  • Critically assess the relevance of theories for business applications in the domain of technology
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Creatively apply Relational Databases methods to develop critical and original solutions for computational problems
  • Apply an in-depth domain-specific knowledge and understanding to Relational Databases
Competencies
  • Efficiently manage interdisciplinary issues that arise in connection to implementation and query of relational databases
  • Act autonomously in identifying research problems and solutions related to Relational Databases
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of Relational Databases
  • Create synthetic contextualised discussions of key issues related to Relational Databases
  • Apply a professional and scholarly approach to research problems pertaining to Relational Databases
  • Demonstrate self-direction in research and originality in solutions developed for Relational Databases
Introduction to Computer Programming: Part 1
125 hours | 5 ECTS

About

This course helps students translate advanced mathematical/ statistical/ scientific concepts into code. This is a module for writing code to solve real-world problems. It introduces programming concepts (such as control structures, recursion, classes and objects) assuming no prior programming knowledge, to make this course accessible to advanced professionals from scientific fields like Biology, Physics, Medicine, Chemistry, Civil & Mechanical Engineering etc. After building a strong foundation for converting scientific knowledge into programming concepts, the course advances to dive deeply into Object-Oriented Programming and its methodologies. It also covers when and how to use inbuilt-data structures like 1-Dimensional and 2-Dimensional Arrays before introducing the concepts of computational complexity to help students write optimized code using appropriate data structures and algorithmic design methods. The module can be taught to allow students to learn these concepts using a modern programming language such as Java or Python. The course offers students the ability to identify and solve computer programming problems in scientific fields at a graduate level.

Teachers

Khalil Salhi
Khalil Salhi
Obinna David Okeke
Obinna David Okeke
Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a critical understanding of a modern programming language such as Java or Python.
  • Develop a specialised knowledge of key strategies related to Object-Oriented Programming.
  • Critically evaluate diverse scholarly views on computational complexity.
  • Acquire knowledge of various methods for structuring data.
  • Critically assess the relevance of theories for business applications in the domain of technology.
Skills
  • Apply an in-depth domain-specific knowledge and understanding to computer programming.
  • Creatively apply various programming methods to develop critical and original solutions to computational problems.
  • Autonomously gather material and organise it into a coherent presentation or essay.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to computational complexity.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of computer programming.
  • Demonstrate self-direction in research and originality in solutions developed for modern programming languages
  • Act autonomously in identifying research problems and solutions related to Object-Oriented programming.
  • Efficiently manage interdisciplinary issues that arise in connection to data structured in 1- and 2-dimensional arrays.
  • Create synthetic contextualised discussions of key issues related to converting scientific knowledge into programming concepts, and how to instantiate these using Object-Oriented methods.
Design and Analysis of Algorithms
125 hours | 5 ECTS

About

This is a foundational and mandatory course which aims to build student's ability to apply various algorithmic design methods to provide an optimal solution to computational problems. This course starts with time and space complexity analysis of divide and conquer algorithms using recursion-tree based methods and Master’s theorem. Students would also learn about amortized time and space complexity analysis for randomized/probabilistic algorithms. Various algorithmic design strategies would be introduced via real world examples and problems. Students would learn when, where and how to optimally use Divide and Conquer, Dynamic programming (top-down and button-up), Greedy, Backtracking and Randomization strategies with examples. The module uses various practical examples from Array manipulations, Sorting, Searching, String manipulations, Tree & Graphs traversals, Graph path-finding, Spanning Trees etc., to introduce the above algorithmic strategies in action. Students would implement many of the above algorithmic design methods from scratch as part of the assignments. The module also introduces how some of these popular algorithms are readily available via popular libraries in various programming languages.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on design and analysis of algorithms.
  • Acquire knowledge of various algorithmic design methods.
  • Develop a critical knowledge of design and analysis of algorithms.
  • Critically assess the relevance of theories for business applications in the domain of technology.
  • Develop a specialised knowledge of key strategies related to design and analysis of algorithms.
Skills
  • Apply an in-depth domain-specific knowledge and understanding to design and analysis of algorithms.
  • Autonomously gather material and organise it into a coherent presentation or essay.
  • Creatively apply various algorithmic design methods to develop critical and original solutions to computational problems.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
Competencies
  • Create synthetic contextualised discussions of key issues related to design and analysis of algorithms to provide solutions to computational problems.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of design and analysis of algorithms.
  • Demonstrate self-direction in research and originality in solutions developed for design and analysis of algorithms.
  • Act autonomously in identifying research problems and solutions related to design and analysis of algorithms.
  • Apply a professional and scholarly approach to research problems pertaining to design and analysis of algorithms.
  • Efficiently manage interdisciplinary issues that arise in connection to design and analysis of algorithms.
Data Structures
125 hours | 5 ECTS

About

This course is aimed to build a strong foundational knowledge of data structures (DS) used extensively in computing. The module starts with introducing time and space complexity notations and estimation for code snippets. This helps students be able to make trade-offs between various Data Structures while solving real world computational problems. The module introduces most widely used basic data structures like Dynamic arrays, multi-dimensional arrays, Lists, Strings, Hash Tables, Binary Trees, Balanced Binary Trees, Priority Queues and Graphs. The module discusses multiple implementation variations for each of the above data-structures along with trade-offs in space and time for each implementation. In this course, students implement these data-structures from scratch to gain a solid understanding of their inner workings. Students are also introduced to how to use the built-in data-structures available in various programming languages/libraries like Python/NumPy/C++ STL/Java/JavaScript. Students solve real-world problems where they must use an optimal DS to solve a computational problem at hand.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on data structures.
  • Develop a critical knowledge of Data Structures and their implementation.
  • Acquire knowledge widely used basic data structures like Dynamic arrays, multi-dimensional arrays, Lists, Strings, Hash Tables, Binary Trees, Balanced Binary Trees, Priority Queues and Graphs.
  • Critically assess the relevance of theories for business applications in the domain of technology.
  • Develop a specialised knowledge of key strategies related to Data Structures and their usage in computer science.
Skills
  • Apply data structures in a creative way to develop original, critical solutions to real world problems.
  • Autonomously gather material and organise it into coherent data structures.
  • Apply an in-depth domain-specific knowledge and understanding of Data Structures.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
Competencies
  • Create synthetic contextualised discussions of key issues related to Data Structures and the different approached to their implementation.
  • Act autonomously in identifying research problems and solutions related to Data Structures and their implementation.
  • Demonstrate self-direction in research and originality in solutions developed for Data Structures and their implementation.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of Data Structures and their implementation.
  • Efficiently manage interdisciplinary issues that arise in connection to Data Structures and their implementation.
  • Apply a professional and scholarly approach to research problems pertaining to Data Structures and their implementation.
Product Management for Software Engineers
125 hours | 5 ECTS

About

Every organisation is building products to solve the pain points of its customers. Product managers are a critical part of an organisation, who make sure that evolving customer needs, and market trends are observed and converted into delightful solutions which help businesses get its outcomes.

In this course, students will get a fundamental understanding of product management practices.

This will give them a comprehensive view of the complete product management life cycle.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on assessing user behaviours.
  • Acquire knowledge of various methods for testing hypotheses about the viability of a product and about how users engage with it.
  • Develop a specialised knowledge of frameworks for measuring user engagement, such as diagnostics, key performance indicators (KPI), and other metrics.
  • Critically assess the relevance of theories of user behaviour for product development.
  • Develop a critical knowledge of product design and development.
Skills
  • Creatively apply various visual and written methods for proposing a technical solution to a real-world problem to other technical and managerial-level audiences, and for documenting that solution.
  • Autonomously gather material and organise it into a coherent presentation or essay.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Apply an in-depth domain-specific knowledge and understanding of product roadmaps and lifecycles in business.
Competencies
  • Demonstrate self-direction in research and originality in testing and validating hypotheses about a product and its users.
  • Solve problems and be prepared to take leadership decisions related to developing data-informed business cases about bringing products to market and iterating upon them.
  • Act autonomously in identifying research problems and solutions related to product analytics.
  • Efficiently manage interdisciplinary issues that arise in connection to designing a product and bringing it to market.
  • Apply a professional and scholarly approach to research problems pertaining to measuring user engagement.
  • Create synthetic contextualised discussions of key issues related to product sense, and how to tell whether a product is worth bringing to market.
Distributed Systems with High-Level System Design
125 hours | 5 ECTS

About

A distributed system is an application that executes a collection of protocols to coordinate the actions of multiple processes on a network, such that all components cooperate together to perform a single or small set of related tasks.

Goals of a Distributed System:

● Transparency -> End user does not know what lies behind and how the system is working internally.

● Scalability - > Refers to the growth of the system.

● Availability -> Refers to the system's uptime.

The module will carefully examine three case studies, with attention to such topics as:

● Basics of High Level System Design and consistent Hashing

● Caching

● CAP Theorem

● Replication and Master-Slave

● NoSQL

● Differences between SQL and NoSQL

● Multi Master

● Apache Zookeeper & Apache Kafka

● Case Study on ElasticSearch

● AWS S3 and Quad Trees

● Design Distributed Crawler

● Microservices and Containerisation

● Hotstar & IRCTC System design

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on containerisation as a system architecture strategy.
  • Critically assess the relevance of theories of distributed system design for business applications in the realm of software engineering.
  • Develop a specialised knowledge of hashing and caching strategies in distributed systems.
  • Acquire knowledge of various methods for optimising the tradeoffs between consistency and availability in the presence of partitions.
  • Develop a critical understanding of software architecture design.
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Creatively apply various visual and written methods for developing high-level system architecture designs.
  • Apply an in-depth domain-specific knowledge and understanding of the importance of scalability in software engineering.
Competencies
  • Create synthetic contextualised discussions of key issues related to designing system architecture that is capable of scaling.
  • Efficiently manage interdisciplinary issues that arise in connection to microservices and containerisation.
  • Solve problems and be prepared to take leadership decisions related to designing distributed systems that can scale.
  • Act autonomously in identifying research problems and solutions related to implementing SQL and NoSQL designs.
  • Apply a professional and scholarly approach to research problems pertaining to tradeoffs between consistency and availability when distributed systems are partitioned.
  • Demonstrate self-direction in research and originality in solutions developed for search across distributed environments.
Practical Software Engineering
125 hours | 5 ECTS

About

This course gives the detailed overview on how to approach Low Level Design problems with real-world case studies discussed such as Designing a Pen (Mac/Windows), TicTacToe, BookMyShow (most used event booking app, manages millions of users), Email campaign Management System and detailed design of Splitwise.

Teachers

Khalil Salhi
Khalil Salhi
ben salah meriam
ben salah meriam
Obinna David Okeke
Obinna David Okeke
Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Acquire knowledge of various methods for specifying the logical and functional design of a system
  • Critically assess the relevance of theories of software design processes for business applications in the realm of software engineering
  • Develop a specialised knowledge of Process Design Languages and flowchart methods for describing desired functions and behaviours
  • Critically evaluate diverse scholarly views on the appropriateness of various approaches to converting high-level or architectural software design to low-level, component-oriented design
  • Develop a critical understanding of software design and refinement processes
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Creatively apply various visual and written methods for converting architectural/high-level designs to component-oriented, low-level designs
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Apply an in-depth domain-specific knowledge and understanding of the importance of refinement in software design processes
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to logical and functional design of software components
  • Create synthetic contextualised discussions of key issues related to specifying the internal logic of software
  • Demonstrate self-direction in research and originality in solutions developed for using Program Design Languages
  • Solve problems and be prepared to take leadership decisions related to developing code-ready low-level design documents
  • Efficiently manage interdisciplinary issues that arise in connection to developing hierarchical input process output (HIPO) models
  • Act autonomously in identifying research problems and solutions related to refining software designs
Low-Level Design and Design Patterns
125 hours | 5 ECTS

About

Low-Level Design & Design Patterns focuses on modularity and reusability in software design, common design vocabularies, refactoring and how to reduce it, and how to incorporate design patterns into iterative development processes. The course pays significant attention to the interaction between system architecture and components, including data organisation.

The course begins with Object-Oriented Analysis (OOA), which is a problems-solving technique that includes: modelling an information design; representing behaviour; describing functions; dividing data, functional, and behavioural models to uncover detail; moving from abstraction to implementation details. The course then turns to Object-Oriented Design (OOD), which reduces the analysis model into a modular design for software creation, with subsystems, components, and objects.

The iteration of analysis and implementation will be covered in detail with real-world industry examples.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Acquire knowledge of various methods for specifying modular elements in a software subsystem
  • Develop a specialised knowledge of modelling data, behaviour, and function in software
  • Develop a critical understanding of object-oriented analysis and design
  • Critically evaluate diverse scholarly views on the appropriateness of various approaches to design patterns for object-oriented design
  • Critically assess the relevance of theories of reusable design for business applications in the domain of software engineering
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Creatively apply various design patterns to most efficiently design software that meets specified criteria
  • Apply an in-depth domain-specific knowledge and understanding of the importance of object-oriented design in software engineering
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to building software with reusable elements
  • Efficiently manage interdisciplinary issues that arise in connection to modelling data, behaviour, and function
  • Create synthetic contextualised discussions of key issues related to Object-Oriented Analysis and Design
  • Act autonomously in identifying research problems and solutions related to the modular, procedural software design
  • Solve problems and be prepared to take leadership decisions related to developing design patterns to solve problems in software design
  • Demonstrate self-direction in research and originality in solutions developed for designing reusable software elements
Computer Systems and Their Fundamentals
125 hours | 5 ECTS

About

This core course equips the student with knowledge of database management systems, operating systems and computer networks. At the end of the course, students will have a critical understanding of the architecture of computers and networks, as well has how programs interact with these. Students begin with mapping data storage problems (as they had done in Relational Databases) to understand how data is stored in a distributed network, and related issues such as concurrency. Subsequently, students cover operating systems with an overview of process scheduling, process synchronisation and memory management techniques with disk scheduling. The module concludes with computer networks, where we will be discussing all of the computer network layers and their protocols in detail.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a critical understanding of relational database strategies, process and memory management in operating systems, and computer network protocols
  • Acquire knowledge of various methods for troubleshooting computer network layers
  • Critically assess the relevance of theories of database design for business applications in the domain of software engineering
  • Critically evaluate diverse scholarly views on the appropriateness of various approaches to memory management in operating systems
  • Develop a specialised knowledge of optimising relational database performance in low-latency environments
Skills
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Apply an in-depth domain-specific knowledge and understanding of the importance of relational databases in modern software engineering
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Creatively apply various programming methods to most efficiently design databases that perform well under specified constraints
Competencies
  • Demonstrate self-direction in research and originality in solutions developed for optimising performance of computer networks
  • Create synthetic contextualised discussions of key issues related to the optimal design and use of databases, operating systems, and computer networks
  • Efficiently manage interdisciplinary issues that arise in connection to process management in operating systems
  • Solve problems and be prepared to take leadership decisions related to relational database design to solve computational and business problems
  • Act autonomously in identifying research problems and solutions related to the real-world application of relational databases
  • Apply a professional and scholarly approach to research problems pertaining to the design of databases in low-latency environments
Advanced Algorithms
125 hours | 5 ECTS

About

In this module we will discuss general approaches to the construction of efficient solutions to problems. Such methods are of interest because:

  1. They provide templates suited to solving a broad range of diverse problems.

  2. They can be translated into common control and data structures provided by most high-level languages.

  3. The temporal and spatial requirements of the algorithms which result can be precisely analyzed. This course will provide a solid foundation and background to design and analysis of algorithms. In particular, upon successful completion of this course, students will be able to understand, explain and apply key algorithmic concepts and principles, which might include:

  4. Greedy algorithms (Activity Selection, 0-1 Knapsack Problem, Fractional Knapsack Problem)

  5. Dynamic programming (Longest Common Subsequence, 0-1 Knapsack Problem)

  6. Minimum Spanning Trees (Prim’s Algorithm, Kruskal’s Algorithm)

  7. Graph Algorithms (Dijkstra’s Shortest Path Algorithm, Bipartite Graphs, Minimum Vertex Cover) Although more than one technique may be applicable to a specific problem, it is often the case that an algorithm constructed by one approach is clearly superior to equivalent solutions built using alternative techniques. This module will help students assess these choices.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a critical knowledge of important algorithmic concepts and principles, such as greedy algorithms, dynamic programming, minimum spanning trees, and graph algorithms.
  • Acquire knowledge of various methods for optimizing algorithm design.
  • Develop a specialised knowledge of describing, analysing, and evaluating algorithmic performance in time and space.
  • Critically assess the relevance of theories of algorithmic performance for business applications in the domain of software engineering.
  • Critically evaluate diverse scholarly views on the appropriateness of various algorithmic concepts to software development problems.
Skills
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Apply an in-depth domain-specific knowledge and understanding of efficiency to algorithmic designs.
  • Creatively apply various programming methods to most efficiently design algorithms for specified time and space constraints.
  • Autonomously gather material and organise it into a coherent presentation or essay.
Competencies
  • Solve problems and be prepared to take leadership decisions related to selecting the most appropriate algorithm for a software engineering problem.
  • Demonstrate self-direction in research and originality in solutions developed for solving problems related to algorithmic design.
  • Efficiently manage interdisciplinary issues that arise in connection to the performance of algorithms and data structures in time and space.
  • Create synthetic contextualised discussions of key issues related to the efficient construction of algorithms.
  • Apply a professional and scholarly approach to research problems pertaining to the comparative performance of algorithms.
  • Act autonomously in identifying research problems and solutions related to the real-world application of common controls and data structures in high-level programming languages.
Back End Development
125 hours | 5 ECTS

About

This is a foundational course on building server-side (or backend) applications using popular JavaScript runtime environments like Node.js. Students will learn event driven programming for building scalable backend for web applications. The module teaches various aspects of Node.js like setup, package manager, client-server programming and connecting to various databases and REST APIs. Most of these concepts would be covered in a hands-on manner with real world examples and applications built from scratch using Node.js on Linux servers. This course also provides an introduction to Linux server administration and scripting with special focus on web-development and networking. Students learn to use Linux monitoring tools (like Monit) to track the health of the servers. The module also provides an introduction to Express.js which is a popular light-weight framework for Node.js applications. Given the practical nature of this course, this would involve building actual website backends via assignments/projects for ecommerce, online learning and/or photo-sharing.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a specialised knowledge of key strategies related to Back end Development.
  • Critically assess the relevance of theories for business applications in the domain of technology.
  • Critically evaluate diverse scholarly views on Back end Development.
  • Acquire knowledge of key aspects of Node.js like setup, package manager, client-server programming and connecting to various databases and REST.
  • Develop a critical knowledge of Back end Development.
Skills
  • Creatively apply Back end Development tools to develop critical and original solutions for computational problems.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Autonomously gather material and organise it into coherent problem sets or presentations.
  • Apply an in-depth domain-specific knowledge and understanding to Back end Development applications.
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to Back end Development.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of Back end Development.
  • Act autonomously in identifying research problems and solutions related to Back end Development.
  • Create synthetic contextualised discussions of key issues related to Back end Development.
  • Efficiently manage interdisciplinary issues that arise in connection to Back end Development.
  • Demonstrate self-direction in research and originality in solutions developed for Back end Development.
Front End Development
125 hours | 5 ECTS

About

This course builds upon the introductory JavaScript course to acquaint students of popular and modern frameworks to build the front end. We focus on three very popular frameworks/libraries in use: React.js, jQuery and AngularJS. We start with React.js, one of the most popular and advanced ones amongst the three. students learn various components and data flow to learn to architect real world front end using React.js. This would be achieved via multiple code examples and code-walkthroughs from scratch. We would also dive into React Native which is a cross platform Framework to build native mobile and smart-TV apps using JavaScript. This helps students to build applications for various platforms using only JavaScript. jQuery is one of the oldest and most widely used JavaScript libraries, which students cover in detail. Students specifically focus on how jQuery can simplify event handling, AJAX, HTML DOM tree manipulation and create CSS animations. We also provide a hands-on introduction to AngularJS to architect model-view-controller (MVC) based dynamic web pages.

Teachers

Obinna David Okeke
Obinna David Okeke
Billel Abidi
Billel Abidi
Babatunde Olaifa
Babatunde Olaifa

Intended learning outcomes

Knowledge
  • Acquire knowledge of popular frameworks/libraries in use: React.js, jQuery and AngularJS.
  • Develop a specialised knowledge of key strategies related to front end development.
  • Critically evaluate diverse scholarly views on front end development.
  • Develop a critical knowledge of front end development.
  • Critically assess the relevance of theories for business applications in the domain of technology.
Skills
  • Apply an in-depth domain-specific knowledge and understanding to front end development solutions.
  • Creatively apply front end development applications to develop critical and original solutions for computational problems.
  • Autonomously gather material and organise it into coherent problem sets or presentations.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
Competencies
  • Demonstrate self-direction in research and originality in solutions developed for front end development.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of front end development.
  • Act autonomously in identifying research problems and solutions related to front end development.
  • Efficiently manage interdisciplinary issues that arise in connection to front end development.
  • Create synthetic contextualised discussions of key issues related to front end development.
  • Apply a professional and scholarly approach to research problems pertaining to front end development.
Front End UI/UX Development
125 hours | 5 ECTS

About

This is a hands-on course on designing responsive, modern and light-weight UI for web, mobile and desktop applications using HTML5, CSS and Frameworks like Bootstrap 4. This course starts with an introduction on how web browsers, mobile apps and web servers work. We then dive into each of the nitty gritty details of HTML5 to build webpages. We would start with simple web pages and then graduate to more complex layouts and features in HTML like forms, iFrames, multimedia-playback and using web-APIs. We then go on to learn stylesheets based on CSS 4 and how browsers interpret CSS files to render web pages. Once again, we use multiple real world example web pages to learn the internals of CSS4. We learn popular good practices on writing responsive HTML and CSS code which is also interoperable on mobile browsers, apps and desktop apps. We would introduce students to building desktop apps using HTML and CSS using toolkits like Electron. We would also study popular frameworks for front end development like Bootstrap 4 which can speed up UI development significantly.

Teachers

ben salah meriam
ben salah meriam
Obinna David Okeke
Obinna David Okeke
Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi
Auguster Eyenobong
Auguster Eyenobong

Intended learning outcomes

Knowledge
  • Critically assess the relevance of theories for business applications in the domain of technology
  • Acquire knowledge of HTML5, CSS and Frameworks like Bootstrap 4
  • Develop a critical knowledge of Front end UI/UX development
  • Develop a specialised knowledge of key strategies related to Front end UI/UX development
  • Critically evaluate diverse scholarly views on Front end UI/UX development
Skills
  • Apply an in-depth domain-specific knowledge and understanding to technology
  • Autonomously gather material and organise into a coherent problem sets or presentation
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Creatively apply Front end UI/UX development applications to develop critical and original solutions for computational problems
Competencies
  • Demonstrate self-direction in research and originality in solutions developed for Front end UI/UX development
  • Act autonomously in identifying research problems and solutions related to Front end UI/UX development
  • Apply a professional and scholarly approach to research problems pertaining to Front end UI/UX development
  • Efficiently manage interdisciplinary issues that arise in connection to Front end UI/UX development
  • Create synthetic contextualised discussions of key issues related to Front end UI/UX development
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of Front end UI/UX development
JavaScript
125 hours | 5 ECTS

About

This course is a hands-on course covering JavaScript from basics to advanced concepts in detail using multiple examples. We start with basic programming concepts like variables, control statements, loops, classes and objects. Students also learn basic data-structures like Strings, Arrays and dates. Students also learn to debug our code and handle errors gracefully in code. We learn popular style guides and good coding practices to build readable and reusable code which is also highly performant. We then learn how web browsers execute JavaScript code using V8 engine as an example. We also cover concepts like JIT-compiling which helps JS code to run faster. This is followed by slightly advanced concepts like DOM, Async-functions, Web APIs and Fetch which are very popularly used in modern front end development. We learn how to optimize JavaScript code to run on both mobile apps and mobile browsers along with Desktop browsers and as desktop apps via ElectronJS. Most of this course would be covered via real world examples and by learning from JS code of popular open-source websites and libraries.

Teachers

Obinna David Okeke
Obinna David Okeke
Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a critical knowledge of JavaScript
  • Acquire knowledge of popular style guides and good coding practices to build readable and reusable code which is also highly performant
  • Critically assess the relevance of theories for business applications in the domain of technology
  • Critically evaluate diverse scholarly views on JavaScript
  • Develop a specialised knowledge of key strategies related to JavaScript
Skills
  • Creatively apply JavaScript concepts to develop critical and original solutions for computational problems.
  • Apply an in-depth domain-specific knowledge and understanding to JavaScript tools.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Autonomously gather material and organise into a coherent problem sets or presentations
Competencies
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of JavaScript
  • Demonstrate self-direction in research and originality in solutions developed for JavaScript
  • Create synthetic contextualised discussions of key issues related to JavaScript
  • Efficiently manage interdisciplinary issues that arise in connection to JavaScript
  • Apply a professional and scholarly approach to research problems pertaining to JavaScript
  • Act autonomously in identifying research problems and solutions related to JavaScript
Advanced Back End Development
125 hours | 5 ECTS

About

This course provides a dive deep into more advanced concepts in server-side programming using Node.js to enable initiative, real-time and scalable web applications. We dive into threading and thread pools in Node.js and how they can be leveraged to build more responsive web apps. We learn socket programming using socket.io and Node.js for instant messaging, document collaboration, real time analytics and streaming applications. Students also learn to use Caching using distributed in-memory key-value stores (like Redis) to rescue latency while serving web-apps. Students also learn how to use Node.js with popular NoSQL data stores like MongoDB for storing unstructured data. We also cover GraphQL which is an open source data query and manipulation language for APIs, which is gaining popularity more recently. We learn popular protocols like OAuth to enable cross platform logins. Students also learn the architecture and practical aspects of Web-RTC to enable multimedia applications like video-chat, live-streaming, music-streaming etc.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a specialised knowledge of key strategies related to Advanced Back End Development applications
  • Acquire knowledge of threading and thread pools in Node.js and how they can be leveraged to build more responsive web apps
  • Critically assess the relevance of theories for business applications in the domain of technology
  • Critically evaluate diverse scholarly views on Advanced Back End Development
  • Develop a critical knowledge of Advanced Back End Development
Skills
  • Creatively utilize Advanced Back End Development applications to develop critical and original solutions for computational problems
  • Autonomously gather material and organise it into coherent problems sets or presentations
  • Apply an in-depth domain-specific knowledge and understanding to Advanced Back End Development solutions
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
Competencies
  • Act autonomously in identifying research problems and solutions related to Advanced Back End Development
  • Demonstrate self-direction in research and originality in solutions developed for Advanced Back End Development
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of Advanced Back End Development
  • Create synthetic contextualised discussions of key issues related to Advanced Back End Development
  • Efficiently manage interdisciplinary issues that arise in connection to Advanced Back End Development
  • Apply a professional and scholarly approach to research problems pertaining to Advanced Back End Development
NoSQL Cloud Datastores
125 hours | 5 ECTS

About

This course provides a comprehensive overview and practical knowledge of various NoSQL data stores and how they can be used on the Cloud (AWS). We focus on three NoSQL datastores in this course: MongoDB, DynamoDB and Redis. For each of them, we first understand the design and architecture in depth. We compare and contrast each of them with traditional relational databases and other NoSQL databases so that students understand the engineering trade-offs when using them. We take multiple real-world case-studies from various companies and organizations to discuss which datastore is more apt in each situation to help students better appreciate the differences and use-cases. We dive into the technical details from setting up and deploying each of these datastores on the cloud (AWS) with latency and scalability in mind. We also discuss various datastore specific optimizations and good practices to follow. The module also teaches students how to stress test each of these datastores under differing loads to compare and contrast which would be a better fit in a real world scenario. At the end of this course, students would be able to choose an optimal data store for their engineering needs to build websites or build data pipelines or deploy machine learning applications.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on NoSQL Cloud Datastores
  • Critically assess the relevance of theories for business applications in the domain of technology
  • Acquire knowledge of key NoSQL datastores like MongoDB, DynamoDB and Redis
  • Develop a specialised knowledge of key strategies related to NoSQL Cloud Datastores
  • Develop a critical knowledge of NoSQL Cloud Datastores
Skills
  • Creatively apply NoSQL Cloud Datastores tools to develop critical and original solutions for computation problems
  • Autonomously gather material and organise it into coherent problem sets or presentations
  • Apply an in-depth domain-specific knowledge and understanding to NoSQL Cloud Datastores solutions
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
Competencies
  • select appropriate datastores for key scenarios, understanding the engineering trade-offs, along with issues of latency and scalability
  • make informed judgments on the basis of advanced knowledge of the design and architecture of NoSQL datastores
  • demonstrate autonomy, self-direction, and leadership in research, and in originality in solutions developed for NoSQL cloud datastore deployments and management
  • create synthetic contextualised discussions of key issues related to NoSQL Cloud Datastores
Design Patterns
125 hours | 5 ECTS

About

This course provides a practical understanding of popular object-oriented design patterns so that students can reuse design strategies developed for commonly occurring problems in software development. We begin the course with a revision of object-oriented programming and an overview of UML (unified modelling language) diagrams to represent software design diagrammatically. We then dive into 10-12 most popular design patterns motivating each of them from real world scenarios. We would also showcase multiple opensource code bases which use the specific design pattern to solve a real-world design problem. This would help students gain an appreciation of how each of the theoretical patterns they learn actually translate to code. We also take up real world cases and dive into various design patterns that can be used to solve the problem. Sometimes, there could be multiple valid designs. We would five into the pros and cons of each design decision and trade-offs involved. Our objective is to build the problem-solving ability amongst students to recognize the appropriate design pattern to tackle a real-world problem. The module briefly discusses domain specific design patterns in their respective contexts.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a specialised knowledge of key strategies related to design patterns
  • Develop a critical knowledge of design patterns
  • Critically evaluate diverse scholarly views on design patterns
  • Acquire knowledge of the pros and cons of popular UML design patterns
  • Critically assess the relevance of theories for business applications in the domain of technology
Skills
  • Creatively utilize design patterns tools to develop critical and original solutions for computational problems
  • Apply an in-depth domain-specific knowledge and understanding to object-oriented design patterns
  • Autonomously gather material and organise it into coherent problem sets or presentations
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
Competencies
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of design patterns
  • Apply a professional and scholarly approach to research problems pertaining to design patterns
  • Create synthetic contextualised discussions of key issues related to design patterns
  • Act autonomously in identifying research problems and solutions related to design patterns
  • Efficiently manage interdisciplinary issues that arise in connection to design patterns
  • Demonstrate self-direction in research and originality in solutions developed for design patterns
System Design
125 hours | 5 ECTS

About

This course is aimed at equipping students with skills to architect the high level design (a.k.a. system design) of software and data systems. We start with some of the good to have properties of large complex software systems like scalability, reliability, availability, consistency etc. The module teaches various patterns and design choices we have to satisfy each of these good to have properties. We then go on to understand key components of system design like load-balancers, microservices, reverse-proxies, content-delivery networks etc. Students learn how each of them work internally along with real world implementations of each. We study various NoSQL data stores, their internal architectures and where to use which one with real-world examples. Students also learn popular data encoding schemes like XML and JSON. We learn how to build data pipelines using batch and stream processing systems. We also work on multiple real world cases on architecting on the cloud using popular open-source libraries and tools. Students will study design documents and high-level-design of popular internet applications and services like video-conferencing, recommender-systems, peer-to-peer chat, voice-assistants etc.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically assess the relevance of theories for business applications in the domain of technology
  • Develop a specialised knowledge of key strategies related to System Design
  • Develop a critical knowledge of System Design
  • Acquire knowledge of popular data encoding schemes like XML and JSON
  • Critically evaluate diverse scholarly views on System Design
Skills
  • Autonomously gather material and organise it into coherent problem sets or presentations
  • Creatively apply system design components to develop critical and original solutions for computational problems
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Apply an in-depth domain-specific knowledge and understanding to System Design solutions
Competencies
  • Act autonomously in identifying research problems and solutions related to System Design
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of System Design
  • Apply a professional and scholarly approach to research problems pertaining to System Design
  • Create synthetic contextualised discussions of key issues related to System Design
  • Demonstrate self-direction in research and originality in solutions developed for System Design
  • Efficiently manage interdisciplinary issues that arise in connection to System Design
Applied Computer Science Project
250 hours | 10 ECTS

About

This is a project-based course, with the aim of building the required skills for creating web-based software systems. The course covers the entire lifecycle of building software projects, from requirement gathering and scope definition from a product document, to designing the architecture of the system, and all the way to delivery and maintenance of the software system.

The course covers both frontend, which is, building browser-based interfaces for users, using frontend web frameworks, and also building the backend, which is the server running an API to serve the information to the frontend, and running on an SQL or similar database management system for storage.

All aspects of delivering a software project, including security, user authentication and authorisation, monitoring and analytics, and maintaining the project are covered. The course also covers the aspects of project maintenance, like using a version control system, setting up continuous integration and deployment pipelines and bug trackers.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a specialised knowledge of key strategies for designing well-architected information management systems
  • Critically evaluate diverse scholarly views on database management
  • Develop a critical understanding of modern computational applications
  • Critically assess the relevance of theories of web security for cloud deployment
  • Acquire knowledge of various methods for version control
Skills
  • Creatively apply various visual and written methods for proposing a technical solution to a real-world problem to other technical and managerial-level audiences, and for documenting that solution
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Apply an in-depth domain-specific knowledge and understanding of system design and implementation in business
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to real-world computational complexities.
  • Efficiently manage interdisciplinary issues that arise in connection to deploying a modern, web-based system.
  • Demonstrate self-direction in research and originality in solutions developed for robust and reliable cloud deployments.
  • Create synthetic contextualised discussions of key issues related to real-world software design, implementation, and deployment situations.
  • Solve problems and be prepared to take leadership decisions related to developing and deploying cloud-oriented software solutions.
  • Act autonomously in identifying research problems and solutions related to modern computational tools and methods.
Career Strategies and Soft Skills for IT Professionals
125 hours | 5 ECTS

About

This course is designed to equip IT professionals with the soft skills and career strategies required for success in the technology industry. The course is project-based and covers a range of topics such as communication skills, teamwork, time management, leadership, networking, and career development. The course covers the entire lifecycle of a technology project, from requirement gathering to delivery and maintenance. Students will learn how to communicate effectively with stakeholders, manage their time efficiently, lead a team, and collaborate effectively in a team environment. The course also covers aspects of career development, such as networking and building professional relationships, creating a personal brand, and developing a career plan. Students will learn how to identify their strengths and weaknesses, and how to leverage their skills and experience to advance their careers in the technology industry. Throughout the course, students will engage in practical exercises, case studies,

and interactive discussions to enhance their soft skills and career strategies. By the

end of the course, students will have developed a strong foundation in essential

soft skills, self-management, effective communication, leadership, ethical conduct,

adaptability, and job search strategies necessary for successful IT careers.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Acquire principles of ethical decision-making, privacy, data security, and intellectual property.
  • Acquire knowledge of career planning strategies, including self- assessment, goal setting, and creating a professional development roadmap.
  • Demonstrate principles of active listening, clear and concise communication, and adapting communication style to different audiences.
  • Comprehend the need to embrace change, manage uncertainty, and proactively acquire new skills and knowledge
  • Gain awareness of legal obligations and ethical standards relevant to IT professionals.
  • Develop familiarity with leadership and teamwork principles within the context of IT projects and organizational settings
Skills
  • Apply leadership qualities by guiding and inspiring others towards achieving common goals.
  • Utilize career planning strategies to set SMART goals and create a professional development roadmap.
  • Embrace change, manage uncertainty, and proactively acquire new skills and knowledge to stay current with emerging technologies and industry trends.
  • Demonstrate an understanding of ethical considerations, data security, privacy, intellectual property rights, and adhere to ethical standards and legal obligations in professional activities.
  • Apply effective communication skills to articulate ideas, technical concepts, and collaborate with team members in IT projects.
Competencies
  • Develop competence in adaptability and continuous learning in the context of the rapidly evolving IT industry.
  • Acquire competence in effective communication skills, both verbal and written, to convey ideas, technical concepts, and collaborate with team members
  • Exhibit competence in ethical decision-making and professional integrity within the IT industry.
  • Develop the ability to assess personal strengths, interests, and career goals within the IT industry.
  • Demonstrate the ability to contribute effectively to teams, understand team dynamics, motivate team members, and delegate tasks.
Product Management for Software Engineers
125 hours | 5 ECTS

About

Every organisation is building products to solve the pain points of its customers. Product managers are a critical part of an organisation, who make sure that evolving customer needs, and market trends are observed and converted into delightful solutions which help businesses get its outcomes.

In this course, students will get a fundamental understanding of product management practices.

This will give them a comprehensive view of the complete product management life cycle.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on assessing user behaviours.
  • Acquire knowledge of various methods for testing hypotheses about the viability of a product and about how users engage with it.
  • Develop a specialised knowledge of frameworks for measuring user engagement, such as diagnostics, key performance indicators (KPI), and other metrics.
  • Critically assess the relevance of theories of user behaviour for product development.
  • Develop a critical knowledge of product design and development.
Skills
  • Creatively apply various visual and written methods for proposing a technical solution to a real-world problem to other technical and managerial-level audiences, and for documenting that solution.
  • Autonomously gather material and organise it into a coherent presentation or essay.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Apply an in-depth domain-specific knowledge and understanding of product roadmaps and lifecycles in business.
Competencies
  • Demonstrate self-direction in research and originality in testing and validating hypotheses about a product and its users.
  • Solve problems and be prepared to take leadership decisions related to developing data-informed business cases about bringing products to market and iterating upon them.
  • Act autonomously in identifying research problems and solutions related to product analytics.
  • Efficiently manage interdisciplinary issues that arise in connection to designing a product and bringing it to market.
  • Apply a professional and scholarly approach to research problems pertaining to measuring user engagement.
  • Create synthetic contextualised discussions of key issues related to product sense, and how to tell whether a product is worth bringing to market.
Distributed Systems with High-Level System Design
125 hours | 5 ECTS

About

A distributed system is an application that executes a collection of protocols to coordinate the actions of multiple processes on a network, such that all components cooperate together to perform a single or small set of related tasks.

Goals of a Distributed System:

● Transparency -> End user does not know what lies behind and how the system is working internally.

● Scalability - > Refers to the growth of the system.

● Availability -> Refers to the system's uptime.

The module will carefully examine three case studies, with attention to such topics as:

● Basics of High Level System Design and consistent Hashing

● Caching

● CAP Theorem

● Replication and Master-Slave

● NoSQL

● Differences between SQL and NoSQL

● Multi Master

● Apache Zookeeper & Apache Kafka

● Case Study on ElasticSearch

● AWS S3 and Quad Trees

● Design Distributed Crawler

● Microservices and Containerisation

● Hotstar & IRCTC System design

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Critically evaluate diverse scholarly views on containerisation as a system architecture strategy.
  • Critically assess the relevance of theories of distributed system design for business applications in the realm of software engineering.
  • Develop a specialised knowledge of hashing and caching strategies in distributed systems.
  • Acquire knowledge of various methods for optimising the tradeoffs between consistency and availability in the presence of partitions.
  • Develop a critical understanding of software architecture design.
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Creatively apply various visual and written methods for developing high-level system architecture designs.
  • Apply an in-depth domain-specific knowledge and understanding of the importance of scalability in software engineering.
Competencies
  • Create synthetic contextualised discussions of key issues related to designing system architecture that is capable of scaling.
  • Efficiently manage interdisciplinary issues that arise in connection to microservices and containerisation.
  • Solve problems and be prepared to take leadership decisions related to designing distributed systems that can scale.
  • Act autonomously in identifying research problems and solutions related to implementing SQL and NoSQL designs.
  • Apply a professional and scholarly approach to research problems pertaining to tradeoffs between consistency and availability when distributed systems are partitioned.
  • Demonstrate self-direction in research and originality in solutions developed for search across distributed environments.
Practical Software Engineering
125 hours | 5 ECTS

About

This course gives the detailed overview on how to approach Low Level Design problems with real-world case studies discussed such as Designing a Pen (Mac/Windows), TicTacToe, BookMyShow (most used event booking app, manages millions of users), Email campaign Management System and detailed design of Splitwise.

Teachers

Khalil Salhi
Khalil Salhi
ben salah meriam
ben salah meriam
Obinna David Okeke
Obinna David Okeke
Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Acquire knowledge of various methods for specifying the logical and functional design of a system
  • Critically assess the relevance of theories of software design processes for business applications in the realm of software engineering
  • Develop a specialised knowledge of Process Design Languages and flowchart methods for describing desired functions and behaviours
  • Critically evaluate diverse scholarly views on the appropriateness of various approaches to converting high-level or architectural software design to low-level, component-oriented design
  • Develop a critical understanding of software design and refinement processes
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Creatively apply various visual and written methods for converting architectural/high-level designs to component-oriented, low-level designs
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Apply an in-depth domain-specific knowledge and understanding of the importance of refinement in software design processes
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to logical and functional design of software components
  • Create synthetic contextualised discussions of key issues related to specifying the internal logic of software
  • Demonstrate self-direction in research and originality in solutions developed for using Program Design Languages
  • Solve problems and be prepared to take leadership decisions related to developing code-ready low-level design documents
  • Efficiently manage interdisciplinary issues that arise in connection to developing hierarchical input process output (HIPO) models
  • Act autonomously in identifying research problems and solutions related to refining software designs
Low-Level Design and Design Patterns
125 hours | 5 ECTS

About

Low-Level Design & Design Patterns focuses on modularity and reusability in software design, common design vocabularies, refactoring and how to reduce it, and how to incorporate design patterns into iterative development processes. The course pays significant attention to the interaction between system architecture and components, including data organisation.

The course begins with Object-Oriented Analysis (OOA), which is a problems-solving technique that includes: modelling an information design; representing behaviour; describing functions; dividing data, functional, and behavioural models to uncover detail; moving from abstraction to implementation details. The course then turns to Object-Oriented Design (OOD), which reduces the analysis model into a modular design for software creation, with subsystems, components, and objects.

The iteration of analysis and implementation will be covered in detail with real-world industry examples.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Acquire knowledge of various methods for specifying modular elements in a software subsystem
  • Develop a specialised knowledge of modelling data, behaviour, and function in software
  • Develop a critical understanding of object-oriented analysis and design
  • Critically evaluate diverse scholarly views on the appropriateness of various approaches to design patterns for object-oriented design
  • Critically assess the relevance of theories of reusable design for business applications in the domain of software engineering
Skills
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Creatively apply various design patterns to most efficiently design software that meets specified criteria
  • Apply an in-depth domain-specific knowledge and understanding of the importance of object-oriented design in software engineering
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to building software with reusable elements
  • Efficiently manage interdisciplinary issues that arise in connection to modelling data, behaviour, and function
  • Create synthetic contextualised discussions of key issues related to Object-Oriented Analysis and Design
  • Act autonomously in identifying research problems and solutions related to the modular, procedural software design
  • Solve problems and be prepared to take leadership decisions related to developing design patterns to solve problems in software design
  • Demonstrate self-direction in research and originality in solutions developed for designing reusable software elements
Computer Systems and Their Fundamentals
125 hours | 5 ECTS

About

This core course equips the student with knowledge of database management systems, operating systems and computer networks. At the end of the course, students will have a critical understanding of the architecture of computers and networks, as well has how programs interact with these. Students begin with mapping data storage problems (as they had done in Relational Databases) to understand how data is stored in a distributed network, and related issues such as concurrency. Subsequently, students cover operating systems with an overview of process scheduling, process synchronisation and memory management techniques with disk scheduling. The module concludes with computer networks, where we will be discussing all of the computer network layers and their protocols in detail.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a critical understanding of relational database strategies, process and memory management in operating systems, and computer network protocols
  • Acquire knowledge of various methods for troubleshooting computer network layers
  • Critically assess the relevance of theories of database design for business applications in the domain of software engineering
  • Critically evaluate diverse scholarly views on the appropriateness of various approaches to memory management in operating systems
  • Develop a specialised knowledge of optimising relational database performance in low-latency environments
Skills
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing
  • Apply an in-depth domain-specific knowledge and understanding of the importance of relational databases in modern software engineering
  • Autonomously gather material and organise it into a coherent presentation or essay
  • Creatively apply various programming methods to most efficiently design databases that perform well under specified constraints
Competencies
  • Demonstrate self-direction in research and originality in solutions developed for optimising performance of computer networks
  • Create synthetic contextualised discussions of key issues related to the optimal design and use of databases, operating systems, and computer networks
  • Efficiently manage interdisciplinary issues that arise in connection to process management in operating systems
  • Solve problems and be prepared to take leadership decisions related to relational database design to solve computational and business problems
  • Act autonomously in identifying research problems and solutions related to the real-world application of relational databases
  • Apply a professional and scholarly approach to research problems pertaining to the design of databases in low-latency environments
Advanced Algorithms
125 hours | 5 ECTS

About

In this module we will discuss general approaches to the construction of efficient solutions to problems. Such methods are of interest because:

  1. They provide templates suited to solving a broad range of diverse problems.

  2. They can be translated into common control and data structures provided by most high-level languages.

  3. The temporal and spatial requirements of the algorithms which result can be precisely analyzed. This course will provide a solid foundation and background to design and analysis of algorithms. In particular, upon successful completion of this course, students will be able to understand, explain and apply key algorithmic concepts and principles, which might include:

  4. Greedy algorithms (Activity Selection, 0-1 Knapsack Problem, Fractional Knapsack Problem)

  5. Dynamic programming (Longest Common Subsequence, 0-1 Knapsack Problem)

  6. Minimum Spanning Trees (Prim’s Algorithm, Kruskal’s Algorithm)

  7. Graph Algorithms (Dijkstra’s Shortest Path Algorithm, Bipartite Graphs, Minimum Vertex Cover) Although more than one technique may be applicable to a specific problem, it is often the case that an algorithm constructed by one approach is clearly superior to equivalent solutions built using alternative techniques. This module will help students assess these choices.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a critical knowledge of important algorithmic concepts and principles, such as greedy algorithms, dynamic programming, minimum spanning trees, and graph algorithms.
  • Acquire knowledge of various methods for optimizing algorithm design.
  • Develop a specialised knowledge of describing, analysing, and evaluating algorithmic performance in time and space.
  • Critically assess the relevance of theories of algorithmic performance for business applications in the domain of software engineering.
  • Critically evaluate diverse scholarly views on the appropriateness of various algorithmic concepts to software development problems.
Skills
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Apply an in-depth domain-specific knowledge and understanding of efficiency to algorithmic designs.
  • Creatively apply various programming methods to most efficiently design algorithms for specified time and space constraints.
  • Autonomously gather material and organise it into a coherent presentation or essay.
Competencies
  • Solve problems and be prepared to take leadership decisions related to selecting the most appropriate algorithm for a software engineering problem.
  • Demonstrate self-direction in research and originality in solutions developed for solving problems related to algorithmic design.
  • Efficiently manage interdisciplinary issues that arise in connection to the performance of algorithms and data structures in time and space.
  • Create synthetic contextualised discussions of key issues related to the efficient construction of algorithms.
  • Apply a professional and scholarly approach to research problems pertaining to the comparative performance of algorithms.
  • Act autonomously in identifying research problems and solutions related to the real-world application of common controls and data structures in high-level programming languages.
Back End Development
125 hours | 5 ECTS

About

This is a foundational course on building server-side (or backend) applications using popular JavaScript runtime environments like Node.js. Students will learn event driven programming for building scalable backend for web applications. The module teaches various aspects of Node.js like setup, package manager, client-server programming and connecting to various databases and REST APIs. Most of these concepts would be covered in a hands-on manner with real world examples and applications built from scratch using Node.js on Linux servers. This course also provides an introduction to Linux server administration and scripting with special focus on web-development and networking. Students learn to use Linux monitoring tools (like Monit) to track the health of the servers. The module also provides an introduction to Express.js which is a popular light-weight framework for Node.js applications. Given the practical nature of this course, this would involve building actual website backends via assignments/projects for ecommerce, online learning and/or photo-sharing.

Teachers

Horchani Wissem
Horchani Wissem
Billel Abidi
Billel Abidi

Intended learning outcomes

Knowledge
  • Develop a specialised knowledge of key strategies related to Back end Development.
  • Critically assess the relevance of theories for business applications in the domain of technology.
  • Critically evaluate diverse scholarly views on Back end Development.
  • Acquire knowledge of key aspects of Node.js like setup, package manager, client-server programming and connecting to various databases and REST.
  • Develop a critical knowledge of Back end Development.
Skills
  • Creatively apply Back end Development tools to develop critical and original solutions for computational problems.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
  • Autonomously gather material and organise it into coherent problem sets or presentations.
  • Apply an in-depth domain-specific knowledge and understanding to Back end Development applications.
Competencies
  • Apply a professional and scholarly approach to research problems pertaining to Back end Development.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of Back end Development.
  • Act autonomously in identifying research problems and solutions related to Back end Development.
  • Create synthetic contextualised discussions of key issues related to Back end Development.
  • Efficiently manage interdisciplinary issues that arise in connection to Back end Development.
  • Demonstrate self-direction in research and originality in solutions developed for Back end Development.
Front End Development
125 hours | 5 ECTS

About

This course builds upon the introductory JavaScript course to acquaint students of popular and modern frameworks to build the front end. We focus on three very popular frameworks/libraries in use: React.js, jQuery and AngularJS. We start with React.js, one of the most popular and advanced ones amongst the three. students learn various components and data flow to learn to architect real world front end using React.js. This would be achieved via multiple code examples and code-walkthroughs from scratch. We would also dive into React Native which is a cross platform Framework to build native mobile and smart-TV apps using JavaScript. This helps students to build applications for various platforms using only JavaScript. jQuery is one of the oldest and most widely used JavaScript libraries, which students cover in detail. Students specifically focus on how jQuery can simplify event handling, AJAX, HTML DOM tree manipulation and create CSS animations. We also provide a hands-on introduction to AngularJS to architect model-view-controller (MVC) based dynamic web pages.

Teachers

Obinna David Okeke
Obinna David Okeke
Billel Abidi
Billel Abidi
Babatunde Olaifa
Babatunde Olaifa

Intended learning outcomes

Knowledge
  • Acquire knowledge of popular frameworks/libraries in use: React.js, jQuery and AngularJS.
  • Develop a specialised knowledge of key strategies related to front end development.
  • Critically evaluate diverse scholarly views on front end development.
  • Develop a critical knowledge of front end development.
  • Critically assess the relevance of theories for business applications in the domain of technology.
Skills
  • Apply an in-depth domain-specific knowledge and understanding to front end development solutions.
  • Creatively apply front end development applications to develop critical and original solutions for computational problems.
  • Autonomously gather material and organise it into coherent problem sets or presentations.
  • Employ the standard modern conventions for the presentation of scholarly work and scholarly referencing.
Competencies
  • Demonstrate self-direction in research and originality in solutions developed for front end development.
  • Solve problems and be prepared to take leadership decisions related to the methods and principles of front end development.
  • Act autonomously in identifying research problems and solutions related to front end development.
  • Efficiently manage interdisciplinary issues that arise in connection to front end development.
  • Create synthetic contextualised discussions of key issues related to front end development.
  • Apply a professional and scholarly approach to research problems pertaining to front end development.

Entry Requirements

Tuition Cost
2,400 USD
Student education requirement
Undergraduate (Bachelor’s)

Application Process

1

Submit initial Application

Complete the online application form with your personal information

2

Documentation Review

Submit required transcripts, certificates, and supporting documents

3

Assessment

Your application will be evaluated against program requirements

4

Interview

Selected candidates may be invited for an interview

5

Decision

Receive an admission decision

6

Enrollment

Complete registration and prepare to begin your studies

Ready to advance your education with a globally recognised degree?

Previous
Overview
Next
What you’ll learn