ТП весна 2027 Продвинутый: различия между версиями
Update |
update |
||
| Строка 8: | Строка 8: | ||
<b>Важно!</b> Курс <b>не</b> предусматривает <i>какого-либо использования ИИ (не рекомендуется даже поиск информации)</i> и использование ИИ-инструментов карается вплоть до дисциплинарных взысканий. Одним из результатов курса является умение верифицировать на высоком уровне результаты генерации кода с помощью ИИ, однако получить такой навык, используя ИИ нельзя. | <b>Важно!</b> Курс <b>не</b> предусматривает <i>какого-либо использования ИИ (не рекомендуется даже поиск информации)</i> и использование ИИ-инструментов карается вплоть до дисциплинарных взысканий. Одним из результатов курса является умение верифицировать на высоком уровне результаты генерации кода с помощью ИИ, однако получить такой навык, используя ИИ нельзя. | ||
Курс досточно объемный, интенсивный и для закрытия на высокую оценку | Курс досточно объемный, интенсивный и для закрытия на высокую оценку потребуется потратить много времени. Домашние задания будут публиковаться каждую неделю. Помимо них будут устные сдачи по блокам курса в формате тех собесов: теоретические вопросы, решение различных кейсов, лайвкодинг. | ||
Обратите внимание, что курс не затрагивает вопросов архитектуры и проектирования ПО, управления процессами. Мы будем затрагивать исключительно технические аспекты устройства и использования компьютера, ОС и инструментов разработки. | |||
Перед регистрацией курса просим просмотреть страницу курса: материалы прошлых лет, политики курса. Если вы уже определились, что будете заниматься только математикой/физикой/аналитикой, то высока вероятность, что вам курс не зайдет, а времени придется потратить много даже на уд3. Поэтому давайте уважать время друг друга и выбирать продвинутый поток осмысленно. Мы со своей стороны постараемся подобрать хороший ассистентов, готовых потратить на вас достаточно своего времени. Ожидается, что курс наиболее подходит тем, кто планирует связать свою карьеру с программной инженерией (осмысленной: если вы планируете быть <i>"слоп-машиной"</i>, то курс также будет бессмысленным) и хочет прокачать хард-скиллы. | |||
= Пререквизиты курса = | = Пререквизиты курса = | ||
| Строка 189: | Строка 193: | ||
<i>Собесы будут больше не про знания, а про мотивацию/интересы.</i> | <i>Собесы будут больше не про знания, а про мотивацию/интересы.</i> | ||
Если вы не прошли отбор, то вы можете посещать занятия при наличии мест в аудитории и закрывать задачи для себя без ревью: все домашние задания будут в открытом доступе. <b>Важно</b>: не публикуйте свои решения, позвольте другим получить знания! | Если вы не прошли отбор, то вы можете посещать занятия при наличии мест в аудитории и закрывать задачи для себя без ревью: все домашние задания будут в открытом доступе. <b>Важно</b>: не публикуйте свои решения, позвольте другим получить знания! Также просьба уважать авторские права создателей курса и следовать лицензиям, под которыми распространяются наши материалы! | ||
== Факультативное закрытие курса == | == Факультативное закрытие курса == | ||
Возможность факультативного закрытия курса обсуждается индивидуально с лектором. Для этого напишите ему в личные сообщения | Возможность факультативного закрытия курса обсуждается индивидуально с лектором. Для этого напишите ему в личные сообщения. | ||
= Команда курса = | = Команда курса = | ||
Текущая версия от 11:18, 7 октября 2026
Внимание! Страница в разработке. Данные могут меняться! Дождитесь окончательной публикации страницы!
Описание курса
Курс посвящен пользовательской стороне Linux, а также ряду популярных инструментов разработки. Продвинутый поток фокусируется на глубоком погружении в технические аспекты и детали реализации инструментов. В рамках курса будут изучены как сами инструменты, так и устроство некоторых из них (например, внутреннее устройство и принципы работы Git, реализация Docker средствами ядра Linux, общий принцип работы интерпретаторов командной оболочки и др.)
Важно! Курс не предусматривает какого-либо использования ИИ (не рекомендуется даже поиск информации) и использование ИИ-инструментов карается вплоть до дисциплинарных взысканий. Одним из результатов курса является умение верифицировать на высоком уровне результаты генерации кода с помощью ИИ, однако получить такой навык, используя ИИ нельзя.
Курс досточно объемный, интенсивный и для закрытия на высокую оценку потребуется потратить много времени. Домашние задания будут публиковаться каждую неделю. Помимо них будут устные сдачи по блокам курса в формате тех собесов: теоретические вопросы, решение различных кейсов, лайвкодинг.
Обратите внимание, что курс не затрагивает вопросов архитектуры и проектирования ПО, управления процессами. Мы будем затрагивать исключительно технические аспекты устройства и использования компьютера, ОС и инструментов разработки.
Перед регистрацией курса просим просмотреть страницу курса: материалы прошлых лет, политики курса. Если вы уже определились, что будете заниматься только математикой/физикой/аналитикой, то высока вероятность, что вам курс не зайдет, а времени придется потратить много даже на уд3. Поэтому давайте уважать время друг друга и выбирать продвинутый поток осмысленно. Мы со своей стороны постараемся подобрать хороший ассистентов, готовых потратить на вас достаточно своего времени. Ожидается, что курс наиболее подходит тем, кто планирует связать свою карьеру с программной инженерией (осмысленной: если вы планируете быть "слоп-машиной", то курс также будет бессмысленным) и хочет прокачать хард-скиллы.
Пререквизиты курса
- Закрытый хотя бы на хор курс С++
- Продвинутый поток продолжает изучать экосистему С/С++, а также использует их механизмы для изучения ОС. Без хороших знаний первого семестра пройти курс будет достаточно сложно.
- Знание основных структур данных
- Мы не ожиданием умения "вслепую написать RBT дерево", однако ждем, что вы понимаете общие принципы работы основных структур данных из 1го семестра и можете их сравнивать. Например, ожидается понимание различий AVL, RBT и B деревьев.
- Наличие Linux платформы
- Так как курс про Linux и его инструменты, то без него (или mac OS) курс пройти будет невозможно.
- Умение и готовность самостоятельно искать информацию
- Домашние задания специально продуманы так, чтобы вы сталкивались с различными ошибками и нестандартными ситуациями. Мы ожидаем, что вы готовы гуглить ошибки, читать man страницы, stackoverflow и другие linux форумы. Использование ИИ для разрешения ошибок максимально не приветствуется, а для решения задач вообще запрещается.
Установка Linux системы
Требуется только если у вас уже нет ни Linux, ни mac OS.
Если вы впервые работаете с Linux, то советуем выбрали либо Ubuntu, либо Fedora. Ubuntu -- более Windows-like система с большим числом гайдов в интернете, однако потребляет много ресурсов. Fedora -- более дружелюбная по потреблению ресурсов система, также позволяет выбрать графическое окружение (KDE или GNOME), однако уже дальше от Windows по дизайну и чуть меньше гайдов, преимущественно на английском языке.
Oracle VM Box
Подойдет людям с 6+ ядрами процессора, 16ГБ+ оперативной памяти и 256ГБ+ жесткого диска (!= нельзя поставить иначе, просто будут часто фриззы в системе). Причем свободного места на диске должно быть хотя бы 64ГБ. Позволяет иметь полноценный Linux, однако придется чуть заморочиться. При работе с ВМ на хосте лучше не запускать ресурсо-требовальных приложений (например, несколько окон Chrome) -- тут уже ориентируйтесь на объем вашей оперативной памяти.
Скачайте образ диска ОС (.iso-файл):
- Fedora 43, 44 версия слишком свежая, пока лучше не ставить
- Ubuntu 2026, не устанавливайте нечетные версии, можно альтернативно 24, более старые не стоит.
Устновите Oracle VM Box и создайте виртуальную машину по следующим гайдам:
Рекомендуемые параметры ВМ:
- Оперативная память
- Fedora: 6ГБ+, оптимально 8ГБ+
- Ubuntu: 8ГБ+, оптимально 10ГБ+
- Диск
- Тип: VDI, динамически расширяемый
- Объем: 64ГБ+, должны уложиться в 128ГБ
- Минимум 2 ядра, а так лучше 4+ ядер (больше половины лучше не отдавать)
Крайне советуем сразу настроить возможность копировать данные из хоста в ВМ и обратно. Дополнительно полезно создать разделяемую папку, чтобы перекидывать файлы туда-сюда.
Dual boot
Подойдет тем, кто имеет 512ГБ+ жесткого диска (оптимально 1ТБ+). Позволяет иметь две независимые системы на одном устройстве, однако самый сложный процесс настройки из всех вариантов. Здесь уже лучше найти видео-гайды в ютубе по тому, как настроить для вашей версии Windows и выбранной ОС.
WSL
Подойдет всем у кого стоит Windows, поставит почти что Linux (все же WSL -- не до конца полноценный Linux и на курсе мы это увидим, с дз этого курса проблем не будет, но в будущем могут быть приколы, если начнете заниматься низкоуровневым программированием) причем будет возможность из Linux взаимодействовать с файлами в Windows.
Установите WSL 2 по официальному гайду. Рекоммендации по дистрибутиву сохраняются.
Система оценивания
Итоговая оценка вычисляется по формуле min{Ex, Ts + Iv}, где
Ex-- Оценка за итоговый зачетTs-- Оценка за домашние задания (45% оценки)Ex-- Оценка за устные сдачи в формате технических интервью (55% оценки)
Итоговый зачет проводится на зачетной неделе и содержит базовые вопросы по темам курса aka теормин.
Также для положительного (не пересдача) закрытия курса потребуется набрать в сумме ненулевое число баллов за домашки по каждому из блоков курса.
Программа курса
Курс представляет из себя 30 пар, по формату являющихся чем-то средним между лекцей и семинаром. Презентации с пар и часть материалов курса будут на английском языке для более эффективного погружения в среду.
Основная практика вынесена на домашние задания и взаимодействие с ассистентами. Мы не штрафуем за непройденное ревью с первого раза: смысл ревью -- довести ваше решение до идеала. Пока ревью не пройдено баллы за задачу не учитываются. В среднем по опыту необходимо пройти 3-5 итераций ревью, чтобы зачли задачу. Без получения ненулевого балла за домашки по каждому блоку закрыть курс не получится, поэтому приготовьтесь
Основные темы курса
- Linux
- Файловая система
- Типы файлов
- Разрешения файлов
- Монтирования ФС
- Общее устройство ФС ext семейства
- Временные и lock файлы
- Systemd
- Монтирования
- Сервисы
- journalctl
- Пакетные менеджеры
- dpkg и apt (apt-get)
- apt репозитории
- rpm и dnf (yum)
- yum репозитории
- Интерпретатор командной строки
- Bash и bash скрипты, автодополнение
- Процесс инициализации zsh & bash
- Принцип работы ИКС, фунции fork & exec
- Терминалы и эмуляторы терминалов
- Взаимодействие процессов (фоновые задачи, сигналы)
- Man pages и их создание
- Утилита xdg-open и MIME
- Файловая система
- Git
- Основные команды
- Внутреннее устройство и принципы работы
- Сабмодули
- Настройка репозитория (основные файлы, project badges, особенности GitLab & GitHub)
- LFS
- Взаимодейтсвие с ресурсами по сети
- curl, wget (для HTTP & FTP)
- Сертификаты HTTPS
- SSH клиент
- Утилита nmcli
- nginx
- Правила отдачи статического контента
- Сборка С/С++
- Этапы компиляции
- Макросы
- Базовые команды ASM x86, устройство стека исполнения
- Объектные файлы, name mangling, виды символов
- Хедеры, поиск системных хедеров
- Библиотеки: статические и динамические
- Линковка. ldd, rpath, LD_LIBRARY_PATH. Поиск динамических библиотек.
- Дебаггер gdb
- Санитайзер. Алгоритм работы ASAN
- Линтеры: clang-format, clang-tidy
- GNU Make
- Дефолтные пути в системе и стандартные переменные окружения
- Установка библиотек и бинарей в Linux
- CMake. Настройка сборки проекта
- CMake модули. Подключение зависимостей через FetchContent
- Устновка через CMake. CMake пакеты
- Тестирование C/C++
- Фреймворки gtest и gmock
- Принципы работы gtest & gmock
- Мутационное тестирование: фреймворк Mull
- Фаззинг: фреймворк fuzztest
- Покрытие тестов: утилиты gcov, lcov, gcovr
- Профилирование C/C++
- Утилиты /usr/bin/time и perf, flamegraph
- Фреймворк google benchmark
- Эмпирическая сложность алгоритмов
- Контейнеризация и виртуализация
- Написание Dockerfile и сборка контейнеров
- GitLab & GitHub Container Registry
- Multistaging build
- Плагины buildx & compose
- Healthcheck
- Запуск докера внутри контейнеров: DOOD & DIND
- Принцип работы Docker (linux namespaces, chroot, cgroups, overlayfs)
- Docker VS Podman
- Oracle VM Box. Виртуальные машины
- CI
- GitLab CI
- Настройка и создание GitLab Runners
- GitHub Actions
- GitLab & GitHub pages
- Antora для генерации сайтов
- Прочее
- Markup languages (JSON, YAML, TOML, XML) и схемы данных
- Asciidoctor
- Regex
- Основные Open-source лицензии
- Цифровые подписи (gpg)
План
Драфт плана на весну можно посмотреть здесь. План будет обновлен в декабре, пока это неболее чем набросок тем и возможной их очередности.
Пересдачи
Для получения хотя бы уд3 необходимо сдать все задачи с курса и написать "теормин". Оценка выше выставляется по результатам устной беседы с командой курса (является необязательной для уд3).
Отбор на курс
На курсе планируется 55-60 студентов (мах 60). Для отбора на курс необходимо зарегистрироваться на GitLab (регистрация -- это нулевой этап отбора) и заполнить форму (появится позже).
GitLab имеет систему защиты от ботов, поэтому при подозрительных действиях может потребовать пройти дополнительную верификацию, которую в РФ сделать проблематично. Как не попасть под подозрения:
- Не использовать VPN и прочие средства модификации интернет трафика
- Использовать человеческие имена и пароли (минимизировать число паттернов сгенерированного набора символов)
- Не использовать одну сеть для регистрации большого числа аккаунтов. Так, если с сети уже был недавно найден подозрительный аккаунт, то последующие регистрации также могут вызвать подозрения
- Не спидранить регистрацию и не быть улиткой: заполняйте все поля в среднем, спокойном темпе
- Использовать почту
phystech.edu-- она вызывает минимум сомнений - При повторной попытке регистрации не использовать данные похожие на прошлые: если уже в подозрения улетел ник
qwerty, тоqwerty2008будет также вызывать подозрения - Иногда может помогать режим инкогнито
В случае превышения числа желающих 60 человек будет произведен отбор по следующим параметрам:
- Студенты ФУПМа и ПМИ.Мат имеют наинизший приоритет
- Студенты ПМИ.Инф и ИВТсп имеют более высокий приоритет при прочих равных
- Ожидается, что студенты закрыли курсы плюсов и алгосов на хор и выше
- Будут проведены устные собесы, по результатам которых отранжируем желающих
Собесы будут больше не про знания, а про мотивацию/интересы.
Если вы не прошли отбор, то вы можете посещать занятия при наличии мест в аудитории и закрывать задачи для себя без ревью: все домашние задания будут в открытом доступе. Важно: не публикуйте свои решения, позвольте другим получить знания! Также просьба уважать авторские права создателей курса и следовать лицензиям, под которыми распространяются наши материалы!
Факультативное закрытие курса
Возможность факультативного закрытия курса обсуждается индивидуально с лектором. Для этого напишите ему в личные сообщения.
Команда курса
Лектор: Иван Калинин (tg: @taekwandodo)
Старший ассистент: Виктория Попова
Ассистенты: tbd..