Computer Science Programme
The following is a brief overview of the modules taken in Senior Freshman year. Prospective students should read the brief descriptions of the courses below the table which follows. Current students should follow the links (to the eLearning environment, "Blackboard", or to the module website) or refer to my.tcd.ie for full details, including assessment criteria and learning outcomes.
The aim of the module is threefold:
- To teach effective programming and problem solving, using a core toolset of classical algorithms and data structures.
- To introduce the methods for evaluating the performance and requirements of programs written by the students
In this module, students are introduced to the discipline of software engineering and must work in groups to complete a complex software project. Groups will be managed in conjunction with more senior students taking the CS3013 module. For the duration of this module, students are divided into groups, each of which is closely supervised by the module lecturer and a separate project customer. The module provides students with their first formal experience of group work. They are required to follow a rigorous process consisting initially of requirements gathering, analysis and system design. Thereafter they are required to implement a complex software product using industry standard software engineering tools and methodologies.
The principal aim of this module is to provide students with experience of working together in groups to complete a complex software project. Upon completion of the module students will have gained experience of analysing, specifying, designing and implementing a complete software system. They will also have been exposed to the challenges posed by working in teams and the need to communicate effectively both within their respective groups and to their project supervisor.
Students taking this module have already successfully completed modules in object-oriented Java programming and ARM assembly language programming. This module starts with a new perspective on program construction, with structured programming in C. This part of the module deals with the features of C, sound design principles for structured programming, and the necessary self-discipline required to program in a low-level language like C. Students also learn the basics of how programs are commonly implemented, with special emphasis on the layout of program data in memory. In parallel with learning C programming, the students learn about the UNIX operating system, including program development tools, interaction between C programs and the operating system.
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.
Students bring the knowledge and expertise of programming, digital logic and a small amount of digital electronics to the development of small system integration projects combining program design and implementation with simple interface interfacing and breadboarding.
Each team is provided with a small ARM-based computer, a PC-based integrated development system, some electronic components and breadboarding facilities.
Students have to design, build and test integrated hardware and software systems to provide a certain required functionality.
Students also study processor and memory architectural techniques such as pipelining, superscalar architectures and caches.
The aims of the module are to learn register-transfer specification and design and learn the fundamentals of an instruction processor.
The lectures and tutorials examine the detailed design and organisation of an instruction processor. Coursework consists of two design projects and students use VHDL and ModelSim to simulate and test their designs. The first project involves the design of a processor unit (ALU + shifter + fast registers) and the second project involves the design of an instruction processor.
Topics studied include digital logic, register transfer definitions, micro-operations, bus transfers, ALU design, shifter design, hardwired control design, microprogrammed processor control and the design of an instruction processor.
This module is structured following the Open Systems Interconnect (OSI) model and consists of two parts.
The first part of the module focuses on the concepts and mechanisms that are employed in the 2nd layer of the OSI model, the data link layer. This layer is concerned with the delivery of data between two immediately connected devices i.e. devices that share a common physical medium. The layer coordinates the access to the physical medium and attempts to detect and correct errors introduced by the transfer of signals over the physical medium. The concepts that are employed in this layer are discussed and the students exercises that demonstrate the application of these concepts.
The second part of the module focuses on the 3rd and 4th layer of the OSI model.
The 3rd layer, the network layer, focuses on the connection of local area networks (LANs). This layer employs concepts that hide the communication through a LANs and provide an abstraction that allows the communication across various interconnected LANs. This abstraction forms the foundation for todays internet and represents essential knowledge for todays computer science graduates. The 4th layer, the transport layer, provides services such as reliable transport to applications. The understanding of the mechanisms employed in this layer is essential to the understanding of the implementations and performance of current network technology.
This module focuses on the methods and techniques for efficient management (storage, manipulation and retrieval) of data and information in a computer and on the world wide web. It provides a foundation for later modules in database management and advanced information management.
The first part of the module focuses on fundamental issues related to information management on a computer, how data is organised on storage devices, transferred between storage and computer, structured within files, and effectively searched through indexing.
Concepts from the first part of the module are exercised through the examination of XML as an example file format that is increasingly used to both store and process information. Accompanying technologies for structuring, manipulating and querying XML will be studied and practiced.
Whereas the first part of the module examines the fundamental concepts for working with structured information and provides a basis for subsequent modules on database technology, the second part of the module focuses on information on the web, ranging from traditional information retrieval techniques through to emerging semantic web techniques.
This module provides students with an introduction to Discrete Mathematics. Students are exposed to diverse course material presented in the formal style and language that is commonplace in contemporary mathematics, with the aim that they should develop the skills required to engage actively with such material.
Students get an introduction to a variety of topics arising from Calculus,Geometry and Discrete Mathematics, that are of relevance in fields such as acoustics,image processing, computer graphics and cryptology.