Skip to content

Programming

Overview of Course

Languages Offered

  • Assembly (x86-64 under Linux)
  • C
  • Python
  • Octave (MATLAB)
  • Haskell
  • BASH

Although not programming languages, Excel and LibreOffice Calc are also offered in this course, in as much as they are data analysis tools.

Stages of Learning

The key stages of learning a language are broken down as follows:

1. Foundational Features

At this primary stage, the key focus is to develop an understanding of the features of the programming language, so that they can be used in the future. This is akin to knowing the "grammar" of the language, and in each topic/feature that is explored, multiple tutorial style exercises will be used as practice.

Each language has its own set of unique features, however a common set that would be covered for a C-type language would be:

  • Types, Operators, and Expressions
  • Control Flow
  • Functions and Program Structure
  • Pointers and Arrays
  • Structures
  • Input and Output

The primary references used at this stage will be the official documentation of the particular language, as well as specially selected textbooks.

2. Algorithms

Here, exposure to specific algorithms allow students to gain an arsenal of deployable numerical methods such as for sorting, but also the ability to appreciate and build modular programs.

The range of algorithmic content includes, but is not limited to:

  1. Principles of Algorithm Analysis

  2. Data Structures:

    • Elementary Data Structures
    • Abstract Data Types
    • Recursion and Trees
  3. Sorting:

    • Elementary Sorting Methods
    • Quicksort
    • Merging and Mergesort
    • Priority Queues and Heapsort
    • Radix Sorting
    • Special-Purpose Sorting Methods
  4. Searching:

    • Symbol Tables and Binary Search Trees
    • Balanced Trees
    • Hashing
    • Radix Search
    • External Searching

3. Projects

Once the features and syntax of a language are understood alongside algorithmic methods, specific projects (that can be chosen by the student) are then able to be pursued. This may include purely interest-based topics, but can extend to projects that are applicable to any real-world problem.

At this stage, the student may choose to upload their projects onto the GitHub platform in order to build a usable portfolio.

Delivery of Content

Throughout this course, tutorials and projects will be guided and include homework for optimal progress.

Required Resources

In order to take part in this course, a computer with Linux as the operating system is highly recommended and preferred for maximum system accessibility. If you do not have such a machine, then please refer to the Laptop Procurement page where such a laptop (refurbished) can be procured and set up for the duration of the course or for permanent ownership.

Note that concessions can be made with regard to this requirement (e.g. using a Windows or Mac machine), however the quality and efficiency of the course may be severely impeded.