The following is a brief overview of the modules taken in Junior Sophister year. In the Hilary semester, students take two of three optional modules.Current students should refer to my.tcd.ie for full details, including assessment criteria and learning outcomes.
*denotes an elective module
This module introduces Prolog, a symbolic programming language, including recursion, Definite Clause Grammars, cuts and negation.
(5 ECTS credits, Michaelmas Term)
This module provides students with a solid grounding in various aspects related to building large, important software systems.
The overall aim of this module is for students to learn the fundamental skills for building large, important software systems. This entails (i) recognising the general software lifecycle and its stages from domain analysis to maintenance, (ii) analysing software in the problem domain, (iii) identifying the fundamental approaches to managing software projects and teams, (iv) distinguishing the roles of stakeholders in a software project in general and in software teams in particular, (v) recognising architectures for building large-scale distributed software systems.
The module covers various aspects related to building software systems ranging from the use of software lifecycle models, to project management, to large-scale software architectures. Specifically, software lifecycle models, including variations of the waterfall and spiral models as well as extreme programming and agile software development methods, are introduced along with concepts relevant to the specific model stages. These concepts include UML-based O-O, domain analysis, requirements and specification analysis, testing and debugging and version control. Strategies for managing large software projects and their contracts as well as project teams are presented and contrasted.
This module focuses on the architecture of modern high performance microprocessor systems. Topics covered are procedure calling conventions, the architecture of RISC CPUs, instruction level pipelining, virtual memory, caches, multiprocessors, cache coherency and spin locks.
This module examines the internal architecture of modern microprocessors, paying particular attention to issues that improve performance and to the close relationship between the hardware and the needs of the software.
The aim of the module is to teach the principles of compiler design, including finite-state automata and push-down machines, lexical analysers, top-down parsers, l-attributed translation grammars, and recursive-descent parsers.
Students will learn how to use Coco/R to construct high-level language analysers and parsers.
Functional programming languages present a powerful, abstract, and important direction in programming languages. The high level of abstraction and the expressive syntax makes program decomposition and composition unusually easy, while the close connections to the underlying semantics make formal reasoning tractable. Systems such as Google’s “Map/Reduce” framework demonstrate the influence of this approach, and the importance to a computer scientist of understanding it.
In this module students will learn to apply the techniques of functional programming in a practical context. The focus is on software design and programming in the functional style, and students will “learn by doing”, through regular weekly programming assignments and case studies.
The module draws on the programming and mathematics background the students have acquired in the first two years of the degree and extends it by teaching new approaches to program design and implementation.
This module is focused on the modelling of information and database system technology. More specifically, it focuses on state-of-the-art database technology, from both the user and system perspectives.
From a system engineering perspective, the module examines the concepts and algorithms for: transaction processing, concurrency control, metadata representation, semantic representation and active databases, recovery, database security policies, integration of databases on the web and emerging database technologies.
From an information designer’s perspective, the module examines the theoretical model underpinning relational databases, functional dependency theory and normalisation (for information modelling), functional dependency modelling, object relational modelling, implementation of databases and database applications.
Thus the module is intended to enable the students to design information models and implement these models in state of the art databases (relational and native web databases), as well as be able to analyse and evaluate approaches to information organisation, storage, transaction support and management.
The aim of the module is to introduce the students to basic statistical concepts. There will be considerable emphasis on the use of a statistical package to analyse data.
The aim of the module is to teach, in sufficient detail for practical implementation, the mathematical concepts and methods appropriate to writing computer programs for science and engineering applications in general, and in particular: computer graphics, computer vision, image processing, robotics, physical simulation, and control.
This module follows on directly from CS3012 (Software Engineering) and focuses on the practical application of the various concepts and tools related to building software systems studied in third year software engineering. This practical application takes the form of a large “hands-on” group project that covers numerous aspects of building object-oriented software systems including problem analysis, usage of development environments, project management, team management, design, implementation, testing and documentation. Students will take a leadership role within these groups which are combined with students taking module CS2013.
The goal of this module is to provide students with a deep understanding of parallel and multi-core architectures and to provide students with necessary architecture background for careers in professional software development and/or further research on these emerging platforms.
The first part of this module introduces students to concurrency and concurrent programming. The aim is to provide students with the ability to develop concurrent software systems using standard techniques and constructs.
To achieve this aim, students must have a thorough understanding of common problems that arise in concurrent systems and how those problems can be avoided. This module will teach the use of tools and techniques for modelling and verifying the correctness of concurrent systems, applying this through practical laboratory exercises in which small concurrent software systems are developed.
The second part of the module addresses various aspects of the design of modern operating systems. The main aim is to explore how programmers can apply a knowledge of operating system features to the design of efficient applications. This is achieved by examining common algorithms and policies used by modern operating systems, as well as the facilities provided to application programmers. This knowledge is then applied in laboratory exercises.
This module introduces students to formal methods for specifying the semantics of programming languages and formal techniques for verifying the behaviour of programs.
This module concentrates on building upon knowledge gained in Telecommunications I & II and introduces students to advanced topics in the areas of data
communications and telecommunications networks. In particular the area of high speed local area networks operating at speeds of 100 megabits and higher are examined.
A more detailed study is made of the TCP/IP protocols in terms of addressing, routing and subnetting. Topics in the area of telecommunications protocols such as ATM, MPLS, GSM/UMTS are studied.
The students are also introduced to the areas of Network Security, Mobile Communications and Multimedia Networking.
This module introduces classic topics in AI, including search, constraint satisfaction, knowledge representation, abduction and action.