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.
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.