Principles and Practice of Programming

Module aims

This module aims to allow you to understand and grasp the principles of programming, and to be able to apply your skills to design and implement solutions to computational programming problems. You will learn to design and implement your solutions starting from a problem specification, both in a procedural manner and in an object-oriented manner. You will be given the opportunity to practice writing programs and to apply methods and techniques learned through laboratory sessions, coursework, and frequent and regular feedback.

Learning outcomes

After the module, you will be able to:
1. design, implement, and document maintainable, re-usable, extendable, and easily readable program code based on given specifications
2. effectively structure and develop procedural and object-oriented programming solutions
3. test, debug and reason about your programs through good programming practices
4. analyse and apply appropriate data structures and algorithms to design and construct effective and efficient solutions to computational problems

Module syllabus

You will learn the basic principles of programming, good programming practices, and how to devise algorithms to tackle computational problems. You will implement your solutions with C++ as the primary programming language.

**Programming principles and problem solving:
- Programming language paradigms
- Analyse programming problem specifications
- Design high-level solutions to the problem (e.g. with pseudocodes)
- Implement the high-level design onto concrete C++ programming constructs
- Compile and execute C++ programs
- Test and debug programs; Programming style
**Fundamental programming constructs and techniques:
- Variables, types and expressions
- Functions and procedural abstraction
- Flow of control (branch and loops)
- Enums, struct, classes and objects
- Arrays and strings; Recursion; Exception handling
**C++ constructs:
- Files and streams; Pointers and memory allocation
**Object-oriented design and programming as an abstraction:
- Object-oriented analysis and design
- Classes and objects: fields, methods, constructors
- Encapsulation; Inheritance
- C++ specific object-orientation features; C++ Templates
**Data structures:
- Linked list; Stack and queues; Maps/tables; Trees; Graphs
**Algorithms:
- Sorting algorithms (selection sort, quick sort)
- Search algorithms (sequential search, binary serach)
- Binary search tree construction and querying
- Time complexity analysis: Big-O notation
**C++ Standard Template Library as an abstraction:
- STL containers; C++ strings
**Techniques and tools:
- Revision control; Debugging; Automatic generation of executables

Teaching methods

The module will be delivered through:
- Timetabled lectures, with on-the-fly demonstrations.
- Tutorials including multiple choice tests.
- Timetabled laboratory sessions to apply and reinforce knowledge. Individual help will be provided during these sessions.
- Workshops

Assessments

Assessed coursework and time-constrained computer-based programming test.

Timetabled teaching sessions will provide opportunity for live interaction with the lecturing staff. Written feedback will be provided for assessed lab exercises. Feedback on the formative exercises will be given in class. Teaching assistants will be available to answer your questions and to provide you with direct verbal feedback during the laboratory sessions

Module leaders

Dr Tom Crossland
Professor William Knottenbelt

Reading list

TBC - the module reading list (Leganto)