
Подай заявку
на відбір
за Весь курс
1200 $
за курсом нбу
помісячно
420 $
КУРС ТРИВАЄ 3 МІСЯЦІ
ПЕРШИЙ КРОК ЗА ТОБОЮ
Я приймаю умови Публічної оферти та надаю згоду на обробку своїх персональних даних відповідно до Політики конфіденційності.
За тебе може заплатити роботодавець?
Напиши нам на hello@csosvita.com, і ми оформимо все якнайшвидше.
МАЄШ ПИТАННЯ?
МИ ВІДПОВІДАЄМО
// Не знайшли відповідь, яку шукали? Напишіть нам на hello@csosvita.com і ми з усім допоможемо
я зможу навчатися на курсі, якщо в мене інший часовий пояс?
Так, звісно. Всі заняття ми записуємо, тож різниця в часових поясах не буде суттєвою перешкодою. Переглядайте лекції коли зручно, а якщо виникнуть пита ння — викладач і команда на зв'язку в Slack-каналі.
чи є записи занять?
Щоразу організовуємо запис, однак краще долучатися д о онлайн-зустрічі — обговорити питання з одногрупниками та проконсультуватися з викладачем. Доступ до записів зберігається протягом року з дня старту курсу.
який рівень підготовки потрібен?
Ти вже пишеш код на роботі і знаєш хоча б одну мову програмування.
як проходять заняття?
Ми працюємо в невеликих групах до 25-30 людей у форматі живих занять із викладачем — зустрічаємося кілька разів на тиждень у Zoom. На заняттях розбираємо задачі, дискутуємо, уточнюємо деталі, розглядаємо приклади та аргументацію рішень. Формат побудований так, щоб кожен був залучений і мав можливість взаємодіяти з викладачем та групою.
до зустрічі на курсі
Перевірено випускниками —
ТОП інженерами з індустрії
Must-have для всіх, хто прагне заглибитись у нутрощі сучасного комп’ютера: як працює його CPU, з чого складається пам’ять та як операційна система керує процесами. Ці знання дозволять виділитися як на технічних інтерв’ю, так і під час код-рев’ю, надаючи корисні поради. Курс добре структурований і включає нетривіальні домашні завдання. Окреме задоволення приносить аналіз кейсів оптимізацій у кодових базах Facebook та Twitter.
Під час проходження курсу отримав неабияке задоволення від структурованого підходу. Куратор вражає вмінням доступно та розгорнуто подавати інформацію. Отримані знання з курсу також мають практичний застосунок у моїй роботі, що підкреслює цінність отриманої освіти.
Курс дуже добре структурований: починається з високорівневих абстракцій і поступово заглиблюється в деталі. Приклади базуються на реальних проєктах; цікаві та практичні домашні завдання (навіть довелося знешкоджувати бомбу!). Вартує кожної хвилини і кожної вкладеної гривні.
Це були цікаві 3 місяці, протягом яких вдалося отримати та покращити свої знання з оптимізації коду, віртуальної пам'яті, та взаємодії процесів із операційною системою. Також хотіла б відзначити продумані домашні завдання — це була чудова нагода попрактикувати вивчене.
This course offers an in-depth exploration of the low-level mechanics behind modern operating systems and CPU architectures, covering topics like caching, memory management, instruction-level performance, processes, multithreading, and concurrency.
I highly recommend it to developers who want to move beyond abstractions and learn to write optimized code grounded in a strong understanding of system internals.
Особливо сподобався підхід до викладання, коли мене спонукали самому знаходити відповідь маленькими кроками. Завдяки цим курсам я відкрив для себе, як можна продовжувати навчання вже на рівні Senior. А живе спілкування на лекціях виявилося значно ефективнішим, ніж перегляд записаних відео на Udemy, Coursera чи YouTube.
Я отримав справжнє задоволення від вивчення таких фундаментальних тем, як оптимізація алгоритмів та робота з кешем. Особливо цінними виявилися розділи про підвищення ефективності на рівні CPU та пам'яті. Завдяки чіткій і доступній подачі матеріалу, здобуті знання одразу знайшли практичне застосування.
This program covered advanced techniques in performance analysis and system optimization.
Based on the quality of the content and the expertise of the instructor, Ivan Petrushenko, I highly recommend this course to any professional seeking to master the nuances of performance engineering.
Курс дуже сильний і фундаментальний — охоплює базові принципи Computer Science незалежно від мови програмування. Під час навчання ми розібрали архітектуру комп'ютера, оптимізації на рівні кешу та пам'яті, особливості асемблера, а також те, як операційна система працює з процесами, потоками, адресним простором і ресурсами. Все це дає глибоке розуміння перформансу на low-level рівні.
Курс крутий. Дуже рада, що Іван його створив і що мала нагоду потрапити. Окремо ціную записи лекцій — можна переглядати у зручний час. Плюс велика кількість додаткових відео, посилань і нотаток від Івана суттєво розширили мій кругозір і дали чіткий орієнтир що дивитись і що читати далі.
Лекції з Іваном були для мене найкориснішими. У computer science є багато сфер, про які не замислюєшся, коли просто пишеш код. Іван якраз показує ці аспекти — як вони працюють і чому їх важливо розуміти, якщо хочеш щось оптимізувати.
Я постійно ставив запитання, активно взаємодіяв, і це було дуже цінно. Коли людина вже пройшла цей шлях і пояснює тобі складні речі простіше, це економить багато часу на дослідження і допомагає швидше сформувати інтуїцію. Це, на мою думку, одна з найсильніших сторін курсу.
ПРО КУРС
Більшість проблем перформансу живе не в алгоритмах. Корінь глибше — в тому, як код виконується на реальному CPU та GPU: промахи кешу, невдале розміщення даних у пам'яті, хибні передбачення branch predictor, зайві алокації, перемикання між потоками чи простої в очікуванні ядра ОС. Кожен із цих факторів з'їдає мікросекунди, які складаються у відчутні затримки. Звідси парадокси, що ламають інтуїцію: O(n) програє O(n²), HashMap на мільйони записів поступається sorted array із binary search, а два потоки працюють повільніше за один.
І саме тут починаються по-справжньому цікаві інженерні задачі — особливо зараз, коли частоти процесорів не ростуть, пам'ять відстає від CPU, а залізо більше не пробачає неакуратних рішень. Як прискорити hot loop у 10 разів, не змінюючи алгоритму? Як написати memory allocator, швидший за malloc на вашому workload? Як зрозуміти, що насправді робить ваш код, коли профайлер показує дивне? Цей курс — про розв'язання таких задач: від рівня бітів і байтів до операційних систем, через практику і вимірювання, а не оглядову теорію. Принцип один: не вгадувати — міряти, не «підкручувати» — пояснювати, формувати власну модель того, що відбувається під капотом.
Для middle та senior інженерів, які працюють або хочуть працювати там, де performance — не nice to have, а базова вимога: infrastructure, backend core, databases, machine learning systems, high-frequency trading.
ЩО ПОТРІБНО ЗНАТИ
:: Базове знання алгоритмів, структур даних, оцінки складності та впевнена робота в терміналі з основними командами
:: Готовність працювати з C/C++, читати низькорівневий код, розуміти його логіку та використовувати за потреби, навіть якщо це не основна мова
:: Впевнене володіння хоча б однією мовою програмування
ДВІЧІ на тиждень
ВІВТОРОК 18:30 (UTC+3)
ПʼЯТНИЦЯ 18:30 (UTC+3)
// live зустрічі з записом
Стек
Будь-яка мова програмування
// пишемо код з першого заняття
ПРОГРАМА
:: 25 LIVE ЗАНЯТЬ :: 6 Q&A СЕСІЙ :: ДО 30 СТУДЕНТІВ У ГРУПІ
CPU і вартість коду — від аналізу до оптимізацій
Навчимось бачити, де втрачаються наносекунди і як це свідомо виправляти.
• Напишемо власну віртуальну машину: 256 байт памʼяті, 3 регістри, fetch-decode-execute цикл. Після цього JVM, CPython і V8 перестануть бути магією.
• Ієрархія latency операцій і як переписати hot loop з урахуванням цих фактів
• Back-of-envelope estimations: як за 30 секунд на папері сказати, чи встигне алгоритм за секунду. Приклади співбесід у Google та Jane Street
• Техніки, якими інженери Facebook, Twitter і HFT-компаній прискорюють продакшн-код у 100 разів — і як застосувати їх у своєму коді
• Розбір performance-катастроф: regex, що поклав Cloudflare; hash flooding як DoS-вектор проти PHP/Java/Node; Java String у циклі, що робить O(N²)
Cache — чому правильний memory layout важливіший за алгоритм
Два однакові цикли по пам'яті. Перший — у 50 разів швидший. Різниця — в одному рядку.
• Розберемо game engine та прискоримо реальний код у 6–10 разів, не змінюючи алгоритм — тільки через те, як дані лежать у пам'яті
• Cache-friendly алгоритми і структури даних: loop tiling для матриць, B-tree замість red-black tree в базах даних, flat_hash_map замість std::unordered_map
• Інструменти, якими вимірюють cache performance: perf stat на L1-cache-load-misses, cachegrind через valgrind, інтерпретація cg_annotate.
• Кеш операційної системи та вплив на реалізацію File I/O
• Чому ООП з розкиданими полями програє Data-Oriented Design: AoS vs SoA, hot/cold splitting, structure packing
A Bit about Bytes — як дані представлені в памʼяті і чому це має значення
0.1 + 0.2 != 0.3. Це не баг Python — це IEEE 754. Розберемось, чому.
• Variable-length int у Protobuf: як економити 75% байтів на типових даних
• IEEE 754 з нуля: sign, exponent, significand. Зрозуміємо, чому float-и не розподілені рівномірно на числовій осі, і чому фінансові розрахунки ніколи не ведуться у float
• Two's complement: чому -128 і +127 живуть у тому самому байті, і як одне правило «інверт + 1» замінює всю логіку віднімання
• UTF-8 зсередини: закодуємо € у три байти руками, зрозуміємо, чому Twitter рахує grapheme clusters, а не code points
• Розрізняти data / code / stack / heap сегменти просто подивившись на адресу вказівника — і розуміти, звідки береться segfault ще до того, як його кинули
• Bitmap-індекси в БД: як PostgreSQL і ClickHouse відповідають на WHERE gender='M' AND country='UA' швидше за B-tree — і напишемо свій
• Bit hacks, що реально застосовуються в продакшні: popcount для Redis-фільтрів, перевірка степеня двійки без циклів, вирівнювання адрес без умовних переходів
• Endianness на практиці: чому той самий файл, записаний на x86 і прочитаний на ARM, ламається — і як з цим живуть мережеві протоколи
Memory — від malloc до garbage collector
Аллокатор, GC, arena — напишемо все руками. Після цього new і malloc стануть кодом, який ви знаєте зсередини.
• Напишемо власний memory allocator через mmap: header, freelist, first-fit стратегія — і зрозуміємо, чому jemalloc у Facebook і tcmalloc у Google переможуть system malloc на їхніх workload'ах
• Напишемо власний mark & sweep garbage collector
• Stack vs Heap: як працюють push/pop/call/ret на рівні assembly, чому функція не може повернути pointer на локальну змінну, і звідки береться stack overflow на глибокій рекурсії
• Alignment і padding: чому struct { char; int; char; } займає 12 байт замість 6, як правильний порядок полів економить 40% пам'яті, і що процесор робить з unaligned access
Low-level оптимізації — компілятор, асемблер і залізо
Компілятор робить за вас багато. Але іноді він не може — і тоді потрібно розуміти, що відбувається рівнем нижче.
• Instruction-Level Parallelism на практиці: чому процесор може виконувати 4 інструкції за такт
• Як loop unrolling піднімає швидкодію коду
• SIMD через AVX/SSE: як одна інструкція обробляє 8 float-ів замість одного
• Branch prediction зсередини: чому невгадана if-гілка коштує 15–20 циклів, і коли варто переписувати if як branch-free arithmetic
• Reverse engineering: 6 фаз зашифрованого бінарника, які треба розкодувати через gdb і дизасемблер, читаючи x86-64 assembly й розуміючи, що компілятор згенерував з вашого коду
Операційна система — абстракції, за які ви платите
ОС дає зручний інтерфейс: файли, процеси, памʼять. Але кожен syscall — це перемикання контексту. Кожна абстракція — це overhead. Їх розуміння — це різниця між "працює" та "працює швидко".
• Virtual Memory і Page Tables зсередини: як адреса з вашого процесу перетворюється на фізичну через TLB і 4-рівневі таблиці, і чому mov [rax] іноді коштує 100+ циклів
• System calls і context switches: чому один getpid() — це 100 наносекунд
• Page faults як джерело latency spike'ів. Lazy allocation, copy-on-write fork, demand paging і memory-mapped files.
Процеси — ізоляція, координація, комунікація
Напишемо свій shell з нуля. Після цього ls | grep | wc перестане бути магією командного рядка і стане трьома процесами, трьома pipe, одним парентом.
• Реалізуємо власний shell на C: parsing команд, fork + exec, pipe, redirects
• Fork і exec зсередини: чому саме дві систем ні функції, а не одна spawn(), і як copy-on-write робить fork() дешевим
• IPC на практиці: pipe для потокової передачі, Unix socket для структурованих повідомлень, shared memory для максимальної швидкості
Multithreading та Concurrency — від потоків до Event Loop
"Додай потоків" — це не стратегія оптимізації. Це початок нового класу проблем: race conditions, deadlocks, priority inversion, starvation. Конкурентність — це окрема дисципліна, де кожне рішення має trade-off між throughput, latency та correctness.
• Threads vs Processes vs Coroutines: як кожна модель розв'язує одну й ту саму задачу по-різному, і чому Node.js на одному потоці обганяє Apache на тисячі
• False sharing — баг, через який два потоки повільніші за один, хоча не діляться жодною змінною. Як знайти через perf c2c і виправити через alignas(64)
• MESI зсередини: як чотири ядра процесора синхронізують кеш
• Напишемо Thread pool та виправимо багато конкурентних багів
ЯК ПРОХОДИТЬ
НАВЧАННЯ
01
фідбек та ітерації
// Домашки не задаємо для галочки. Викладач перевіряє рішення, повертає на доопрацювання та пояснює, де прогалини
Zoom
02
записи та конспекти
// Записуємо всі заняття та ділимося матеріалами, щоб ви не втрачали темп навіть через форс-мажори чи особисті обставини
Zoom
03
live звʼязок
// Усі заняття проходять в живому форматі з викладачем, щоб поставити запитання та попрактикувати live-coding
Zoom
01
live зв'язок
// Усі заняття проходять в живому форматі з викладачем, щоб поставити запитання та попрактикувати live-coding
Zoom
Slack
02
записи та конспекти
// Записуємо всі заняття та ділимося матеріалами, щоб ви не втрачали темп навіть через форс-мажори чи особисті обставини
Notion
03
фідбек та ітерації
// Домашки не задаємо для галочки. Викладач перевіряє ваші результати та відправляє на доопрацювання та пояснює
GitHub
HackerRank
ПРАКТИЧНА
РОБОТА
:: 9 ДОМАШНІХ ЗАВДАНЬ :: ФІДБЕК ВИКЛАДАЧА :: РЕАЛЬНІ ПРОДАКШН ЗАДАЧІ
Власна віртуальна машина
// приклад однієї з домашок на курсі
У CPython, JVM і V8 всередині живе одна знайома механіка: runtime читає інструкцію, декодує її, змінює стан машини і переходить до наступної.
Ми напишемо мінімальну віртуальну машину: на вхід вона отримує масив байтів із кодом і даними, а на виході виконує програму, змінюючи пам’ять так, як це зробив би маленький процесор.
Для цього знадобляться:
:: фіксований блок пам’яті;
:: кілька регістрів;
:: program counter;
:: акуратний цикл fetch–decode–execute.
Ця задача змушує руками зібрати механізм, на якому тримаються інтерпретатори, байткод і частина сучасних runtime-систем.
ЩО ЗМІНИТЬСЯ
ПІСЛЯ КУРСУ
1
глибина твого розуміння
// Що саме гальмує програму: кеш, памʼять, алокації, branch prediction, системні виклики, потоки чи невдале розміщення даних.
2
ефективність твого коду
// Почнеш писати код, який швидше працює на реальному залізі, а не лише виглядає оптимальним у Big O.
3
обґрунтованість твоїх рішень
// Почнеш оптимізовувати системи через профайлінг і розуміння trade-offs, а не через здогадки та випадкові «покращення».
ВИКЛАДАЧ
ТА АВТОР ПРОГРАМИ
.webp)
Іван Петрушенко
Engineering Lead y @SQUAD, Founder в @CS Osvita.
Former: @Dell Software Engineer, @Fiverr Senior Software Engineer, @Ring Machine Learning Engineer.
:: 14+ років в інженерії: від низькорівневих high-performance backend-систем на C/C++/C# до складних web-архітектур і production-систем на Python.
:: 5+ років у ролі Technical Lead: проєктування великих систем та доведення складних рішень до production.
:: 9+ років викладання computer science: від інтернатур у продуктових компаніях до підготовки школярів на олімпіади міжнародного рівня.
01
Будував і пришвидшував production-системи: від алгоритмів дедуплікації, реплікації та геообчислень — до backend-сервісів, що тримають тисячі RPS.
02
Досягав 10x пришвидшення сервісів без пропорційного зростання інфраструктури — через профілювання, microbenchmarks і оптимізацію гарячих ділянок коду.
03
Прискорював data/ML-пайплайни, що обробляли мільйони записів: знаходив bottleneck'и на critical path і перетворював повільні batch-процеси на швидкі та масштабовані.
Practice writing fast software. Learn to do it right.

Одна з моїх найкращих інвестицій, можу рекомендувати всім!
// Роман Перегончук,
@Meta

Must-have для всіх, хто прагне заглибитись у нутрощі сучасного комп’ютера.
// Ярослав Бородаєнко,
@Amazon

Вартує кожної хвилини і кожної вкладеної гривні.
// Кирило Попирко,
@Amazon

Курс допоміг мені отримати оффер від Oracle та Microsoft.
// Валентин Бочкарьов,
@Microsoft

Буде цікаво та складно, всім хайлі рекомендед!
// Саша Савсуненко,
@Meta


















