February 5, 2020

Советы от сеньора

Володимир Корнійчук, Senior Software Engineer в Infopulse

12 років досвіду

Чому?
Перш за все я б порадив новачку відповісти для себе на запитання: «Чому я хочу писати на С++?». Є ціла купа причин обрати інші мови програмування — багато з них легші у вивченні та щоденному використанні. Але в С++ є те, що тримає його серед лідерів. С++ обирають за його швидкодію, ефективність, контроль апаратних ресурсів, кросплатформеність, поширеність. Якщо ці речі відповідають вашим ідеалам — ідіть у бій. Якщо хочеться, щоб «раз-раз і в продакшн» — можливо, варто обрати щось простіше?

Хто і коли?
Для розуміння філософії С++ варто трохи почитати про історію його створення та бачення мови програмування її авторами. Ще не читали книг Страуструпа? Саме час. Банальна порада, але без цього справді ніяк. Тільки беріть останні видання, а не перші.

Чи варто читати стандарт?
Стандарт мови програмування С++ в одній з останніх редакцій, що траплялася мені на очі, налічує 1622 сторінки. Як це все прочитати (з урахуванням стилю документу) і залишитися при здоровому глузді, я особисто не уявляю. Вивчення С++ по стандарту — найгірша ідея у світі. Є багато книжок, що пояснюють С++ простіше і з теоретичної, і з прикладної точки зору. Можна почати зі списку на Isocpp. А стандарт залиште розробникам компіляторів.

IDE
Підберіть зручне середовище розробки. Я використовую Visual Studio з додатково встановленим плагіном Visual Assist X. Ця зв’язка знає про мову С++ більше за все інше, що я перебирав. Знаю людей, що користуються VS + ReSharper, CLion, Qt Creator, Vim. Мені не підійшло, але ви спробуйте і матимете власну думку.

Debugger
Навчіться користуватися дебаггером (як вбудованим у вашу IDE, так і зовнішнім, типу GDB чи WinDbg). Це, на диво, потужні інструменти, що іноді дозволяють робити неймовірні речі. Більшість розробників використовують їх доволі примітивно, у режимі «поставили точку зупинки — зупинилися на ній», навіть не знаючи про можливості віддаленої роботи, time-travel debugging, підтягування зовнішніх символьних файлів та коду, зупинки по модифікації адреси пам’яті тощо.

Профайлер
Ефективність та швидкість — одні з головних причин використання С++ в сучасних проектах. Без профайлера ви ніколи не здогадаєтесь, де саме «вузьке місце» у вашому коді. Для простих випадків підійде та ж Visual Studio, для складніших — Windows Performance Analyzer або інструменти від Intel. Не пробуйте вгадати, що саме у вас працює повільно. Я бачив, як на це марнувалися тижні. Просто зробіть замір профайлером і усвідомте факти. В більшості випадків проблема буде зовсім не там, де ви її очікуєте.

Інструменти статичного аналізу
Зараз є багато інструментів, що дозволяють вказати програмісту на можливу помилку в коді на С++. Є попередження стандартного компілятора, є нові можливості Visual Studio по аналізу С++ коду на відповідність рекомендаціям C++ Core Guidelines, є аналіз коду в Visual Assist X, є Cppcheck та Clang. Багато чого є, он одна тільки Вікіпедія скільки всього знає. Обов’язково оберіть собі щось і використовуйте. Особливо добре ці інструменти працюють у комбінації з системами неперервної інтеграції.

Спеціалізовані інструменти розробки
Яку б галузь програмування ви не обрали — швидше за все ви не будете першим, хто почав e ній працювати. Ваші попередники написали багато корисних утиліт — спробуйте знайти їх та використати. Є гарні програми для допомоги системному програмісту, є корисні утиліти для графіки та геймдеву, є купа бібліотек з алгоритмами. Не пишіть свого велосипеду? доки не витратите принаймні кілька годин на пошуки вже того, що вже існує.

Тримайтеся на вістрі прогресу
Знайдіть собі якесь джерело новин про С++. Мова розвивається, виходять нові стандарти та компілятори, що їх підтримують. Особисто я читаю новини на Isocpp, обговорення — на Reddit, дивлюся відео з конференцій C++Now та CppCon. Це вимагає не так багато часу, як може здатися, але дає можливість планувати як розвиток вашого проекту, так і ваш особистий.