Mathematical foundations of programming
The course is designed to give the most fundamental and necessary knowledge from different mathematical theories to understand the origins of programming and get a good platform to build the rest of the knowledge on. The course contains the following topics:
Numeric systems : octal, hexadecimal and octal systems.
Arithmetic in octal and binary systems.
Integer, signed and floating point numbers in binary representation.
Boolean algebra and logical gates.
Logical circuits. Foundations of digital design. How to build a CPU.
Automatas and Turing machines.
The course is designed to give common knowledge about CPU structure and architecture (the interface). It covers (but is not limited to ) the following topics:
A complete 32-bit CPU design
CISC vs RISC vs VLIW architectures.
Intel x86 architecture and assembly language
ARM v8 architecture and assembly language.
Vectorization (Intel AVX and ARM Neon).
Introduction to compilers
The course is designed to give common knowledge about the process of compilation, the LLVM framework and the IR language.
Compilation overview ( on the example of clang and C++).
Parsing, syntax and semantics.
LLVM and the IR language.
Code generation and optimization.
The course is designed to give fundamental knowledge about operating systems, their importance and functions. The course covers the following topics:
OS definitions and main functions.
Processes and threads.
The course is designed to give fundamental knowledge on programming in POSIX environments (Linux, Unix, Mac OS, iOS). The course covers the following topics:
POSIX programming foundations.
Working with processes : creation and basic manipulation.
Working with threads : creation, data interchange.
Working with files.
Inter-process communication : pipes, FIFOs, signals, shared memory.
Distributed and parallel programming
The course is designed to give fundamental knowledge on network, web and parallel programming in POSIX environments (Linux, Unix, Mac OS, iOS). The course covers the following topics:
Computer networks, Internet, routing, DNS.
Sockets and network programming.
Web programming foundations.
Distributed and parallel programming with MPI.
Parallel programming using OpenCL.
Parallelization and vectorization.