Dev tools

The course focuses on introducing students to Linux and various dev tools.

Key topics

  • Linux

    • Filesystems. FHS

    • Terminals. Shells. Bash & Zsh

    • Systemd

    • Signals

    • Man pages

    • Alternatives (/etc/alternatives)

    • Package managers: rpm & deb

  • Dev utils

    • SSH. SSH client. Rsync

    • HTTP. FTP. Curl

    • Vim. Nano. Less

    • Modern alternatives to linux utils

    • Archives: tar, gzip, zip

  • Git

    • Working with git

    • LFS

    • Submodules

C/C++ compilation & build

Java compilation & build

  • Compilation stages in C/C++

  • Compiling C VS Compiling C++

  • Static & shared libraries

  • Build systems: make, CMake

  • Library/package installation in CMake

  • Gdb. Sanitizers. Core dumps

  • Clang format & clang tidy

  • JDK dev tools

  • Jigsaw project. JPMS

  • MODULEPATH & CLASSPATH

  • Apache Maven

  • Checkstyle. PMD.

  • Java runtime configuration

  • Docker

    • Docker containers

    • Docker plugins (compose, buildx). Multi-architecture images

    • GitLab container registries

    • DOOD & DIND

  • CI & CD

    • GitLab CI

    • GitLab pages

    • Antora

  • Other

    • Regex

    • JSON. YAML. XML. TOML

    • Markdown. Asciidoc

    • Sha & gpg

    • Opensource licenses

Grading system

Your grade consists of these parts:
  • T — Tasks solution + code review (automated tests)

  • I — Interviews (TA subjective grade)

  • C — Final control work

max{T} := 45, max{I} := 55 and max{C} := 10

Final grade is min{(T + I)/10, C}.

Course policies are located here.

Instructors

Lectures

Iwan Kalinin <koefic.cien@gmail.com>

Seminars

Java: Iwan Kalinin
C++: Gennadij Poljakov

Teaching assistants
  • Victoria Popova (Head TA)

  • Polina Ushakova

  • Kirill Kudryavtsev

  • Maxim Plotnikov

Assistants
  • Mikhail Agafonov