In this module you will have the opportunity to develop your practical programming skills, with a majority of the time being spent on two large system-level projects (operating system and compiler). This module will also give you a chance to put into practice the theoretical material covered in the second year lecture courses, at all times considering software design, maintenance and licencing issues that you will encounter in any future software-based career.
Upon successful completion of this module you will be able to:
- recall the syntax and intuitive semantics of some common programming languages
- design and implement programs in the Imperative and Declarative paradigms that conform to a given specification
- develop concurrent programs using PThreads that conform to a given specification
- describe in detail the operation of the core components of both an operating system and a compiler
- critically analyse and effectively communicate project design decisions and experimental results
- Implementation and testing of the core components of an operating system
- Concurrent programming using PThreads
- Link loading
- Logic Programming
- Continuous integration and deployment of software
- Design, implementation and testing of a compiler for a simple programming language
The emphasis is on self-study, both as an individual and as part of a small group. To help you with this there will be weekly laboratory support lectures outlining the key elements of each week’s practical work, highlighting common pitfalls and suggesting approaches for solving each of the tasks set. There will also be timetabled laboratory sessions, supported by both Graduate and Undergraduate Teaching Assistants (GTAs and UTAs), which will give you dedicated time to work on the practical exercises and receive support and guidance on your work.
An online service will be used as a discussion forum for the module.
All exercises will involve partical laboratory work and will be submitted via git repositories through an online Testing System (LabTS). Automated tests for each exercise account for 40% of the mark. Beyond this, all remaining marks will be allocated for the design, style and readability of your solutions. Individual assignments will be assessed off-line by GTAs who will both mark and provide constructive feedback on your work. Group assessments will be assessed with you during the interactive code review sessions by GTAs.
There will be interactive code review sessions at the end of each assessment milestone, which will provide you with personalised feedback on your work and progress. Feedback for each exercise is returned both verbally and electronically. The latter consists of a numerical mark, letter grade and detailed comments justifying the marking decisions and key strengths and weaknesses of your submission.