This table shows the main generic skills which students would be expected to have acquired at the completion of the study of the undergraduate subjects offered by the Department of Computer Science and Software Engineering. This information should be read in conjunction with the description of the content in the handbook entry for the subject.

433-151
Introduction to Programming (Advanced)
433-171
Introduction to Programming
  • be able to solve computational problems by applying generic solutions involving abstract types and dynamic data structures;
  • be able to solve numerical problems and implement those solutions using a high-level imperative language (C);
  • be able to make effective use of the Unix operating system, electronic mail, and web browsers;
433-152
Algorithmic Problem Solving (Advanced)
433-172
Algorithmic Problem Solving
  • be able to solve computational problems by applying generic solutions involving abstract types and dynamic data structures;
  • be able to solve numerical and symbolic problems of moderate complexity;
  • be able to implement those solutions using imperative and functional programming languages (C, Haskell).
433-252
Software Development: Principles and Tools
  • be able to apply software development principles to programming tasks;
  • be able to use software development tools that support these principles;
  • be able to participate effectively in a small software-development team.
433-253
Algorithms and Data Structures
  • be able to solve computational problems by applying a broad range of standard algorithms involving abstract types and dynamic data structures;
  • be able to analyse the relative advantages of different algorithms for solving the same problem;
  • be able to implement those solutions using a high-level imperative language (C);
  • be able to reason about functional programs (Haskell).
433-254
Software Design
  • be able to undertake object-oriented design using a standard modelling language (UML);
  • be proficient in writing small programs in an object oriented language (Java);
  • be able to apply a range of small-scale software design techniques.
433-255
Logic and Computation
  • be able to analyse discrete systems of moderate complexity;
  • be able to reason about formal properties of programs and to write formal proofs;
  • be able to use logic as a formalism for describing and solving problems and to implement the solutions using a logic programming language (Prolog).
433-258
Database Systems for Engineers
  • be able to use a data manipulation language (SQL) to interact with database systems;
  • be able to apply their knowledge of database architectures to use databases efficiently;
433-303
Artificial Intelligence
  • be able to reason about the capabilities and limitations of artificial intelligence algorithms involving search, logical inference and learning;
  • be able to formulate suitable problems so that they can be addressed using artificial intelligence algorithms;
  • be able to solve complex problems using standard algorithms of artificial intelligence, and to implement the solutions using a logic programming language (Prolog).
433-313
Computer Design
  • be able to write programs that simulate components of a computer system;
  • be able to identify appropriate performance measures for a specific computing task;
  • be able to evaluate the suitability of a given computer design for a specific task, and to evaluate the impact of architectural choices on the portability and performance of computer programs.
433-330
Theory of Computation
  • be able to reason about abstract models of computational devices and the inherent complexity of computational problems;
  • to be able to use these models to construct formal solutions to diverse computational problems;
  • be able to apply formal notations and techniques in reasoning about machines and programs.
433-332
Operating Systems
  • be able to evaluate the suitability of a given operating system for a specific task;
  • be able to apply a knowledge of operating systems to improve the performance of computer programs;
  • be able to write programs that simulate components of an operating system.
433-340
Software Engineering Project
  • be able to select and manage a variety of software engineering lifecycles and methods;
  • be able to work in small, multi-cultural teams, acting professionally, and planning effectively;
  • be able to analyse, design and implement small software systems;
  • be able to communicate effectively in written and oral presentations.
433-341
Software Engineering Process and Practice
  • be able to analyze conventional software life-cycle models in terms of their phases and activities;
  • be able to analyse requirements and specify software systems, and select and apply appropriate design techniques;
  • be able to use standard techniques and tools for achieving software quality.
433-342
Software Engineering Methods
  • be able to apply standard methods to assess software reliability;
  • be able to apply software testing techniques in the development of reliable software;
  • be able to use a variety of tools to support software engineering processes.
433-343
Professional Issues in Computing
  • be able to identify potential conflicts between computer applications and legal or ethical considerations, and to exercise professional judgement in resolving these conflicts;
  • be able to participate in online and face to face discussions;
  • be able to formulate and present written and oral arguments on social issues related to computing;
  • be able to perform a literature search and present information with appropriate citations;
433-351
Database Systems
  • be able to reason about the logical structure of data and queries;
  • be able to use a data manipulation language (SQL) to interact with database systems;
  • be able to apply their knowledge of database architectures to use databases efficiently;
  • be able to administer a database system;
  • be able to participate effectively in a team to develop a web database.
433-353
Networks and Communications
  • be able to analyze network architectures, algorithms and protocols;
  • to be able to develop algorithms that employ networking protocols;
  • be able to reason about social, economic, political, and historical factors which influence the past and future development of computer networks.
433-361
Programming Language Implementation
  • be able to analyze formal grammars and parsing algorithms, and choose the appropriate parsing algorithm for a given grammar;
  • be able to analyze imperative, object-oriented, functional and logic programming paradigms in terms of the internal operation of compilers and interpreters;
  • be able to implement parsers and simple compilers.
433-371
Interactive System Design
  • be able to apply techniques in user modelling to the design of interactive systems;
  • be able to analyze and evaluate multimodal interfaces and multimedia applications, based on an understanding of human perception and human-machine interaction;
  • be able to work in a small team on a project involving both technical and human components.
433-380
Graphics and Computation
  • be able to apply the principles of computer graphics and reason about state-of-the-art algorithms that perform real-time animation;
  • be able to select an appropriate language for the design and implementation of a high-performance graphics application;
  • be able to design complex and realistic real-time graphics applications that run in a networked environment;
  • be able to participate effectively in a team to develop graphics software.
433-385
Modelling, Analysis and Visualisation
  • be able to analyze new application domains to identify the concepts and information necessary for building a computer model in that domain;
  • be able to analyze a selection of approaches to modelling, simulation and visualisation in a variety of application domains;
  • be able to use a high level computer language to create complex visualisations.
433-440
Advanced Software Engineering Project
  • be able to select and manage a variety of software engineering lifecycles and methods;
  • be able to work in small, multi-cultural teams, acting professionally, and planning effectively;
  • be able to analyse, design and implement small software systems;
  • be able to communicate effectively in written and oral presentations;
  • be able to explore, evaluate and apply complex computing concepts to a software development project.
433-441
System Modelling and Analysis
  • be able to create and verify formal models of sequential and concurrent computing systems;
  • be able to determine critical properties of systems and demonstarate in a rigorous fashion whether or not models exhibit those properties;
  • be able to apply problem solving skills to a variety of problems in discrete systems analysis.
433-443
Software Project Management
  • be able to select software engineering processes and methods appropriate for a development project;
  • be able to develop plans for team management, risk management, configuration management, client management, quality assurance and accreditation,
  • be able to apply standards, techniques and tools to support software project management and the production of high quality software;
433-448
Applied Cryptography and Coding
  • be able to analyze fundamental public key and symmetric key cryptographic algorithms;
  • be able to implement fundamental cryptographic algorithms.
433-460
Human Language Technology
  • be able to apply problem-solving skills in the design and analysis of complex language processing systems;
  • be able to implement the algorithms used in a wide variety of low-level language processing tasks;
  • be able to create computational models of human language, and critically evaluate their strengths and weaknesses.
433-464 TODO
Project Work
  • be able to design a sophisticated computational model or system informed by a careful review of the research literature;
  • be able to implement, evaluate and report on the model or system.
433-465 TODO
Mechatronics Project
  • be able to ...
433-471 TODO
Logic Programming
  • be able to use the programming techniques appropriate to declarative programming languages, including structural induction, accumulators, and higher order programming;
  • be able to exploit their knowledge of the technologies used to implement logic programming languages in order to enhance the performance of logic programs;
  • be able to reason about the advantages of using mathematical logic as a basis for programming languages.
433-476 TODO
Algorithms for Constrained Search
  • be able to use THEIR knowledge of algorithmic techniques to solve problems in a variety of application domains;
  • be able to analyse the appropriateness of heuristic approaches to complex problems.
433-480 TODO
Computer Vision and Image Processing
  • be able to ...
433-481
Agent Programming Languages
  • be able to apply the principles of intelligent reasoning and to analyze state-of-the art algorithms that achieve robust, distributed reasoning in multi-agent systems;
  • be able to select appropriate languages for the design and implementation of intelligent multi-agent reasoning systems;
  • be able to participate effectively in a team to research and engineer intelligent systems.
433-498 TODO
Advanced Topic in Computer Science
  • be able to ...
433-520
Programming and Software Development
  • be able to apply the concepts of object-oriented design to the solution of computational problems;
  • be proficient in programming with an object-oriented programming language (Java);
433-521
Algorithms and Complexity
  • be able to use a variety of well-known algorithms for sorting, searching, and other common problems in computing;
  • be able to reason about a variety of more advanced algorithms;
  • be able to perform basic complexity analysis of algorithms.
433-522
Internet Technologies
  • be able to analyze the relationship between different components of computer networks;
  • be able to conceptually and practically differentiate the various layers in internetwork architectures;
  • be able to conduct research into emerging networking technologies;
  • be able to apply network security and network management concepts in today's networked environments.
433-620
Engineering for Internet Software Development
  • be able to evaluate and choose appropriate architectures and platforms for web-based software;
  • be able to implement solutions to web-services applications using platforms such as Java and .NET;
  • be able to analyze the logical structure of client-server and distributed web-based applications.
433-621
Web Technologies Protocols and Applications
  • be able to evaluate and choose appropriate technologies for implementing data intensive web-based systems;
  • be able to investigate a topic in web-based systems and give oral and written presentations about the topic;
  • be able to analyze the logical structure of web-based data and queries.
433-641 TODO
Systems Requirements Engineering
  • be able to plan and manage requirements gathering, analysis and specification for software projects;
  • be able to create and analyse models in UML;
  • be able to EXHIBIT problem analysis and modelling skills;
  • be able to conduct team reviews of software requirements specifications;
  • be able to identify usability and safety requirements for software;
  • be able to carry out a range of safety and usability analyses for requirements.
433-642 TODO
Software Engineering Case Studies
  • APPRECIATE the complexity and ambiguity in technical, managerial, social and legal issues in software engineering;
  • be able to identify key risk factors in "real world" software projects, and make defensible, informed decisions for mitigating those risks;
  • be able to plan for complex software engineering projects
433-643 TODO
IT Project Management
  • be able to select software engineering processes and engineering methods appropriate for a development projects;
  • be able to assess project risk and have experienced risk evaluation and monitoring;
  • have EXPERIENCED project estimation;
  • have EXPERIENCED planning and managing.
433-644 TODO
The Personal Software Process
  • be able to analyse plans and performance;
  • have IMPROVED planning and time management skills;
  • have IMPROVED reflection and self-evaluation skills.
433-645 TODO
Computer Security
  • be able to EXPLAIN the protocols which ensure security in contemporary networked computer systems;
  • be able to EXTRACT facts and critically reason about about a specialized topic from the large body of research literature, web sources, and implementations which describe current computer security practice;
  • be able to independently research a specialized topic in computer security and to prepare a consultants style report on this topic;
  • have a technical APPRECIATION of the interaction between underlying theory, such as cryptography and the implementations of these concepts in computer security infrastructure.
433-670 TODO
Principles of Programming Languages
  • be able to PROGRAM small applications in an object-oriented, a functional, and a logic programming language;
  • be able to EXPLAIN the differences, similarities and relative advantages of these three paradigms;
  • be able to EXPLAIN abstract concepts from the theory of programming languages.
433-671 TODO
Constraint Programming
  • be able to EXPLAIN the role of constraint solving and search in solving combinatorial problems;
  • be able to model complex combinatorial problems as constraint programs;
  • be able to evaluate the suitability of a particular model to solving a problem;
  • be able to PROGRAM effective search strategies for combinatorial problems.
433-675 TODO
Database Principles and Technology
  • be able to EXPLAIN the key technologies and standards used to access data on the World Wide Web;
  • be able to EXPLAIN current techniques used for data mining;
  • be able to research a technical topic and give an informal oral presentation of the topic.
433-676 TODO
Text and Document Management
  • be able to EXPLAIN the key components of a compression system;
  • be able to enumerate the advantages and disadvantages of the different ways of implementing those components;
  • be able to critically assess proposals for new compression schemes, and design practical experiments to assess such schemes;
  • be able to EXPLAIN the key components of an information retrieval system;
  • be able to enumerate the advantages and disadvantages of the different ways of implementing those components;
  • be able to critically assess proposals for new information retrieval schemes.
433-677 TODO
Networks and Parallel Processing Complexity
  • be aware of parallel architectures and computations;
  • have detailed knowledge of communication patterns and interconnection networks;
  • be able to analyze the complexity of parallel algorithms and the efficiency of a particular implementation;
  • be able to implement a parallel algorithm using a number of techniques;
  • be able to construct proofs using formal models of communication complexity and parallel computing;
  • GAIN experience with a real application.
433-678 TODO
Cluster and Grid Computing
  • be able to design and develop next-generation distributed computing systems;
  • be able to apply distributed computing to problem solving tasks;
  • be able to develop distributed internet technologies in a team.
433-679 TODO
Evolutionary and Neural Computation
  • be aware of the nature of non-symbolic artificial intelligence, evolutionary computation and its applications;
  • have detailed knowledge of some common neural network architectures;
  • be able to manipulate genetic operators and design neural nets;
  • UNDERSTAND techniques for numerical optimisation;
  • be able to apply the techniques studied in the subject to practical problems.
433-680 TODO
Machine Learning
  • appreciate the role of machine learning in AI theory and applications;
  • be able to EXPLAIN the main current techniques used to implement machine learning (data mining);
  • be able to design and implement simple machine learning systems.
433-682 TODO
Software Agents
  • be able to ...
433-690 TODO
Project
  • be able to ...