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 1. 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 the map onto structures and computational elements of programming languages. Confidence in computational thinking will allow students to compare and contrast alternatives.
Computer networks
Students will be introduced to the fundamental concepts underpinning contemporary communications networks and the internet. Key ideas of protocol stacks and layering will be explored, as well as core concepts such as IP addressing and subnetting. As the module progresses, they will then be introduced to the methods used to route packets across the internet. It is this process that enables the global communication network that we so often rely upon today. These concepts will be supported by hands-on practical experience in designing and building networks. Students will also demonstrate their understanding by completing a number of complimentary network programming exercises.
Computer science group project
This module gives students the opportunity to build upon their skills and knowledge from Year 1 to create a real-world system in a group context. As part of a group, students will work effectively to gather system requirements; design and then implement the project; and accurately evaluating it. The module aims to increase theoretical knowledge and practical skills in prototyping, project planning, project management, management and execution, games design, systems design and testing strategies. Alongside these, students will also enhance their teamwork, problem-solving, communication, presentation and report writing skills, which will be valuable when progressing into a career.
Databases
During this module, students will receive a theoretical background to the design, implementation and use of database management systems, for both data designers and application developers. The module also explores the need to define the requirements of database systems, making use of the Extended-Entity Relationship (EER) model as a technique and notation for designing the data in database management systems (DBMS). Students will investigate the mapping of the EER model into an equivalent relational model and then examine it in terms of access rights and privileges.
Over the course of the module, students will become familiar with all the relevant aspects related to information security in the design, development and use of database systems. They will also gain an understanding of how the need for DBMS has evolved over time and how they are applied in everyday scenarios. This technical knowledge will be supplemented by transferable skills in applying efficient physical storage organisation; an increased awareness of the correct processes, models and notations that can be applied to problems; and an ability to critically evaluate a range of technical ideas.
Human-computer interaction
Students will learn theoretical and practical topics in Human-computer interaction, with lab work offering hands on experience of design, implementation and the ability to evaluate interactive systems through practical case studies. The course explores the underpinnings of human perception, user-centred design and participatory design processes, with students learning multiple design techniques. The module leads to an understanding of how internal system design impacts external user interface behaviour and highlights the importance of accessibility for all users.
By the end of the module, students will be able to successfully integrate diverse information to form a coherent understanding of Human-computer interaction; critically reflect on technical advancements in HCI and demonstrate the independent learning abilities needed for continual professional development and effective written and verbal skills.
Operating systems
Students are introduced to the theoretical and practical application of operating system concepts in SCC211. Throughout the module, internal OS structure; file and I/O management, interrupt handling and device drivers and memory management structures and techniques all become familiar. The module explores process management, including scheduling and threads, and support for multiprocessors. Expect to investigate issues surrounding security and protection, including access control. A practical, hands on approach to module topics is taken to assist in assimilating abstract concepts by presenting concrete examples from suitable operating systems and carrying out relevant programming exercises.
By the end of the module, students should understand the role of a modern operating system and common architectures. System vulnerabilities and how to protect them against security threats are considered throughout. Students will confidently describe typical file system structures and highlight the different approaches to process and task scheduling.
Social, ethical & professional issues in computing
Students will gain the essential skills and knowledge to operate within the professional, legal and ethical frameworks of their profession. Techniques for breaking down a project into manageable parts and efficient time allocation are taught, leading to a fundamental understanding of the skills and methods required to pursue scientific inquiry and the fundamental concepts and tools for statistical analysis to measure and explain data. Exemplars and guidelines on producing concise and structured scientific reports are offered and students receive additional lectures on presentation skills, professional ethics in relation to computing and communications. Finally, lectures provide an awareness of fundamental legal aspects related to a profession in computing and communications, including intellectual property rights and patent law.
Throughout this course, students will gain a high level of awareness of subject specific skills and general competence needed to gain employment in their field. The module develops academic writing and research skills in a computing context, complimenting students’ other modules.
Software design
Software design offers the opportunity to gain an understanding of the importance of software architecture design, different styles of architecture and the meaning of quality attributes for software design such as maintainability, performance and scalability. Students will gain knowledge of systematic approaches to developing software design using a set of graphical models. The design process involved in developing several modes of the system at different levels of abstraction is explained and they will be introduced to object oriented design with UML.
Throughout the module, students will appreciate the broader context of the role of computer science in the workplace, and the key role it plays in implementing software. The course also looks at understanding the meaning of quality attributes for software design as well as architectural models for specific software systems. Students will gain an insight into the main quality attributes for deciding classes. Students will be able to interpret and construct UML models of software and implement a design expressed as a UML mode as well as understanding how to use various design patterns to address certain problems.