Skip to main content

Unit Preparation

COMS10001 Programming and Algorithms II

This unit builds on your understanding of procedural programming techniques (in C), some functional programming ideas and basic knowledge of the fundamental data structures in computer science as discussed in COMS10002. This will help you to understand and implement key concepts and also some specific algorithms taught in this unit. This is a very hands-on, programming-intensive unit, so we recommend practising your programming skills as much as possible beforehand.

COMS10002 Programming and Algorithms I

It is advisable for you to revise any programming skills you have learnt in the past and practice using them to solve simple problems. If you have no experience of programming in C, it is suggested that you study some of the material in Mike McGrath's "C Programming in Easy Steps" which provides an easy to understand introduction that will serve as a good companion to the course. If you are already a confident C programmer, you may wish to study the classic reference book by Kernigham and Ritchie. It would be a good idea to make sure you are familiar with Linux as we will be running the gcc compiler directly from the command line in this course. You may also want to install the gcc compiler on your personal laptop or desktop computer before the course starts. It is also advisable for you to revise and practice any material you may have learnt about number systems (which are important for understanding the representation of numbers in a computer), Boolean logic (which is important for understanding how the logical operators work) and mathematical induction (which is important for proving the correctness of programs). Much of this material will also be taught in the "Logic and Boolean algebra" and "Number systems and arithmetic" parts of the "Introduction to Computer Architecture" unit (weeks 1-3) and the "Logic" and "Proof" parts of the "Mathematical Methods for Computer Scientists" unit (weeks 1-7). If you want to get up to speed on functional programming, it is suggested you study "The Craft of Functional Programming" by Thompson - which clearly explains all of the material from the Haskell part of the course.

COMS10003 Mathematical Methods for Computer Scientists

This unit assumes a complete and full understanding a mathematics covered at GCSE Advanced level or equivalent. It also assumes students have confidence and curiosity to discover and learn new forms of mathematics.

COMS20001 Concurrent Computing

This unit builds on your understanding of sequential programming techniques and ideas discussed in COMS10001 and COMS10002. The unit provides a balanced mixture of teaching you the principles that underpin concurrency and a practical side that lets you experience both the advantages and difficulties associated with concurrent programs. Thus, this is partly a hands-on, programming-intensive unit mainly working on the XS1 platform - partly a theoretical unit that requires you to learn about key ideas and properties of concurrent systems.

COMS20002 Communication, complexity and number theory

This unit will expand on the Theory of Computation unit in the first year, and help prepare students for more theoretical topics in later years such as the units on cryptography.

COMS20805 Software Product Engineering

No unit preparation text found.

COMS21103 Data Structures and Algorithms

No unit preparation text found.

COMS21202 Symbols, Patterns and Signals

No unit preparation text found.

COMS21301 Human-Computer Interaction

This unit assumes a basic knowledge of probability theory and statistics, although we will briefly review these subjects. Some programming will be required, although the coursework will involve working in teams, so you can play to your strengths.

COMS22201 Language Engineering

No unit preparation text found.

COMS30001 Year Abroad

No unit preparation text found.

COMS30002 Cryptography A

No unit preparation text found.

COMS30004 High Performance Computing

All of the coursework for this unit is based on C, so we expect you to already be a competent and confident C programmer. It will be very useful to be familiar with a Linux development environment, and to be able to drive low-level software development tools such as compilers (gcc) and debuggers (gdb) from the command line. It will also be very useful to have some familiarity with the principles of computer architectures, such as pipelining, cache system, memory hierarchies etc.

COMS30106 Artificial Intelligence with Logic Programming

This unit assumes a basic knowledge of discrete mathematics (set theory, logic). Previous experience with declarative programming (e.g., Haskell) will be useful but isn't necessary.

COMS30121 Image Processing and Computer Vision

This unit assumes a basic knowledge of vector spaces, probability theory and statistics, although we will briefly review key aspects of these subjects. This is in part a very hands-on, programming-intensive unit built on OpenCV which utilises C and/or C++, so we recommend practising your programming skills as much as possible beforehand.

COMS30301 Introduction to Machine Learning

This unit assumes a basic knowledge of linear algebra and statistics.

COMS30500 Individual Project

You should begin thinking about your project before the end of second year and over the summer before you start third year. You should also look at the website of academics in the department and think about who you would like to work with as a supervisor. After this you should contact possible supervisor to discuss possible project ideas. It is important that you choose and agree a project early, as past experience shows that student who leave it late to find a project are more likely to have difficulties later on.

COMS30901 Applied Security

No unit preparation text found.

COMS31000 Character and Set Design

No unit preparation text found.

COMS31700 Design Verification

This unit requires programming skills, basic software engineering skills and a good understanding of computer architecture. We will be verifying hardware designs (written in a Hardware Description Language, such as Verilog) in the assignments. It is useful to understand a Hardware Description Language, but not a pre-requisite, because we will be using a behavioural coding style for verification, which is very close to general purpose programming languages.

COMS31900 Advanced Algorithms

This course is a natural successor to the second year course "Data Structures and Algorithms". We will be interested in algorithms and data structures which we can prove are both correct and scalable. There will be proofs and big oh notation. Several of the algorithms and data structures covered are randomised, i.e. they are allowed to toss coins to decide what to do next. It is natural that analysing these will require a solid understanding of basic probability. There will be a probability refresher, however we recommend that students independently brush up in advance.

COMS32300 Sustainability, Technology and Business

No unit preparation text found.

COMS88888 Concurrent Computing

This unit introduces a number of new theoretical, software and hardware concepts. As such a good grounding in basic mathematical concepts and a familiarity with modern programming languages, such as C, Java or Haskell are assumed. Some topics, such as networks and operating systems assume only a basic degree of mathematics and no prior knowledge is required.

COMSM0006 Sustainability, Technology and Business

No unit preparation text found.

COMSM0007 Cryptography B

This unit builds on Crypto A. You will benefit especially by revising the public key components of that unit (definitions and constructions for both public key encryption and signatures), as well as definitions and constructions for hash functions.

COMSM0009 Interactive Devices

This unit is open to students who have competed the second year undergraduate unit in Human Computer Interaction.

COMSM0010 Cloud Computing

No unit preparation text found.

COMSM0012 Robotics Systems PG

This unit assumes a basic knowledge of probability theory. Familiarity with Matlab programming environment is highly recommended. This is a hands-on unit that involves working as part of a team as well as individually.

COMSM0013 Animation Production

No unit preparation text found.

COMSM0014 Creative Technology Project

No unit preparation text found.

COMSM0109 Advanced Computer Architecture

No unit preparation text found.

COMSM0111 Individual Project: Implementation

No unit preparation text found.

COMSM1201 Programming in C

No unit preparation text found.

COMSM1211 Programming in C

No unit preparation text found.

COMSM1401 Software Engineering and Group Project

No unit preparation text found.

COMSM1500 Systems Security

This unit assumes a good understanding of operating systems concepts (e.g. process and memory management), basic computer architecture knowledge (e.g. instruction sets), a good understanding of networking (the TCP/IP stack and fundamentals of IP network configuration), working knowledge of the UNIX OS and C programming.

COMSM2001 Server Software

No unit preparation text found.

COMSM2006 Algorithmic and Economic Aspects of the Internet

No unit preparation text found.

COMSM2202 Research Skills

No unit preparation text found.

COMSM4111 Robotic Systems

This unit assumes a basic knowledge of probability theory. Familiarity with Matlab programming environment is highly recommended. This is a hands-on unit that involves working as part of a team as well as individually.

COMSM8888 Creative Technology Project

No unit preparation text found.