Professional Core Courses
Digital System
This module demonstrates the fundamental building blocks, mechanisms and concepts found in all digital systems. Students will learn about the workings of a processor; how memory works; and the architectures of classical and contemporary computers. It also shows students how programming languages are turned into something a computer can understand. In providing a strong insight into these fundamental operations, students are encouraged to develop new ways of thinking and to develop abstract thought.
Students will gain an understanding of the key features and components of digital systems, including low level components such as registers and adders, and how these can be controlled through the use of programming techniques. They will develop the skills to work with different logic constructs and number systems, in particular, binary logic. The relationship between applications software, systems software and hardware will be considered and students will also develop an applied understanding of the c programming language.
Software Development
This module aims to instill the knowledge, understanding and skills expected of a principled computer programmer. More specifically:
To develop specific skills in writing, analyzing, debugging, testing and documenting computer programs.
To instill best practice of the day to day techniques associated with principled software development.
To develop a practical understanding of the software development cycle and an awareness of the challenges faced by software developers in addressing scalability and complexity in computer software.
To develop specific working knowledge of the Scratch, C and Java programming languages.
On successful completion of this module students should be able to demonstrate subject specific knowledge, understanding and skills and have the ability to:
Work independently to develop moderately complex, robust computer programs in the Scratch, C and Java programming languages.
Apply a principled approach to the development of a software program.
Perform effective testing of computer programs.
Undertake reasoned analysis of alternative designs for moderately complex computer programs.
Analyse and debug computer programs.
Understand the need for a structured approach to the software development process
Information Systems
This course aims to teach basic concepts and knowledge about information systems, and develop basic competence in fundamental information handling framework of technologies, together with their applications in social and business contexts. It further aims to develop awareness of social aspects of computing, human centred system design and system scale problem solving.
At the end of the course, the students should be able to: understand the general concepts and frameworks of information systems, construct simple databases and build query for the the databases in correct SQL, validate the data, describe the functions and architecture of basic information management systems, comprehend social issues associated with digital technology and information systems, demonstrate awareness of legal and professional issues affecting software development, recognise social and ethical constraints and make effective use of basic data handling technologies.
Advanced Programming
An adaptable approach is taken to new tools and technologies, allowing an understanding of the importance of selecting the best programming tool for a given problem. A number of new programming languages are introduced from different programming language families and build upon good practices established in Year 2. An appreciation of the history and diversity of programming languages is encouraged, such as understanding their domains of application and to learn to think more broadly about programming. Understanding of the application domain and relative strengths, weaknesses and performance of various language types will be promoted and language concepts and list comprehensions are also introduced. This module requires a level of self-discipline to recognise and build programs that not only function to a high degree but incorporate non-functional properties. The generation of elegant, scalable and extensible software is expected from the course. Through this experience, students develop the ability to reason logically and algorithmically about problem-solving. They will gain experience of abstracting and simplifying problems based on how to map onto structures and computational elements of programming languages. Confidence in computational thinking will allow students to compare and contrast alternatives.
Operating System
Operation System is one of specialty core compulsory course module. This course targets to give students the skill and experience that theory and practical application of operating system concepts and concurrent systems, generally understand the issues in writing concurrent systems, understand the role of operating systems play in computing, design and implement complex data structures to meet resource and operational system constraints.
Students successfully completing this course will be able to realize the management methods of process, memory, device and file system used in Windows and Unix, and then apply them to the program design of other applications.
This course is organized into four parts- Process management, Memory management, Device management, File system management.
Human-Computer Interaction
The syllabus is based on three complementary subject areas. The first term considers the dynamic response of systems, whilst the second term focuses on instrumentation and embedded systems. Details are listed below; Dynamic response of systems and control system design. Modelling 1st and 2nd order systems. Time and frequency response. Transfer functions and block diagrams. Poles, zeros and stability. Feedback control and Bode diagrams. Instrumentation. Overview of instrumentation and signal conditioning. Resistance based sensors and physical operating principles. Thermo-electric sensors. Analogue to digital conversion. Magnetic and electromagnetic measurement. High impedance sensors such as piezoelectric and capacitance transducers. Acoustic sensors. Embedded systems. Fundamentals of computer architectures, memory heirarchy. Internal parallel and serial busses and interfacing of mapped hardware devices. Interrupt architectures, mechanisms and software. Concurrent systems: real time scheduling, synchronisation and inter-task communication. Data communication including practical implementations of hardware, software and protocols. Software and hardware engineering, including a brief introduction to the development cycle. Overview of C programming.
Computer Network
Learn the principles of computer networks: be proficiency in basic compositions and structures of interconnected networks, internet protocol layers and service models, data-link layer technologies, Ethernet technologies, network layer protocols, principles of routing algorithms and routing protocols, transportation layer protocols, application layer protocols, network security, basic principles of mobile networking. Understand the limitation of current internet and the trends of future internet.
Learn the implementation of computer networks: the principles of TCP/IP protocol, internet addressing and routing, basics of switches, routers, fire walls, and DNS. Learn the basics of internetworking, know how to design and implement basic networks.
Learn and obey the engineering professional ethics: through course learning, literature surveying, class discussions, homework and labs, know that the demand analysis, design, implementation, test and maintenance of internetworking is a valuable and honorable profession.
Databases
This module provides a theoretical background to the design, implementation and use of database management systems, both for data designers and application developers. It takes into account all relevant aspects related to information security in the design, development and use of database systems. The course consists of a number of related sections, including introduction, database design, the relational model, an introduction to SQL, accessing relational DBMS via Java, the physical model, and transaction processing and concurrency control.
At the end of the course the students should be able to demonstrate subject specific knowledge, understanding and skills and have the ability to demonstrate a deep knowledge of concepts, tools and security aspects related to the design and implementation of a database, show an understanding of the Relational Model from its mathematical underpinnings through to efficient implementation and execution of SQL queries, and develop software that links to a Relational DBMS and produce applications that leverage both the power of the SQL query language and the flexibility of a general programming language.
Artificial Intelligence
This module aims to give students a broad grounding in artificial intelligence including knowledge and understanding of reasoning, decision making, fuzzy logic, neural networks, and genetic algorithms and the skills to implement artificial intelligent systems. The understanding gained through the module should give the students an appreciation of the challenges in this area. Furthermore, the module will prepare students to understand and critically analyse artificial intelligence techniques used in modern computers and mobile devices.
This fundamental computer science module aims more generally to be aware of the requirements of artificial intelligence systems in general and place these in the context of computing and communications systems. The broad grounding in knowledge based, probabilistic and logical systems through machine learning techniques should encourage the students to be more aware of competing approaches more widely in other aspects of their studies.
Artificial Intelligence Concepts
This module aims to give students a broad grounding in artificial intelligence including knowledge and understanding of reasoning, decision making, fuzzy logic, neural networks, and genetic algorithms and the skills to implement artificial intelligent systems. The understanding gained through the module should give the students an appreciation of the challenges in this area. Furthermore, the module will prepare students to understand and critically analyse artificial intelligence techniques used in modern computers and mobile devices.
This fundamental computer science module aims more generally to be aware of the requirements of artificial intelligence systems in general and place these in the context of computing and communications systems. The broad grounding in knowledge based, probabilistic and logical systems through machine learning techniques should encourage the students to be more aware of competing approaches more widely in other aspects of their studies.
Security and Risk
Covering a range of topics, including asset identification and assessment, threat analysis and management tools and frameworks, students will become familiar with attack lifecycle and processes, as well as risk management and assessment processes, tools and frameworks. The module covers mitigation strategies and the most appropriate mitigation technologies and offers knowledge on assurance frameworks and disaster recovery planning. Students will gain an understanding of the different ways in which an IT professional can make effective decisions when securing an IT infrastructure. The course will make them aware of the tools, frameworks and models that can be used to identify assets, threats and risks, before selecting the most appropriate strategies to manage the exposure that IT infrastructure faces in the light of this analysis. The module builds on their skills with a practical examination of the mechanisms by which IT infrastructures are attacked.
Distributed Systems
Students are offered an understanding of the fundamental principles underpinning modern distributed systems and practical implementation using Java. They explore remote invocation, indirect communication, group communication and non-functional aspects in distributed systems such as scalability, fault-tolerance and dependability. Various architectures and techniques widely used in Distributed systems, including DDBMS (Distributed Database Management System), SOAP (Simple Object Access Protocol) and REST (REpresentational State Transfer), are investigated in the module and students will benefit from gaining practical experiences of developing some distributed systems applications in Lab. Through this, the module examines distributed systems design, security and deployment. Over the course of the module, students will improve their problem solving and programming skills, and gain insight into and familiarise themselves with the framework and architecture of distributed systems.
Languages and Compilation
Providing an introduction to formal languages, grammar, automata and how these concepts relate to programming in terms of compilers and the compilation process, students will learn about syntax and semantics, phrase structure such as derivation and parsing.
By the end of this module, students will understand the relation of programming languages and the theory of formal languages. They will possess an essential understanding of the compilation process for a high-level programming language. Students are encouraged to engage with theoretical aspects of computer science to compliment practical skills in other parts of their degree.
Professionalism in Practice
This module is designed to provide students with a strong foundation in principles of responsible computing, covering the legal, social, ethical and professional challenges that that a practicing computer scientist regularly faces. It is strongly research-led and draws upon contemporary examples of where technology has resulted in both benefits and harm to people and society. We then develop an understanding of the legal frameworks, professional codes, working practices and civil licenses designed to provide protection from these harms. Particular emphasis is placed on considerations relating to the need for computer systems to be trusted and trustworthy.
Data Engineering
This module builds upon knowledge gained in Part I by providing a theoretical background to the design, implementation and use of database management systems, both for data designers and application developers. It incorporates consideration of information quality and security in the design, development and use of database systems. The module includes a brief history of the database management systems, Entity-Relationship Models, the relational model and the data normalisation process, and alternative schema definitions, NoSQL and Object Oriented data models, big data, as well as transaction processing and concurrency control. The module embeds practical access and retrieval considerations and how to interact with databases from a number of programming languages.
Artificial Intelligence Concepts
This module aims to give students a broad grounding in artificial intelligence including knowledge and understanding of reasoning, decision making, fuzzy logic, neural networks, and genetic algorithms and the skills to implement artificial intelligent systems. The understanding gained through the module should give the students an appreciation of the challenges in this area. Furthermore, the module will prepare students to understand and critically analyse artificial intelligence techniques used in modern computers and mobile devices.
This fundamental computer science module aims more generally to be aware of the requirements of artificial intelligence systems in general and place these in the context of computing and communications systems. The broad grounding in knowledge based, probabilistic and logical systems through machine learning techniques should encourage the students to be more aware of competing approaches more widely in other aspects of their studies.
Major contents of this module include fundamental theory and useful techniques related to decision making, data pre-processing, search, inference and reasoning, machine learning, and artificial neural networks.
Other professional courses
Introduction to Computer Science
This course is set for the freshmen of Information Management and System (IMS), and is the basis of other courses later. It aims to pave the basis for the freshmen to understand the popular concepts and techniques about computer science. To do so, this course categorizes the topics into three levels to help the students to (1) use popular techniques to convenience the study and life here; (2) know how to do programming, which is the fundamental skill for the students majoring in computer related departments like CS, S.S.E, and IMS; (3) understand the related concepts and theories about computer science, which cover some popular and primary topics like computer architecture, networking, and database systems, etc.
C programming language
For students in non-CS major, through the study of this course, they can train their capacity of logical and computational thinking. The course makes it easier for them to understand the working process of computer, and how to use computer to solve specific problems. It is the foundation of some advanced courses, and also lays the foundation for programming in other majors.
The course introduces the basic principles, ideas and methods of program design. It elaborated the fundament knowledge and procedural programming methods of C programming language, including data types supported by C, usages of expressions, there essential programming constructs, modular programming, applications of array, code preprocessing, pointer, struct, union, file, etc. Through the study, students can make use of C programming language to correctly describe data, understand common algorithms, use functions to achieve modular programming and use them to solve some simple problems. Students can know well the development process of programs, be familiar with C programming language, and grasp the methods of program debugging.
Java Programming
This course is an introduction to Java programming language and object-oriented programming conception. It is designed for students with little or even without programming experience using Java or other programming languages. After the completion of this course, students will be able to solve a real problem using Java. To this end, students should gain the following abilities or skills.
Having a grasp of the conception of object-oriented programming.
Formulating programmatic solutions and implementing steps for a real problem
Writing and debugging Java scripts to obtain a correct result.
Developing a larger program by cooperating with colleagues of a team.
Discrete Mathematics
Discrete mathematics is the specialty basic course of computer science and technology. The objective of study of discrete mathematics (A) I is to master system knowledge of mathematical logic, set theory, counting and relations closely related to the computer specialty. Through learning this course, create conditions for learning the subsequent courses, including discrete mathematics (A) II, data structure, algorithm analysis and design, compiling principle, computer network, database system, artificial intelligence, moreover, improve the abstract thinking and rigorous logical reasoning ability, and then lay a solid foundation to participate in the innovative research and development for the future work.
The main content includes the mathematical logic, set theory, counting and relation. Mathematical logic consists of proposition logic and predicate logic. Set theory contains the concept, operation, as well as the definition, denotation, operation of function and so on. Counting contains the concept, pigeonhole principle, permutations and combinations and so on. Relation contains the concept, denotation, operation of relation, equivalence relation, partial order and Hasse diagram, etc..
Fundamentals of Computer Science
The contents of this course include following aspects:
(1) Discrete Maths cover: Sets, Relations, Functions, Recursions, Propositional Logic,Predicate Logic,Logicin Action.
(2) Data structures cover: Simple variables, Linear and multi-dimensional arrays, Strings, Records and Objects, Linked List (Chain), Pointers, Regions of memory in computing systems.
(3) Introduction to Algorithms cover: Operations counting, Worst, Average, Best cases, Insertion sort, Introduction to Big O function, Sentinel Search and Efficiencies, Searching Sorted Arrays.
(4) Abstract Data Types cover: ADTs and Set ADT, Stack, Queue, Graphs, Trees.
(5) Hard Problems and NP-Completeness cover: Hard Problems in Computing, ProblemsTypes, Reductions, Problems Classes.
(6) Searching and Sorting cover: Linear and Binary Searching Single File, Indexed Retrievaland Hashing Single File, Sorting Techniques, Treebased Sorting.
Object-Oriented Programming and C++
This course mainly introduces the C + + programming language and the concept of object-oriented programming. This course is mainly aimed at students with little or even no experience in any C + + language programming. Through this course, students will be able to solve some practical problems with C + + programming.
Internet Applications Engineering
This module is designed to sensitise students to the wide range of issues surrounding the structure, design, comissioning and deployment of contemporary, large scale and high performance web based services and infrastructures.
On successful completion of this module students will be able to establish performance metrics, interpret quantitative data to identify performance problems, and make informed choices about complex distributed and networked architectures. They will be able to understand web architectures, standards and business practises, empirically assess the performance of a web site, understand and alleviate potential performance bottlenecks, address issues and limitations of scale, design for Heterogeneous platforms, establish a quality process for web sites, and understand security threats and hardening of web sites.
Advanced Networking
This module will build upon the fundamental concepts introduced in Networking (CNSCC.203), introducing a series of advanced topics in the networking domain. The module is divided into 3 themes: Core topics that will reinforce the fundamentals gained in CNSCC.203, Practicals that will provide enhanced “hands-on” experience, and Research that will cover a range of topics that can be considered more current and advanced. The Core theme will begin by looking at how networks are topologically constructed, in order to support customers’ service requirements. It will then broadly study the elements of a router that will enable the support of multiple classes of service, bandwidth and delay guarantees, and other key areas of advanced networking.
The Practical theme will ensure a practical element to the module. It will look at the configuration and management of virtual network topologies to enable hands on experience of network measurement and packet analysis. The Research theme will cover a range of topics that are cutting edge in the field. Given the nature of this theme, topics covered here are likely to change year on year.
Embedded Systems
This module exposes students to the challenges associated with developing embedded systems, which are increasingly common in everyday appliances and devices such as mobile phones, washing machines, set-top boxes, etc.
The module includes the following topics: Embedded Processors and Micro-controller architecture; Real Time Scheduling; Interrupts and interrupt handling, Design and test strategies for embedded systems; Software development for embedded systems, Cross-Compilation; Debugging; Higher level architectures for embedded systems; Communications technologies and their application for interconnecting embedded components (selected from I2C, CAN, UART/USART, pulse width modulation, analogue-to-digital and digital-to-analogue conversion, wireless interconnects such as IEEE 802.15.4); sensors and actuators; energy efficiency.
Computer Science Seminars
Students will be exposed to a range of current computer science related topics from different subject areas. The areas covered come from our different thematic strand and will include: natural language engineering; policy based network resilience; eye-tracking for ubiquitous computing applications; and a focus on energy aware control and sensing in home environments.
Students will conduct independent and in-depth research into an advanced topic of computing or communications, reflecting current topical and research issues. The module will enable students to produce a detailed document describing their research finding, present technically intricate issues in a coherent manner, and discuss and defend their position on specific topic within a seminar group.
Group Project
The group projects is to give students the experience to execute a project through all stages from initial design to implementation to the presentation of the results; to work in groups to the demands of a client (or group supervisor) and to apply knowledge being gained in other courses within a project context.
This course is organized into four parts – project design, implementation, demonstration, presentation and final reflective report.
At the end, the students will have experience with a concrete, group development project covering all aspects and being executed in a real-world environment. In particular, the student will learn and apply their knowledge about prototyping, project planning, management and execution, game design, systems design, and/or testing strategies.
Software Design
This module introduces the fundamentals of software design, and its role for developing software systems. The first part of the module will explain that software design is the description of1)the structure of a software system to be implemented,2) the data which is part of the system, 3) the interfaces between system components, and 4) sometimes the algorithms to be used. Also the topics of software lifecycle will be covered, including lifecycle model selections, requirements, high-level design, detailed design, implementation(coding),and the importance of aligning them. The second part of the module will introduce various software design methods. It provides some ad-hoc ways of software design (e.g., starting from requirements (often natural language), preparing an informal design, coding commences and the design is modified as the system is implemented, etc) and their consequences. Then it explains systematic approaches to developing a software design using a set of graphical models (e.g., object model, sequence model, state transition model, structural model, data-flow model, etc.). Also, the design process involved in developing several models of the system at different levels of abstraction is explained. The third part of the module will introduce object-oriented design with UML. The four aims of modeling (visualization of the expected system, specification of the system’s structure and/or behavior, provision of a template for constructing the system, documentation of the decisions that have been made) are explained and design principles (e.g., information hiding) are explored. Finally, UML models along with object oriented design process are provided.
Natural Language Processing
In this module, we provide a broad introduction to Natural Language Processing (NLP), a subfield of Computer Science and Artificial Intelligence, which deals with how computers and machines understand, process, and manipulate human languages. We will introduce students to the core concepts and techniques of the NLP, covering a range of key topics including language dataset/corpus collection and compilation, morpho-syntactic tagging and parsing for text structural analysis, text summarisation to extract key information, document classification and clustering, information extraction/retrieval, semantic/emotion detection, large language models and their fine-tuning and prompting engineering, and emerging generative AI techniques and their applications to practical tasks. We will also involve students in discussions and debates on challenging and controversial issues of NLP techniques, such as ethical issues, hallucination and potential biases and unfairness of LLMs and generative AI. In addition to learning theoretical knowledge, students will learn practical skills of using NLP techniques to solve practical problems by building small-scale NLP tools and systems in lab classes and coursework.
Upon successful completion of this module, students will be able to apprehend key methodologies and techniques of NLP and its future development trend, and they will master necessary knowledge and gain experiences and practical skills for developing and applying NLP techniques to solve practical problems individually or in a team. In details, students will be able to:
(1)Describe the fundamental concepts and methodologies of the Natural Language Processing.
(2)Build and evaluate NLP tools and systems by applying key principles and NLP technology and resources.
(3)Compare and contrast different approaches to apprehend strength and weaknesses of different approaches and select best methods for solving real-world problems.
(4)Be aware of the recent development of start-of-the-art NLP methodologies and techniques and future development trend in NLP related AI area.
(5)Demonstrate strong scientific and computing skills.
(6)Demonstrate the application of computational thinking principles.
Deep Learning
This module aims to give students a deeper understanding of deep learning in artificial intelligence, including machine learning basics, deep feedforward networks, regularization, training optimization, convolutional neural networks, recurrent neural networks, deep reinforcement learning, deep generative networks, and the skills to implement deep learning applications. The understanding gained through the module should give the students an appreciation of the challenges in this area. Furthermore, the module will prepare students to understand and critically analyse deep learning techniques used in modern computers and mobile devices.
This advanced computer science module aims more generally to be aware of the requirements of artificial intelligence systems in general and place these in the context of computing and communications systems. The broad grounding in machine learning basics, deep feedforward networks, regularization, training optimization, convolutional neural networks, recurrent neural networks, deep reinforcement learning, and deep generative networks should encourage the students to be more aware of related approaches more widely in other aspects of their studies.
Internet Performance and QoS
Internet has permeated every aspect of our daily lives, from social media and e-commerce to work and entertainment. Internet application performance are impacted not only by the Internet application developing technology, but also by the Internet infrastructure performance and QoS guarantee mechanisms. This module will provide a comprehensive coverage of the latter aspect.
This module is structured into a set of topics, each offering insight into the advanced Internet infrastructure from a different perspective. Namely:
Internet Performance Modeling and Estimation; Queuing Analysis; Self-Similar Traffic;
Congestion Control and Traffic Management; Link-Level Flow and Error Control; Transport-Level Traffic Control;
Quality of Service in Internet; Service Models; Queuing Discipline; Resource Reservation; Multiprotocol Label Switching;
Data Center Architecture, Operation and Optimization; Addressing, Routing and Forwarding; Load-balancing and Fault-tolerance.
Computer Science Education
Students will be exposed to a range of current computer science educational questions. The questions are related topics from different subject areas. The areas covered come from our different thematic strand and reflects the methods of teaching, learning and introduction which will include: natural language engineering; policy based network resilience; eye-tracking for ubiquitous computing applications; and a focus on energy aware control and sensing in home environments.
Students will conduct independent and in-depth research into an advanced topic of computing or communications, reflecting current topical and research issues whist concern about equality, diversity in computer science education. The module will enable students to produce a detailed document describing their research finding, present technically intricate issues in a coherent manner, and discuss and defend their position on specific topic within a seminar group.
Computer Vision
Computer vision is a branch of artificial intelligence, in which we aim to develop computer based systems that can interpret and draw meaningful deductions from digital images. This module begins with the fundamentals to understanding image formation and information relating to the human visual system and some fundamental image interpretation methodologies, including convolution, edge detection and feature extraction and comparison. Key problems tackled in current research will be studied, including semantic segmentation, object detection and three-dimensional image interpretation. A range of approaches will covered, from low-level image processing to convolutional neural networks, which sits at the intersection of machine learning and vision, and is one of the most exciting research areas in artificial intelligence.