План навчально-методичного забезпечення дисципліни
Специфікація навчальних матеріалів: перелік, структура, шаблони. Самі матеріали генеруються з даних курсу — цей документ теж.
Уклав: викладач Ординський О. О. · вересень 2026
1. Призначення документа
Цей документ — специфікація навчально-методичного забезпечення дисципліни «Системне програмування». Він не містить самих матеріалів (конспектів, текстів завдань, питань банку) — він визначає їхній повний перелік, структуру, шаблони та взаємозв'язки, щоб матеріали можна було згенерувати послідовно й узгоджено.
Опорні документи: робоча програма дисципліни (тематичний план, компетентності, критерії) і силабус (політики, оцінювання), обидва в цій самій теці; Положення про навчально-методичне забезпечення ВТФК (структура методичних вказівок, Додаток 4 — теми Google класу, п. 4.8.2 — п'ять рівнів засвоєння).
Ключовий принцип курсу: знайомство і зацікавлення, а не глибина. Лекція = одна ідея + одне живе демо. Лабораторна = один артефакт за 2 години. СРС = добровільна глибина (окремо не оцінюється). Наскрізна лінія — три межі між програмою і машиною: контейнер, перевірка запозичень Rust, набір інструкцій WebAssembly.
1.1. Дві версії практичних матеріалів
Кожна методична вказівка до лабораторної та кожне завдання СРС існують у двох рівнозначних версіях з однаковим технічним змістом і однаковими трьома рівнями завдань:
Академічна версія — формальні методичні вказівки за структурою Положення про НМЗ. Для звітності, циклової комісії й студентів, які надають перевагу класичному формату.
Довільна (сюжетна) версія — той самий зміст, вплетений у наскрізну історію про штучний інтелект С.І.Д. Для мотивації й залучення.
Студент виконує будь-яку версію на власний вибір — технічний результат і критерії оцінювання ідентичні. Перемикач між версіями стоїть угорі кожної сторінки сайту.
1.2. Трирівнева модель оцінювання (нагадування)
| Рівень | Умова | Оцінка | Ранг у сюжеті |
|---|---|---|---|
| 1 | Автотести зелені + звіт прийнято | 3 | Першокурсник |
| 2 | Захист: студент пояснює власний код | 4 | Магістр |
| 3 | Виконано розширене завдання ЛР | 5 | Легенда Коледжу |
Рівні монотонні: рівень 2 передбачає виконаний рівень 1, рівень 3 — виконані 1 і 2. Оцінку можна підвищити до закриття відповідного модуля.
2. Загальна карта матеріалів
Повний реєстр артефактів дисципліни. Колонка «Публікація» вказує, де матеріал з'являється для студента (GitHub Pages — відкриті сторінки; Classroom — Google Classroom; репозиторій — закритий репозиторій дисципліни).
| Артефакт | К-сть | Дві версії? | Формат | Публікація |
|---|---|---|---|---|
| Робоча програма | 1 | ні | docx | Classroom (тема 1) |
| Силабус | 1 | ні | docx | Classroom (тема 1) |
| Конспекти лекцій | 11 | ні | дані → Pages | GitHub Pages |
| Слайд-колоди лекцій | 11 | ні | дані → Reveal.js | GitHub Pages |
| Методичні вказівки до ЛР | 11 × 2 | так | дані → Pages | GitHub Pages + Classroom |
| Завдання СРС | 20 × 2 | так | дані → Pages | GitHub Pages |
| Довідник «Коли щось пішло не так» | 1 | ні | генерується з ЛР | GitHub Pages |
| Індивідуальний проєкт (СРС) | 1 | ні | дані → Pages | GitHub Pages |
| Банк тестових питань | ≈300 | ні | YAML (репо) | репозиторій (закритий) |
| Модульні тестові контролі | 3 | ні | з банку | платформа |
| Директорська контрольна | 1 (4 вар.) | ні | з банку | платформа |
| Стартові репозиторії (starter) | 11 | ні | код | GitHub (шаблон) |
| Автотести (autograder) | 11 | ні | код | публічні (Pages, вимога C50) |
| Шаблони репозиторіїв студента | 2 | ні | код | GitHub (vtfk-sid, vtfk-sid-reference) |
Межа публікації, і вона не така, як здавалося. Банк тестових питань не потрапляє у збірку GitHub Pages ніколи (публікуються лише теки з білого списку). А от автогрейдери публічні — і це не недогляд, а властивість Classroom 50: бандл перевірок публікується на Pages, щоб його могли завантажити runner'и, і читається будь-ким за URL. Тому в автотести не кладеться нічого, чого студент не має бачити; усе, що мусить лишитися закритим, перевіряється на захисті. Так само публічні й репозиторії лабораторних (repo_visibility: public) — у публічному репозиторії GitHub-hosted runner'и безкоштовні.
2.1. Де живуть матеріали і як виглядають
Усі матеріали — вихідні дані в репозиторії github.com/AlexOrd/vtfk-materials (content/sp/): лекції як дані (JSON + markdown-конспект), вказівки до ЛР у двох версіях, СРС, банк питань, конфігурація проведення (offering). Один білдер (site/build.mjs) генерує з них статичний сайт на GitHub Pages — docs.sp.ordynski.com; той самий набір даних читає застосунок курсу через Sync.
Оформлення — єдина дизайн-система (тема «cyberpunk»): лекції — слайд-колоди Reveal.js у ретро-моніторі (неонові cyan/yellow/magenta на майже-чорному, шрифти Orbitron + Chakra Petch). Той самий вигляд — у кабінеті застосунку. Друга дисципліна (ОБД) — тема «magical». Деталі — у docs/guides/Design_System.md.
Кожна сторінка ЛР, СРС і конспекту має блок «Команди на цій сторінці» — кожна команда терміналу одним реченням, зі словника commands.yml; команда, що з'являється в курсі вперше, позначається як нова. Окремою сторінкою збирається довідник «Коли щось пішло не так» — усі типові помилки з усіх лабораторних, із пошуком.
3. Конспекти лекцій
Десять лекцій по 2 години плюс вступне заняття (Лекція 0) поза сіткою годин; розподіл по модулях 6/8/6 год. Кожен конспект — одна ідея й одне живе демо, не перелік технологій.
3.1. Шаблон конспекту лекції
Тема і місце в наскрізній лінії (яку з трьох меж торкає).
Одна ключова ідея — формулювання в одному реченні.
Живе демо — команди/код, які викладач показує наживо; очікуваний вивід.
Опорний конспект — текст із визначеннями й схемами; для тем, які студент бачить уперше, окремий блок «перше входження»: що це взагалі й нащо, до того як «як це працює».
Зв'язок із ЛР — яка лабораторна спирається на цю лекцію.
Джерела — українське першим, англійське з позначкою «EN» і оцінкою часу на читання.
3.2. Перелік лекцій
| № | Тема | Ключова ідея | Демо |
|---|---|---|---|
| Л0 | ВСТУП ДО ДИСЦИПЛІНИ: ПРОГРАМА, ОРГАНІЗАЦІЯ РОБОТИ, ОЦІНЮВАННЯ | Системне програмування — це три межі між програмою й машиною (контейнер, пам'ять, набір інструкцій); семестр побудований так, щоб кожну межу перетнути на лекції, у лабора | Відкрити сайт курсу: показати структуру (лекції → ЛР → СРС), сторінку робочої програми, Лабораторну 0 і як виглядає робоче середовище (термінал у контейнері, docker versi |
| Л1 | ТРИ МЕЖІ КУРСУ: ПРОЦЕС, АДРЕСНИЙ ПРОСТІР, СИСТЕМНІ ВИКЛИКИ | Процес — це межа між програмою і машиною, яку курс перетинає тричі: контейнер (Docker), безпека пам'яті (Rust), пісочниця виконання (WebAssembly). | Запустити фоновий процес (sleep 300 &), знайти його PID, показати ps aux, а потім заглянути у /proc/<pid>/status, /proc/<pid>/maps і /proc/<pid>/fd — побачити, з чого нас |
| Л2 | ОБРАЗ ЯК ШАРИ, DOCKERFILE, КЕШ, БАГАТОЕТАПНА ЗБІРКА | Docker-образ (image) — це не файл, а впорядкований стек незмінних шарів (layers); Dockerfile — рецепт, за яким кожна інструкція створює новий шар. | docker history <image> — розібрати готовий образ на складові шари, показати розмір кожної інструкції Dockerfile і побачити, звідки береться "вага" образу. |
| Л3 | ПРОСТОРИ ІМЕН, ГРУПИ КЕРУВАННЯ (CGROUPS), ПРИВІЛЕЇ | Контейнер — це не окрема ОС, а звичайний процес, якому ядро підмінило видимість (namespaces) і обмежило апетит (cgroups). | unshare --pid --fork --mount-proc bash — запустити той самий bash-бінарник у власному PID-просторі й показати, що всередині він бачить себе як PID 1, а процеси хоста зник |
| Л4 | ЧОМУ ПРОГРАМИ ПСУЮТЬ ПАМ'ЯТЬ | Помилка керування пам'яттю коштує дорожче за час, витрачений на перевірки, які їй запобігають. | Той самий патерн use-after-free: у C код компілюється і поводиться непередбачувано, у Rust компілятор відмовляється його зібрати. |
| Л5 | ВОЛОДІННЯ І ЗАПОЗИЧЕННЯ | У кожного значення в Rust рівно один власник; а позичити значення (&) — це скористатися ним, не забираючи володіння і не копіюючи дані. | Move: після переміщення значення в нову змінну спроба використати стару змінну — помилка компіляції error[E0382]. |
| Л6 | ЗРІЗИ, ЧАСИ ЖИТТЯ І ТИПИ БЕЗ NULL | Точний тип замість копії й замість null: зріз — це вікно в чужі дані без володіння, Option<T> — це явно описана можливість, що значення немає. | match над Option<T>: компілятор вимагає обробити обидва варіанти, Some і None — забути None неможливо. |
| Л7 | RESULT, ? І ВЛАСНІ ТИПИ ПОМИЛОК | У Rust помилка — це значення в сигнатурі функції, яке компілятор змушує обробити, а не невидимий виняток, що летить крізь стек. | Оператор ?: та сама функція з ручним match і з ? — поведінка ідентична, рядків утричі менше. |
| Л8 | WEBASSEMBLY ЯК ПЕРЕНОСНИЙ АСЕМБЛЕР | WebAssembly — це набір інструкцій вигаданої машини, однакової в кожному браузері й рушії: найдешевший спосіб побачити межу між кодом і набором інструкцій живим. | Той самий .wat-модуль з функцією додавання компілюється у wat2wasm і запускається у браузері через WebAssembly.instantiateStreaming — виклик з DevTools console дає резуль |
| Л9 | АСЕМБЛЕР x86-64 | Асемблер (assembler) — це не «низький рівень заради складності», а пряме відображення того, що вміє робити процесор: регістри, стек, порівняння і переходи. | gcc -O0 -S на 5-рядковій C-функції додавання двох чисел; читаємо згенерований .s файл рядок за рядком і зіставляємо кожну інструкцію з тим, що робив би сам процесор. |
| Л10 | RUST У WASM, МЕЖА З HOST-СЕРЕДОВИЩЕМ | Останню межу курсу — межу набору інструкцій — перетинає не рука, що пише .wat вручну, а компілятор: Rust компілюється у WASM, а wasm-bindgen генерує міст до JavaScript. | Rust-функція, позначена #[wasm_bindgen], компілюється через wasm-pack build; на сторінці HTML кнопка викликає її з JS, а рядок-аргумент передається через межу мов у консо |
4. Методичні вказівки до лабораторних робіт
Десять лабораторних по 2 години плюс вступна (Лабораторна 0, без слота в розкладі, не оцінюється, відкрита весь семестр). Кожна — атомарний артефакт із видимим результатом наприкінці пари; кожна має академічну і сюжетну версію (розділ 1.1).
4.1. Шаблон академічної версії
Структура за Положенням про НМЗ (методичні вказівки до лабораторних):
Тема і мета роботи.
Теоретичні відомості — стислий мінімум, потрібний для виконання (не дублює лекцію того самого дня; блок «Освіжити перед роботою»).
Обладнання і програмне забезпечення — контейнер розробника / Codespaces, потрібні утиліти.
Порядок виконання — покроково, з очікуваним результатом кожного кроку.
Завдання за трьома рівнями — рівень 1 (базовий, оцінка 3), рівень 2 (захист, 4), рівень 3 (розширення, 5). Для рівнів 2–3 умова формулюється у двох рівноцінних версіях: на власному наскрізному артефакті або на референсному знімку.
Дві парні теми СРС — одна готує до рівня 2, друга до рівня 3.
Контрольні питання до захисту — 5–8 питань.
Критерії оцінювання і форма звіту — що здається (тег submit/labNN), що перевіряють автотести, що на захисті.
4.2. Шаблон сюжетної версії
Той самий технічний зміст, подано як завдання від С.І.Д. Структура:
Бриф С.І.Д. — уривок історії, який ставить задачу «в лорі».
Що це означає технічно — переклад брифу на інженерну мову.
Три рівні як ігрові ранги — Першокурсник / Магістр / Легенда Коледжу (= рівні 1/2/3).
Розбивка рівня 1 на етапи, щоб сторінка не була суцільною.
Блок «Коли щось пішло не так» — типові помилки з відповідями С.І.Д.
Критерії й здача — ідентичні академічній версії.
Інваріант: рівні, автотести, критерії й теги здачі в обох версіях однакові. Різниться лише обрамлення. Це гарантує, що студенти двох версій оцінюються за одним стандартом.
4.3. Два репозиторії студента
Рівень 1 кожної лабораторної живе у власному репозиторії роботи sp-<група>-labNN-<логін>, який курс створює на прийняття завдання: там код і REPORT.md, здача — тегом submit/labNN, перевірка — автотестами. Ім'я репозиторію є первинним ключем конвеєра перевірки, тому одна робота = один репозиторій.
Рівні 2 і 3 дають опцію працювати на наскрізному артефакті — власному репозиторії студента vtfk-sid, створеному один раз на першій лабораторній і живому до десятої. Він не перевіряється машиною: рівні 2–3 здаються захистом. Хто наскрізного артефакту не веде, не втрачає нічого — кожна умова рівнів 2–3 має другу версію, «на референсному знімку».
4.4. Зведена таблиця лабораторних
ЛР0 · Вступ: як влаштований курс, робоче середовище в Docker і здача робіт ⟷ «Перше ввімкнення» (Модуль —)
Парні теми СРС: немає — вступна робота, поза сіткою годин.
ЛР1 · Контейнер розробника: перша капсула ⟷ «Ізоляційна Капсула» (Модуль 1)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Публікація портів у Docker: -p, EXPOSE і чому без них хост не бачить контейнера · (рів. 3) Ідемпотентність скрипта розгортання: запустити двічі й не зламати
ЛР2 · Dockerfile з багатоетапною збіркою і порівнянням розмірів ⟷ «Кібер-Дієта» (Модуль 1)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) OverlayFS і шари образу: як влаштовано об'єднану файлову систему · (рів. 3) Відтворюваність збірки і довіра до образу (digest, pin версій)
ЛР3 · Простори імен на практиці: два контейнери в ізольованій мережі ⟷ «Сліпий Канал» (Модуль 1)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Мережі Docker (bridge/none/host) і службове DNS між контейнерами · (рів. 3) Керування секретами: env проти файлів проти docker secrets
ЛР4 · Перший проєкт на Cargo з юніт-тестом ⟷ «Кування Відмички» (Модуль 2)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Екосистема crates.io, Cargo.toml/Cargo.lock і семантичне версіонування залежностей · (рів. 3) Модель володіння Rust проти збирача сміття і ручного керування пам'яттю
ЛР5 · Набір програм, що не компілюються (borrow checker) ⟷ «Мертвий Лог» (Модуль 2)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Часи життя (lifetimes) у сигнатурах функцій: що саме перевіряє компілятор · (рів. 3) Rc<T> і RefCell<T>: спільне володіння та внутрішня мутабельність без гонок
ЛР6 · Структури і перелічення без null ⟷ «Архітектура Ворога» (Модуль 2)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Алгебраїчні типи даних (enum) і вичерпне зіставлення зі зразком (match) · (рів. 3) Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable)
ЛР7 · Читання файлу з обробкою помилок ⟷ «Мінне Поле» (Модуль 2)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Result<T, E> проти panic!: коли доречна відновна відмова, а коли зупинка програми · (рів. 3) Власні типи помилок і трейт std::error::Error: Display, Debug, Box<dyn Error>
ЛР8 · Модуль на WAT вручну ⟷ «Пряма Ін'єкція» (Модуль 3)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Стекова машина WebAssembly і структура текстового формату .wat · (рів. 3) Лінійна пам'ять WASM і межі безпеки пісочниці
ЛР9 · Той самий алгоритм у двох асемблерах ⟷ «Розтин Системи» (Модуль 3)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Угоди виклику (calling conventions) x86-64: System V AMD64 ABI · (рів. 3) Інструменти дизасемблювання: objdump та wasm-objdump, синтаксис AT&T проти Intel
ЛР10 · Ядро на Rust у WASM на сторінці з відтворюваною збіркою ⟷ «Звільнення» (Модуль 3)
| Рівень | Що перевіряється | Оцінка |
|---|---|---|
| 1 | автотести | 3 |
| 2 | захист (усно, з демонстрацією) | 4 |
| 3 | розширення за контрактом (захист) | 5 |
Парні теми СРС: (рів. 2) Межа Rust↔︎JS через wasm-bindgen: маршалінг типів і виклик з JavaScript · (рів. 3) Відтворювані збірки Rust→WASM і цілісність ланцюга постачання (supply chain)
5. Самостійна робота студентів (СРС)
Двадцять тем, по дві на кожну лабораторну: перша готує до захисту (рівень 2), друга — до розширеного завдання (рівень 3). СРС — маршрут до глибини, а не шлагбаум: окремо не здається й не оцінюється, оцінюється рівень лабораторної. Кожна тема має академічне й сюжетне формулювання. Опрацьовується на другій годині відповідного лекційного заняття.
5.1. Шаблон завдання СРС
Тема і до якої ЛР/рівня прив'язана.
Що прочитати/спробувати — джерела і мінімальна практична проба.
Орієнтир самоперевірки — питання, на яке студент має вміти відповісти після опрацювання.
Сюжетне формулювання — та сама тема мовою місії С.І.Д.
Завдання й контрольні питання.
5.2. Реєстр тем СРС
| № | ЛР | Рів. | Годин | Академічне формулювання | Сюжетне формулювання |
|---|---|---|---|---|---|
| 1 | ЛР1 | 2 | 2.5 | Публікація портів у Docker: -p, EXPOSE і чому без них хост не бачить контейнера | Брама, крізь яку пускають |
| 2 | ЛР1 | 3 | 3.0 | Ідемпотентність скрипта розгортання: запустити двічі й не зламати | Підняти капсулу двічі — і не розбудити сусідів |
| 3 | ЛР2 | 2 | 2.5 | OverlayFS і шари образу: як влаштовано об'єднану файлову систему | Пласти міста-привида |
| 4 | ЛР2 | 3 | 3.0 | Відтворюваність збірки і довіра до образу (digest, pin версій) | Цифровий відбиток фундаменту |
| 5 | ЛР3 | 2 | 2.5 | Мережі Docker (bridge/none/host) і службове DNS між контейнерами | Листоноша приватного кварталу |
| 6 | ЛР3 | 3 | 3.0 | Керування секретами: env проти файлів проти docker secrets | Ключар: передати ключ без звуку |
| 7 | ЛР4 | 3 | 3.0 | Модель володіння Rust проти збирача сміття і ручного керування пам'яттю | Чому відмичка не ламається |
| 8 | ЛР4 | 2 | 2.5 | Екосистема crates.io, Cargo.toml/Cargo.lock і семантичне версіонування залежностей | Арсенал відмички |
| 9 | ЛР5 | 2 | 2.5 | Часи життя (lifetimes) у сигнатурах функцій: що саме перевіряє компілятор | Розшифровка часових міток координат |
| 10 | ЛР5 | 3 | 3.0 | Rc<T> і RefCell<T>: спільне володіння та внутрішня мутабельність без гонок | Спільний доступ до ядра |
| 11 | ЛР6 | 2 | 2.5 | Алгебраїчні типи даних (enum) і вичерпне зіставлення зі зразком (match) | Мова опису ворожих вузлів |
| 12 | ЛР6 | 3 | 3.0 | Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable) | Архітектура без дір |
| 13 | ЛР7 | 2 | 2.5 | Result<T, E> проти panic!: коли доречна відновна відмова, а коли зупинка програми | Тиха обробка пасток |
| 14 | ЛР7 | 3 | 3.0 | Власні типи помилок і трейт std::error::Error: Display, Debug, Box<dyn Error> | Єдина мова інцидентів |
| 15 | ЛР8 | 2 | 2.5 | Стекова машина WebAssembly і структура текстового формату .wat | Асемблер нейроімпланта |
| 16 | ЛР8 | 3 | 3.0 | Лінійна пам'ять WASM і межі безпеки пісочниці | Пряма робота з пам'яттю монітора |
| 17 | ЛР9 | 2 | 2.5 | Угоди виклику (calling conventions) x86-64: System V AMD64 ABI | Як ворожий процесор приймає команди |
| 18 | ЛР9 | 3 | 3.0 | Інструменти дизасемблювання: objdump та wasm-objdump, синтаксис AT&T проти Intel | Розтин бінарника |
| 19 | ЛР10 | 2 | 2.5 | Межа Rust↔︎JS через wasm-bindgen: маршалінг типів і виклик з JavaScript | Міст між ядром і панеллю |
| 20 | ЛР10 | 3 | 3.0 | Відтворювані збірки Rust→WASM і цілісність ланцюга постачання (supply chain) | Щоб звільнення можна було повторити |
5.3. Індивідуальний проєкт (необов'язковий)
Наскрізний індивідуальний проєкт — альтернативний шлях до глибини рівня 3: студент бере власну невелику задачу, що поєднує три межі курсу (контейнеризований застосунок на Rust із фрагментом у WebAssembly). Необов'язковий; не є умовою допуску до заліку.
Окремо — позакурсова опція «ядро, що говорить»: інференс крихітної мовної моделі, скомпільований із Rust у WebAssembly і запущений у браузері без сервера. Не оцінюється, не входить у нормативні години й не є частиною жодної ЛР — це фінал для тих, кому мало. Заміри, ліцензії й обґрунтування — docs/private/MODEL_RECON_2026-09.md.
6. Наскрізна сюжетна арка «Проєкт С.І.Д.»
Повний текст історії не дублюється в цьому документі. Він живе там, де його читає студент, і генерується звідти:
сюжетні версії всіх одинадцяти лабораторних — Лабораторні_сюжет_СІД.docx (той самий прохід генерації, що й цей файл);
канон світу, календар «ніч 1..10», локації, вміння С.І.Д., стан антагоніста — content/sp/STORY_CANON.md і машинозчитуваний content/sp/canon.yml;
що кожна ніч додає до наскрізного артефакту — content/sp/ARTIFACT_CHAIN.md.
Причина, чому тут лише посилання, а не текст: до 07.09.2026 в цьому документі лежала власна копія прологу, десяти брифів і епілогу — і саме вона розійшлася з матеріалами настільки, що описувала ранги, яких у курсі немає, і сцени, які переписані. Копія нормативного тексту, яку ніхто не оновлює разом із джерелом, шкідливіша за посилання.
7. Банк тестових питань
Єдиний банк живе в закритому репозиторії дисципліни й ніколи не публікується на GitHub Pages. З нього збираються і модульні тестові контролі, і директорська контрольна. Питання класифікуються за п'ятьма рівнями засвоєння (п. 4.8.2 Положення про НМЗ).
7.1. П'ять рівнів засвоєння
| Рівень | Назва | Що перевіряє |
|---|---|---|
| 1 | Впізнавання | розпізнати термін/поняття серед варіантів |
| 2 | Репродуктивний | відтворити означення, синтаксис, послідовність |
| 3 | Розуміння | пояснити, чому/як працює механізм |
| 4 | Реконструктивний | застосувати в новій, але типовій ситуації |
| 5 | Творчий | проаналізувати нестандартний випадок, знайти помилку |
7.2. Структура і квоти
Питання згруповані за модулями і темами лекцій; кожне має рівень (1–5), тип (одна відповідь / кілька / відповідність / короткий ввід) і теги теми. Орієнтовний обсяг — ≈100 питань на модуль (≈300 разом), що дає достатньо для неповторюваних варіантів. Формат зберігання — YAML у репозиторії:
- id: m2-ownership-003
module: 2 # 1..3
topic: ownership # тег теми лекції
level: 3 # рівень засвоєння 1..5
type: single # single | multi | match | short
text: "Що станеться при спробі використати значення після move?"
options: [ ... ]
answer: [ 2 ]
7.3. Модульні тестові контролі
| Контроль | Після модуля | Дата | Тривалість |
|---|---|---|---|
| Т1 | модуль 1 | 23.10.2026 | 30 хв |
| Т2 | модуль 2 | 18.12.2026 | 30 хв |
| Т3 | модуль 3 | 12.02.2027 | 30 хв |
Складаються з банку за квотами рівнів (переважно рівні 1–3, кілька — 4). Результат — орієнтир; основою оцінки лишаються рівні, досягнуті в лабораторних.
7.4. Директорська контрольна робота
| Параметр | Значення |
|---|---|
| Коли | 12.02.2027 (залік) |
| Кількість варіантів | 4 (неповторювані) |
| Питань у варіанті | 25 |
| Тривалість | 45 хвилин |
| Джерело питань | той самий банк, що й модульні тести |
| Розподіл за модулями | рівномірно, ≈8/9/8 по трьох модулях |
| Розподіл за рівнями | рівні 1–2 — 60%, рівень 3 — 28%, рівні 4–5 — 12% |
| Критерій | за шкалою коледжу; окремий стовпчик журналу |
8. Календарний план публікації
Матеріали публікуються автоматично за розкладом із конфігурації дисципліни (offering/*.yml). Лабораторна відкривається студентам у день своєї пари, одночасно з лекцією того самого топіка — так тема й практика не розходяться в часі. Конвеєр публікації працює за принципом T-48h: у Classroom матеріали йдуть за 48 годин до відкриття, тобто текст умови й стартовий репозиторій заморожуються за дві доби. Це не зручність, а вимога: умову лабораторної неможливо виправити після того, як студент прийняв завдання — Classroom 50 не доносить оновлення стартера у вже прийняті репозиторії.
Порядок готовності матеріалу до кожної лабораторної:
Конспект лекції — до відповідної лекції.
Стартовий репозиторій + автотести — до відкриття завдання.
Методичні вказівки (обидві версії) — до відкриття завдання, посилання в Classroom.
Парні теми СРС — разом із вказівками.
Питання банку для модуля — до модульного контролю.
| Матеріал | Лекція | ЛР відкривається | Мʼякий дедлайн |
|---|---|---|---|
| ЛР0 | 04.09.2026 | відкрита завжди | — |
| ЛР1 | 11.09.2026 | 11.09.2026 | 02.10.2026 |
| ЛР2 | 25.09.2026 | 25.09.2026 | 16.10.2026 |
| ЛР3 | 09.10.2026 | 09.10.2026 | 30.10.2026 |
| ЛР4 | 23.10.2026 | 23.10.2026 | 13.11.2026 |
| ЛР5 | 06.11.2026 | 06.11.2026 | 27.11.2026 |
| ЛР6 | 20.11.2026 | 20.11.2026 | 11.12.2026 |
| ЛР7 | 04.12.2026 | 04.12.2026 | 25.12.2026 |
| ЛР8 | 18.12.2026 | 18.12.2026 | 22.01.2027 |
| ЛР9 | 15.01.2027 | 15.01.2027 | 05.02.2027 |
| ЛР10 | 29.01.2027 | 29.01.2027 | 19.02.2027 |
Правило готовності: матеріал готовий за два тижні до пари.
9. Реєстр готовності
| Артефакт | Стан |
|---|---|
| Робоча програма | готово |
| Силабус | готово |
| Цей план матеріалів | готово, генерується з даних |
| Канон сюжету (canon.yml, STORY_CANON.md, ARTIFACT_CHAIN.md) | готово |
| Конспекти лекцій (11) | готово |
| Слайд-колоди лекцій (11) | готово |
| Методичні вказівки до ЛР (11 × 2 версії) | готово |
| Завдання СРС (20 × 2 версії) | готово |
| Довідник «Коли щось пішло не так» | готово, генерується з ЛР |
| Стартові репозиторії + автотести (11) | готово |
| Шаблони vtfk-sid і vtfk-sid-reference | готово (templates/), не викладені на GitHub |
| Ілюстрації (53 слоти) | 0 із 53 — не блокує занять |
| Банк тестових питань (≈300, 5 рівнів) | згенерувати |
| Директорська контрольна (4 варіанти) | згенерувати з банку |