Degree Modules

This page contains a list of the modules I studied during the course of my degree at Imperial College London, along with brief descriptions of the modules listed. I obtained an MEng in Computing (Software Engineering), achieving a classification of Upper Second Class Honours (2:1).

Fourth Year

ModuleBrief Description
Advanced Topics in Software EngineeringAims to introduce state-of-the-art advanced tools and techniques for writing and maintaining large-scale software systems. To develop the critical skills to judge which technique would be most appropriate for solving large-scale software problems.
Computer visionBy the end of this course Students will be able to explain the concepts behind computer based recognition and the extraction of features from raster images. Students will also be able to illustrate some successful applications of vision systems and will be able to identify the vision systems limitations.
Computational NeurodynamicsComputational neurodynamics is the use of computer models to study the dynamics of large networks of interacting neurons. The student will learn how to model single neurons mathematically, how to simulate them computationally, how to construct models of large networks of such neurons with a variety of topologies, how to characterise the resulting behaviour using various measures and will acquire an understanding of the phenomena that are revealed as a result.
Advanced Issues in Object-Oriented Programming LanguagesThe purpose of this course is to discuss issues around the design and implementation of object oriented languages, the rationale and explore alternatives. The course uses formal calculi as an unambiguous notation, and as a way to establish soundness.
Multi-Agent SystemsGeneral introduction to the concept of agent and multi-agent systems.
Distributed AlgorithmsBy the end of this course students will be able to understand and explain the concepts behind distributed algorithms, including the assumptions made and the potential benefits and shortcomings. Students will also be able to assess the applicability of distributed algorithms to a particular circumstance.
Parallel AlgorithmsThis course aims to introduce parallel algorithms, focusing upon sorting algorithms, searching algorithms, optimisation algorithms and matrix algorithms - as well as synthesis of parallel algorithms.
Project ManagementThis course, ran by the Imperial College Business School, hopes to provide students with a sound understanding and knowledge of the basic concepts and analytical skills underpinning effective project management in any industry sector.

Third Year

ModuleBrief Description
Advanced DatabasesAims to provide students with a detailed theoretical and practical knowledge of how database management systems (DBMS) are implemented, how efficient applications are designed and implemented to work on DBMS, and DBMS may be linked to form 'distributed' DBMS (DDB).
Distributed SystemsThe objective is to give students a clear overview of the problems and issues that must be dealt with in constructing secure and flexible distributed applications. The emphasis is on the conceptual basis for distributed and networked systems rather than a detailed study of particular systems and standards. Concepts will be illustrated with examples from practical systems.
Software Engineering (Methods)This course features state-of-the-art methods in software engineering practices from a managerial, technical, and process perspective. This course is firmly integrated with a Group Project.
EntrepreneurshipRan by the Imperial College Business School, the objective of this course is to guide students through the 'exciting nightmare' of taking an idea or a technology to market, growing the venture and securing a successful exit. Although grounded in rigorous theory, the focus of the course is highly practical and class participation is actively encouraged.
Pervasive ComputingThe course will survey the emerging hardware and software landscape, examine some of the issues concerned with interfacing with and exploiting Clouds and a pervasive infrastructure, look at examples of innovative service types and explore some of the economic and business model issues underlying the development and support of such services.
Network SecurityAims to survey the principles and practice of network security. The emphasis of the course is on the underlying principles and techniques of network security with examples of how they are applied in practice.
RoboticsThis course will focus on the field of mobile robotics, at the exciting time when cutting-edge robots are beginning to leave the research laboratory to tackle real-world tasks --- in space, in the desert or in your living room. A robot is a physical device where sensing and actuation must be linked by efficient, robust and flexible on-board computing. We will emphasize both theoretical and practical aspects of the field.
Organisation and Management ProcessesThis course, ran by the Imperial College Business School, hopes to introduce the students to basic theories of organisational behaviour and management.

Second Year

ModuleBrief Description
Software Engineering (Design)Aims to provide in-depth understanding and practice of object-oriented programming. Achieves this through teaching the foundations of software development processes, along with basic concepts of (object-oriented) formal specifications. This enables students to acquire skills necessary to develop logic-based specifications of software systems and the skills and knowledge necessary for systems modelling, design and analysis.
Software Engineering (Algorithms)The course provides students with knowledge of several generally useful advanced algorithms. Topics covered include: Randomized algorithms, String-matching algorithms, Dictionary search, Advanced graph algorithms, Dynamic programming, Linear programming, Fourier transformations and Wavelet transformations.
Networks and CommunicationsCovers both the hardware and software behind modern networks and communications.
CompilersAims to develop an understanding of how a compiler for a high-level programming language works, how programming language design is influenced by compiler structure, and how computer architecture is influenced by the needs of compiled programs. The course provides the specific technical skills needed for constructing parsers, interpreters and translators as well as introducing topics in code optimisation and semantic analysis.
Models of ComputationThe course addresses the following fundamental questions: 1. What does a computer program mean? 2. How can we be sure that what runs is what we intended? 3. What programs can we write, and what not? 4. Is there a fundamental difference between programming paradigms? 5. How effective is a program, how much does running a program cost?
ConcurrencyIntroduces students to the concepts, methods and algorithms appropriate for the construction of concurrent programs. This includes interleaved actions, critical sections, deadlock, starvation, safety and liveness, monitors, message passing and specification of concurrent systems.
Introduction to Artificial IntelligenceThis course provides an introduction to some of the main themes of artificial Intelligence and to the use of Prolog as a language for modelling problems and implementing algorithms in AI.
Operating SystemsFurthers students' understanding of how Operating Systems work, covering device management, disk management, file systems, memory management, OS virtualisation, processes, threads, inter-process communication, process synchronisation and security.
Computer ArchitectureAims to build on the foundation laid by courses on Computer Systems and Hardware; to show the relationship between hardware and software; to focus on the concepts that provide the basis for current computers.
StatisticsThe aim of this course is to equip students to make basic statistical analyses of data, and to enable them to critically assess and interpret others' analyses.

First Year

ModuleBrief Description
Programming Part I (Haskell)This course aims to introduce the fundamentals of programming and problem solving using a very high-level programming language (Haskell). This enables students to solve small-scale problems succinctly and at an abstract mathematical level without being bogged down with the syntax and semantics of a conventional procedural or object-oriented language. The course is taught using a problem-solving approach with students being encouraged to use the various language features to solve realistic problems and to explore some fundamental algorithms and data structures in computer science.
Programming Part II (Introduction to Java)Introduces the basics of Java using a stripped-down Java implementation called "Kenya". This introduces concepts such as loops, which were not covered in Haskell.
Programming Part III (C)A short project used to introduce C.
Object Orientated ProgrammingThe course uses Java to give students a good understanding of basic concepts of object-oriented program design, introduce them to the fundamental principles of abstraction, modularity and reusability, and illustrate object diagrams as a basic object-oriented design and modelling technique.
Mathematical MethodsBy the end of the course, students will be confident with mathematical notation and concepts concerning vectors, matrices and calculus. Students will understand important concepts of linear systems, linear independence, real convergence, power series representation and transform representation.
Discrete MathematicsThis module introduces concepts and proof techniques of basic set theory, certain classes of relations, algorithm analysis, basic definitions, isomorphism, Eulerian paths, graph colouring and Dijkstra's shortest path algorithm.
LogicAims to introduce the language and semantics of propositional and first order predicate logic, and natural deduction. After the course, students will be able to apply concepts of first order logic to program specification.
Reasoning about ProgramsGives students familiarity with use of pre and post conditions and loop invariants for showing correctness, allows them to learn some standard algorithms and be able to reason about their correctness. Also helps students to understand the principle of induction and apply it to reasoning about Haskell programs.
HardwareThis module aims to provide Computing Science students with a sound introduction to the fundamental principles and devices used in the design of digital computers, and to the way in which primitive control logic can be organised to construct a programmable machine.
ArchitectureThe aim of the course is to develop a fundamental understanding of the organisation and operation of a desktop computer system. The emphasis of the course is on understanding how high-level language programs are represented and executed at an architectural-level. The course also provides an introduction to the organisation and operation of the operating system software that controls the execution of programs and that manages the resources of a computer.
DatabasesIntroduces database systems with particular reference to the relational model, including design, query languages and update transactions. To introduce entity-relationship modelling and translation to the relational model.
Operating Systems ConceptsGives students a chance to see how an Operating System works, from semaphores to hard-disk management techniques.
Professional IssuesA course intended to introduce students to the organisational, ethical and legal contexts in which professional computing practitioners work.
Topics in AIA group project that encourages students to research a topic within the field of AI, then create a website and group presentation about this research. The course aims to improve presentational skills, along with improving a student's ability to find and understand academic research papers.