Course structure

The Computer Science online MSc curriculum is made up of 13 units totalling 180 credits. Each unit is designed to teach you the technical skills to develop a digital career.

Designed to be completed over a period of two years and three months, you must successfully fulfil all 12 units, plus a project at the end. The units are 8 weeks in duration, and run consecutively. Over the year, there are three short breaks - in December, April and August.

The course begins with an induction to help you get to know the faculty team, your fellow students and the virtual online environment.

Units

Find out about the development of computer software, including problem analysis, establishing requirements, designing, implementing and evaluating. You will be provided with the terminology and concepts of programming, irrespective of the language being used. You will gain practical skills in terms of reading and writing programs and producing programs to solve real-world problems. You will gain confidence in the programming languages we teach, and confidence in your ability to learn different programming languages and styles of programming.

You’ll learn to:

  • Describe the design of a computer program separately from its implementation
  • Explain the basic concepts of procedural and object-orientated programming in the design and implementation of computer programs
  • Explain debugging and testing methods and how they contribute to robust code
  • Design, construct and evaluate simple data structures and algorithms
  • Plan, organise and implement program code to support reuse and maintainability of the software
  • Provide a critical review of software in terms of quality, design, reuse and robustness, and offer solutions to correct issues encountered

Understand how the principles behind software development are much more important than the chosen programming language, and how specification, design choices and development methodology may have a major impact on the correctness and suitability of the final software solution. Develop a systematic understanding of software development paradigms for complex software system building.

You’ll learn to:

  • Identify issues and appropriate solutions for the design and implementation of complex software problems
  • Perform evaluations of design solutions to determine if they are fit for purpose
  • Demonstrate an understanding of the principles of software development paradigms and their relationship to the appropriateness of an eventual software solution

An introduction to formal models of computation: finite automata, pushdown automata, Turing machines, and the corresponding classes of formal languages (regular, context-free, semi-decidable). You will learn how to design algorithms for concrete computational problems within these models of computation, and the dichotomy between deterministic and non-deterministic computation will be introduced.

You will gain an appreciation of the limits of computation, including methods of proving undecidability and specific examples of undecidable problems. The concept of computational complexity and complexity classes will be introduced.

You’ll learn to:

  • Demonstrate an understanding of the fundamental models of computation and the corresponding classes of formal grammars and languages
  • Design algorithms for specific computational problems as automata of appropriate types
  • Demonstrate the practical application of grammars and language within the context of parsing algorithms
  • Prove mathematically that some computational problems are undecidable within a particular class of computational models
  • Put theory into practice by creating a parser for a specific language

Develop skills in critically analysing problems for appropriate software solutions. You’ll also learn how to compare and contrast various software development paradigms.

You’ll learn to:

  • Critically evaluate contemporary software engineering paradigms for defined software engineering problems, given a set of relevant development constraints
  • Compare and contrast the roles, responsibilities, benefits and drawbacks of different team organisation structures for software development, given a set of relevant development constraints
  • Design software solutions in object-oriented programming languages

Gain a systems-based understanding of data, data modelling, storage, access, retrieval and protection.

You’ll learn to:

  • Understand the nature of data
  • Capture data, provide formal descriptions and represent data and its processing
  • Be conversant with emerging data exchange and database developments, such as big data, data mining, meta data and the semantic web
  • Critically review the migration towards cloud-based data storage in the context of its professional, legal and ethical implications
  • Practically demonstrate how programs and users can interact with databases through query languages

Explore how the logical and semantic foundations of programming languages are translated into usable programming languages. You will gain practical experience of using a functional programming language.

You’ll learn to:

  • Define and explain the syntax and semantics of the lambda calculus, and its role as a model of computation
  • Demonstrate the difference between reduction orders and explain their relationship with call-by-name, call-by-value and call-by-need evaluation
  • Define and explain the simply-typed lambda calculus, Hindley–Milner polymorphism, and type inference
  • Write programs over structured datatypes in a typed higher-order functional programming language
  • Formally reason about and proof properties of functional programs using the formalism of the typed lambda calculus

Gain a detailed introduction to formal artificial intelligence (AI) and a practical understanding of intelligence and computation as strategies for problem solving. You will also learn about the nature of the problems associated with various established strategies and approaches.

You’ll learn to:

  • Understand a wide range of AI techniques, their advantages and disadvantages
  • Appreciate AI as a mechanism to deal with computationally difficult problems in a practical manner
  • Understand the concepts of formal AI and put them into practice
  • Write small to medium-sized programs for aspects of artificial intelligence
  • Critically evaluate state-of-the-art AI applications

Develop a critical understanding of different schools of entrepreneurial thought and the importance of entrepreneurship in turning an invention or process into a solid business proposition. You’ll acquire key skills in business and operational planning and gain a systematic understanding of key business risk. You will develop key skills in the development of a business idea from initial concept to business plan.

You’ll learn to:

  • Identify and analyse market opportunities
  • Develop business strategies to take advantage of opportunities
  • Critically consider key operational issues
  • Investigate alternative funding and financial strategies
  • Identify and address key intellectual property, legal, social, ethical and professional issues
  • Locate and use entrepreneurial resources
  • Develop a business plan

Acquire an advanced level of understanding of current theoretical, methodological and practical research issues and trends in human computer interaction (HCI). It will raise your awareness of usability and how it can be achieved and measured. You’ll also gain relevant knowledge and skills related to usability design and evaluation. Plus you’ll have the opportunity to research advanced HCI topics, summarising the current state of the art, undertaking a relevant study and presenting the results.

You’ll learn to:

  • Understand HCI theory
  • Be aware of interaction design issues and able to carry out different types of evaluation
  • Challenge and recognise advances in state-of-the-art human–computer interaction research
  • Develop research programmes to overcome problems in usability research, development and evaluation

Discover the basic mathematics behind private-key and public-key cryptography. You will learn how to describe and analyse several well-known techniques for cryptographic security and authentication. You will find out how to evaluate and choose appropriate tools for the application of cryptography in security as well as gaining an appreciation of the current state of cryptography research, its issues and future directions.

You’ll learn to:

  • Understand the basic mathematics behind private-key and public-key cryptography
  • Describe and analyse several well-known techniques for cryptographic security and authentication
  • Evaluate and choose appropriate tools for the application of cryptography in security
  • Understand the current state of cryptography research, its issues and future directions

Gain an in-depth knowledge of practical artificial intelligence (AI) and how AI controls real-time autonomous systems, including autonomous robots, scientific simulations, and virtual-reality characters. You’ll develop fundamental vocational skills in constructing the three types of intelligent system covered. You’ll also acquire an understanding of intelligence in nature, so you can critically evaluate and compare natural and artificial intelligence systems. You will develop research and information retrieval skills so that you can write short conference papers, taking advantage of cutting-edge research and disseminating findings.

You’ll learn to:

  • Evaluate available options for mechanical real-world perception
  • Critically evaluate and recommend appropriate technologies for informing robotic control
  • Compare and evaluate mechanisms for sequencing actions, and implement appropriate mechanisms of action selection on a variety of platforms
  • Form predictions of the consequences of simple actions being performed by a large number of agents
  • Identify and evaluate intelligent control algorithms from journal and conference literature
  • Communicate your knowledge by writing short conference-style publications

By introducing you to research in computer science, you’ll be able to place your studies in a wider context, and prepare you for when it comes to choosing your research project.

You’ll learn to:

  • Summarise and critique computer science research papers
  • Distinguish various research themes in computer science and highlight broad research aims
  • Determine which research area you would like to work in for your project
  • Critically analyse and review previous work in a chosen subject area
  • Undertake and document a detailed literature review in a chosen area of computer science research
  • Understand the principles of structuring a research project

Finish the course by producing a unique research project using techniques learned throughout the year.

After completing the research you will be able to:

  • Identify the tasks to be completed, plan a scheme of work and complete the project to a professional standard
  • Assemble and create the necessary analysis, design and development tools
  • Aolve the technical problem and evaluate the effectiveness of the solution against quality standards
  • Demonstrate successful completion of tasks in a coherently written dissertation, including a discussion of the research outcomes and future directions
  • Evaluate and critique the project

Dr Michael Wright

Michael is a researcher in Human Computer Interaction with a particular interest in understanding the user experience of interaction across devices, applications and contexts.