This module dives deep into how to use compiuter programming to solve problems, and is a module for all students interested in learning more about programming a computer to make it do what they want it to do. Students will learn important programming constructs and how to use these in a spscific programming language. Students will also learn to take a 'divide and conquer' approach to programming, in which a complex programming task is split into a set of simple procedures: pieces of program that are easy to write. These procedures are then combined to produce a completed program. Algorithms to solve significant problems will be developed using this approach. Many of the programming examples presented in this module will focus on data science - using data to answer real-world questions - one of the most interesting areas of modern computer science.

On completion of this module students should be able to:

1. Understand the use of procedures (functions, methods) in consturcting computer programs

2. Design algorithms to solve problems

3. Successfully write, compile, debug, and run programs using these constructs

4. Design solutions that use data to answer questions (data science)

5. Apply programming techniques to develop solutions to problems in the area of data science