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
This module introduces students to the theory and practical application of operating system concepts, and to concurrent systems in general. The course includes the following topics:
Internal OS structure;
File and I/O management; interrupt handling and device drivers;
Memory management structures and techniques;
Process management: scheduling and threads; support for multiprocessors.
Security and protection issues including access control
OS development: cross compilation; run-time support; and APIs
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.
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.