1 Outline

This course is designed for Data Science MMath students who do not have an undergraduate degree in Computer Science. It provides these students with the background needed to take Data Science graduate courses with a strong computational flavour.

1. Processor internals

CPU, registers, memory. The fetch-execute cycle. Instruction sets. Compilers, interpreters, virtual machines. Exceptions. Input/output.

2. Memory hierarchies

Caches. Disks. Remote storage.

3. Operating systems

Virtual memory and paging. Virtual address spaces. Processes and scheduling. Dynamic memory allocation. Garbage collection. Graphical user interfaces. Command-line interfaces.

4. Concurrency and parallelism

Interprocess communication. Exception handling within processes. Threads. Shared memory vs message passing. Synchronization. Critical sections and locking. Hyperthreading. Superscalar processors. SIMD vs MIMD. Multiple cores.

5. Networks

Layered architecture. Packets and routing. Latency and throughput. Client-server model. Sockets.

6. Expressing computation

Programming languages. Paradigms of computing: imperative, object-oriented, functional, declarative, relational, dataflow. Examples and comparisons.

7. Algorithm design and analysis

O-notation. Sorting. Sequences. Sets. Finite maps. Hashing. Trees. Graphs. Collections libraries. Foreign function interfaces, APIs, and bindings.

A. Using a command-line interface

Shell windows. Commands. Navigation. Remote login. Files and directories. Permissions. Redirection. Text editors: Nano, Vim, Emacs. Shell scripts. Version control systems.