Курс «Сучасний С++», зима-весна 2022

|
|
Курс «Сучасний С++», зима-весна 2022
Не зважаючи на швидкий ріст потужності комп’ютерів, задач, де стане в пригоді кожен такт процесора та кожен байт пам’яті стає більше. В наукових та інженерних обчислення, в AI та ML, в роботі із великим даними, потужності завжди мало. Не менш важливими є системи, де ресурси доводиться економити – мережі IoT, смартфони, та й загальне енергоспоживання датацентрів привертає увагу. Щоб максимально ефективно використати наявні обчислювальні ресурси, потрібно розуміти, як влаштовані обчислювачі. Рівні абстракції дуже корисна річ, але всі абстракції протікають. Розуміння достатньо, щоб не робити відверто неефективних речей, програмуючи будь-якою мовою. Однак, значно більшого можна досягнути, отримавши безпосередній контроль над використанням ресурсів. В цьому сенсі, С++ – унікальна мова. Сучасна С++ дозволяє, з одного боку, писати високорівневий код, близький за простотою та виразністю до Python, однак, із малою платою за абстракції – не більшою, ніж в коді на С чи FORTRAN, з іншого – самим обирати,  наскільки заглиблюватися в подробиці, аж по врахування найдрібніших особливостей апаратної архітектури. Ще одною перевагою цієї мови є багатопарадигмовість. Є бажання «писати як на FORTRAN»? Без проблем. Надаєте перевагу ООП, функціональному стилю, узагальненому програмуванню, метапрограмуванню? Відповідні інструменти до ваших послуг. Зворотною стороною гнучкості С++, є велика складність в освоєнні. Загадковий сленг, безліч можливих підходів, багато поганих книжок, пастки на кожному кроці. Все це робить вивчення та ефективне використання С++ складним. Цитуючи її творця, Б’ярна Страуструпа, «C++ has indeed become too “expert friendly”».    На цьому курсі ми будемо вчитися справлятися з цією складністю та  максимально використовувати наявні ресурси із мінімальними необхідними затратами сил та часу.  Загальна тривалість курсу – 24 заняття. Кількість ECTS – 5 кредитів.

Детальна структура курсу

Цей курс призначений провести дорогою сучасного С++ — показати, які засоби мови адекватні для різних задач, і як ними взагалі користуватися. Він включає як класичні теми, так і  більш просунуті.  Список — в логічному порядку тем, для спрощення сприйняття, виклад вібуватиметься в іншому порядку, який, в певних межах, динамічно підлаштовуватиметься під потреби слухачів курсу:
  1. Огляд сучасного апаратного забезпечення. Абстракції комп’ютерної системи: центральний процесор та сопроцесори, ієрархія пам’яті, засоби вводу-виводу. Огляд ієрархічної організація комп’ютерних систем. 
  2. Огляд абстракцій операційної системи: процеси та потоки; віртуалізація, особливості вводу-виводу.
  3. Модель машини та модель пам’яті С, адресний простір процесу в сучасних операційних системах. 
  4. Роздільна компіляція, зв’язування (linking). Особливість С та С++ — невизначена поведінка як наслідок простору для оптимізації. Динамічні та статичні бібліотеки, раннє та пізнє зв’язування.
  5. Представлення елементарних даних в пам’яті, відповідні типи даних С++ та інших мов програмування.  Вказівники, посилання, вбудовані масиви та POD-структури. Особливості роботи із машинними числами з рухомою комою.
  6. Інструкції керування потоком виконання — if/switch/while/for. Функції.
  7. Керування динамічною пам’яттю та іншими ресурсами, RAII, розумні вказівники. Це одночасно і найслабша і найсильніша частина мови, тому потрібно вміти правильно її використовувати. 
  8. Класи, їх інваріанти – інкапсуляція, узгоджене копіювання та переміщення тощо.
  9. Класичне ООП в С++ – успадкування, віртуальні функції.
  10. Шаблони класів та функцій, їх взаємодія із іншими засобами мови. 
  11. Огляд шаблонного метапрограмування та expression templates — щоб ви могли програмувати, поки програмуєте.
  12. Стандартна бібліотека та відповідні кращі практики: STL (контейнери, алгоритми, ітератори, std::ranges C++20), стрічки, потоки вводу-виводу, генерація випадкових чисел тощо. Огляд колекції бібліотек boost. 
  13. Огляд інструментів розробки на С++: valgrind, статичні аналізатори –  cpp-check, clang-tidy, PVS-Studio, санітайзери, Intel VTune, perf тощо.
  Пройшовши цей курс ви навчитеся ефективно використовувати С++, залишаючись на тому рівні абстракції, що потрібен  для вашої задачі: 
    • реалізовувати складні речі у високорівневому стилі, більше схожому на популярні зараз інтерпретовані мови із динамічною типізацією, 
    • зберігаючи швидкодію С++ та переваги статичної типізації, 
    • маючи при тому можливість оптимізувати критичні ділянки як завгодно низькорівнево, безпосередньо працювати із апаратурою тощо. 

Вимоги до попередніх знань учасників курсу

Очікується, що слухачі вільно володітимуть простими конструкціями С-подібних мов. Зокрема, знають, що таке int, чим відрізняються signed та unsigned-типи, вміють користуватися умовним виразом if/if-else, знають, як працюють цикли for, while, do-while, знайомі із поняттям формальних аргументів функцій, відрізняють оголошення функції від її визначення. Бажаним є знайомство із вбудованими масивами С  та хоча б базове уявленням про вказівники. Те ж стосується класів та шаблонів – слухачу, який ніколи не чув про них, може бути важко, хоча знання подробиць чи вміння професійно користуватися цими засобами не обов’язкове.

Необхідні інструменти

В процесі роботи нам, в першу чергу, знадобиться достатньо сучасний компілятор С++: мінімум GCC 7.0+, Clang 5+, MSVC 2017+. Враховуючи бурхливий розвиток С++ останні роки, вартує використовувати найновіший доступний. Хоча достатньо будь-якого із них, краще користуватися декількома! Вони трішки по різному інтерпретують Стандарт, мають різні помилки і розширення, тому найкращого володіння С++ в цілому, а не конкретним діалектом, можна досягнути, випробовуючи ваш код різними компіляторами. Тому варто мати всю “велику трійку”: GCC, Clang, MSVC. Щодо середовища розробки (IDE) особливих вимог немає – лише б студентам було зручно. Зі свого боку, суб’єктивно – “Your mileage may vary”:
  •         CLion – для мене, певне, найкраще С++ IDE загального призначення. Якщо у вас є ліцензія, звичайно. Студентам вищих учбових закладів її видають безкоштовно. Головний мінус – величезні вимоги до комп’ютера. Не для середніх чи слабких машин.
  •         Qt Creator – достатньо хороше IDE, маловимогливе до ресурсів, варіант для машин, де CLion працює незадовільно. Open source. Дозволяє писати і програми, не пов’язані із Qt.
  •         Eclipse CDT – в міру проблемне середовище, на любителя.
  •         Code Blocks – просте, швидке, але доволі примітивне IDE.
  •         Microsoft Visual Studio – теж на любителя, декому подобається.
Оскільки деякі концепції ілюструватимуться на прикладі Qt та boost, варто їх заінсталювати. Детальніші інструкції будуть під час курсу. Windows: GCC та Clang++ разом із Boost та великою кількістю інших інструментів і бібліотек можна заінсталювати за допомогою MSYS2. Ще одним дуже зручним засобом є Linux Subsystem on Windows (WSL чи WSL2) – там навіть valgrind є. Але слід пам’ятати, що це буде Linux, образно кажучи –  у добре інтегрованій віртуальній машині. Як компілятор MSVC, так і відповідне IDE в Community edition, безкоштовно доступні на офіційному сайті Microsoft. За допомогою vcpkg (або інших аналогічних пакетних менджерів) поставити сторонні бібліотеки для нього можна відносно безболісно. Linux: менеджер більшості дистрибутивів дозволяють легко заінсталювати різні версії GCC, Clang та бібліотек. MSVC безпосередньо недоступний, відгуки щодо запуску під Wine неоднозначні. PVS-Studio випустили безкоштовну редакцію, враховуючи велику потужність даного аналізатора, варто заінсталювати і його.

Дати проведення курсу

Навчання проводяться 2 рази на тиждень – вівторок і четвер, у режимі онлайн. Час – 19:00.  Навчання на курсі розпочинається 15 лютого 2022 року.

Зарахування на курс

Зарахування на курс відбувається на конкурсній основі. Реєстрація завершена. При відборі учасників береться до уваги персональна мотивація та попередній досвід в програмуванні. Кінцевий термін прийому заявок на курс — 10 лютого (включно). Оголошення результатів відбору — 11 лютого. Увага! Організатори залишають за собою право закрити реєстрацію на курс раніше в разі наявності достатньої кількості заявок для заповнення вакантних місць в класі. У разі необхідності організатори також можуть попросити провести онлайн співбесіду з кандидатами на участь задля уточнення питань реєстраційної форми, а також перевірки рівня необхідних знань.

Вартість навчання

Загальна вартість курсу «Сучасний С++» становить 10 000 грн. Для студентів та випускників факультету прикладних наук УКУ передбачені знижки на навчання. Оплату за курс слід здійснити до 11 лютого (включно). Реквізити для оплати учасникам будуть надані через електронну пошту.  В разі виникнення фінансових питань, просимо звертатися якомога швидше (контактна інформація наведена нижче).

Сертифікати

По завершенню курсу учасники в разі отримання позитивної оцінки (виконання мінімум 60% завдань) отримають сертифікат учасника курсу. Сертифікат учасника може бути використаний для зарахування навчальний кредитів за аналогічний курс в університетах в разі наявності такої можливості.

Про викладача

Олег Фаренюк, Український Католицький Університет Фізик-теоретик. Програмує із 1995 (асемблер х86, Pascal), на С++ – з 2002. Протягом десяти років викладає С++, мав досвід викладання Python та С. Проводив тренінги в компаніях Ericpole та Infineon (раніше – Cypress). Викладає курси “Принципи організації комп’ютера”, “Архітектура комп’ютерних системи” та “Операційні системи” в УКУ. Веде блог, присвячений космосу, науці, програмуванню взагалі та вбудовуваним системам зокрема: indrekis2.blogspot.com.

Контактна інформація

E-mail: apps@ucu.edu.ua Facebook: www.facebook.com/ucucsds/

Про факультет

Важлива інформація

Контактна інформація