Результати пошуку за запитом: видеокурс c*
Що таке патерни проєктування у програмуванні
Автор: Влад Сверчков
Що таке патерн (шаблон) проєктування.
Коли використовують шаблони.
Якими бувають патерни проєктування.
Породжуючі.
Структурні.
Патерни поведінки.
Як обрати шаблон?
Висновки.
Програмісти-початківці завжди приходять до точки, коли їхній код перетворюється на “спагеті”. Його важко читати, він містить масу самоповторень, зайвих функцій, а додавання нового функціоналу перетворюється на десяте коло пекла.
Один із найкращих засобів запобігання цьому – використовувати патерни проєктування (Design Patterns). Чи є це срібною кулею, які переваги та недоліки патернів існують, і які з них необхідно знати розробникам? Відповіді розбираємо нижче.
Що таке патерн (шаблон) проєктування?
Патерни – це типові архітектурні рішення проблем, котрі часто зустрічаються під час розроблення ПЗ. Їхня інша назва – шаблони, і що цікаво – людство дуже часто оточує себе шаблонами у повсякденному житті:
однакові гнізда розетки та форми вилок у приміщеннях – універсальне рішення для електроживлення;
виделки та ложки – інструменти споживання майже будь-якої їжі;
чашки – ємності для розміщення будь-якої рідини і так далі.
Людина завжди прагне спростити традиційну діяльність, і це не могло обійти стороною програмування.
Ідеї створення універсальних правил для якісної розробки існували ще до 90-х років минулого століття, але дійсно проривною стала праця "Design Patterns: Elements of Reusable Object-Oriented Software" (1994) авторства Еріха Ґамма, Річарда Гелма, Ральфа Джонсона та Джона Вліссідеса, які іменують себе як "Банда чотирьох" (Gang of Four, GoF).
У книзі описано 23 патерна та їхнє застосування в об'єктно-орієнтованому дизайні. Ця праця стала фундаментальною і тепер патерни gof складають кістяк багатьох обговорень якісного коду.
Коли використовують патерни
В розробці шаблони використовують при необхідності приведення коду до наступних критеріїв:
Читабельність – інші розробники мають без складнощів розуміти написане.
Масштабованість – легкість у створенні нового функціоналу.
Підтримуваність – оновлення кодової бази має проходити якомога плавніше.
Також вони здатні підвищити швидкість і продуктивність розробника – патерни це дійсно дозволяють. Вони гарно справляються і з наступними задачами:
зменшення кількості потенційних помилок та вузьких місць;
спрощення рефакторингу;
зменшення технічного боргу;
покращення комунікації девелоперів з іншими програмістами, проєктними менеджерами, власниками тощо.
Необхідність використати шаблони проектування зростає разом зі збільшенням кодової бази, особливо при комерційному розробленні – коли створюване ПЗ має приносити прибуток.
Важливо пам’ятати, що використання патернів інколи є геть недоречним. Подекуди воно може значно ускладнити читабельність, громіздкість і масштабованість коду. Наприклад, нескладний функціонал, який нечасто використовується і займає мало місця в коді, не потребує pattern-втручання. А от репетативний код, що вирішує класичні задачі (сортування, перебір даних тощо) – ідеальний претендент на застосування шаблону.
Аби не помилитися спершу з’ясуйте контекст вашої проблеми, а вже потім обирайте патерни програмування, які найкраще задовольняють вимогам.
Якими бувають патерни проєктування
У своїй книзі GoF виділяють три великі сімейства:
Сімейство
Короткий опис
Породжуючі патерни або Creational Patterns
Надають найкращі способи створення об'єктів. Вони абстрагуються від процесу конкретизації і роблять вашу систему незалежною від створення, компонування та представлення її об'єктів.
Популярні приклади: “Абстрактна фабрика” (Abstract Factory), “Одинак” / “Одиночка” (Singleton), “Прототип” (Prototype), “Фабричний метод” (Factory Method).
Структурні патерни або Structural Patterns
Фокусуються на композиції об’єкту. Допомагають переконатися в тому, що зміна частини системи не потягне за собою необхідність змін в інших її складових.
Популярні приклади: “Проксі” (Proxy), “Адаптер” (Adapter), “Компонувальник” (Composite), “Фасад” (Facade).
Патерни поведінки або Behavioral Patterns
Зона відповідальності – алгоритми та обмін інформацією між об’єктами.
Популярні приклади: “Відвідувач” (Visitor), “Ітератор” (Iterator), “Ланцюжок обов’язків” (Chain of Responsibility), “Стратегія” (Strategy).
Розглянемо більш детально деякі з них.
Породжуючі
Породжуючі патерни – це надійні помічники у створенні об’єктів таким чином, аби в майбутньому з ними було максимально легко працювати.
Дамо короткий опис деяких шаблонів:
Патерн Одинак / Сінглтон забезпечує наявність лише одного екземпляру класу з глобальною точкою доступу. Singleton поширений в задачах конфігурацій або логування в застосунках, де потрібен єдиний контрольований доступ.
Шаблон Прототип дозволяє створювати нові об'єкти шляхом копіювання існуючих екземплярів. Використовується Prototype в ситуаціях, коли створення об'єкта надто дороге, наприклад, при клонуванні складних або ресурсоємних об'єктів.
Фабричний метод визначає інтерфейс для створення об'єктів, але дозволяє підкласам самостійно визначати тип створюваних об'єктів. Fabric Method корисний у багатофункціональних застосунках, де класи повинні мати можливість вибирати тип об'єктів, наприклад, при роботі з різними форматами документів, системами онлайн платежів тощо.
Абстрактна фабрика визначає інтерфейс для створення сімейств пов'язаних об'єктів без вказівки їх конкретних класів. Використовують Abstract Factory для створення різних компонентів інтерфейсу користувача, які повинні працювати разом і забезпечувати єдиний стиль (світла / темна тема вебсайту тощо).
Розглянемо приклад на патерні Singleton. Уявіть собі просту програму – музичний плеєр. Він дозволяє користувачам відтворювати музичні файли. Однак водночас має працювати лише один екземпляр плеєра – можливість відкриття декількох одночасно повинна бути недоступна. Цього можна досягти за допомогою шаблону Singleton.
Простий приклад коду мовою C#:
public class MusicPlayer
{
private static MusicPlayer _instance;
private MusicPlayer()
{
// Ініціалізуємо музичний плеєр (наприклад, завантажуємо плейлисти)
}
public static MusicPlayer Instance
{
get
{
if (_instance == null)
{
_instance = new MusicPlayer();
}
return _instance;
}
}
public void PlaySong(string songPath)
{
// Запустити пісню
}
public void PauseSong()
{
// Поставити на паузу
}
public void StopSong()
{
// Зупинити відтворення пісні
}
}
// Отримуємо екземпляр MusicPlayer
MusicPlayer player = MusicPlayer.Instance;
// Використовуємо функціонал MusicPlayer
player.PlaySong("C:\\Users\\yourUsername\\Music\\mySong.mp3");
player.PauseSong();
player.StopSong();
Щоразу як в різних ділянках проєкту вам треба буде створювати екземпляр плеєру для відповідної взаємодії, ви завжди працюватимете лише з одним і тим самим екземпляром, уникаючи дублікації.
Якщо ви програмуєте мовою сі шарп, детально розібрати популярні патерни проєктування C# з прикладами ви можете за посиланням.
Структурні
З короткого опису в таблиці легко дійти висновку, що структурні патерни дозволяють сформувати надійну, масштабовану та підтримувану архітектуру проєкту. Коротке знайомство:
Проксі забезпечує об'єкт-посередник для контролю доступу до іншого об'єкта. Зазвичай шаблон Proxy використовують для реалізації “лінивого” завантаження, коли об'єкт створюється або ініціалізується лише при зверненні до нього (наприклад, завантаження картинок з високою роздільною здатністю).
Адаптер дозволяє об'єктам з несумісними інтерфейсами працювати разом. Застосовується патерн Adapter для інтеграції нових компонентів в існуючу систему без зміни її коду. Підходить для використання нової бібліотеки у старому застосунку.
Компонувальник використовується для ієрархічного компонування об'єктів для подальшої роботи з ними як з єдиним об'єктом. Використовується для створення деревоподібних структур, як-от файлові системи або GUI, де кожен вузол може бути як простим, так і Composite об'єктом.
Фасад (Facade) надає спрощений інтерфейс для взаємодії зі складною системою або набором класів. Він зменшує складність роботи з підсистемами і надає користувачам єдиний вхідний інтерфейс для виконання рутинних операцій.
Вивчити саме структурні патерни проєктування C# (з прикладами) ви можете за посиланням.
Поведінкові
Патерни поведінки в першу чергу визначають зв’язки між об’єктами і те, як вони здійснюють обмін інформацією. Наприклад:
Патерн Відвідувач (Visitor) дозволяє додавати нові операції до об'єктів без зміни їхніх оригінальних класів. Використовується для взаємодії з об’єктами зі складною структурою, коли внесення додаткової логіки в оригінальні класи невиправдано ускладнює код.
Ітератор / Iterator надає зручний механізм послідовного та простого доступу до елементів колекції, незважаючи на складність її побудови. Даний патерн поведінки популярний при обході елементів контейнерів, як-от списки або масиви – він надає універсальний інтерфейс для різних типів колекцій.
Ланцюжок обов’язків або ж патерн Chain of Responsibility дозволяє передавати запит ланцюжком обробників, поки один з них не обробить запит. Незамінний при обробці запитів на сервері, де кожен обробник може передати запит наступному обробнику в ланцюжку: перевірка при авторизації на сайті, оброблення подій у GUI тощо.
Для входу в патерни проєктування книга від Gang of Four буде гарною точкою відліку. Ви познайомитеся з класикою та академічним розкриттям теми, використовуючи патерни gof. Якщо ж ви хочете збагатити свої знання шаблонів, але віддаєте перевагу мові Java, рекомендуємо відео курс “Патерни проектування Java”.
Як обрати патерн?
Спочатку ви маєте проаналізувати задачу – для більшої зрозумілості виконайте її декомпозицію, розбивши на декілька складових. При цьому використовуйте системний підхід: прорахуйте, як ваше рішення вплине на весь проєкт, які елементи воно зачепить зараз, і який вплив воно матиме на додавання нового коду.
Якщо ви вже працюєте в ІТ-компанії, ваші колеги, тімлід або архітектор можуть підказати вам доцільність використання того чи іншого патерну, розкрити нюанси вже існуючої архітектури, кодового стилю та багато іншого.
Лише після ретельного аналізу можна переходити до підбору шаблону, зважаючи на усі переваги та недоліки. До речі, в цих задачах гарними помічниками будуть безкоштовні AI-асистенти на кшталт ChatGPT, Gemini та ін.
Також не забувайте про використання інших методик покращення кодової читабельності, масштабування й чистоти:
SOLID принципи – вони регламентують 5 основних засад створення структурованого, якісного коду. Нещодавно ми проводили вебінар, на якому розбирали кожен принцип в деталях, запрошуємо до перегляду! А якщо вас цікавить прикладний характер SOLID принципів на Java, можете пройти даний відео курс.
GRASP (General Responsibility Assignment Software Patterns) – патерни для об’єктно-орієнтованого проєктування. Вони не мають вираженої структури і носять більш абстрактний характер, аніж патерни gof.
DRY (Don’t Repeat Yourself) – головна ідея даного принципу полягає у створенні коду, який не матиме дублікацій в проєкті.
KISS (Keep It Simple, Stupid) – регламентує написання якомога простішого коду, аби його можна було легко читати і розуміти.
Рефакторинг – повернення до вже написаного коду з метою його покращення без зміни функціональності.
Інші техніки, що залежать від проєктів.
Висновки
Патерни грають ключову роль в сучасному розробленні. Вони акумулюють в собі найкращі практики створення кодової бази таким чином, аби досягнути максимальної легкості та ефективності розроблення, особливо на великих проєктах.
Звісно, не завжди їхнє використання є доречним – потрібно аналізувати задачі і продумувати наслідки застосування того чи іншого шаблону, аби не отримати величезну валізу без ручки.
Розвивайте вашу експертизу в області патернів – це win-win стратегія. З одного боку перед працедавцями ви постанете як досвідчений та висококваліфікований спеціаліст, а з іншого – ваші програмні рішення матимуть елегантний характер і відзначатимуться легкістю в читанні, підтримці та масштабуванні.
Чи використовуєте ви патерни в своїй розробницькій діяльності? Можливо, тільки вивчаєте? Залишайте в коментарях ваші відповіді!
ТОП 10 AI сервісів для розробників. Ефективне використання нейромереж
Автор: Влад Сверчков
Важливість нейромереж у сучасній розробці
Короткий огляд нейромережевих технологій
ТОП 10 сервісів з використанням нейромереж для розробників
Поради та рекомендації щодо вибору AI
Висновки
Висока динаміка ІТ-індустрії змушує розробників постійно шукати нові шляхи покращення власної продуктивності. Нещодавно людство ковзнуло ще однією спіраллю прогресу, і тепер девелоперів оточує плеяда штучних асистентів, причому часто в їхній основі саме нейромережі.
Можливості ШІ дозволяють значно прискорити рутинні процеси, починаючи від зідзвонів з командою і закінчуючи написанням коду та його рефакторингом. І хоча рівень штучного інтелекту ще далекий від ідеалу, це вже великий крок уперед.
Які штучні інструменти дозволяють впоратися з розробницькими задачами найбільш успішно? Щоб допомогти вам із відповіддю, в цій статті ми зібрали 10 цікавих ШІ сервісів для розробників з урахуванням функціоналу, вартості, наявності free-версії тощо. Читайте далі, щоб дізнатися більше!
Важливість нейромереж у сучасній розробці
Сьогодні нейромережі дозволяють значно спростити життя звичайному розробнику. Ось кілька прикладів:
Декомпозиція задач. ШІ здатен розбивати комплексні задачі на дрібні, пояснювати їх, надавати підказки щодо їх виконання, пропонувати найоптимальніше рішення.
Генерування коду. Розумній моделі можна дати на вхід певну програмістську задачу, а на виході отримати готовий шматок коду. Також AI здатен аналізувати чужий код, пояснювати його, розставляти коментарі, досліджувати технології програмування тощо.
Code-рев’ю & рефакторинг. Ви можете зекономити час, довіривши AI внесення необхідних змін: сканування і оптимізація коду, видалення надлишкових фрагментів, покращення лаконічності, алгоритмів тощо.
Написання тестів. Розробники не надто люблять займатися unit-тестуванням, хоча це важлива складова забезпечення якості ПЗ. На щастя, штучний інтелект здатен генерувати необхідні тестові кейси, котрі охоплюють різні сценарії, а також автоматизувати виконання цих тестів.
Проактивна обробка помилок. ШІ прогнозує потенційні помилки та рекомендує виправлення до того, як вони трапляться, що скорочує час налагодження коду.
Потужний аналіз даних. Штучні помічники здатні відносно швидко аналізувати великі масиви даних, щоб з’ясувати причинно-наслідкові зв’язки, виявити закономірності / потенційні проблеми та помилки тощо. Досить актуально для ІТ-спеціалістів, пов’язаних з Data Science, ML, big data тощо.
Створення документації. ШІ може аналізувати код і автоматично створювати вичерпну документацію, яка пояснює функціональні можливості, інструкції з використання та посилання на API і багато іншого.
Прогнозування. Прогнозування та моделювання поведінки користувачів і продуктивності ПЗ, покладене на плечі AI, дозволяє розробникам планувати масштабованість, виявляти потенційні вузькі місця на ранніх стадіях розробки і проактивно вирішувати їх, щоб забезпечити безперебійну роботу в майбутньому.
Список можна розширити багатьма іншими пунктами – в залежності від специфіки напрямку розроблення.
Використовуючи нейромережі, девелопери можуть значно підвищити свою ефективність і продуктивність. Однак важливо пам'ятати, що ШІ сьогодні – це помічник, і людський досвід залишається вирішальним для прийняття важливих рішень, творчого розв'язання проблем і забезпечення загальної якості та бачення ПЗ.
Короткий огляд нейромережевих технологій: від глибокого навчання до штучного інтелекту
Штучний інтелект – це широке поняття, що позначає системи, здатні імітувати когнітивні функції людини: запам’ятовування, креативність, комунікація з використанням мови, вирішення задач, прийняття рішень тощо.
Однією з ключових складових ШІ є нейронні мережі, які імітують роботу людського мозку і дають комп'ютерам змогу навчатися і ухвалювати рішення на основі великих обсягів даних. Але між AI та нейромережами стоять ще 2 важливі технології – машинне навчання (МН, Machine Learning) та глибоке навчання (ГН, deep learning).
Нижче ми швидко пробіжимося ШІ, МН та ГН, а більше про нейронки ви можете почитати у нашій статті “Чи замінить штучний інтелект розробників?”.
ШІ
Штучний інтелект містить в собі технологію ML, але лише нею не обмежується. Додатково він здатен використовувати:
оброблювач мов – щоб розуміти нашу людську мову і формувати зрозумілі нам відповіді;
комп’ютерний зір – аби аналізувати, класифікувати, сегментувати, розпізнавати обличчя та предмети;
робототехніку – для виконання завдань з навігації та взаємодії з навколишнім середовищем та багато іншого.
Відомі AI-платформи: віртуальні асистенти Alexa, Siri, чат-боти ChatGPT, Gemini, Midjourney тощо.
Що таке машинне навчання?
Це підмножина ШІ, яка фокусується на розробленні алгоритмів і моделей, що дають змогу комп'ютерним системам "навчатися" на основі даних і досвіду, без явного програмування. На відміну від традиційних програм, де розробник задає явні інструкції, в МН комп'ютерна система сама "витягує" закономірності та зразки з даних, щоб зробити прогнози або прийняти рішення.
Машинне навчання використовує різні алгоритми класифікації, регресії, кластеризації, навчання з підкріпленням. Ці алгоритми дають змогу системі обробляти й аналізувати дані, знаходити приховані закономірності та будувати моделі, які можуть робити передбачення на основі нових даних.
Приклади МН: спам-фільтри в електронній пошті, рекомендації фільмів на Netflix або товарів на відвіданому вами сайті.
Глибоке навчання vs машинне навчання
Глибоке навчання – це підмножина МН, яка використовує штучні нейромережі для аналізу даних і навчання. У глибокому навчанні нейронні мережі імітують роботу людських мізків, що складаються з численних шарів нейронів. Ці нейронні мережі можуть розпізнавати складні образи, обробляти природну мову та ухвалювати рішення на основі великих обсягів даних.
Відмінність машинного навчання від deep learning полягає у здатності другого автоматично витягувати ознаки і представлення з даних. Замість ручного визначення ознак, як у традиційних методах МН, глибоке навчання використовує багатошарові нейромережі, які автоматично дістають ієрархічні ознаки з даних.
Приклади архітектур ГН включають згорткові нейронні мережі (CNN) для оброблення зображень, рекурентні нейронні мережі (RNN) для послідовних даних і трансформатори для оброблення природної мови.
Таким чином, deep learning зосереджується на використанні нейронних мереж з багатьма шарами для вивчення представлень безпосередньо з даних.
Приклади ГН: розпізнавання облич для розблокування смартфонів, системи для перекладу тексту з однієї мови на іншу.
То який можна зробити узагальнюючий висновок з цього розділу? Штучний інтелект відображає комп'ютерні системи, здатні імітувати і моделювати людське мислення та поведінку. Машинне навчання дає змогу комп'ютерним системам навчатися на основі даних і досвіду, без явного програмування. А глибоке навчання використовує штучні нейронні мережі для аналізу даних і навчання.
ТОП 10 сервісів з використанням нейромереж для розробників
Назва AI-платформи
Короткий опис
GitHub Copilot
Інструмент доповнення та прогнозування коду
CodiumAI
Інструмент тестування та підвищення якості кодування
Fathom
Розумний помічник для відеозв'язку
Scribe
Інструмент автоматизованого документування
Snyk
Інструмент пошуку та виправлення вразливостей
Codeium
Інструмент автодоповнення коду
Mintlify
Інструмент генерування документацій
Tabnine
Інструмент автозавершення коду
ChatGPT
Розумний мультизадачний помічник
Stepsize AI
Інструмент відстежування командних процесів
GitHub Copilot
GitHub Copilot – це інноваційний інструмент, що входить в ТОП сервіси на основі ШІ у багатьох рейтингах. Розроблений спільними зусиллями GitHub, OpenAI та Microsoft, аби докорінно змінити досвід кодингу для розробників. Використовуючи потужну мовну модель OpenAI Codex, GitHub Copilot дає пропозиції та доповнення коду в режимі реального часу безпосередньо у вашому середовищі розроблення.
Інтелектуальні інструменти розробки від Copilot дозволяють здійснювати аналіз даних, створювати фрагменти коду, генерувати цілі функції, коментарі, налагоджувати та виявляти проблеми безпеки.
Вартість:
Individual: 10 USD/місяць або 100 USD/рік
Business: 19 USD/місяць
Enterprise: 39 USD/місяць
Безкоштовна версія для перевірених студентів, викладачів та тих, хто веде популярні open-source репозиторії на GitHub.
Оцінки:
Capterra: 4.7 з 5 зірок (19 відгуків)
G2: 4.5 з 5 зірок (132 відгуки)
Capterra та G2 – популярні американські онлайн-платформи, що спеціалізуються на оглядах та рейтингах різного ПЗ та послуг.
CodiumAI
Codium AI – це інструмент, який відсуває програмування на другий план і більше зосереджується на тестуванні та забезпеченні якості коду. Його можливості включають:
декілька фреймворків для тестування: Jest, Mocha, Jasmine, Karma тощо;
генерування тестового плану, test cases;
детальний аналіз вашого коду;
оптимізація коду з аргументацією.
Вартість:
Developer: безкоштовно.
Teams: 19 USD/місяць.
Enterprise: індивідуально.
Оцінки:
G2: 4.9 з 5 зірок (29 відгуків).
Capterra: відсутні оцінки.
Product Hunt: 4.7 з 5 зірок (7 відгуків).
Product Hunt – платформа та онлайн-спільнота для ентузіастів, де вони діляться існуючими програмними й апаратними рішеннями, дізнаються про інновації в ІТ та надають їм свою оцінку.
Fathom
Fathom є чудовим рішенням для тих, хто прагне, щоб автоматизація збільшила продуктивність їхніх Zoom / Google Meet / Microsoft Teams зустрічей в рази. Даний AI записує ваш відеозв’язок, транскрибує бесіду в реальному часі (з таймлайн прив’язкою до відео), а як вишенька на торті – ШІ-чат для контекстних питань. Справжній digital transformation довготривалих мітингів у есенцію ключових тез! І це лише частина його можливостей.
Українська мова, на жаль, не підтримується, зате розробники та інші учасники онлайн зустрічі гарно підтягнуть англійську!
Вартість: free forever. Чому? Творці використовують Fathom для привернення уваги до інших своїх продуктів, які розширюють можливості цього AI асистента. Їхнє підключення якраз і потребує оплати (підключення опціональне).
Оцінки:
Product Hunt: 4.8 з 5 зірок (199 відгуків).
G2: 5 з 5 зірок (2370 відгуків).
Capterra: 5 з 5 зірок (289 відгуків).
Scribe
Scribe AI – це інструмент для розробників на базі ШІ для створення, управління та спрощення процесів, пов’язаних із документуванням. Серед його можливостей: автоматизація розроблення стандартних операційних процедур (SOP), мануалів, документації, захоплення ваших дій в реальному часі (на кшталт захоплення екрану) з подальшим створенням покрокових інструкцій тощо. Штучний інтелект Scribe значно полегшує допомогу в онбордингу нових працівників, пошук відповідей на запитання, підтримку клієнтів тощо.
Вартість:
Basic: безкоштовно.
Pro Personal: 23 USD/міс. (річна підписка), 29 USD/міс. (місячна).
Pro Team: 12 USD/міс. (річна підписка), 15 USD/міс. (місячна) – для команд з 5+ особами.
Enterprise: індивідуально.
Оцінки:
Product Hunt: 4.9 з 5 зірок (155 відгуків).
G2: 4.8 з 5 зірок (67 відгуків).
Capterra: 4.9 з 5 зірок (10 відгуків).
Snyk
Інструмент, який дозволяє виявляти вразливості вашого коду і виправляти їх. Snyk може також сканувати залежності і пакети, Docker-файли, інфраструктуру коду (IDE), GitHub-репозиторії тощо. Підійде для розробників, які серйозно ставляться до сучасних digital transformation трендів, кібербезпеки та захищеності програмних продуктів. Згідно з даними вебсайту Snyk.io, їхнє рішення успішно використовують ТОП сервіси AWS, Google, Atlassian, Salesforce тощо.
Вартість:
Free: безкоштовно.
Team: стартує від 25 USD за продукт/місяць, мінімум 5 розробників / 1,375 USD на рік.
Enterprise: індивідуально.
Оцінки:
G2: 4.5 з 5 зірок (118 відгуків).
Capterra: 4.7 з 5 зірок (17 відгуків).
Codeium
Творці Codeium позиціонують свій продукт як безкоштовний та потужний AI інструментарій, котрий розробники обов’язково оцінять. Він надає розширені можливості: оптимізація коду, його доповнення, пошук інформації, чат для запитань. Що цікаво, самі автори порівнюють своє рішення з GitHub Copilot і запевняють у низці переваг кодіуму:
оцінка 5 з 5 зірок у маркетплейсах VS Code та JetBrains;
безкоштовна версія для одноосібного розроблення;
дешевша підписка для командного розроблення;
більша кількість підтримуваних середовищ програмування (40+) та мов (70+);
кращі можливості для стадії розгортання ПЗ (deployment);
відповідність нормам безпеки SOC 2 Type 2.
Вартість:
Individuals: безкоштовно.
Team: 12 USD/міс. у річній підписці та 15 USD/міс. – у місячній.
Enterprise: індивідуально.
Оцінки:
G2: 4.7 з 5 зірок (менше 5 відгуків).
Product Hunt: 4.8 з 5 зірок (28 відгуків).
Mintlify
На черзі інструмент для полегшення документування процесів на базі програмування – Mintlify. Він виконує аналіз даних і дозволяє генерувати ґайди, керівництва API, SDK-документації на основі вашого коду, а також використовувати AI-чат на базі GPT-4 для аналізу та відповідей на питання за вашими текстами.
Mintlify швидко сканує код і генерує пояснювальні інструкції, що робить його ідеальним рішенням для розробників, продуктових менеджерів та support-команд, які прагнуть використати нейромережі для спрощеного написання документації та підвищити зрозумілість коду. На додачу забезпечує легку інтеграцію з GitHub, Slack та Dropbox.
Вартість:
Free: безкоштовно.
Startup: 120 USD/місяць/проєкт – річна підписка, 150 USD – місячна.
Growth: 400 USD/місяць/проєкт – річна підписка, 450 USD – місячна.
Enterprise: індивідуально.
Оцінки:
G2: 5 з 5 зірок (менше 5 відгуків).
Product Hunt: 5 з 5 зірок (6 відгуків).
Capterra: відсутні оцінки.
Tabnine
Tabnine AI Assistant – це ШІ-інструмент, котрий інтегрується у середовище розробки і слугує як Copilot: доповнює код на льоту, створює власний на основі ваших коментарів, а також надає ШІ-чат, де ви можете ставити додаткові задачі вашою рідною мовою.
Під капотом – машинне навчання для надання допомоги при написанні коду, що пропонує персоналізовані та контекстно-залежні підказки на основі мови програмування та вподобань користувача. Tabnine доступний для інтеграції у велику кількість середовищ: Visual Studio, VS Code, IntelliJ IDEA, WebStorm, PhpStorm, Sublime, Eclipse, PyCharm, Android Studio тощо.
Алгоритми машинного навчання Tabnine дають масу переваг: відносна точність, підказки щодо генерації коду та підтримка багатьох мов.
Вартість:
Basic: безкоштовно.
Pro: безкоштовно перші 90 днів, потім – 12 USD/місяць.
Enterprise: 39 USD/місяць за умови річної підписки.
Оцінки:
Capterra: 4.5 з 5 зірок (менше 5 відгуків).
G2: 4.2 з 5 зірок (37 відгуків).
ChatGPT
ChatGPT – найвідоміший інтелектуальний асистент, розроблений компанією OpenAI, який використовує штучний інтелект для цілого спектру завдань. “Чат” є одним із найкращих безкоштовних помічників у кодингу: окрім генерування коду він досить гарно пояснює його, надає додатковий контекст, хоча і може інколи оперувати некоректною інформацією без цитування джерел. Досить гарний free варіант для вивчення програмування, мови запитів даних, big data тощо.
Також ChatGPT у вигляді мобільного застосунку доступний на iOS та Android.
Вартість:
Free – безкоштовно (використовується велика мовна модель GPT 3.5).
Plus – 20 USD/міс. (більш досконала GPT 4).
Team – 25 USD/міс. при оплаті за рік, 30 USD/міс. при оплаті щомісяця.
Enterprise – індивідуальний рахунок.
Оцінки:
Capterra: 4.6 з 5 зірок (42 відгуки).
G2: 4.7 з 5 зірок (479 відгуків).
Product Hunt: 4.7 з 5 зірок (538 відгуків).
Stepsize AI
Якщо у фокусі попередніх продуктів автоматизація коду, то штучний інтелект Stepsize AI націлений на задачі масштабу команди. Це система, яка забезпечує інженерні та продуктові команди розумним відстежуванням оновлень.
Вона трекає активності та оновлення у вашому відділі розробки і вчасно надає найважливішу інформацію кожному члену групи. Містить метрику з графіками, діаграмами та автоматичним коментуванням, дозволяє побачити прогрес команди, легко інтегрується з GitHub, Slack, Jira тощо. Даний інструмент створено для команд, які хочуть мати звітність про всі процеси з мінімумом нервів та непотрібних мітингів.
Також Stepsize має ще один продукт – Stepsize Technical Debt, який здатен відстежувати та виправляти технічний борг. Це дозволяє зекономити гроші та час, які розробники витратили б на bug fixes, простої, опрацювання клієнтських запитів у відділ підтримки і т. п.
Вартість Stepsize AI:
Team – 29 USD/міс. за Jira-дошку або команду Linear.
Tailored Setup (встановлення під ваші особисті запити) – 29 USD/міс. за Jira-дошку або команду Linear.
2 безкоштовні тижні для кожного плану.
Вартість Stepsize Technical Debt:
Free – безкоштовно.
Team – 19 USD/міс. (річна підписка).
Business – 49 USD/міс. (річна підписка).
Enterprise – індивідуально.
Оцінки:
Product Hunt: 5 з 5 зірок (18 відгуків).
Як вибрати відповідний сервіс: поради та рекомендації
Обираючи інструменти розробки на базі ШІ ви маєте орієнтуватися на власні запити. Наприклад, ви маєте вирішити:
яка мета використання AI-платформи;
які задачі AI має покривати;
який функціонал безкоштовної версії (якщо така є) і наскільки він покриває ваші потреби;
наскільки функціонал платної версії вас задовольняє та скільки ви готові заплатити;
інтегрованість із важливими для вас інструментами;
скільки уваги приділяється захисту вашого коду, особистих даних, які політики безпеки використовуються тощо;
наскільки AI масштабований та гнучкий: чи зможе він ефективно виконувати задачі при розростанні вашого продукту, інтегрувати хмарні обчислення тощо;
підтримка постачальника AI-сервісу та вичерпність документації для роботи з AI.
Обрати ТОП сервіси вам також допоможуть наступні джерела інформації:
YouTube-огляди. Це найшвидший спосіб знайомства з головним функціоналом ШІ. Він є поверхневим, але достатнім, аби скласти перше враження, дізнатися основні плюси-мінуси та зрозуміти, чи є сенс занурюватися у вподобаний інструмент надалі.
LinkedIn та інші професійні соціальні мережі. Підпишіться на авторитетних діячів / спеціалізовані групи за напрямком вашої діяльності у лінкедині та/або іншій професійній мережі і слідкуйте за їхніми постами. Такі люди/спільноти завжди оглядають інновації в ІТ і можуть робити тематичні дослідження щодо AI, надати корисні інсайти стосовно найкращих сервісів, розповісти про власні історії успіху тощо.
Поради та досвід знайомих розробників. Зверніться за рекомендаціями та думками до колег або спільноти розробників, які мають досвід роботи з різними сервісами ШІ. Таким чином ви отримаєте корисну інформацію з перших вуст, яка пройшла горнило практики, і збережете свій час, нерви та інші ресурси.
Форуми з відгуками. Перевірте рейтинги AI та відгуки користувачів, які вже спробували ТОП сервіси і дослідили алгоритми машинного навчання: які переваги/недоліки вони відзначають, чого їм не вистачає, які рекомендації щодо покращення користувацького досвіду вони пропонують тощо. До прикладу, в даній статті ми використовували рейтинги Product Hunt, G2, Capterra.
Пробний період / демо-версія. Можливість безкоштовно пограти з ШІ-сервісом може бути ключовою у прийнятті рішення. Якщо після попередніх 4 пунктів ви досі сумніваєтеся в інструменті – спробуйте trial-версію і розставте всі крапки над “і”.
Висновок: майбутнє нейромереж у розробці
Наш світ зазнає разючих змін під впливом ШІ – і це факт. Вказані у статті сервіси виводять продуктивність розробників на новий рівень, але і ці інструменти вже мають десятки – якщо не сотні – ефективних аналогів, – обирайте на ваш смак. Нейронки, глибоке та машинне навчання тільки посилюватимуть свою роль, тому питання про майбутнє професії “розробник” починає турбувати все більшу кількість девелоперів.
То що ж робити?
Вивчайте AI-платформи, використовуйте їхню магію для автоматизації рутини та бусту вашої ефективності. Розвивайте ту експертизу, яка штучному інтелектові наразі недосяжна. Зазвичай це комплексні, креативні, системні знання та навички, що знаходяться на сплетінні кількох сфер – унікальний досвід, котрий роботам не по зубам.
Слідкуйте за новинами зі світу ШІ, за нашими оновленнями в блозі і розвивайте навички швидкої адаптації. Світ змінюється з неймовірною швидкістю і найкращі місця дістануться тим розробникам, котрі вміють ловити хвилі та швидко пристосовуватися до змін в ІТ.
Чи замінить штучний інтелект розробників?
Автор: Влад Сверчков
Що таке ШІ?
Визначення та типи
Використання ШІ в ІТ
Нейронні мережі
Людський мозок vs Штучний інтелект
Український ринок ІТ після буму AI
Чи варто боятися розробникам: що думає про це сам штучний інтелект?
Майбутнє співробітництва ШІ та людини
Висновки
Сучасний технологічний ландшафт зазнає змін з неймовірною швидкістю, і штучний інтелект (ШІ, AI) сьогодні є одним з його Еверестів. Він вже допомагає нам в автоматизації різних завдань і процесів: спрощує написання текстів та програмного коду, генерує зображення та відеоряди, консультує нас із різних запитань, допомагає вчити іноземні мови.
Як відомо, більшість гір виникають на місці зіткнень тектонічних плит під супровід землетрусів – схожий процес маємо і з активним розвитком ШІ. Людство розділилося на два великі табори: перші захоплено спостерігають за процесом утворення технологічних Гімалаїв, а другі пророкують ряд катастроф – однією з найстрашніших вказують можливе безробіття, особливо серед розробників.
ITVDN – це освітня онлайн платформа для вивчення програмування та ІТ, тому ми не могли пройти осторонь теми перспективності професії розробника. Пропонуємо поринути в неї і разом розібратися, чия літосферна плита буде зверху та хто візьме гору в цій боротьбі – програмісти чи штучний інтелект?
Що таке ШІ?
Визначення та типи
Штучний інтелект означає здатність машин імітувати людські когнітивні функції, такі як навчання, вирішення проблем і прийняття рішень. Він охоплює широкий спектр технологій і застосунків, що дозволяють машинам виконувати завдання, які зазвичай вимагають людського інтелекту, як-от візуальне сприйняття, розпізнавання мови, прийняття рішень і мовний переклад.
Відповідно до відеоролику “The 7 Types of AI” з офіційного YouTube-каналу IBM Technology (IBM – один із найбільших в світі провайдерів ІТ-інфраструктури, ПЗ та консультаційних послуг), AI має щонайменше 7 типів, але реалізацію мають лише три з них.
Назва
Короткий опис
Artificial Narrow Intelligence або вузький AI (слабкий AI)
Призначений для виконання конкретного завдання або вузького кола завдань. Серед прикладів – сучасні сервіси Alexa, Siri, Cortana тощо.
Artificial General Intelligence або загальний AI (сильний AI)
Здатен розуміти, навчатися і застосовувати знання в широкому спектрі завдань – подібно до людини. Цей рівень ШІ все ще залишається здебільшого теоретичним і наразі існує хіба що в науковій фантастиці.
Artificial Super Intelligence або штучний суперінтелект
Гіпотетичний рівень ШІ, перевершує людський інтелект у всіх відношеннях і здатний перевершити найкращі людські розуми в кожній галузі.
Reactive Machines або реактивні машини
Штучний інтелект найпростішого типу, не має здатності формувати пам'ять або використовувати минулий досвід для прийняття обґрунтованих рішень. Працює виключно на основі поточних даних і не враховує контекст. Як приклад – Deep Blue від IBM, який може грати в шахи на рівні гросмейстера і прораховувати усі можливі сценарії.
Limited memory або обмежена пам’ять
На відміну від реактивних машин, ШІ з обмеженою пам'яттю може звертатися до минулого досвіду для прийняття рішень. Він може зберігати і згадувати попередні дані, що дозволяє йому адаптуватися до ситуації і відповідним чином реагувати. Приклади: самокеровані автомобілі, системи рекомендацій, спам-фільтри, чат-боти, пристрої розумного будинку тощо.
Theory of Mind або теорія розуму
Головна мета – зрозуміти і передбачити поведінку, емоції, відчуття людини, аби потім надати персоналізовані послуги. Цей тип ШІ враховує, що люди мають різні переконання, бажання та перспективи. Наразі Theory of Mind перебуває на стадії досліджень і розробок
Self-aware AI або самосвідомий ШІ
“Найстрашніший” вид штучного інтелекту, майбутнє ШІ, яке йому так пророкують. Володіє свідомістю і почуттям власної гідності. Він розуміє власне існування, емоції та процеси мислення, має власні потреби. Однак досягнення самосвідомості штучних систем все ще лежить в суто теоретичній площині.
Reactive Machines та Limited memory відносяться до Narrow AI, Theory of Mind – до General AI, а Self-aware – до суперінтелекту.
Використання ШІ в ІТ
В 2024 році штучний інтелект продовжує стрімко трансформувати різні сфери ІТ – ось декілька прикладів:
1. Кібербезпека
“Розумні” системи аналізують величезні потоки даних для проактивного виявлення загроз та їх мінімізації, вивчають моделі поведінки користувачів і позначають підозрілі дії, аналізують фінансові транзакції, допомагають у створенні звітів тощо.
2. DevOps і хмарні обчислення
ШІ автоматизує такі завдання, як виділення ресурсів, управління конфігурацією і масштабуванням, аналізує дані щодо продуктивності системи і пропонує оптимізацію для використання ресурсів і скорочення витрат. Також системи з інтелектом автоматично виявляють і усувають проблеми в хмарній інфраструктурі, підвищуючи відмовостійкість і час безвідмовної роботи системи.
3. Розроблення програмного забезпечення
Технологічні інновації в галузі AI дозволяють генерувати, рефакторити та пояснювати код для розробників, виявляти потенційні помилки, автоматизувати процеси тестування, прискорюючи розроблення, автоматично доповнювати код в реальному часі тощо.
4. Тестування і забезпечення якості
Інструменти тестування на основі ШІ здатні проводити аналіз коду, виявляти вразливості, вивчати результати попередніх тестів, автоматично генерувати тест-кейси тощо.
5. Управління даними та аналітика
Автоматизація завдань з опрацювання даних, виявлення та виправлення помилок, підготовка даних до аналізу, інтелектуальний аналіз даних, генерування звітів та презентацій, виявлення прихованих закономірностей, прогнозування майбутніх тенденцій та результатів, асистенція під час стратегічного планування та розподілу ресурсів – і це тільки загальні точки, в яких штучний інтелект впливає на домени Big Data, Data Science тощо.
6. Управління мережею
Машинний інтелект виявляє незвичайні шаблони мережевого трафіку, щоб запобігти кібератакам та/або перебоям у роботі мережі. Також він аналізує мережеві дані та автоматично налаштовує конфігурації для оптимальної продуктивності та використання ресурсів, прогнозує тенденції мережевого трафіку і динамічно розподіляє ресурси, щоб забезпечити безперебійну роботу і уникнути появи вузьких місць (так званих “bottlenecks”).
7. Управління ІТ-сервісами (ITSM)
Людино-машинна взаємодія із залученням ботів на основі ШІ сприяє автоматизації рутинних завдань як-от скидання паролів і вирішення інцидентів, зменшуючи навантаження на службу підтримки та підвищуючи її ефективність. Також ці системи аналізують дані ІТ-інфраструктури, щоб прогнозувати потенційні збої, вживати превентивні заходи, мінімізувати час простою, діагностувати першопричини проблем і пропонувати рішення, оптимізуючи процеси усунення несправностей.
І це тільки частина тих сфер, де штучний інтелект вже використовується і активно розвивається. До них можна додати:
ІТ-менеджмент;
інтернет речей (IoT) і робототехніка загалом (як цивільна, так і військова);
розроблення на основі NLP: віртуальні асистенти, чат-боти, інтерфейси, що активуються голосом;
електронна комерція: рекомендаційні, аналітичні системи;
віртуальна реальність, комп’ютерні ігри тощо.
Виходить, під загрозою “вимирання” не тільки розроблення, а й інші ІТ-галузі.
Нейронні мережі
Нейронна мережа – важливий фундамент в розумінні штучного інтелекту. Хоча це популярний та ефективний метод побудови штучних систем, існують й інші методи, наприклад системи на основі правил, дерева рішень, генетичні алгоритми, машини опорних векторів тощо. Ці методи часто використовують у поєднанні з нейромережами для створення більш складних інтелектуальних систем.
То яким чином нейронки пов’язані з розумними машинами?
Нейронні мережі складають кістяк алгоритмів глибокого навчання (Deep Learning, DL), глибоке навчання є підмножиною машинного навчання (Machine Learning, ML), а машинне становить підмножину AI. Окрім ML штучні системи можуть включати в себе оброблення природної мови (NLP), комп’ютерний зір, рух, озвучування тексту тощо. Картинка вище візуалізує ці моменти для кращого розуміння.
Якщо приклади AI навести досить просто (ChatGPT, Midjourney, GitHub Copilot і т. д.), то де в житті ми напряму зіштовхувалися з іншими трьома складовими? Ось деякі з них:
нейромережа може гарно розпізнавати голос, об’єкти на зображеннях та відео тощо;
Google Translate – яскравий приклад DL;
коли ви зайшли в інтернет-магазин, подивилися щось, а згодом отримали пропозиції з товарами, які “можуть вам сподобатися” – постаралося машинне навчання.
За своєю будовою штучні нейронні мережі дуже нагадують ті, що знаходяться в нашому мозку, але насправді навіть один людський нейрон більше нагадує велетенську нейромережу.
З чого складається типова нейронна мережа:
На картинці зображено глибоку нейромережу – це мережа, яка має більше трьох прихованих шарів (hidden layers) включно з вхідним (input) та вихідним (output). Якщо шари всього 3, маємо справу з найпростішою нейромережею. До речі, картинку вище можна розглядати як алгоритм глибокого навчання.
Зі схематичним зображенням познайомилися, а тепер нас цікавить робота нейронної мережі.
Кожен шар нейромережі складається з вузлів – штучних нейронів. Кожен вузол з'єднаний з нейронами наступного шару, причому кожен має свою вагу та поріг. На вхід вузла надходить певне значення, яке зазнає впливу ваги, і якщо потім це значення перевищує поріг, даний вузол “активується” за допомогою активаційної функції, і результуючі дані надсилаються до наступного шару мережі. Якщо вихідне значення вузла нижче за поріг, до наступного вузла воно не потрапляє.
Навчальні дані допомагають навчати нейронну мережу та покращувати її точність із часом. Коли алгоритми навчання якісно налаштовані, вони стають міцним фундаментом ШІ, оскільки можуть дуже швидко класифікувати та кластеризувати дані – це дозволяє суттєво прискорити різні операції. Класифікація нейронних мереж з прикладами реалізації тут наводитися не буде, але відмітимо пошуковий алгоритм Google – це, напевно, найвідоміша реалізація нейронки; саме завдяки їй пошуковик настільки швидкий та ефективний.
Людський мозок vs Штучний інтелект
Переваги мозку
Головний командний центр людини має низку сильних сторін, яким поки поступаються розумні системи:
Креативність та адаптивність. Мозок чудово генерує нові ідеї, вирішує проблеми нестандартними способами та адаптується до непередбачуваних ситуацій, в той час як ШІ та творчість – пара, яка потребує відпрацювання багатьох “па”.
Потужний інтелектуальний спектр. Під владою наших півкуль знаходяться складні міркування, абстрагування, емоційний інтелект тощо.
Когнітивна гнучкість та інтуїція. Люди можуть переносити досвід з інших сфер життя для адаптації до нових умов та вирішення нових проблем, з якими вони не стикалися, приймати судження та рішення на основі неповної інформації та інтуїції, з чим нейромережі мають проблеми.
Стійкість до “шуму” вхідних даних. Людський мозок легко проходить повз викривлення або невеликі збурення у вхідних даних, які в розумних системах можуть призвести до значних помилок або неправильних класифікацій.
Емоції та етичність. Етика в ШІ недостатньо розвинена: комп’ютери не настільки гарно працюють з людськими емоціями, емпатією та моральними нормами, в той час як для людини ці речі є фундаментально важливими та визначальними у прийнятті рішень.
Eco-friendly 💚 Людський мозок споживає до 20 Вт, що робить нас значно енергоефективнішими за штучні технології, які споживають великі об’єми електроенергії (особливо на етапі навчання) і не можуть існувати без живлення.
Переваги штучного інтелекту
Наші цифрові візаві також мають чим похизуватися:
Швидкість, об’ємність та ефективність. Машинне навчання дозволяє обробляти величезні обсяги даних, швидко аналізувати, робити висновки і виконувати конкретні завдання в рази швидше людини.
Розпізнавання та аналіз шаблонів. Штучні нейронні мережі чудово розпізнають закономірності та складні взаємозв'язки в даних, допомагаючи в таких завданнях, як розпізнавання зображень, переклад текстів і т. д.
Масштабованість і автоматизація. Системи штучного інтелекту можна масштабувати й автоматизувати, що дозволяє їм оперативно справлятися з великими робочими навантаженнями і репетативними задачами.
Налаштування та оптимізація. Алгоритми ШІ можна навчати і вдосконалювати під конкретні завдання, досягаючи високого рівня точності і результативності.
Доступність 24/7. Системи AI можуть працювати цілодобово, забезпечуючи безперебійне обслуговування, наприклад постійний моніторинг стану інфраструктури, відеоспостереження, регулювання температури в приміщенні тощо.
Відсутність деяких людських вад. Штучний інтелект не може забути про задачу, розлінитися, проспати, захворіти, мати похмілля, злякатися, бути не в настрої або просто не любити вас. Звісно, ніхто не застрахований від зникнення живлення, хакерських атак, проблем з програмно-апаратною начинкою абощо, але в плані працездатності, доступності і надійності комп’ютерні системи значно краще себе проявляють, ніж людина.
Зниження ризиків. ШІ можна застосовувати в умовах підвищеного ризику та небезпеки. Наприклад, роботи зі штучним інтелектом можуть виконувати небезпечні завдання на виробництві, брати участь у пошуково-рятувальних місіях і під час ліквідації наслідків стихійних лих, мінімізуючи загрозу для людей.
Український ринок ІТ після буму AI
Яким розробники бачать майбутнє ШІ?
Ще в 2017 році дослідники з Oak Ridge National Laboratory – американської лабораторії, яка займається науковою діяльністю і фінансується Міністерством енергетики США – опублікували статтю, в якій припускають, що до 2040 року більшість програмного коду будуть писати саме машини, і це радикально вплине на створення ПЗ як таке.
А зовсім нещодавно – 12-14 лютого 2024 року – на Всесвітньому урядовому саміті в Дубаї обговорювався штучний інтелект, і CEO компанії NVIDIA Дженсен Хуанг сказав, що якщо останні 10-15 років радили вчити програмування та комп’ютерні науки, то зараз ці поради неактуальні, адже ШІ перетворює кожну людину в програміста і дає можливість прокачати свої навички та суттєво підвищити продуктивність в інших затребуваних сферах, наприклад у цифровій біології, навчанні, виробництві, фермерстві тощо.
Також він додав, що якби міг почати все з початку, то фокусувався б на такому напрямку, як наука про життя (біонаука, цифрова біологія, біоінженерія), оскільки це надважлива комплексна галузь, розвиток якої в поєднанні з потужністю ШІ дозволить оптимізувати багато процесів, в тому числі пов’язані зі сталим розвитком.
Сучасні технологічні інновації дозволяють активно використовувати AI рішення, хоч і без ідеального результату. Давайте подивимось, як змінився ландшафт українського ІТ-ринку після “буму” ChatGPT та появи інших “штучних” гравців.
А зробимо ми це за допомогою аналітики від DOU – спільноти українських розробників. Точкою відліку візьмемо лютий 2023 року, коли “чат” став офіційно доступним в Україні і зникли блекаути.
Цьогоріч у лютому опубліковано аналітику, відповідно до якої кількість вакансій на DOU станом на січень 2024 року складає 5057. В лютому 2023 року ця цифра становила 3489, себто приріст на рівні 45%. Пам’ятаємо, що на минулорічну статистику могли вплинути блекаути, але в тому ж лютому енергетична ситуація почала значно покращуватися.
Порівняємо кількість технічних вакансій у лютому 2023 та в січні 2024 року:
Напрямок
Лютий 2023
Січень 2024
Java
138
119
QA
177
236
.NET
112
149
Front End
196
214
Android
44
36
Python
115
178
Node.js
107
153
PHP
141
177
DevOps
160
166
AI/ML
11
40
Big Data
19
18
Data Engineer
22
63
Data Science
29
58
React Native
25
33
Ruby
19
23
iOS/macOS
40
43
Як бачимо, в переважній більшості напрямків кількість вакансій зросла після того, як штучний інтелект вийшов на глобальний ринок, а в інших спостерігаємо несуттєве зменшення.
Яка ситуація на ринку початківців (0-3 роки досвіду)?
В усіх трьох категоріях маємо помітне зростання.
Що думає про це сам штучний інтелект?
Давайте послухаємо аргументи ШІ щодо того, чи зможуть нейромережі замінити розробників і зайняти їхнє місце.
ChatGPT
Відповідь ChatGPT версії 3.5:
“Розробники програмного забезпечення незамінні завдяки низці переваг:
Творче вирішення проблем: розробники застосовують креативне мислення для вирішення складних проблем, пропонуючи унікальні та ефективні розв’язки.
Навички критичного мислення: вони досягають успіху в розбитті складних проблем, їх аналізі та розробці ефективних рішень.
Адаптивність і здатність до навчання: розробники йдуть в ногу з часом, швидко адаптуючись до нових технологій та вивчаючи нові мови програмування, що дозволяє їм залишатися конкурентоспроможними в постійно мінливому середовищі розробки ПЗ.
Співпраця та комунікація: ефективна співпраця та комунікація дозволяють розробникам гармонійно співпрацювати з міжфункціональними командами, включаючи дизайнерів, Product менеджерів та тестувальників.
Етичні міркування: розробники повинні враховувати етичні аспекти у своїй роботі, забезпечуючи відповідність своїх творінь суспільним цінностям і нормам.
По суті, хоча ШІ може провести інтелектуальний аналіз даних та автоматизувати певні завдання, унікальне поєднання креативності, критичного мислення, адаптивності, співпраці та етичних міркувань розробників залишається незамінним для грамотного програмування та інших процесів розробки ПЗ”.
Gemini (Bard)
“Хоча я, Бард, велика мовна модель, володію вражаючими можливостями в розумінні та генеруванні тексту, повністю замінити розробників – це занадто, принаймні поки що. Ось чому:
Творчість та вирішення проблем. Хоча я можу писати рядки коду як програмісти, справжні інновації виникають завдяки здатності людського розуму уявляти унікальні рішення, що виходять за рамки усталених шаблонів.
Глибока експертиза в галузі. Хоча я маю доступ до величезного обсягу інформації та можу її обробляти, глибоке розуміння та контекст, якого розробники набувають завдяки багаторічному досвіду роботи в конкретних галузях, є незамінними.
Людські судження та етика в ШІ. Розробники привносять в роботу безцінні людські судження та етичні міркування, гарантуючи, що їхні творіння відповідають принципам відповідального використання. Орієнтування в етичних дилемах залишається поза межами сучасного ШІ.
Комунікація та співпраця. Розробка ПЗ процвітає завдяки командній роботі та ефективній комунікації. Хоча я можу обробляти інформацію та реагувати на неї, мені бракує навичок ефективної співпраці з різними командами, генерування ідей та орієнтації в складнощах людської взаємодії.
Адаптивність та здатність до навчання. Технологічні інновації носять досить динамічний характер, а розробники вміють постійно вчитися та опановувати нові технології. Хоча я також це можу, я обмежений в своїх параметрів, і моя здатність до навчання поступається людям-розробникам.
Майбутня співпраця, а не заміна.
Я уявляю собі майбутнє, в якому машинний розум розширює можливості розробників, слугуючи потужним інструментом для вирішення повторюваних завдань: автоматизація коду, пропозиції щодо його покращення та розширення, інші можливості для вирішення проблем. Ця співпраця відкриє шлях до більших інновацій та ефективності у сфері розробки ПЗ”.
Perplexity
Відповідь великої мовної моделі – розмовного пошуковика від Perplexity AI:
“Вплив штучного інтелекту на розробку ПЗ є безперечно трансформаційним, але він не може замінити унікальний людський підхід, який стимулює інновації та творчість. Штучний інтелект чудово справляється з автоматизацією повторюваних завдань, покращує якість коду та пропонує оптимізації. Однак йому бракує здатності мислити нестандартно, уявляти нові концепції чи розуміти нюанси складних систем.
Обмеження розумних систем полягають у їхній нездатності до справжньої творчості, яка є відмінною рисою розробників-людей. Вони навчаються на наявних даних, і хоча можуть генерувати код на основі шаблонів, але не можуть впроваджувати інновації чи створювати щось абсолютно нове.
В осяжному майбутньому програмісти будуть доповнені, а не замінені на ШІ. Він допоможе їм зосередитися на більш складних завданнях, підвищити ефективність і зменшити кількість помилок. У міру розвитку інтелектуальних машин розробникам потрібно буде адаптуватися і опановувати нові навички, щоб працювати разом з цими потужними інструментами.
Майбутнє розробки ПЗ – це людино-машинна взаємодія, симбіоз людини та AI, де другий розширює людські можливості, а розробники-люди продовжують стимулювати інновації”.
А довіряти цим відповідям, чи ні – вирішуйте самі, шановні читачі. Можливо, штучний інтелект вже зараз приховує від нас якісь плани і спеціально присипляє нашу увагу, аби в найбільш вдалий момент зробити з нас щось на кшталт сервісного персоналу або домашніх улюбленців?
Майбутнє співробітництва ШІ та людини
Сучасна людино-машинна взаємодія постає у вигляді ефективної кооперації, що спрощує рутинні задачі та оптимізує багато процесів, пов’язаних з ІТ, починаючи з інтерпретації, генерації та рефакторингу коду і закінчуючи повноцінними AI інструментами під кожну спеціальність.
Важко спрогнозувати точний рівень загрозливості штучних систем айтішним професіям у майбутньому, але зараз це корисний інструмент, який програмісти мають вивчати, аби з легкістю обходити рутину і більше часу приділяти дійсно важливим процесам.
Іншими словами, сучасні ШІ – це наші помічники, і в найближчому майбутньому вони не замінять нас, а органічно доповнять і переформатують наші ролі. Та хто знає, як буде в більш далекій перспективі.
Цілком ймовірно, що позиції розробників рівня Intern-Junior будуть зазнавати найбільших видозмін, оскільки робота нейронної мережі досить непогано заточена під генерування коду для нескладних задач. Але не забуваймо, що результат їхньої роботи все ще далекий від ідеалу.
Висновки
То чи замінить штучний інтелект розробників?
Вище ми проаналізували ситуацію на українському ринку ІТ, і зараз натяків на те, що програмісти залишатися без роботи, немає. Штучні системи поки що займають роль асистентів і спрощують рутинну та/або часовитратну роботу: написати шматок коду або частину документації, нагадати функціонал певного методу, дати пораду або пояснити код, провести його рефакторинг тощо.
Найрозумніший крок в даних умовах – вивчати AI. Навіть якщо деякі професії почнуть зникати, то досвідчені фахівці, котрі вміють делегувати рутину нейронкам і розробляти комплексні рішення, точно не залишаться осторонь. Тому фокусуйтеся на складних та креативних рішеннях, які нейромережа не осилить, масштабуйте знання та навички, отримуйте унікальний досвід, завжди слідкуйте за новинами світу ШІ, а також будьте відкриті до нових технологій та вмінь.
Бажаємо вам успіхів у розробці та вивченні AI інструментів! Ваші думки щодо майбутнього штучного інтелекту та його впливу на розробників пишіть у коментарях
Що повинен знати FrontEnd розробник у 2024 році
Автор: Влад Сверчков
Основні технології.
Фреймворки та допоміжні інструменти.
Необов’язкові технології.
Зарплати FrontEnd розробників.
DOU.
Djinni.
Stack Overflow Developer Survey 2023.
Чому так багато технологій? Поради новачкам FrontEnd.
Підсумки.
FrontEnd – один із найлегших розробницьких напрямків в ІТ. Він вигідно вирізняється тим, що поєднує в собі програмування та творчість, оскільки девелопер працює над оживленням дизайнерського макету та створенням відповідної користувацької логіки. Також перевагою фронтенду є те, що побачити результат своєї роботи можна майже одразу – в будь-якому браузері.
Відносна легкість фронтенду породжує велику популярність серед бажаючих потрапити в ІТ, а враховуючи наслідки відкритої агресії по відношенню до України – особливо велику популярність, адже це можливість працювати віддалено (на ІТ-компанію або на фрилансі) і отримувати гарну зарплату. Відповідно, конкуренція серед Trainee/Junior FrontEnd розробників шалена, а тому роботодавці вимушені закручувати гайки і підвищувати вимоги до кандидатів, аби відібрати найкращих.
Тож як стати фронтенд розробником? Якими технологіями необхідно володіти, аби стати Intern/Junior FrontEnd розробником у 2024 році? Проаналізувавши вакансії на українському ринку IT, ми склали список актуальних інструментів, які зазвичай вимагають роботодавці від кандидатів. Їхній перелік – нижче у статті.
Frontend developer roadmap. Основні технології
HTML5 & CSS3
HTML5 і CSS3 – це фундаментальні технології, без знання яких не обійтися жодному веброзробнику. За допомогою мови гіпертекстової розмітки HTML створюється розмітка (каркас) кожної вебсторінки. Потім мова стилів CSS збагачує візуальне оформлення сайту і надає йому привабливого та ефектного зовнішнього вигляду. Крім цього, необхідно володіти:
кросбраузерним адаптивним верстанням, щоб вміти створювати сайти під мобільні пристрої, планшети і широкоформатні екрани та для різних браузерів;
семантичним верстанням для підвищення якості розмітки та покращення пошукової індексації сайту;
валідним верстанням, яке передбачає повну відповідність коду розробника всім стандартам W3C – організації, яка створює та впроваджує технологічні стандарти для World Wide Web.
Приділіть особливу увагу верстанню під мобільні пристрої, тому що сучасний вебспоживач дуже багато часу проводить у смартфоні. Існує навіть спеціальний підхід, при якому спочатку верстається вебсайт під мобільні пристрої, а потім під десктопи – називається Mobile First.
Це загальні вимоги щодо верстання. Тепер розглянемо більш детально вимоги безпосередньо щодо мови стилів – CSS. Тут ви повинні знати основні властивості CSS3: фони, градієнти, тіні, анімації, трансформації, переходи, а також технології Flex та Grid, про які ми ще поговоримо.
Гарне володіння HTML та CSS вже дозволяє займатися верстанням сайтів та заробляти гроші. Саме з цих двох базових технологій починається шлях до професії FrontEnd розробника.
Якісно вивчити HTML та CSS ви зможете за допомогою наступних наших курсів:
HTML5 & CSS3 Стартовий;
HTML5 & CSS3 Базовий;
HTML5 & CSS3 Поглиблений.
Flex та Grid CSS
Технології верстання надійних адаптивних вебсторінок, які дозволяють легше створювати динамічні сайти та зручніше структурувати їх вміст. На нашому ресурсі є українськомовні відео курси, які гарно пояснюють теми Flex та Grid верстання: CSS Flexbox та Верстання на Grid.
CSS-препроцесори
CSS-препроцесор — це програма, яка має власний синтаксис, але може згенерувати з нього CSS-код. Найчастіше у вакансіях зустрічаються SASS, SCSS, Stylus, LESS. Препроцесори призначені для:
прискорення процесу написання коду;
спрощення читання коду та його подальшої підтримки;
мінімізації рутинної роботи під час написання коду.
Для підвищення ефективності написання CSS-коду достатнім буде вивчення лише одного препроцесора, але у вакансіях часто зустрічаються одразу декілька.
Git & GitHub
Git – найбільш популярна система контролю версій, яка дозволяє вести історію розроблення проєкту з можливістю доступу до кожної збереженої версії.
Крім того, варто вміти працювати з сервісом онлайн-хостингу проєктів, який використовує систему контролю версій. У даному випадку це GitHub. У тандемі з Git він дозволяє розробникам зберігати свій код онлайн у хмарному сховищі, а потім взаємодіяти з іншими розробниками у різних проєктах.
Дані системи дозволяють команді програмістів працювати над одним проєктом одночасно, зберігаючи внесені зміни, і навіть відслідковувати виконання завдань кожним членом групи.
Git & GitHub — дуже важливі інструменти для будь-якого IT-розробника, вивченням яких слід зайнятися якомога раніше.
Ми рекомендуємо вивчати Git на ITVDN за допомогою курсу «Основи роботи з Git».
Знання про вебтехнології та мережу інтернет
Щоб якісно виконувати свою роботу, фронтенд розробник повинен розбиратися у вебі і розуміти принципи його функціонування. Таким чином, необхідно знати:
як працює інтернет;
протоколи HTTP/HTTPS, вебсокети;
як працюють браузери;
що таке DNS та як він працює;
що таке доменне ім'я;
що таке хостинг.
Також буде непогано, якщо ви спробуєте налаштувати сайт на якомусь безкоштовному хостингу, прив'яжете домен до цього хостингу.
JavaScript
Мова програмування, яка використовується як при розробленні клієнтської сторони веб-застосунку, так і серверної. За допомогою JavaScript (скорочено JS) можна писати навіть настільні та мобільні додатки, використовуючи певні програмні платформи та бібліотеки. Ця мова дозволяє:
динамічно змінювати HTML-розмітку;
здійснювати інтерактивну взаємодію з користувачем;
анімувати зображення;
здійснювати валідацію форм;
керувати мультимедіа тощо.
Іншими словами, JavaScript "оживлює" сторінку та додає їй функціональності. Гарне володіння цією мовою програмування є обов'язковим пунктом для кожного FrontEnd розробника.
JavaScript використовує офіційний стандарт ECMAScript (скорочено - ES), який має на увазі певний формальний опис синтаксису, базових об'єктів та алгоритмів. На даний момент існує багато різних версій ES. Роботодавці найчастіше вимагають знання ES6+.
Однак спочатку необхідно вивчити чистий JavaScript (vanilla JavaScript) і лише потім вникати в нові стандарти. Як не крути, а класику треба знати. Завдяки гарному володінню JS можна швидко розібратися в будь-якій версії ES, а потім опанувати будь-який фреймворк або бібліотеку.
ITVDN надає можливість вивчити JavaScript з нуля до поглибленого рівня за допомогою курсів:
JavaScript Стартовий;
JavaScript Базовий.
JavaScript Core (DOM, AJAX, JSON)
DOM (Document Object Model) – об'єктне представлення вихідного HTML-документу. Ключовим є поняття DOM-дерева, яке описує структуру сторінки. За допомогою об'єктної моделі JavaScript отримує повну владу над HTML-документом: можливість редагувати, видаляти та додавати елементи і атрибути HTML, змінювати CSS-код тощо.
AJAX (Asynchronous JavaScript And XML) – це синтез технологій JavaScript і XML, який фактично являє собою комбінацію:
вбудованого в браузер XMLHttpRequest-об'єкту (щоб запитувати дані з вебсервера);
JavaScript та HTML DOM (щоб відображати або використовувати дані).
AJAX дозволяє вебсторінкам здійснювати асинхронне оновлення, обмінюючись даними з вебсервером. Завдяки цій технології сторінка не потребує перезавантаження – оновлюється лише конкретна її частина (згадайте стрічку новин у соціальних мережах).
JSON (JavaScript Object Notation) – це загальний формат обміну даними. Дозволяє здійснювати обмін інформацією між програмними продуктами, котрі написані різними мовами. Таким чином, клієнт, який використовує JavaScript, може легко передавати дані на сервер, реалізований за допомогою Ruby/Java/PHP.
Всі три технології мають особливу цінність для кожного веброзробника та розкривають організацію роботи інтернет-застосунку.
REST API
API – Application Programming Interface – це набір правил, при дотриманні яких програми можуть між собою взаємодіяти. Розробник створює API на сервері та дозволяє клієнтам звертатися до нього.
Красномовним прикладом буде API від Google Maps, котрий дозволяє веброзробнику вказати на гугл мапі розташування певної будівлі (точку видачі інтернет-замовлень, офіс компанії абощо) на своєму сайті. Таким чином програміст позбавляє себе необхідності самому розробляти власну мапу і користується вже готовим рішенням від Google, використовуючи набір правил від API.
REST – Representational State Transfer – це архітектурний підхід, котрий регламентує, як саме API мають виглядати. Цьому набору правил має слідувати девелопер під час створення власного застосунку. Простими словами, REST – це звичайний запит виду «клієнт-сервер» з використанням HTTP-протоколу.
Фронтенд розробнику необхідно розбиратися у REST API, оскільки ця технологія використовується усюди, де є необхідність працювати з даними від сервера.
Алгоритми та структури даних
Розуміння алгоритмів та структур даних (ADS, від Algorithms and Data Structures) – обов'язок будь-якого грамотного програміста.
До структур даних відносяться: стеки, черги, зв'язані списки, графи тощо. Вивчивши їх, ви зможете керувати складністю своїх програм, роблячи їх більш доступними для розуміння, а також розробляти високопродуктивні програми, які ефективно працюватимуть з пам'яттю.
Знання алгоритмів дозволить вам створювати складні конструкції для ефективного розв'язання широкого спектра завдань. Коли говорять про алгоритми, зазвичай мають на увазі алгоритми сортування та пошуку: сортування прямим включенням, прямим вибором, злиттям, пірамідальне, прямий пошук, бінарний, індексно-послідовний та інші.
Важливо розумітися і на нотації Big O, яка описує складність кожного алгоритму. Даний механізм допомагає визначити, за яких умов вигідніше використовувати той чи інший алгоритм.
Зазначимо, що як новачкові, вам не треба пірнати вглиб цих тем. Буде достатньо:
теоретичного володіння ADS;
розуміння, де яку структуру даних слід використати;
уміння оцінити складність алгоритму (Time Complexity та Space Complexity);
уміння написати декілька алгоритмів (найпопулярніші алгоритми сортування та пошуку).
Володіння ADS допоможе вам створювати більш якісний та оптимізований код. Крім того, це посилить ваші позиції серед інших кандидатів.
Webpack
Потужний збирач модулів (bundler), який дозволяє скомпілювати в один файл кілька різних компонентів: від .js та .css файлів до картинок, шрифтів тощо. Використовується для роботи над об'ємними проєктами і досить часто зустрічається у вакансіях. Воно і не дивно – це найпопулярніший збирач, як-не-як.
npm
Node Package Manager – пакетний менеджер, який є найбільшим у світі реєстром програмного забезпечення (відповідно до витягу з офіційного сайту). Використовує платформу Node.js і дозволяє розробникам з усього світу користуватися вже готовими програмними рішеннями та поширювати власні на основі Node.js.
npm використовують для керування залежностями, себто для встановлення, оновлення та видалення тих пакетів (бібліотек та інструментів), які використовуються у вашому проєкті. Незамінна річ для FrontEnd розробників, якою ви обов’язково користуватиметеся.
Основи Figma
Figma – це популярний дизайнерський інструмент для створення інтерактивних прототипів застосунків або веб-сайтів. З його допомогою дизайнер створює дизайн, який фронтенд-розробник потім верстає за допомогою HTML/CSS і додає інтерактивність при участі JavaScript.
Знання основ фігми дозволяє девелоперу зручно взаємодіяти з дизайнерським прототипом: швидко дізнаватися необхідні розміри тих чи інших елементів, робити експорт картинок та іконок тощо. Додатковий плюс – можливість використання браузерної версії Figma.
Англійська мова
План навчання Front-end повинен обов'язково включати підтягування English. Знання англійської є однією з основних вимог до фронтенд-розробника, оскільки велика кількість корисної інформації знаходиться саме на англомовних сайтах. Рівень читання технічної документації буде достатньо для комфортного користування іноземними ресурсами (Intermediate).
Однак чим вищий рівень вашої англійської, тим більші шанси отримати job-офер. Інгліш використовується не тільки при роботі з документацією, а і при комунікації з командою та клієнтами. Серед програмістів побутує вислів: «Яку мову слід вчити першою? Вчи англійську!». Тому не пошкодуйте ваш час і гарненько підтягніть англійську – цілком можливо, що саме гарне володіння нею стане вирішальним при розгляді вашої кандидатури.
Підтягнути English ви можете завдяки наступним безкоштовним відео курсам на ютуб-каналі CodeUA:
Business English – ви опануєте базову ділову лексику для активної участі у перемовинах англійською, а також ведення ключової документації цією мовою.
IT English – акцент на прокачці ділової лексики, граматики, усталених конструкцій та виразів з ІТ-сфери.
Фреймворки та допоміжні інструменти
Основні фреймворки JavaScript
Це інструменти, за допомогою яких створюються динамічні веб/мобільні/десктопні застосунки мовою JavaScript. Вони прискорюють розроблення вебзастосунків та передбачають чітко структуровану організацію коду, підвищуючи його якість та чистоту.
Найпопулярнішими high-level інструментами для фронтенд розроблення можна назвати фреймворки Vue.js, Angular та бібліотеку React. Кожен із них призначений для вирішення свого спектру завдань і має різний ступінь складності: Vue.js – найлегший (але й з найменшою спільнотою), React – середньої складності, Angular – високої складності. Варто сконцентруватися на глибокому вивченні одного фреймворку, але в той же час дуже рекомендується знати особливості та сферу застосування всіх перерахованих вище технологій.
Який фреймворк все ж обрати? Думки щодо цього розходяться. Інструментарій вибирається індивідуально під проєкт та важко передбачити, які задачі вам потрібно буде вирішувати. На даний момент найбільшою популярністю користується React, оскільки вона збалансована як з точки зору складності, так і з точки зору багатства функціоналу. До того ж найбільша кількість вакансій припадає саме на цю бібліотеку, а значить, що вона цікава не тільки розробникам, а й бізнесу.
Кожен із цих трьох інструментів доступний для вивчення на платформі ITVDN. Українськомовні курси за напрямком Angular:
Angular Базовий.
Тестування Angular-застосунків.
За напрямком React:
React Базовий.
За напрямком Vue.js:
Vue.js Стартовий.
Допоміжні фреймворки JavaScript
Наряду з традиційною трійкою – Vue.js, React та Angular – у вакансіях часто зустрічаються інші фреймворки, створені на їхній базі, наприклад Next.js та Nuxt.
Next.js базується на популярному React і дозволяє збільшити ефективність та масштабувати процес створення реакт-застосунків. Він додає шар абстракції над реактом, а одними з найголовніших його нововведень є рендеринг на серверній стороні та генерація статичних вебсайтів.
Дуже багато React-вакансій для джунів мають серед вимог та побажань Next.js – якщо ви орієнтуєтеся на реакт, рекомендуємо ознайомитися з даним фреймворком.
Nuxt – високорівневий фреймворк на базі Vue.js для масштабованого та інтуїтивно зрозумілого створення FullStack-вебзастосунків та вебсайтів. Зустрічається не часто у вимогах, але його вивчення може вигідно підсвітити вашу кандидатуру.
Angular Material
Технологія, на яку слід звернути увагу тим, хто планує розвиватися в напрямку Angular. Це бібліотека UI компонентів, яка дає доступ до готових візуальних рішень задля пришвидшення процесу верстання на Ангулярі. Бібліотека сповідує принципи Material Design, запроваджені компанією Google у 2014 році, які передбачають привабливий та інтуїтивно зрозумілий UI дизайн, котрий однаково гарно виглядатиме на різних пристроях.
Необов’язкова для вивчення бібліотека, але часто зустрічається у вакансіях – її знання допоможе вам як мінімум виділитися серед інших Angular-кандидатів.
TypeScript
Кросплатформна строготипізована мова, яка є розширенням JavaScript. Строга типізація дозволяє зменшити кількість потенційних помилок у вихідному коді, написаному на TypeScript. Також ця мова реалізує концепції, які близькі до об'єктно-орієнтованих мов, таких як C#, Java та подібних. TypeScript підвищує швидкість та зручність написання комплексних програм, внаслідок чого їх стає легше підтримувати, масштабувати та тестувати.
Відповідно до зарплатної аналітики від DOU (зима 2024), TypeScript обігнав JavaScript за популярністю і посідає перше місце серед українських розробників в категорії “Основна мова програмування”.
У вакансіях ця мова зустрічається досить часто незалежно від цільового фреймворку. При цьому для Angular розробників знання TypeScript є обов'язковим. Радимо вивчити дану мову, а зробити це ви можете за допомогою нашого українськомовного курсу “TypeScript”.
Інструменти керування станом програми (State Management)
Великі вебзастосунки постійно зростають у складності, а тому зберігати дані, які можуть використовуватися в різних місцях, стає все складніше. Для вирішення цієї проблеми були вигадані окремі бібліотеки, що йдуть паралельно з фреймворками — вони служать для управління глобальним сховищем даних усього веб-застосунку і називаються менеджерами станів. Їх застосування вже стало стандартом у FrontEnd розробленні. Для девелоперів, які використовують Vue.js, це VueX, для React-розробників – Redux і MobX, для Angular-девів – RxJS, NgRx.
Необов’язкові технології (але дуже корисні)
Патерни проєктування JavaScript
Це найкращі практики, які описують типові способи вирішення поширених завдань, що виникають під час проєктування програмного забезпечення. Знання шаблонів проєктування дозволяє писати більш чистий, зрозумілий і читабельний код, а також уникати "винайдення велосипеда". Більше того, володіння патернами показує вашу грамотність як розробника і підвищує вашу цінність в очах роботодавця, що допоможе виділитися на тлі конкурентів.
CSS-фреймворки
Інколи у вакансіях для FrontEnd-початківців можна зустріти вимоги до володіння CSS-фреймворками. Найпопулярнішими є Bootstrap і Tailwind. Вони допомагають суттєво прискорити створення верстання за рахунок низки вбудованих можливостей.
Bootstrap – результат старань команди з Twitter, який вийшов у світ в далекому 2011. Є повністю безкоштовним, має відкритий вихідний код і дозволяє створювати гнучкі, адаптивні вебінтерфейси під різні пристрої, використовуючи вже готові шаблони кнопок, форм, таблиць тощо.
Tailwind більш сучасний та трендовий – 2017 року випуску, і при цьому відомий своїм високим ступенем кастомізації (на відміну від Bootstrap). Він не дає набору готових шаблонів (доступно тільки в платному Tailwind UI), проте дозволяє швидко створювати власні рішення за рахунок особливого синтаксису.
В будь-якому випадку, рекомендуємо спробувати обидва інструменти, аби відчути їхню потужність, переваги та недоліки.
GraphQL
GraphQL є моделлю даних, яка часто використовується для побудови API для застосунку. Головна перевага перед REST API – наявність лише однієї точки входу, що дозволяє більш динамічно та гнучко визначати взаємодію з даними. Також GraphQL має такий синтаксис, який дозволяє працювати з будь-якою мовою програмування як на клієнті, так і на сервері – лишається тільки підключити необхідну бібліотеку до вашого проєкту для інтеграції GraphQL.
На момент написання статті кожна шоста вакансія на Djinni у розділі “JavaScript / FrontEnd” з досвідом від 0 до 1 року мала серед обов’язкових або бажаних технологій GraphQL.
jQuery
Невелика, швидка та багатофункціональна JavaScript-бібліотека, для роботи з якою необхідно володіти HTML, CSS та JavaScript на базовому рівні. Вона покликана спростити програмування мовою JS. Дана бібліотека представляє об'ємні рішення поширених завдань у вигляді методів, що викликаються одним рядком коду.
Незважаючи на те, що jQuery вже давно покинула зеніт популярності, поступаючись місцем фреймворкам JS, велика кількість сайтів все ще використовує цю бібліотеку, а деякі роботодавці вказують її серед вимог для Junior, особливо для джунів-верстальників.
Лінтери
Інструменти, які дозволяють аналізувати якість JavaScript-коду відповідно до стандарту ES. Вони вбудовуються в середовище розроблення і вказують на наявність невідповідностей стандарту коду, якщо такі є. Даний механізм корисний як для одноосібного розроблення (для самоконтролю), так і для командного, коли кожен розробник повинен слідувати тим самим мовним конструкціям, аби на виході отримати єдиний, цілісний проєкт. Один із найвідоміших лінтерів – ESLint.
Це необов’язковий інструмент для роботодавця, але він дуже корисний для веброзробників у силу його можливостей з контролю якості коду.
Тестування
Jest та Cypress – головні інструменти модульного тестування, яке покладається на плечі розробника. Але що це таке?
Unit тестування (воно ж – модульне тестування) – процес, який полягає у створенні тестів для перевірки працездатності окремих ділянок написаного програмістом коду. Виконується безпосередньо автором коду.
Яку користь приносить Unit тестування:
суттєве скорочення багів у коді;
спрощення рефакторингу коду;
забезпечення якісного відокремлення інтерфейсу від реалізації;
краще розуміння написаного коду;
можливість протестувати найдрібніші ділянки коду.
Усі інструменти вчити не треба — достатньо навчитися працювати лише з одним із них.
Gulp / Grunt
Системи збирання, які автоматизують рутинні завдання розробників: мініфікацію коду, оптимізацію зображень, тестування, аналіз якості коду та інше. Підходять для розроблення невеликих проєктів.
SVG
Мова розмітки масштабованої векторної графіки. Зображення на сторінці, зроблені за допомогою SVG, коректно відображаються на екранах з різною роздільною здатністю, не втрачаючи при цьому своєї якості, на відміну від традиційних растрових .jpeg, .png та інших.
SOLID принципи
SOLID – це принципи, які є своєрідним ременем безпеки для тих, хто працює відповідно до парадигм об'єктно-орієнтованого програмування. Вони були створені з метою убезпечити ООП-орієнтованого розробника від незрозумілого, заплутаного спагеті-коду, який також ще й дуже важко підтримувати.
SOLID – це акронім, який складається з п'яти букв, що кодують п'ять основних принципів:
S - Single Responsibility Principle (принцип єдиної відповідальності)
O - Open-Closed Principle (принцип відкритості-закритості)
L - Liskov Substitution Principle (принцип підстановки Барбари Лісков)
I - Interface Segregation Principle (принцип розділення інтерфейсу)
D - Dependency Inversion Principle (принцип інверсії залежностей)
Володіння цими принципами дозволяє грамотно проєктувати та розробляти такі програмні системи, які з великою ймовірністю зможуть тривалий час розвиватися, розширюватися та підтримуватися.
Хоча SOLID принципи написані переважно для ООП, їхні ідеї цілком застосовні і до сучасного JavaScript розроблення, що допоможе фронтенд розробникам створювати більш чистий та лаконічний код.
Зарплати FrontEnd розробників
DOU
Звернемося до вже згаданої зарплатної аналітики від української IT-спільноти DOU за зиму 2024 року. Медіанна зарплата всіх українських розробників, які взяли участь в опитуванні (а їх 5959), наступна:
Intern Software Engineer – 350 USD;
Junior Software Engineer – 950 USD;
Middle Software Engineer – 2500 USD;
Senior Software Engineer – 4738 USD.
Тепер поглянемо на медіанну ЗП FrontEnd розробників:
Junior – 900 USD;
Middle – 2400 USD;
Senior – 4600 USD.
На всіх позиціях зменшення винагороди у порівнянні з аналітикою півроку тому.
Виходить, медіана фронтендників майже на всіх тайтлах трохи менша, ніж загальна медіана, проте розрив досить невеликий.
Djinni
Тепер перейдемо до зарплатної аналітики українського сервісу Djinni і оберемо розділ “JavaScript / FrontEnd” та розглянемо попит за останні 6 місяців.
Маємо 17818 кандидатів, зарплатні очікування яких становлять від 600 USD до 3000 USD при зарплатних вилках вакансій 2000-3300 USD. На 1 вакансію в середньому припадає 114.4 відгуки, а кількість пропозицій на кандидата – 0.2.
Stack Overflow Developer Survey 2023
Погляньмо, скільки заробляє цей фахівець за межами України. У цьому нам допоможуть результати опитування Stack Overflow Developer Survey 2023 (понад 90 000 респондентів із США, Індії, Німеччини, Канади, Великої Британії та інших країн). Ця цифра – 59 970 USD на рік (приблизно 5000 USD на місяць).
При цьому буде важливо сказати, що фронтендники з даного опитування мають у середньому 8 років професійного кодингу – і це один із найнижчих показників. Нижче за них розташовуються лише Data Scientist / ML Specialist – 7.9 років досвіду, а також студенти, які мають трохи більше 2.8 років досвіду у професійному створенні коду.
Чому так багато технологій? Поради новачкам FrontEnd
Український ринок FrontEnd дуже сильно перегрітий кандидатами. Роботодавці, звісно, користуються цією ситуацією: виставляють більше вимог до кандидатів і паралельно знижують рівень ЗП.
Таким чином вони хочуть відфільтрувати слабких кандидатів і отримати якомога скіловішого фахівця за якомога нижчою ціною, оскільки в Junior-девелопера треба вкласти значну кількість часу та грошей, доки він вийде на таку продуктивність, яка приносить хоч якісь прибутки.
Наша стаття враховує ці нюанси, а тому ми відобразили максимальну кількість технологій, які ви з великою ймовірністю зустрінете у більшості вакансій. Не всі інструменти потрібно знати та вчити, але чим багатший ваш інструментарій, тим більші шанси на працевлаштування.
Декілька порад для початківців, які вирішили підкорити FrontEnd:
Робіть пет-проєкти і публікуйте їх на GitHub. Створюйте застосунки, які вирішуватимуть ваші повсякденні задачі, і намагайтеся застосувати в них якомога більше вивчених вами технологій. Це дозволяє підтвердити ваші знання на практиці та демонструє потенційному працедавцеві ваші навички кодингу.
Використовуйте ШІ. Штучний інтелект буде корисний в низці задач:
прискорення розроблення;
генерування ідей для пет-проєктів;
пояснення складних тем;
асистенція при написанні коду тощо.
Розвивайте власний бренд. Чим більша ваша популярність в ІТ-спільноті, тим більші шанси запрошення на співбесіду. Для цього найкраще підходить LinkedIn – соціальна мережа для встановлення робочих контактів, але також можна підключити Instagram, YouTube тощо. Публікуйте пости з корисною інформацією, діліться вашими досягненнями, дієвими порадами та особистими враженнями щодо вивчення FrontEnd, і т. д. За вами стануть спостерігати багато ІТ-фахівців, які можуть самі завітати до вас із пропозицією роботи або порекомендувати вас комусь.
Не нехтуйте вивченням англійської мови. English є супер важливим в умовах перегрітого ринку джунів – треба обов’язково мати B1. Якщо є декілька сильних кандидатів, які приблизно однакові за soft & hard скілами, роботодавець обере того, хто краще знає англійську. Також згадана аналітика DOU доводить – чим краще знаєш англійську, тим на більшу ЗП можеш претендувати.
Менторинг. Максимально вдале рішення – знайти собі ментора. Він буде наглядати за вашим навчанням та прогресом, підкидати задачі/проєкти, давати корисні поради, відповідати на питання тощо. А наприкінці вашого навчання навіть може запропонувати вільне місце в компанії або ж порекомендувати знайомим айтівцям.
Відточуйте навички програмування у Codewars або LeetCode. Це спеціальні сервіси для програмування, де ви обираєте собі задачу (є різні рівні складності) та виконуєте її, розвиваючи навички кодингу необхідними мовами. Дуже зручно і корисно, враховуючи, що на співбесіді можуть бути схожі live-coding завдання, а також, що LeetCode використовують девелопери, які готуються до інтерв'ю в топових ІТ-компаніях (Facebook, Google, Amazon тощо). Також на ITVDN є спеціальний інтерактивний практикум, де ви можете “набити руку”.
Колаборація з розробниками-початківцями. Долучайтеся до команд однодумців, де ви працюватимете спільно над проєктом, аби отримати навички роботи в команді. Звісно, це не дорівнює комерційному досвіду, який прагнуть побачити у вас роботодавці, але дозволяє попрацювати в умовах, що максимально наближені до реальних.
Відвідуйте тематичні ІТ-події в офлайн форматі. Там ви зможете поспілкуватися з іншими девелоперами, показати себе і розширити свою мережу корисних знайомств. Контактувати з ІТ-фахівцями на таких івентах обов’язково! Інакше ви просто дарма витратите час та гроші.
Пройдіть пробне інтерв’ю за донат. Ви можете місяцями не отримувати запрошення на співбесіду, через що страждатиме ваша мотивація та впевненість. Аби не падати духом і дати собі об’єктивну оцінку, домовтеся про інтерв’ю з якимось FrontEnd спеціалістом, який проведе вам технічну співбесіду за донат і надасть свої поради щодо подальшого кар’єрного шляху – наразі це популярна тема.
Пробне інтерв’ю з рекрутером. Можливо, проблема відсутності запрошень криється у вашому CV або погано оформленому LinkedIn-акаунті? Із цим допоможе розібратися рекрутер або кар’єрний консультант, який надасть свої послуги за гроші або відповідний донат на збройні сили.
Стосовно двох останніх пунктів – на ITVDN всі студенти, котрі навчаються у форматі онлайн занять із тренером у групі (Live Online), безкоштовно отримують персональну допомогу щодо подальшого працевлаштування, а саме:
індивідуальну консультацію задля визначення персональних цілей;
допомогу в складанні CV (резюме) та Cover Letter (супровідного листа);
допомогу з оформленням LinkedIn-акаунту;
проведення тестового інтерв’ю з розгорнутим фідбеком;
формування стратегії пошуку роботи;
надання додаткових корисних матеріалів.
Підсумки
FrontEnd розробник – досить універсальний боєць у світі веброзроблення. Він повинен вміти і верстати, і створювати логіку роботи клієнтської частини, і розуміти роботу серверної частини вебзастосунку. Для опанування такого великого інструментарію варто запастися часом, терпінням та завзятістю. Зазначені у статті засоби розроблення сайтів також мають аналоги, оскільки для вирішення різних завдань підходять різні вебінструменти. Однак ми вибрали найпопулярніші та найефективніші з них.
Якщо у вас є бажання опановувати цю професію і ви хочете самостійно “помацати”, чим займається фронтенд розробник, на ITVDN створено комплексну програму навчання у форматі відео навчання, яка включає 51 відео курс.
Якщо ж вам більше до вподоби живе онлайн навчання з тренером та у групі з іншими учнями, пропонуємо формат Live Online для вивчення спеціальності FrontEnd (Angular або React напрямки).
Бажаємо вам успіхів у досягненні ваших цілей!
Залишайтеся з ITVDN!
Найвищі зарплати в ІТ. Які спеціальності, країни та міста в лідерах?
Автор: Влад Сверчков
Тренди.
Найвищі зарплати Junior, Middle, Senior інженерів.
Найвищі зарплати керівної інженерної ланки.
Зарплати інших ІТ-фахівців.
Найвищі зарплати в США, Європі та решті світу.
Дані для рейтингу.
Levels.fyi – компанія, що базується в США – нещодавно опублікувала річний звіт за 2023 рік з переліком компаній, міст, тайтлів та різних трендів, які мають найбільші грошові винагороди. Відповідно до інформації на сайті компанії, аналітичні матеріали Levels.fyi дозволяють людям будувати кращі кар’єри в ІТ, відштовхуючись від чесних та прозорих зарплат. Давайте разом подивимось, які ІТ-спеціалісти в яких куточках світу отримують найбільше?
Тренди
Спочатку дізнаємось, як змінилися зарплати ІТ-спеціалістів порівняно з 2022 роком. На картинці нижче – медіанні ЗП в доларах США (сумарно за рік) для кожного сімейства спеціальностей.
Найвідчутніший приріст мають технічні менеджерські напрямки, повний штиль у Data Scientists, а невеликий від’ємний приріст – у розробників програмного забезпечення та дизайнерів продукту.
Найвищі зарплати Junior, Middle, Senior інженерів
Розглянемо річні компенсаційні медіани інженерів, які мають досвід від 0 до 15+ років в розробці. В кожному розділі буде ТОП-7 компаній, які найбільш щедро винагороджують своїх працівників в залежності від їхнього досвіду.
Укладачі рейтингу зазначають, що в поняття компенсації входять зарплата, акції та бонуси, отримані за минулий рік, але для простоти ми ототожнюємо “компенсацію” та “зарплату” в даній статті.
Інженер початкового рівня (від 0 до 2 років досвіду)
Рейтинг включає інженерів рівня Intern/Trainee/Junior. Зазвичай це випускники з невеликим або взагалі нульовим досвідом в галузі. Вони розвивають та підтримують компоненти низької та помірної складності, використовуючи настанови та підтримку членів команди з більшим досвідом.
Тут вам можуть бути знайомі Figma та LinkedIn. Перша компанія – всесвітньо відомий розробник онлайн-інструменту для дизайнерів, а друга – соціальна мережа для встановлення ділових зв’язків.
Engineer (від 2 до 5+ років досвіду)
Даний тайтл можна прирівняти до Middle. Сюди відносяться спеціалісти, які працюють над компонентами середньої та високої складності, і навіть здатні керувати невеликою командою або проєктом. Можуть менторити та консультувати менш досвідчених інженерів, проводити код-рев’ю, працювати над невеликими проєктами від початку до кінця.
Межі відповідальності такого фахівця різняться від команди до команди. В багатьох компаніях спеціалісти можуть працювати постійно на цьому рівні, не боячись, що їх звільнять за те, що вони не просуваються кар’єрною драбиною далі.
Senior Engineer (понад 5 років досвіду)
Сеньйори – від них очікується керування іншими та просування власних комплексних технічних ініціатив. Можуть виконувати візіонерські функції, визначаючи подальший вектор руху команди. Також здатні впливати на інші команди в межах компанії.
Їхня роль більше охоплює дизайнерські задачі, ніж реалізацію – залежно від розміру та очікувань компанії. Зазвичай таких спеціалістів в компанії не більше 30%.
У кого в ІТ найбільші ЗП? Рейтинг світу. Найвищі зарплати керівної інженерної ланки
Staff Engineer – інженер управлінського апарату
Ця посада передбачає 10+ років досвіду, і є досить бажаною порівняно з Junior, Middle та Senior. Менше 10% персоналу займають цю позицію, при цьому їхній вплив досить масштабний і простягається на різні організації.
Інженерам даної ланки довіряють важливі бізнес-проєкти та встановлення технічного бачення для однієї або декількох організацій.
Найбільшу винагороду отримують саме staff-інженери з OpenAI – компанії, що наприкінці 2021 року випустила в світ славнозвісний ChatGPT і нещодавно мала бурхливий скандал навколо звільнення гендиректора OpenAI Сема Альтмана.
Principal Engineer – головний інженер
Посада передбачає 15+ років досвіду, причому менше 3% персоналу сягають цього рівня. Головний інженер характерний для компаній середнього та великого розміру, а в маленьких зазвичай відсутній. Вплив Principal Engineer може поширюватися як на всю компанію, так і на індустрію. Від цих спеціалістів очікують повну автономію в роботі.
Аналітики рейтингу зазначають: даний тайтл властивий малому відсотку людей в компанії, а тому деякі компанії не мають інформації в достатній кількості, аби бути включеними в цей список.
Зарплати інших ІТ-фахівців. ІТ-компанії з найбільшими ЗП
Аналітики даного звіту розробили стандарт рівнів для менеджерських ролей та ролей індивідуального спеціаліста (individual contributor) в цьому році. Оскільки на початку 2023 у них не була встановлена система рівнів, вони вказують ТОП-5 компаній з найвищим рівнем компенсації, використовуючи медіанне значення в межах компанії для наведених нижче професійних категорій незалежно від рівня. Варто враховувати, що це найвищі медіани, і вони можуть не відображати весь ринок.
Software Engineering Manager
SE Manager може керувати однією або кількома командами інженерів, які створюють програмне забезпечення (ПЗ). Він комбінує технічні обов’язки з управлінськими і відповідає за:
створення сприятливого середовища для ефективної роботи Engineering-команди;
визначення структури та навантаження, яке покладається на кожного в команді;
трансляцію команді загального руху та цілей компанії;
контроль та підготовку технічного роадмапу разом з Tech Lead та інженерами для визначення інструментів, ресурсів та пріоритетів у роботі;
надання технічної експертизи;
вимірювання показників якості та ефективності команди;
тощо.
Product Manager
Product Manager орієнтований на стратегічне управління продуктом в цілому, включаючи стратегію продажів, ринковий аналіз і взаємодію з клієнтами. На відміну від SE Manager, даний фахівець досить далекий від технічної складової і натомість сконцентрований на досягненні бізнес-цілей.
Він фокусується на визначенні функціональності та властивостей продукту, які задовольняють потреби клієнтів, взаємодіє з усіма рівнями команди, включаючи розробників, маркетологів, дизайнерів і т. д.
Product Designer
Це НЕ UX/UI дизайнер. У Product Designer`а зміщено фокус з UX/UI на досягнення цілей бізнесу, продукту. Якщо “юікс-юай” займається безпосередньо створенням інтерфейсу (роль виконавця), то PD аналізує ринок користувачів, досліджує та визначає їхні потреби, на основі чого можна спроєктувати якісний інтерфейс, який приноситиме користувачеві максимально комфортний досвід, а власнику – аудиторію і прибутки (роль мудрого архітектора, дослідника).
Hardware Engineer
Важка артилерія від світу розробки. Ці спеціалісти займаються не програмним, а апаратним забезпеченням – “залізом”. Серед їхніх обов’язків: дизайн, розробка, тестування комп’ютерних систем та пристроїв, розробка схемотехнічних рішень та друкованих плат, покращення існуючих пристроїв (заміна компонентів, тестування тощо).
Data Scientist
Data Scientists працюють з великими обсягами даних і виконують збір, аналіз, структурування і подальшу візуалізацію інформації. Спочатку йде збір великої кількості невпорядкованих даних, а потім – їхнє перетворення у зручний формат, з яким далі працюють аналітики.
Найвищі зарплати в США, Європі та решті світу
В яких містах світу топові ЗП у галузі Software Engineering? Американські аналітики дають відповідь і на це питання.
Ситуація в США, Європі та світі загалом, відповідно:
До останньої картинки автори додають примітку: цей список включає лише одне місто з найвищою оплатою праці в кожній країні. Інші міста в межах країни також можуть мати високу зарплату, яка не відображена в цьому списку.
Дані для рейтингу
Головне джерело даних для аналітики – анонімні відгуки, які можна залишити у відповідній формі на сайті. Для цього треба надати наступну інформацію:
Розмір компенсації.
Інформація про рівні у компанії.
Бонуси від компанії.
У 2023 році компанія Levels.fyi отримала понад 200 000 заявок від тисяч компаній з усього світу.
Нещодавно ми досліджували рівень ЗП та кар’єрний шлях українських DevOps-спеціалістів та Embedded-розробників – переходьте за посиланнями, щоб дізнатись, наскільки цінується їхня праця.
Найкращі відео курси, статті та вебінари ITVDN у 2023 році
Автор: Влад Сверчков
Привіт, друзі!
Бурхливий та насичений подіями 2023 рік вже позаду. Багато українськомовних курсів, статей та інших активностей на ITVDN вже у фазі активного створення, а поки можна поглянути на все найкраще, що було опубліковано в минулому році!
Пропонуємо до вашої уваги ТОП-10 відео курсів ITVDN, вебінарів та статей за 2023 рік.
Найкращі курси
У 2023 році ми випустили цілих 30 нових відео курсів українською мовою за такими напрямками, як FrontEnd, Python, Java, C#/.NET, PHP, Unity / Game розробка, мобільна розробка на Android тощо.
ТОП-10 найкращих нових відео курсів у 2023 (за кількістю переглядів):
Python Базовий.
JavaScript Стартовий.
HTML5 & CSS3 Стартовий.
React Базовий.
Python Стартовий.
Docker.
Основи використання Git.
SQL Базовий.
TypeScript.
Основи адміністрування Windows Server.
Найкращі вебінари
У 2023 році ми провели 73 вебінари, серед яких були огляди ІТ-спеціальностей, поради з підготовки до співбесіди та отримання першої роботи в ІТ, а також практичні вебінари з різних мов програмування та технологій.
ТОП-10 вебінарів 2023 року за кількістю переглядів та вподобайок:
Kotlin – мова Full Stack розробника. Автор – Григор Артем, інженер-дослідник.
Пишемо веб-сайт на Django за допомогою ChatGPT. Автор – Лазорик Михайло, Software developer.
Пишемо гру Танки 2D на Pygame. Автор – Догонов Дмитро, Python Developer.
Spring Cloud: інтеграція з зовнішніми веб-сервісами на прикладі Feign Client. Автор – Боговик Максим, консультант з Java стеку технологій.
Математика для програміста (Частина 1 та Частина 2). Автор – Ольга Задорожна, Software Engineer у Meta (Facebook).
Microsoft Azure – що це? Огляд можливостей і приклади застосування. Автор – Олег Заревич, DevOps інженер.
Redux vs React Query. Що краще обрати для проєкту? Автор – Тисячний Влад, Middle React.js / React Native Developer.
Розробляємо блог на Django з нуля. Автор – Окаль Юрій, Senior BackEnd Developer at TanSoft Canada.
PyCharm з нуля. Найкраща IDE для Python розробки. Автор – Костянтин Зівенко, BackEnd Developer з Чорногорії (світчер у 35+ років), має 3 вищі освіти та досвід роботи на керівних посадах у великих компаніях (максимальна кількість підлеглих – близько 10 000 осіб).
Як стати розробником після 35 років. Автор – Валевський Андрій, Java Software Engineer, ментор з Java.
Найкращі статті
У 2023 році ми опублікували 8 статей, ось п’ятірка, яка користується найбільшою популярністю серед читачів:
Що повинен знати FrontEnd розробник у 2023 році.
Яку мову програмування варто вчити першою.
Як стати тестувальником, QA, QC у 2023 році? Що варто знати та вміти, аби отримати роботу в ІТ-компанії?
ТОП-10 телеграм-каналів для пошуку роботи в IT.
Хто такий DevOps інженер? Обов’язки, інструменти та ЗП.
Збагачуйте себе знаннями та навичками на ITVDN! Нехай щастя буде вашим вірним супутником у новому році!
Кар'єра в IT: хто такий Embedded-розробник, завдання та обов'язки
Автор: Влад Сверчков
Хто такий Embedded-розробник?
Сфери застосування Embedded-розробки.
Що має знати Embedded-розробник.
Як стати Embedded-розробником.
Де отримати знання.
М’які навички.
Ключові тренди в Embedded.
Кар’єрні перспективи та заробітна плата Embedded Engineer.
Кількість вакансій.
Конкуренція.
Заробітна плата.
Кар’єрні можливості.
Висновки.
Переважна більшість новачків в Україні обирає тестування або розробку із залученням C#./NET, Java, Python, JavaScript (фронтенд та Node.js). Ці напрямки мають найбільшу кількість вакансій в ІТ, низькі вимоги до вищої освіти, потужну розпіареність майже в усіх навчальних центрах, а також відносно простий перехід в ІТ з будь-якої не айтішної професії.
Спеціальність, яку ми сьогодні розглядатимемо, не є настільки популярною, трендовою. Однак вона є не менш важливою за інші ІТ-напрямки. Герой нашої статті займається розробленням вбудованих (embedded) систем, і його іменують Embedded-розробник.
Що це за спеціальність, наскільки вона важлива і де використовується, що потрібно вчити для її опанування, як виглядає день Embedded-ера, які кар’єрні перспективи та зарплати у фахівців цього напрямку – розбір цих та інших інтригуючих питань читайте нижче.
Хто такий Embedded-розробник?
Почнемо з поняття “Embedded система”. Трактування в різних джерелах відрізняється, але якщо звести все під один знаменник – це комп’ютеризована система, яка вбудована у механічну або електронну систему і виконує певну функціональність. Тобто, це система, в якій комп’ютер (як правило мікроконтролер або мікропроцесор) є невід’ємною частиною іншої системи.
Як приклад: мікроконтролер у вашій кавовій машині, мікрохвильовці або пральній машинці; пристрій, який забезпечує спрацювання подушок безпеки в автомобілі, контролер у літаку, який збирає певні дані про політ – навіть Bluetooth-навушники містять свою власну вбудовану систему.
Відповідно, Embedded-розробник – це спеціаліст, який займається розробкою подібних вбудованих систем, використовуючи програмування (software) та навички роботи із “залізом” (hardware).
Життєвий цикл продукту дуже тісно зав’язаний на розробнику вбудованих систем. Обов’язки Embedded-розробника можуть різнитися в залежності від мікроконтролерів / мікросхем / пристроїв тощо, з якими він працює, але основні фази, де відчутна роль цього спеціаліста, наступні:
Аналіз вимог. Комунікація з клієнтами, дизайнерами та інженерними командами для визначення функціональних і технічних вимог до вбудованої системи.
Проєктування системи. Розроблення архітектури та дизайну вбудованої системи, вибір апаратних та програмних компонентів.
Перевірка базової працездатності. Перед початком роботи Embedded розробник повинен перевірити функціонування плати, оновити драйвери за потреби і переконатися, що “залізо” справне.
Програмування. Написання програмного коду, вбудованих програм і системних протоколів.
Тестування та налагодження. Проведення тестів для перевірки працездатності embedded-системи.
Інтеграція. Забезпечення взаємодії вбудованої системи з апаратурою, зовнішніми пристроями та іншими складовими системи.
Оптимізація продуктивності. Вдосконалення ефективності та продуктивності вбудованої системи, враховуючи обмежені ресурси.
Документація. Формування діагностичних звітів, технічних інструкцій та документації щодо розроблення ПЗ. Також читання форумів, статей та інструкцій до плат та компонентів, з якими ведеться робота.
Співпраця з іншими командами. Взаємодія з hardware та software розробниками, участь в різних мітингах, обговореннях, комунікація з замовником тощо.
Безпека та надійність. Забезпечення високого рівня безпеки, надійності та працездатності вбудованої системи.
Типовий робочий день Embedded-розробника складається з усього потроху:
написання та налагодження коду, пошук багів;
робота з апаратною начинкою – інколи доводиться і паяльником почаклувати, і щось мультиметром виміряти, і осцилограф застосувати тощо;
читання документації, пошук інформації на форумах;
тестування вбудованих систем та їхніх складових;
код-рев’ю;
рефакторинг;
взаємодія з командою, керівництвом: мітинги, ділова переписка, зідзвони з певних питань (або живе спілкування) і т. д.
Сфери застосування Embedded-розробки
Embedded у XXI столітті має гарний приріст затребуваності у зв’язку з розвитком ІТ-індустрії, в особливості – мережевих технологій, операційних систем, мов програмування та внаслідок модернізації “заліза”. Наразі сфера застосування вбудованих систем досить об’ємна:
Побутова електроніка. Вбудовані системи є невід’ємними атрибутами затишного житла: це смарт-телевізори, холодильники, мультиварки та інша кухонна електроніка, пристрої безпеки, смарт-девайси для будинку.
Машинобудівна промисловість. Embedded технології є ключовими для сучасних транспортних засобів, починаючи від цивільного автопрому і закінчуючи потужними будівельними гуліверами. Вони входять до складу двигунів, навігаційних систем, клімат-контролю, розважальних блоків тощо.
Медицина. Сучасна медицина неможлива без комплексного цифрового обладнання, включаючи пристрої моніторингу пацієнтів, системи візуалізації, діагностичні інструменти тощо.
Промислова автоматизація. Вбудовані системи використовуються в промислових системах керування, програмованих логічних контролерах (PLC) і робототехніці для автоматизації та керування процесами.
Телекомунікації. Вбудовані системи – невід’ємна частина мережевого обладнання, маршрутизаторів, комутаторів і комунікаційних пристроїв для ефективної передачі даних.
Аерокосмічна промисловість. Сучасна авіоніка використовує ембедед для керування функціями літака, системами навігації та зв’язку. Якщо хтось хоче тераформувати Марс – без Embedded-у буде дуже важко.
Військова галузь. Вбудовані системи відіграють вирішальну роль у оборонних програмах як у мирний час (спостереження, аналіз, прогнозування, наведення тощо), так і під час війни (згадайте ті ж джавеліни, дрони, хаймарси, петріоти і т. д. – там дуже багато електроніки).
Розумні мережі. Розвиток розумних мереж (smart grid) підвищує ефективність і надійність розподілу електроенергії.
IoT (Інтернет речей). Пристрої IoT значною мірою залежать від вбудованих систем для збору, обробки та передачі даних для різних програм. Приклади: розумний будинок, автоматизовані системи поливу, розумні міста тощо.
Що має знати Embedded-розробник
В Embedded-і ціла палітра спеціальностей. Наприклад, приставки “Software”, “Firmware” вказують на фокус саме на створенні ПЗ, а "Hardware" та "Hardware Design" – на апаратній частині. Тайтл на кшталт "Embedded Systems Engineer" говорить про необхідність мати однаково гарні hardware та software знання. Також треба розуміти, що в різних компаніях один і той же тайтл може мати під капотом зовсім різні технології в залежності від апаратної начинки, різновиду вбудованої системи абощо.
Наш опис необхідних технологій буде охоплювати і апаратне, і програмне крило вимог, що робить його ближчим до тайтлу "Embedded Systems Engineer". Якщо ви хочете більше в software, вивчайте глибше технології, спрямовані на розроблення софту; якщо ж у hardware – більше уваги приділяйте апаратним навичкам.
Отже, ми проаналізували тематичні статті, думки популяризаторів ембедеду та вакансії українського ринку, і на виході отримали наступний технологічний стек Embedded девелопера.
Математика, фізика, електроніка
Найперше ембедед-розробники повинні гарно знати математику та фізику – особливо теми, пов’язані з електротехнічним напрямком, аби гарно розуміти принципи функціонування hardware: розбиратися в начинці плат, вміти правильно розводити всі сигнали на платі, правильно рахувати всі доріжки, перекриття сигналів, їхню цілісність тощо. Ці знання важливі як під час розроблення, так і на моменті проєктування, тестування, комунікування з іншими колегами і не тільки.
Які розділи потрібно знати:
базова математика та обчислення;
дискретна математика;
електричні кола;
основи електроніки;
цифрова та аналогова мікросхемотехніка;
цифрові та логічні схеми;
комп’ютерна архітектура.
Тестове обладнання
Перераховане нижче обладнання ви будете широко використовувати для перевірки працездатності мікросхем, пошуку несправностей тощо. Вам знадобляться наступні інструменти:
мультиметр;
логічний аналізатор;
осцилограф.
Мультиметр є досить відомим приладом серед “електротехнарів” – ним вимірюють низку фізичних величин, як-от сила струму, опір, напруга та інші.
Логічний аналізатор використовується для роботи з цифровими сигналами в електронних системах, а осцилограф – для візуалізації та дослідження електричних сигналів, а також відображення їхніх параметрів в режимі реального часу.
Мікроконтролери
Одні з головних об’єктів зацікавленості Embedded-розробників. Під них і пишеться код мовами C/C++ і не тільки. МК являє собою невеликий електронний пристрій з великою кількістю “ніжок”, якими відправляються/приймаються відповідні електричні сигнали.
Що важливо знати з цієї теми:
GPIO
ADC
DAC
Таймери
PWM
Переривання
Сторожовий таймер (watchdog)
Керування тактовою системою (clock management)
Кожна модель МК має свої особливості, з якими вам треба буде знайомитися через відповідну документацію. Також вам треба знати периферію обраного вами мікроконтролеру і бібліотеки для керування нею.
Найпопулярнішим сімейством МК наразі є STM32. Досвід роботи з Arduino також вітається.
RTOS
Real Time OS – операційна система реального часу. Надає середовище виконання для програм, які мають строгий графік виконання завдань. Embedded-розробники використовують RTOS для обробки завдань з високою точністю і низькими затримками.
Linux
Якщо ви плануєте працювати з вбудованими пристроями на базі Linux (а їх зараз дуже багато), вам слід гарно знати і цю операційну систему. Вона має відкритий вихідний код і є безкоштовною.
Говорячи про приклади проєктів, лінукс використовує велика кількість систем IoT, промисловий, мережевий, автомобільний, медичний Embedded тощо.
Паяльник
Так, в даній професії необхідно інколи й паяльником попрацювати. Якісь компоненти можуть потребувати пайки – десь щось вилучити/додати/замінити, поекспериментувати з макетом, зібрати проєкт тощо. Може виникнути будь-яка ситуація на “залізі”, і ембедед-фахівець має бути готовим до цього.
Основи програмування
Фундамент, який зробить ваш процес програмування продуктивним. Сюди віднесемо наступні теми:
алгоритми та структури даних – ембедерам потрібні сильні знання з алгоритміки;
шаблони проєктування – так, в ембедеді є свої патерни, які полегшують життя девелоперам, наприклад Opaque Pointer pattern;
UML (діаграма стану, state machine) – для моделювання та аналізу поведінки системи.
Програмування на C/C++
C/C++ – це потужні мастодонти у світі програмування. В порівнянні з іншими мовами є складнішими у вивченні, натомість дають можливість писати низькорівневий код з високим ступенем контролю “заліза”.
Також C/C++ дозволяють напряму керувати пам’яттю (а це дуже важливо при роботі з hard-елементами, які мають досить обмежений ресурс), контролювати велику кількість low-level процесів, а також підходять для програмування широкого спектру “заліза”. Обов’язковий інструмент в скарбничці Embedded-девелопера – можна вивчити або C, або C++, або обидві мови.
Інтерфейси та протоколи
Обмін інформацією між Embedded-елементами та їхніми складовими здійснюється через спеціальні інтерфейси та протоколи:
UART, I2C, SPI – базові, їх треба знати обов’язково;
Ethernet, USB – для роботи на високих швидкостях;
Bluetooth – дуже відома безпровідна технологія;
TCP/IP, UDP – для роботи з мережею;
CAN – система, яка використовується в транспортних засобах;
Modbus – для роботи на промислових об’єктах.
Git
Git – система керування версіями проєкту, дуже популярний інструмент під час написання будь-якого коду, оскільки дозволяє відслідковувати зміни в коді, створювати гілки для роботи над різними функціями, ділитися своїм кодом з іншими колегами і навпаки тощо.
Agile/Scrum
Agile – це сімейство гнучких (agile) методологій розроблення ПЗ, яке сприяє випуску продукту порціями, крок за кроком розширюючи та покращуючи його. Як результат – команда здійснює розроблення відносно невеликими інтервалами, сам продукт постійно покращується, якість коду – підвищується. Познайомитися з Agile вам допоможе відповідний маніфест з детальним описом основних принципів.
Scrum є однією з найпопулярніших реалізацій даного підходу, яка часто використовується в багатьох ІТ-командах, в тому числі і під час роботи з вбудованими пристроями.
Англійська мова
English на рівні вільного читання документації має бути у кожного Embedder-а, оскільки левова частка роботи припадає саме на вичитування матеріалів до тих чи інших мікроконтролерів та супутніх пристроїв. Якщо ж ви будете працювати в команді з іноземцями, то треба підтягнути ще й розмовну англійську.
Як стати Embedded-розробником
Де отримати знання
Є декілька опцій для вивчення розробки вбудованих пристроїв:
Можна вчитися самостійно за допомогою безкоштовних ресурсів у вільному доступі: YouTube, roadmap-и з посиланнями на GitHub-і, статті, тематичні форуми, безкоштовні курси та матеріали (MIT OpenCourseWare, embedded.com) тощо. На плати Arduino, паяльник, мультиметр і т. д., звісно, таки доведеться розщедритися.
Проходження відео курсів (платно) на Udemy, Coursera, edX, Pluralsight та інших платформах, придбання спеціалізованих книг.
Менторинг з боку діючого розробника – найефективніший спосіб навчання, оскільки у вас завжди буде допомога, наставництво, поради, чіткий напрямок руху та необхідні навчальні матеріали.
Проходження онлайн/офлайн навчання при компаніях. Такий формат пропонують, наприклад, GlobalLogic, Ajax Systems тощо. Мінуси: потрібна певна база знань перед стартом навчання, а головний плюс – можливість стажування і повноцінного працевлаштування в компанії.
Вища освіта в цій спеціальності не завадить, хоч і не є обов’язковою. Потрібну базу ви можете отримати у школі та вищих навчальних закладах на відповідних технічних спеціальностях – там же є і можливість потрапити на стажування, якщо кафедра таке практикує або має відповідні зв’язки з компаніями.
Soft skills
Вимоги до Embedded-розробників можуть різнитися в плані стеку, але що 100% знадобиться кожному, це наступні “м’які” навички:
критичне, алгоритмічне, аналітичне мислення;
навички problem-solving;
комунікативність, вміння працювати в команді;
організованість, зібраність, вміння ефективно розпоряджатися часом;
самомотивація;
увага до деталей;
терпіння та адаптивність;
пристрасть до Embedded;
бажання постійно розвиватися та вдосконалюватися.
Останні три пункти дуже важливі в професії, оскільки ембедед – це непроста галузь, і за 3-6 місяців “увійти в ІТ” не вийде. Потрібно більше зусиль, часу та витримки.
Ключові тренди в Embedded
ІТ-індустрія рухається вперед, і ембедед не відстає. Проаналізувавши низку ресурсів, ми визначили наступні тренди:
Інтеграція штучного інтелекту та машинного навчання в Embedded-системах стає все більш привабливою, що сприяє використанню вбудованими системами інтелектуальних алгоритмів та ML. Ця синергія дозволяє системам адаптуватися до змін в реальному часі, підвищуючи їхню ефективність.
Розвиток безпровідних технологій відкриває нові перспективи для вбудованих систем, особливо в областях Інтернету речей (IoT) та безпілотних систем, які керуються віддалено або за допомогою AI.
System-on-chip рішення. Інтеграція всіх ключових компонентів системи на одному чіпі (SoC) продовжує набирати оберти та використовуватися різними бізнесами. Їхня компактність в сукупності з високою продуктивністю, дешевизною, енергоефективністю та інтегральними мікросхемами спеціального призначення (ASIC), наприклад, вже успішно застосовується в гаджетах, які збирають та аналізують різні параметри здоров’я.
Більше уваги безпеці. Зростання кількості вбудованих систем, які мають вихід в Інтернет, призводить до збільшення кількості кіберзагроз, що підкреслює важливість удосконалення заходів безпеки для ембедед-пристроїв.
Оптимізація споживання енергії embedded-системами стає актуальною – на це впливають ідеї сталого розвитку, що сприяє поширенню більш енергоефективних рішень.
Розвиток AR та VR (доповнена та віртуальна реальності). Інтеграція вбудованих систем у AR та VR відкриває нові горизонти для інтерактивних інтерфейсів та розважальних застосунків. Embedded-розробники активно працюють над цими технологіями для створення вражаючого досвіду та візуальних ефектів.
Окремо зазначимо і розвиток вбудованих пристроїв у військовій сфері. Наразі зростає попит на ембеддерів, які здатні працювати з дронами (повітряними та морськими), БПЛА тощо. Сьогодні саме ці роботизовані системи дозволяють ефективно виявляти та ліквідовувати ворога, здійснювати розвідку, наводити та корегувати вогонь і – що найважливіше – берегти життя та здоров’я особового складу. Сьогодні це один з трендових напрямків конкретно в нашій державі.
Кар’єрні можливості в ІТ та заробітна плата Embedded Engineer
Кількість вакансій
Для визначення цього параметру використаємо дані з найвідоміших українських ресурсів для пошуку роботи в ІТ – DOU та Djinni – і порівняємо результати з найпопулярнішими спеціальностями.
Почнемо з DOU:
Embedded – 44 вакансії;
QA – 167;
FrontEnd – 160;
DevOps – 158;
PHP – 140;
Python – 138;
Java – 108;
.NET – 104;
Node.js – 101.
На Djinni пошук роботи кандидатами здійснюється анонімно. Кількість вакансій наступна:
C / C++ / Embedded – 170 вакансій;
JavaScript / FrontEnd – 354;
PHP – 295;
DevOps – 273;
Python – 208;
Node.js – 191;
C#/.NET – 166;
Java – 161;
QA Automation – 139;
QA Manual – 128.
Конкуренція
Для визначення конкуренції ембедерів на нашому ринку ІТ скористаємося співвідношенням кількості відгуків до кількості вакансій на DOU за листопад 2023 року (беремо найбільш відомі спеціальності). Ось що маємо:
Конкуренція у ембеддерів (від новачків до професіоналів) дуже низька: на 1 вакансію припадає приблизно 5 претендентів, що є дуже гарним результатом під час нинішньої ситуації на ринку ІТ.
Справжні “голодні ігри” традиційно у QA та FrontEnd: за 1 вакансією полюють в середньому 120.9 та 100.5 кандидатів відповідно.
Відповідно до ринкової статистики Djinni, для новачків конкуренція посилюється:
Зазначимо, що тут демонструється кількість кандидатів на вакансію, котрі зараз перебувають в “онлайні”. На Джині так позначаються ті кандидати, які знаходяться в активному пошуку роботи.
Бачимо, що в категорії “C / C++ / Embedded” без досвіду 27.75 шукачів на вакансію (окремої категорії для Embedded немає). Багатенько, але подивіться на аналогічну ситуацію в більш популярних напрямках:
JavaScript / FrontEnd – 426.55
C#/.NET – 200.5
Python – 185.6
Manual QA – 132.83
Node.js – 98
DevOps та FullStack – 83.5
Заробітна плата
Спершу розглянемо зарплатну статистику на Djinni для “C / C++ / Embedded” (за останні 6 місяців). Картина наступна:
Зарплатні вилки досить високі – 2300-4700 USD. При цьому зарплатні очікування кандидатів скромніші – від 700 USD до 4500 USD.
А скільки отримують Embedded за межами України? Звернімося до аналітики Stack Overflow Developer Survey 2023 (більше 90 000 респондентів із США, Індії, Німеччини, Сполученого Королівства, Канади тощо).
Деякі несуттєві для нашої статті спеціальності були прибрані з діаграми задля більшої компактності зображення.
Отже, медіанна зарплата Embedded-спеціалістів з різних країн складає 77 104 USD на рік, а це приблизно 6425 USD на місяць. Що цікаво, розробники вебу (FrontEnd, BackEnd, FullStack), ігор, мобільних та десктопних застосунків отримують меншу ЗП, хоча ці спеціальності більш поширені, а веб взагалі є найпопулярнішим в ІТ.
Вищу винагороду отримують ті, хто спеціалізується на базах даних, DevOps-процесах, великих даних, апаратній частині, блокчейні, безпеці тощо.
Кар’єрні перспективи
Embedded розробник – поняття досить розмите і обширне, оскільки фахівець цієї спеціалізації може працювати над:
створенням робототехнічних систем;
медичною апаратурою;
автомобільними системами;
аерокосмічними апаратами;
IoT-екосистемою;
AR та VR індустрією;
мережевими системами;
гаджетами для цивільних потреб;
безпекою embedded-пристроїв;
промисловими системами;
військовими розробками;
тощо.
В кожній із цих сфер будуть свої технологічні стеки, мікроконтролери, плати, інтерфейси, протоколи і т. д.
Ще не забувайте про ембедерський “фронтенд”, “бекенд” і “фулстек” – в кожній галузі ви можете концентруватися більше на програмній частині, апаратній, або ж на обох одразу.
Звісно, кожен напрямок може мати власну “кухню”, і щоб “скуштувати страву” в кожному із цих “ресторанів” цілого життя може не вистачити, але погодьтеся – список для самореалізації скромним не назвати.
Також ви можете в будь-який момент заглибитися в Software розробку і займатися написанням програмного коду (найпопулярніші стеки в Embedded-і – C/C++, Java, Python, Go), а можете піти у Hardware і більше уваги приділяти “залізу”. Якщо трохи підкачати знання, то можна перекваліфікуватися і в тестувальники, і в спеціаліста з безпеки, мережевого спеціаліста тощо. Можливості дуже широкі та дуже різноманітні.
Якщо ж говорити про вертикальний потенціал професії, розробник вбудованих систем стартує зі стандартної Intern/Trainee/Junior позиції. Далі – зі збільшенням досвіду, навичок та знань – отримує підвищення до Middle та Senior, а вище – керівні позиції на кшталт Team/Tech Lead, архітектор і т. д.
Висновки
Embedded – дуже цікава, незвична та багатогранна ІТ спеціалізація. Вона дозволяє відчути себе Архітектором, котрий вдихає життя в пристрої, дає їм все необхідне для їхнього руху, думок, аналізу навколишнього середовища, спілкування один з одним тощо. Так, для цього потрібно мати багато знань, але хто сказав, що бути Творцем – це так просто?)
Цей напрямок дає дуже важливий фундамент для інших ІТ-галузей, які сьогодні в зеніті популярності. Завдяки вбудованим системам ми можемо насолоджуватися безліччю автоматизованих процесів, починаючи ранковою свіжомеленою кавою та оглядом нашого сну у health-трекері, і закінчуючи автомобільною та медичною апаратурою.
Ембедед створений для справжніх любителів “заліза” та його програмування. При цьому він має багато нішевих розгалужень і щороку зростаючий попит. Сьогодні в Україні розробники вбудованих пристроїв мають великі можливості для реалізації, а в решті світу – тим більше.
Професія непроста, але вона щедро винагороджує сміливих, терплячих та цілеспрямованих, котрі не бояться складнощів та перешкод і готові на все, аби досягнути бажаного.
Бажаємо успіхів та натхнення всім, хто прагне розвиватися в напрямку Embedded!
Хто такий DevOps інженер? Обов’язки, інструменти та ЗП
Автор: Влад Сверчков
Хто такий DevOps Engineer?
Коротка історія виникнення DevOps
Що таке DevOps? Які обов’язки DevOps спеціаліста?
Що має знати DevOps інженер?
Розвиток професійних навичок
Кар’єрні перспективи та заробітна плата DevOps Engineer
Кількість вакансій
Конкуренція
Зарплати
Кар’єрні шляхи DevOps
Ключові тренди в DevOps та технології
Висновки
DevOps інженер – це професія, яка дуже часто випливає в рейтингах найвищих зарплат в ІТ. При цьому спектр обов’язків досить неочевидний: розробники – програмують і створюють ПЗ, системні адміністратори – адмініструють комп’ютерні системи, тестувальники – тестують, рекрутери – рекрутять… А що роблять DevOps спеціалісти? Який спектр їхніх обов’язків? Які інструменти вони використовують і чому їхня праця так високо оцінюється в грошовому еквіваленті? З цими та іншими питаннями розбираємося в даній статті.
Хто такий DevOps Engineer?
Коротка історія виникнення DevOps
DevOps є відносно молодим напрямком в ІТ, який виник приблизно у 2007-2008 рр. під час об’єднання зусиль двох спільнот: розробників ПЗ (відповідальні за Development – розроблення) та спеціалістів з підтримки та управління ІТ-інфраструктурою (Operations – операційна сторона або сторона, відповідальна за експлуатацію, операційну підтримку).
Головна проблема полягала у взаємній ізольованості команди розробників та команди експлуатації. Пристрасті вибухали на моменті випуску проєкту в продакшн: девелопери вважали, що якщо ПЗ працює у них локально, його можна релізити, а відповідальність за будь-які наступні прояви непрацездатності продукту приписувалася команді операційної підтримки. Останні, в свою чергу, робили абсолютно дзеркальну дію, звинувачуючи у несправностях розробників.
Саме об’єднання зусиль спеціалістів обох напрямків і дало життя новій спеціальності, яка знаходиться на стику двох ІТ-стихій – DevOps Engineer.
Що таке DevOps? Які обов’язки DevOps спеціаліста?
DevOps (Development and Operations) – це філософія та набір практик, покликаних об'єднати розроблення та експлуатацію в єдиний та координований ланцюжок постачання програмного забезпечення. Використання даного підходу сприяє:
скороченню циклу розроблення;
автоматизації та оптимізації процесів;
пришвидшенню відповіді на потреби користувачів;
підвищенню захищеності ПЗ;
покращенню якості програмних продуктів;
кращій комунікації всередині команди.
Життєвий цикл DevOps. Джерело: стаття на GitLab під назвою “What is DevOps?”
Відповідно, DevOps Engineer – це інженер, який використовує навички як з царини розроблення, так і зі сфери експлуатації та операційної підтримки. По суті, він підтримує розроблення, деплоїть продукт (запускає на сервері, хостингу) та тестує його працездатність, а також підтримує середовища, де розташовано задеплоєний продукт.
Обов'язки DevOps спеціаліста включають:
Керування CI/CD. DevOps Engineer будує, налаштовує, керує та підтримує процеси безперервної інтеграції (CI) та безперервної доставки (CD), забезпечуючи швидкі та надійні поставки продукту користувачам.
Автоматизація інфраструктури. Він створює та підтримує інфраструктуру, що сприяє ефективному масштабуванню та керуванню ресурсами, а також автоматизує процеси життєвого циклу продукту.
Забезпечення безпеки. Девопс інженер працює над забезпеченням безпеки програм та інфраструктури, застосовуючи практики DevSecOps.
Моніторинг, логування та обслуговування. Він встановлює системи моніторингу задля відслідковування продуктивності застосунків та інфраструктури, аби швидко реагувати на проблеми в роботі системи.
Налаштування хмарних сервісів. Девопс спеціалісти активно працюють з cloud-платформами для розроблення, розгортання та керування застосунками.
Оптимізація функціонування інфраструктури. Правило системних адміністраторів “працює – не чіпай” у випадку з девопсами не є актуальним. Спеціаліст наглядає за роботою системи і на основі фідбеку може вносити певні корективи. Інколи це дозволяє досить суттєво зменшити витрати на інфраструктуру.
Комунікація. Оскільки спеціаліст знаходиться водночас між Dev та Ops, він обов’язково повинен мати гарні комунікативні навички, аби ефективно взаємодіяти з колегами, швидко вмикатися в процеси та бути на вістрі продуктивності.
Також деякі DevOps інженери можуть обирати собі більш конкретне коло обов’язків, наприклад:
DevSecOps – фахівець, який більше зосереджений на безпеці;
Release Engineer – увага в більшій мірі спрямована на DevOps-процеси, асоційовані з релізом;
Build Engineer – обов’язки більше пов’язані з етапом білду застосунку, коли потрібно зібрати код, розібратися в конфліктах та підключити необхідні залежності;
Cloud Engineer – зосереджений на роботі з хмарною інфраструктурою;
Automation Engineer – зайнятий процесами автоматизації інфраструктури;
SRE (Site Reliability Engineer) – фокусується на масштабованості, надійності і доступності онлайн-сервісів;
тощо.
Що має знати DevOps інженер
Відповідь ми складемо, відштовхуючись від трьох джерел:
дороговкази зі спеціальності (roadmaps);
поради від DevOps інженерів;
вимоги у вакансіях на українських сайтах з пошуку роботи.
Комп’ютерні мережі
Комп’ютерні мережі – це база як для сисадмінів, так і для девопсів. Вам знадобляться наступні знання: розуміння різних архітектур мережі та їхніх структур, знання мережевих моделей OSI та TCP/IP, основні протоколи цих моделей (IP, HTTP, HTTPS, TCP, UDP тощо), маршрутизація, фаєрволи та брандмауери, моніторинг та безпека мережі, DNS, VPN тощо.
Linux
Linux – сімейство операційних систем з відкритим вихідним кодом. DevOps інженери тісно працюють з даним різновидом ОС, наприклад він важливий при конфігурації CI/CD контейнерів, автоматизації збірки, виконання білдів, роботі з артефактами тощо. Вам потрібно знати основи лінукс, включаючи встановлення, налаштування та підтримку даної ОС. Найчастіше у вакансіях зустрічаються саме Ubuntu, CentOS та Red Hat.
CI/CD
CI/CD (Continuous Integration / Continuous Delivery) – це підхід до розроблення ПЗ, який орієнтований на автоматизацію процесів розроблення, тестування та розгортання програмних змін. Цей підхід сприяє зниженню ризику помилок та покращенню якості програмного забезпечення, а також швидкому впровадженню нового функціоналу.
Також CI/CD допомагає полегшити співпрацю між розробниками та іншими командами, як-от тестувальники та спеціалісти з інфраструктури. В результаті цей підхід сприяє постійному покращенню програмного забезпечення і швидкому реагуванню на зміни в бізнесових та ринкових умовах.
Це фундаментальна тема в роботі всіх, хто є дотичним до девопс, тому гарні знання CI/CD процесів обов’язкові.
Скриптові мови (Bash, PowerShell), Python
Також треба вміти писати bash-скрипти для автоматизації різних процесів – від резервного копіювання даних до налаштування середовища розроблення.
Bash – це командна оболонка, в якій можна писати команди у Linux та Unix системах – їх виконуватиме ваша ОС (у Windows використовується PowerShell). А для того, щоб можна було запустити одразу декілька команд, можна написати спеціальний скрипт з послідовними інструкціями і просто запускати його через командну оболонку тоді, коли вам треба.
Для цього найкраще підходить мова програмування Python, і її треба буде опанувати, аби спростити скриптинг та налагодити автоматизацію задач.
Навички роботи з Bash та Python (PowerShell рідше застосовується) стають у великій нагоді DevOps Specialist та усім іншим фахівцям, котрі пов’язані з конфігурацією ОС, а також допомагають розуміти код, написаний розробниками.
Вебсервери
Вебсервери відіграють ключову роль у розгортанні та підтримці вебзастосунків і послуг. Одними з найпопулярніших є Nginx, Apache Tomcat, IIS. Девопс спеціалістам потрібно вміти правильно їх налаштовувати та траблшутити (знаходити і оперативно вирішувати проблеми).
Docker, Docker Hub
З Docker ви можете автоматизувати процес розгортання та управління програмами в контейнеризованих середовищах. Ця технологія сприяє швидшому деплою програм, полегшує тестування і скорочує інтервал між написанням коду та запуском програмних застосунків. Обов’язковий інструмент в арсеналі DevOps.
Docker Hub – репозиторій (вебсховище), де розташовані docker-контейнери. З його допомогою розробники можуть завантажувати свої та скачувати контейнери інших девелоперів, аби потім використати у своїх цілях.
Одна з важливих переваг докеру – він дозволяє створити одне середовище для розроблення, на яке не будуть впливати ОС та особисті програмно-апаратні налаштування розробників. Це полегшує не тільки розроблення, а й процес випуску продукту, оскільки на релізі ПЗ матиме значно менше конфліктів і проблемних ситуацій.
Хмарна інфраструктура: AWS, Azure, GCP
Хмарні сервіси дозволяють використовувати потужності сторонніх компаній (в даному випадку – Amazon, Microsoft, Google) для виконання обчислень, зберігання даних, розгортання та масштабування інфраструктури, автоматизації, моніторингу та проведення аналітики, використання API тощо. Вони зараз супер затребувані, тому один клауд-сервіс з перерахованих (AWS, Azure, GCP) треба знати обов’язково.
Найбільше вакансій зараз саме на AWS.
Git, GitHub / GitLab
Git – розподілена система контролю версій, якою користуються розробники задля фіксування свого прогресу та простішого ведення спільного розроблення. Це фундаментальний інструмент, який ви маєте знати, аби відстежувати та керувати кожною зміною у вихідному коді та інших файлах.
GitHub, GitLab та Bitbucket – це вебсховища, в яких зберігається код вашого проєкту, над яким працює команда. Також вони мають низку вбудованих функцій, котрі будуть важливі в тому числі і в роботі девопс спеціаліста. Ідеальним варіантом буде, якщо ви вивчите роботу і з GitHub, і з GitLab.
Jenkins / GitLab CI / Circle CI / GitHub Actions
Це CI/CD системи, які допомагають в роботі з безперервною інтеграцією нового коду та безперервною доставкою нової версії продукту користувачам.
Jenkins дозволяє налаштовувати різні кроки CI/CD, як-от збирання, тестування, розгортання і навіть інтеграцію з хмарними сервісами. Він допомагає зменшити час між написанням коду та його впровадженням.
GitHub Actions – інтегрована з GitHub служба автоматизації. Девопс розробники використовують її для створення та налаштування CI/CD. Вона дозволяє виконувати дії після доставлення коду до GitHub-репозиторію, наприклад компіляцію, тестування і розгортання.
Circle CI та GitLab CI можна наділити такими ж характеристиками – вони дозволяють налаштувати CI/CD. Усі інструменти мають низку відмінностей, а обрати варто той, який краще підходить під ваші задачі та має кращу сумісність з системами, котрі ви використовуєте.
Agile: Scrum / Kanban
Методології розроблення ПЗ, котрі є фундаментальними в роботі девопс спеціалістів, оскільки вони визначають засади, на яких базуються усі процеси в команді.
Scrum – методологія розроблення ПЗ, яка відноситься до гнучких (Agile). ЇЇ головна задача – створити проміжний продукт, який теоретично можна представити користувачам, а з кожною наступною ітерацією – спринтом в 2-4 тижні – додавати все більше та більше змін, рухаючись ітеративно до кінцевого вигляду.
Kanban – ще одна Agile-реалізація, яка робить акцент на швидкості розроблення проєкту від початку i до кiнця, а також на візуалізації задач – для цього команда використовує Kanban-дошку і безперервно вдосконалює процес розроблення.
Англійська мова
DevOps інженерам потрібна англійська (бажано Intermediate та вище) для гарного розуміння технологій, з якими вони працюватимуть, читання мануалів і т. д., адже більшість документацій та корисних статей йдуть саме мовою Туманного Альбіону. Також English потрібен для успішної комунікації з іноземними замовниками / членами команди тощо.
Додаткові технології
Окрім основних технологій, перерахованих вище, у вакансіях досить часто зустрічаються наступні:
системи моніторингу та логування: Zabbix, Grafana, ELK (Elasticsearch, Logstash, Kibana), Prometheus;
системи керування конфігураціями: Ansible та Terraform;
Kubernetes – технологія оркестрації контейнерів;
розуміння БД – як реляційних, так і нереляційних.
Розвиток професійних навичок
Яким чином отримати освіту з напрямку DevOps? В університетах таких спеціальностей не існує – принаймні в українських, – є лише загальні напрямки, в яких викладаються фрагменти того, що потрібно девопс інженерам, наприклад комп’ютерні мережі, операційні системи, програмування, теорія інформації та кодування, криптографія тощо. Тому новачкам треба звертатися до інших джерел. Перерахуємо їх:
Безкоштовні інтернет джерела / самостійне навчання. Сюди можна віднести YouTube, різні соціальні мережі з відповідними групами, де збираються девопс спеціалісти, блоги та статті у відкритому доступі, ChatGPT тощо. Переваги очевидні – ви нікому нічого не платите, однак вам треба самостійно підбирати навчальні матеріали (які можуть бути застарілі), самостійно шукати відповіді на питання, тримати дисципліну та навчальний запал і т. д.
Курси. Ви можете записатися на очні/онлайн курси і навчатися з тренером та іншими одногрупниками, або ж обрати формат записаних відео курсів (Udemy, edX, ITVDN та ін.). Вибір на користь очного або онлайн навчання з тренером дозволяє краще опанувати матеріал, оскільки вам є до кого звернутися, конкуренція підігрівається одногрупниками, а також ви маєте постійну мотивацію, адже д/з і курсові проєкти мають бути виконані вчасно. Мінус – для якісних курсів треба діставати гаманець, але воно того варте. Сюди ж можна віднести конференції DevOps, на яких ви можете знайомитися з однодумцями і прокачувати ваші знання та навички.
Курси від великих компаній. Варіант, який дозволяє потрапити на якісні курси та вчитися у достатньо інтенсивному темпі з перспективою отримати запрошення на позицію Intern/Trainee в цій же компанії. Дуже класний варіант, проте є два але: 1) потрібно самостійно отримати деякі знання з DevOps і пройти відбір; 2) такі курси бувають платні. Даний формат навчання можуть надавати EPAM, SoftServe, Sigma Software, PortaOne тощо.
Менторство. Ви також можете знайти знайомого або DevOps-філантропа, який візьме вас під своє крило і буде навчати, видавати д/з, відповідати на питання, направляти, стежити за прогресом і т. д. Також гарний варіант, однак знайти таких добродіїв-джедаїв досить важко.
Освітні ресурси дадуть вам знання інструментів. А як щодо особистих скілів – так званих soft (м’яких) навичок? Щоб стати гарним DevOps Specialist, важливо мати наступні якості:
комунікабельність, асертивність та вміння грати в команді;
вміння продуктивно розпоряджатися часом (time management);
проактивність;
уважність;
кмітливість (жвавий розум);
гарно розвинені критичне та системне мислення;
вміння швидко вчитися;
вміння гарно слухати і чути;
жага до постійного розвитку;
гарні навички problem solving / траблшутингу;
стресостійкість;
вміння брати на себе відповідальність;
емпатія.
Кар’єрні перспективи та заробітна плата DevOps Engineer
Кількість вакансій
Почнемо з того, наскільки затребувані DevOps Engineers. Для цього переглянемо кількість відкритих вакансій на DOU.ua – найбільшій спільноті українських девелоперів – і порівняємо з іншими популярними напрямками (станом на початок листопада):
DevOps – 156 вакансій;
QA – 160;
Front End – 150;
Python – 108;
Java – 107;
.NET – 100;
Node.js – 102;
Data Engineer – 46;
Data Science – 45;
Android – 27.
На українському Djinni, де айтішники України анонімно шукають роботу, ситуація наступна:
DevOps – 283 вакансії;
JavaScript / Front-End – 534;
Java – 168;
C# / .NET – 161;
Python – 193;
Node.js - 222;
QA Manual – 136;
QA Automation – 88.
Конкуренція
Скористаємося співвідношенням кількості відгуків до кількості вакансій на DOU (жовтень 2023), аби зрозуміти, наскільки конкурентний ІТ-ринок у спеціалістів за напрямком DevOps. Бачимо наступне:
В середньому на 1 вакансію припадає 11 претендентів. Це досить непоганий результат як для поточного стану українського ІТ. Наприклад, для QA ця цифра становить 109.6, FrontEnd – 109.1, Java – 46.3, Node.js – 33.9, .NET – 32.2, Python – 26.4.
Ви абсолютно справедливо зазначите, що це статистика для всіх фахівців – як новачків, так і спеціалістів із досвідом. А яке співвідношення відгуків-вакансій у тих, хто має менше 1 року досвіду?
Станом на жовтень 2023: DevOps – 24.5, FrontEnd – 458, Node.js – 443, Java – 198, .NET – 178, QA – 139.7, Python – 72.5. Все одно девопс має значно менше конкуренції, аніж найбільш популярні напрямки.
Зарплати
Щодо ЗП на українському ІТ-ринку звернімося до літнього зарплатного опитування від DOU.
DevOps спеціалісти наразі мають одну з найвищих медіанних зарплат – 3500 USD, поступаючись SRE (одна з гілок DevOps), менеджерським та найвищим керівним посадам.
Медіанна ЗП відповідно до міст:
Київ – 3675 USD;
Харків – 3000 USD;
Львів – 2800 USD;
Одеса – 4212 USD;
Дніпро – 4000 USD;
Івано-Франківськ – 3875 USD.
Кар’єрні шляхи DevOps
Кар’єрні перспективи досить обширні і залежать від того, чим займається DevOps спеціаліст, оскільки це неоднорідна галузь. Відтак ви можете обрати для себе щось більш нішове і розвиватися саме там, наприклад:
хочете фокусуватися на хмарних процесах – Cloud Engineer;
подобається автоматизація інфраструктури – вам до Automation Engineer;
робите ставку на кібербезпеку та захист на всіх етапах життєвого циклу розроблення – DevSecOps буде чудовим вибором;
Site Reliability Engineer – гарний вибір, якщо хочете заробляти ще більше грошей і займатися якістю вже готових систем;
і так далі.
Якщо говорити про ріст вгору, то спочатку вас очікує стандартні девелоперські сходи – Junior, Middle, Senior, а зі збільшенням об’єму вашого досвіду ви можете претендувати на керівні посади, як-от Head of DevOps, Lead, Architect.
Також у вас є можливість відійти від DevOps ремесла як такого і:
заглибитися в програмування, перейшовши в розробники;
стати автоматизованим тестувальником (Automation QA);
будувати кар’єру в області кібербезпеки в якості аналітика, білого хакера, спеціаліста з безпеки тощо;
піти в системне адміністрування і сконцентруватись на роботі з інфраструктурою;
займатися менеджерською діяльністю і керувати командами розробників / тестувальників і т. д.
Тут діє і зворотнє правило: так само ви можете потрапити в DevOps і через розроблення, і через QA, і через CyberSecurity тощо. Просто треба буде довчити частину стеку, якої вам бракує.
Ключові тренди в DevOps та технології
DevOps постійно розвивається, і існує кілька ключових тенденцій та технологій, які визначають поточний напрямок розвитку:
DevSecOps (Development, Security, Operations). Безпека виходить на перший план: спостерігається стійка тенденція до все більшої інтеграції безпекових парадигм та практик в DevOps процеси, аби програмне забезпечення було якомога менш вразливим та більш надійним.
Інтеграція штучного інтелекту. Наприкінці 2022 та початку 2023 виник великий ажіотаж навколо ChatGPT, котрий створений на базі ШІ. Звісно, це не перший випадок, коли використовуються нейронні мережі, однак подія була резонансна. Тому досить логічно, що по всьому ІТ наразі котиться ШІ-тренд, оскільки це несе спрощення роботи, підвищення швидкості реагування та продуктивності.
Infrastructure as Code (IaC). Все більше популяризується підхід до інфраструктури як до системи, на яку людський фактор повинен мати мінімальний вплив. Натомість якомога більше процесів мають автоматизовуватися за рахунок використання програмного коду (скрипти, шаблони, конфігураційні файли тощо) на противагу ручному/інтерактивному налаштуванню.
Сюди ж можна додати serverless-обчислення, мікросервіси, Chaos Engineering, контейнеризацію та оркестрування, тренд на Site Reliability Engineering, посилення моніторингу та cloud-технології.
А з трендових інструментів можна відзначити наступні основні:
eBPF – технологія, яка надає можливість програмувати та виконувати код прямо в ядрі операційної системи Linux. Ця технологія розширює можливості фільтрації пакетів мережі і забезпечує високий рівень моніторингу та аналізу мережевого трафіку.
WebAssembly (він же Wasm) – бінарний формат вебпрограм, який може виконуватися в браузерах. Для DevOps дає можливість розгортання та моніторингу вебзастосунків, які працюють на різних мовах програмування та можуть запускатися у браузері без додаткових обмежень.
OpenTelemetry – це open-source проєкт, який допомагає збирати дані про продуктивність, моніторинг і трасування застосунків.
Argo Rollouts – інструмент, спрямований на автоматизацію процесу розгортання застосунків і мікросервісів. Він розширює можливості Kubernetes з управління релізами та розгортання застосунків, надаючи додаткові функції та контроль над процесом оновлення.
Інструменти від OpenAI. Рік тому саме ця компанія випустила славнозвісний ChatGPT, однак ним її здобутки не обмежуються. Це компанія активно займається розробками на базі ШІ, і також доклала зусилля до GitHub Copilot, котрий значно спрощує написання коду.
Висновки
DevOps – досить цікавий та різнобічний напрямок, в якому знайти себе може кожен, хто вміє траблшутити і гратися як із кодом, так і з інфраструктурою. Вимоги можуть бути досить розмазані в залежності від сфокусованості конкретної вакансії, плюс треба враховувати, що багато роботодавців шукають собі якомога декорованіших фахівців, оскільки дешевше найняти одного “універсала”, аніж 2-3 різних спеціалістів. Однак саме тому і зарплати у девопсів одні з найбільших на ІТ-ринку, якщо не брати до уваги керівні посади.
Для тих, хто хоче дізнатися думку досвідченого System Engineer та DevOps спеціаліста стосовно DevOps кар’єри, радимо переглянути запис вебінару від Миколи Прокопенка. Автор має 6+ років досвіду в аутсорсі та аутстафі у великих компаніях (Luxoft, Ciklum, DataArt), а також є сертифікованим експертом Microsoft Azure.
Бажаємо успіхів на вашому шляху в ІТ!
Як стати тестувальником, QA, QC у 2023 році? Що варто знати та вміти, аби отримати роботу в ІТ-компанії?
Автор: Влад Сверчков
Хто такий тестувальник, QC Engineer, QA Engineer?
Напрямки QA
Стек технологій для Manual QA інженера
Англійська мова та Soft Skills (гнучкі навички)
Стек технологій для Automation QA
Як стати тестувальником у 2023 році? Що потрібно знати тестувальнику?
Кар'єра QA спеціаліста
Зарплати QA
Підсумки
Всім привіт!
Ви знаєте, як створюються програми та інформаційні сервіси, якими всі ми користуємось? Які фахівці потрібні, щоб з'явився новий Фейсбук, Вайбер, Інстаграм, новий Windows чи якась крута гра?
За розробленням програмного забезпечення (ПЗ) стоїть ціла команда професіоналів – і далеко не всі з них вміють програмувати.
Типова команда буде включати наступних фахівців:
бізнес-аналітик – проводить аналіз бізнес-проблеми, формує вимоги до продукту, що розробляється;
PM (Project Manager) – управляє всіма, хто залучений до роботи над проєктом;
тимлід (Team Leader) – управляє командою розробників;
UX/UI дизайнер – створює приємний дизайн застосунку (UI) з гарним користувацьким досвідом (UX);
розробники/програмісти – займаються написанням коду, становлять ядро команди;
QA спеціаліст – тестує застосунок на кожному етапі його розроблення для забезпечення високої якості продукту.
Якщо ПЗ не призначене для використання тільки всередині компанії, а націлене на зовнішню аудиторію, то ще додається маркетинг-команда, яка працює з цільовими споживачами: досліджує ринок, визначає клієнтуру, привертає її увагу, підігріває інтерес до продукту та багато іншого.
Таким чином, в ІТ знайдеться гарна робота навіть для тих, хто не любить програмувати. І сьогодні йтиметься про такого фахівця, як QA. Трохи вище ви вже дізналися, що це фактично тестувальник, який стежить за якістю ПЗ на кожному етапі його розроблення. У чому специфіка даної професії, чим займаються ці фахівці, наскільки легко опанувати спеціальність тестувальник QA і які технології має знати потенційний претендент на цю посаду – це ми і розкриємо в нашій статті. Влаштовуйтесь зручніше, ми починаємо!
Хто такий тестувальник, QC Engineer, QA Engineer
Дуже часто термін "тестувальник" застосовується до всіх фахівців, які так чи інакше пов'язані з перевіркою ПЗ на якість. Тим не менш, у цій сфері існує формальний поділ професій на три гілки: Tester, QC та QA. Давайте з'ясуємо, що означає кожна з них.
Тестувальник – спеціаліст, який фокусується на проведенні безпосередніх тестів над уже створеним ПЗ (складання тест-кейсів та баг-репортів, локалізація дефектів тощо). Фахівець перевіряє, чи все працює згідно із заявленими вимогами, проводить збір статистичних даних та фіксує їх у відповідних документах.
Тестувальник уважно користується розробленим ПЗ, відтворює всі можливі дії користувача, працює із застосунком на різних операційних системах, у різних браузерах (якщо це веб-застосунок), на різних мобільних платформах (якщо це мобільний застосунок); крім помилок він шукає ще й вразливості.
Щось на кшталт техогляду транспортного засобу. Звіти про помилки потім надсилаються розробникам, які відповідальні за подальше виправлення багів.
QC (Quality Control) Engineer — фахівець, який забезпечує не тільки відповідність ПЗ, що розробляється, заявленим вимогам, але і його відповідність заздалегідь визначеним критеріям якості продукту в цілому. Також він відповідальний за визначення готовності продукту до випуску в продакшн. Мета Quality Control спеціаліста – формування об'єктивної картини стану якості ПЗ на різних етапах розроблення. Можна сказати, що спеціальність тестувальника є підмножиною спеціальності QC Engineer.
QA (Quality Assurance) Engineer — спеціаліст, який забезпечує контроль якості ПЗ, що розробляється, на всіх етапах його планування, проєктування та створення. Робота на цій посаді є проактивною і носить превентивний характер, оскільки QA інженер приділяє увагу якості продукту ще до того, як той буде створений. Тут на перший план виходять комплекси заходів, процеси та засоби забезпечення якості ПЗ на кожному витку розроблення. Безпосередньо тестування системи займає вже друге місце. Головне завдання QA — вибудувати систему так, щоб вона мала якнайменше зон, де можна припуститися помилки, відповідала всім показникам якості, а також, щоб її можна було легко тестувати.
Спеціальність QC Engineer є підмножиною спеціальності QA Engineer.
Щоб вас не плутати, у цій статті ми прирівняємо поняття “тестувальник” та “QA інженер” на користь другого. Будемо розписувати стек технологій і шлях становлення саме QA спеціаліста. Таким чином ми зможемо торкнутися максимальної кількості інформації стосовно напряму тестування.
Напрямки QA
Почнемо з того, що QA має два основних напрямки — Manual та Automation. Фахівці кожного з них називаються мануальний (ручний) тестувальник та тестувальник-автоматизатор, відповідно. Їхня різниця в тому, що перший стежить за якістю продукту і проводить усі тести вручну, а другий автоматизує тестування шляхом написання скриптів. Automation QA використовує певну мову програмування та фреймворк для того, щоб створювати програми, які будуть проводити тестування продукту замість самого фахівця. Такий підхід дає змогу скоротити час на тести.
До обов'язків мануального QA інженера входять:
аналіз та з'ясування вимог у замовника чи бізнес-аналітиків;
планування процесу тестування;
написання сценаріїв тестування;
безпосередньо тестування програмного продукту;
визначення проблемних місць, їхнє документування;
використання систем відстеження багів (баг-трекінги);
обговорення виправлень із розробниками, активна взаємодія з ними;
відстеження життєвого циклу помилок;
повторний тест виправлених дефектів;
аналіз тестування;
планування ідей щодо оптимізації якості програмного забезпечення;
ведення тестової документації;
перевірка вимог до програмного забезпечення;
оцінка ризиків;
участь у стендапах та інших мітингах.
Тим часом на плечі Automation QA також покладаються наступні обов'язки:
написання нових автотестів на основі розроблених вручну;
оновлення поламаних/застарілих автотестів;
прогін автотестів;
аналіз результатів тестових прогонів;
налаштування тестового оточення;
рев'ю коду;
оформлення автотестової документації
Насправді і мануальний, і автоматизований напрямки мають багато спільних вимог, оскільки їхній фундамент однаковий. Давайте почнемо з розгляду Manual QA, а потім плавно доповнимо його інструментами Automation QA.
Що має знати тестувальник у 2023 році – стек технологій Manual QA Engineer
Загальна теорія з IT
Якщо років 15 тому в тестувальники брали мало не з вулиці, то зараз до претендентів з кожним роком висувають все більше і більше вимог. Тому потенційний претендент на посаду насамперед зобов'язаний гарно розуміти IТ-індустрію.
Отже, цей пункт передбачає такі теми, як:
веб-технології (HTTP, HTTPS, DOM, JSON, cookie, session), клієнт-серверна архітектура;
бази даних;
комп'ютерні мережі;
операційні системи (звернути особливу увагу на Unix);
дрібні підтеми, як, наприклад, системи числення і т. д.
Теорія тестування та тестова документація
Як стати тестувальником з нуля? Безумовно, будь-який QA інженер першочергово повинен знати, з чим він взагалі має справу. Якщо на зорі розроблення саме тестування було чимось інтуїтивним, то сьогодні воно набуло чітких форм, отримало свої методики, інструментарій та спеціалізоване програмне забезпечення.
Вивчивши теорію тестування, ви зможете орієнтуватися в даному напрямку, розуміти принципи, типи та методи тестування, тест-дизайну, етапи життєвого циклу ПЗ; дізнаєтеся, як правильно складати тестову документацію (тест кейс, баг-репорт, чек-лист тощо) і багато іншого.
Основні теми:
Тестування, основні стандарти ISTQB.
SDLC та STLC. Методології розроблення ПЗ.
Вимоги. Аналіз та складання вимог.
Тестова документація.
Рівні, типи, методи та види тестування.
Техніки тестування. Тест-дизайн.
Баги та баг-трекінгові системи.
Системи контролю тестів.
Основи програмування + HTML/CSS
Основи програмування мануальному QA потрібні не для того, щоб займатися безпосереднім кодингом, а щоб вміти читати код розробника і розуміти, що в ньому відбувається. Тут важлива не сама мова програмування, а банальне розуміння того, як створюються програми, що таке змінні, функції, методи, класи, які є методології програмування, як вони реалізуються і т. д. Для вивчення основ добре підійде C# або Java. Можливо, сюди варто було б включити і Python, але він, мабуть, занадто легкий для вивчення і при роботі з іншими мовами вам доведеться щось доучувати. C# з Java більш фундаментальні, і знаючи основи однієї з них, ви зможете легко розбиратися з кодом будь-яких інших популярних мов.
Фактично, володіння основами програмування необхідне читання чужого коду і виявлення можливих багів прямо на місці.
Окремо виділяємо мови верстання HTML та CSS. Якщо ви працюватимете з веб-застосунками (а як показує практика – проєктів багато, – черга і до тестування "вебу" рано чи пізно дійде), то вам буде корисно знати, з чого складається FrontEnd частина веб-застосунку. Також ви працюватимете з інструментами розробника в браузері і там теж треба буде взаємодіяти з HTML/CSS кодом.
Правила оформлення документації. Модель CMMI
Якщо згадувати три спеціальності, про які ми говорили на початку (QA, QC і тестувальник), то цей пункт для тестувальника як такого є непотрібним. А от для QA інженера він невід'ємний. У процесі проєктування ПЗ та стеження за його якістю необхідно проводити відповідне документування. Щоб робити це правильно, треба знати стандарти оформлення таких документів. Важливо приділити увагу серії ISO 9000.
CMM / CMMI – це набір методологій (моделей) удосконалення процесів розроблення ПЗ. Знання CMMI дозволяє QA інженеру грамотно оцінювати проєкт та планувати необхідні процеси по забезпеченню якості.
SQL
SQL — це мова запитів, яка використовується для взаємодії з даними в реляційних базах даних. Тестувальнику вона стане у нагоді для того, щоб виконувати бекенд-тестування для перевірки тестових даних, вставлення, видалення, оновлення їх значень у БД.
Сказати точний рівень володіння SQL нелегко, оскільки це залежить від складності проєкту. Десь знадобиться базовий рівень SQL, а десь потрібно бути дуже підкованим. А якщо тестування не пов'язане з бекендом, знання мови запитів зовсім не знадобляться.
Загалом, тестувальник QA повинен мати наступні знання та вміння при роботі з БД та SQL:
вміння розпізнавати різні типи БД;
здатність реалізувати підключення до БД, використовуючи різні клієнти SQL-з’єднань;
розуміння таблиць БД, ключів, індексів, типів відношень між таблицями;
вміння створювати прості запити;
розуміння та вміння розбирати по поличках складні запити.
Веб-сервіси
Веб-служба (або веб-сервіс) – це програмна система зі стандартизованими інтерфейсами, яка ідентифікується веб-адресою. Даний термін описує стандартизований спосіб інтеграції веб-застосунків з використанням різних протоколів, наприклад XML, TCP/IP, SOAP, WSDL та UDDI. Веб-служба являє собою спосіб зв'язку між двома електронними пристроями по мережі, такими веб-сервісами можна користуватися незалежно від комп'ютера, браузера або місця доступу до Інтернету (пошук, веб-пошта, зберігання документів, файлів, закладок тощо).
До переваг веб-сервісів можна віднести:
можливість створення необхідних кондицій для взаємозв'язку програмних компонентів, які не будуть залежати від платформ, що використовуються;
веб-сервіси використовують відкриті стандартні протоколи; завдяки XML забезпечується легкість у формуванні та налаштуванні веб-сервісів;
використання HTTP гарантує успішний взаємозв'язок систем через міжмережевий доступ.
Веб-сервіси повинні знати розробники для коректної реалізації ПЗ, а тестувальникам вони потрібні, щоб розуміти, як працює та чи інша веб-система.
Jira
Система баг-трекінгу, яка допомагає виявляти, реєструвати і контролювати баги, знайдені в ПЗ, що розробляється, а також відстежувати процес усунення цих помилок. Є командним інструментом, що спрощує процес взаємодії розробників та тестувальників, а також різну баг-трекінгову діяльність в принципі. Окрім прямого призначення допомагає команді ефективніше працювати, розставляти пріоритети та обирати подальші кроки оптимізації програмного забезпечення.
Postman
Популярний і водночас потужний набір інструментів для тестування API (у середовищі розробників вимовляється як “а́пі”). API – це прикладний програмний інтерфейс; він вказує, як слід звертатися до програми та які відповіді вона зобов’язана надавати користувачам.
Postman відносно простий у використанні, має багатий інтуїтивний інтерфейс. Він перевіряє запити з клієнтської сторони на серверну, а також відгук зі сторони бекенду. Таким чином можна переконатися, що на стороні сервера все працює, навіть якщо фронтенд сторона ще не готова.
API можна тестувати і за допомогою безлічі інших програмних засобів (наприклад JMeter), однак на сьогоднішній день саме Postman є найбільш компромісним інструментом тестування запитів, що поєднує в собі простоту і високу ефективність.
Git
Git – це популярна система контролю версій, яка дозволяє вести історію розроблення проєкту з можливістю доступу до кожної збереженої версії. Одним із найвідоміших антагоністів Git є SVN — централізована система, на відміну від децентралізованої Git.
Також у роботі вам стане в нагоді і сервіс онлайн-хостингу проєктів, що використовує систему контролю версій. У цьому випадку це GitHub. У парі з Git він дозволяє розробникам зберігати свій код онлайн, а потім взаємодіяти з іншими розробниками в різних проєктах.
Git потрібен скоріше Automation QA, оскільки дозволяє у зручному вигляді зберігати код тестів із можливістю повернутися до робочої версії тестів. Також тестувальник зможе:
мати доступ до коду розробників;
організувати список тестів та відстежувати його виконання;
тестувати код із різних пристроїв (при цьому сам код лежить на віддаленому репозиторії Git);
зберігати різні налаштування для застосунку;
виконувати інші взаємодії.
Методологія розроблення Agile/Scrum
Методології розроблення – це своєрідні путівники процесами ефективного розроблення ПЗ. Їх застосування допомагає організувати максимально продуктивну роботу всіх учасників, які безпосередньо чи опосередковано задіяні у розробленні продукту відповідно до обраної стратегії.
Agile – сімейство гнучких методологій розроблення програмного забезпечення, яке дозволяє випускати продукт невеликими частинами, постійно доповнюючи його і вдосконалюючи. При такому підході технічні та бізнес-підрозділи працюють спільно, ПЗ постійно оновлюється, забезпечується швидке прийняття рішень та виявлення неправильних підходів, застосунок простіше обслуговувати, а якість коду готового продукту вища. Agile має власний маніфест, який докладно описує основні принципи, на яких будується гнучке розроблення.
Scrum є однією з найпопулярніших реалізацій agile-підходу. Його використовують багато команд, тому знання особливостей роботи зі scrum-моделлю для QA інженера є не менш важливим, ніж для будь-якого розробника.
Англійська мова
Знання англійської — природна вимога для багатьох професій в IT, оскільки більшість нових відомостей про технології, курси, навчальні та довідкові матеріали з'являються насамперед англійською. Для роботи в команді знань мови на рівні читання технічної документації, коментування коду та складання баг-репортів зазвичай цілком достатньо, проте, якщо виникне необхідність вести переговори та/або листування з іноземним замовником, або ж ви будете в міжнародному колективі, ваш рівень має бути вище (тут вже дуже бажано мати рівень не нижче за Upper Intermediate).
Soft Skills
Так звані “гнучкі (м'які) навички” – це внутрішні якості спеціаліста, які допомагають йому виконувати роботу максимально якісно і без зайвої напруги. Наприклад, для слідчого-криміналіста прекрасними софт скіллами будуть об'єктивність, уважність, вміння відчувати свого співрозмовника, прекрасне дедуктивне мислення і невгамовне прагнення докопуватися до правди. Для працівника на ресепшені критично важливими м'якими навичками є комунікабельність, дисциплінованість, пунктуальність, ввічливість, тактовність та інші.
Які soft skills стануть у нагоді тестувальнику? Спеціалісту, який стежить за якістю ПЗ і перевіряє його на міцність, слід володіти наступними навичками:
уважність, вміння концентруватися на задачі;
ініціативність;
посидючість;
організованість, проактивність, націленість на результат;
стресостійкість;
емпатія до користувача та разом із тим розуміння бізнес-процесів;
адаптивність;
комунікабельність;
вміння працювати в команді;
володіння логічним, системним, упорядкованим мисленням;
вміння правильно здійснювати декомпозицію (по відношенню до систем, завдань, проблем тощо);
наявність шостого чуття + трохи винахідливості;
прагнення вчитися та вміння передавати свої знання іншим;
Користувацький досвід (не обов'язково, але дуже зручно)
Було б непогано, якби перед тестуванням програми ви вже стикалися з чимось подібним у звичайному житті. Якщо працювати належить у сфері ігробудування, то ваш величезний геймерський досвід буде дуже доречним. Робота з проєктами із веб-індустрії? Досвід серфінгу в інтернеті (соцмережі, інтернет-магазини, онлайн-сервіси) полегшить розуміння логіки користувачів, їх очікувань та точок інтересу.
Automation QA
Автоматизований QA технічно є надмножиною позиції Manual QA — він повинен знати все те саме, що й мануальний колега плюс декілька нових інструментів. Ці інструменти ми зараз і перерахуємо.
Мова програмування
Якщо в розділі Manual QA ми говорили про основи програмування, то автоматизатору знадобиться саме впевнене володіння конкретною мовою. Зазвичай вибирають серед Java та Python, але це не межа. У тестуванні можна застосовувати такі мови, як JavaScript, C#, Ruby, PHP, SmashTest тощо.
За допомогою обраної мови ви писатимете автотести, які виконуватимуть тестування за людину. Програма працює – тестувальник аналізує результати. Це спрощує роботу, підвищує швидкість проведення тестів та знімає частину завдань із людини.
Фреймворк для тестування
Для створення автотестів найчастіше використовується спеціальне програмне забезпечення — фреймворки. Одним із найпопулярніших вважається Selenium. Він мультиплатформний, орієнтований на роботу з веб-застосунками і підтримує велику кількість популярних мов програмування. Більше того, Selenium є основною технологією для багатьох інших інструментів автоматизації браузерів, API та фреймворків.
Інструменти навантажувального тестування
Цей пункт є необов'язковим, але дуже бажаним. Навантажувальне тестування – це вид тестування, при якому проводиться тест продуктивності цільового ПЗ при різних навантаженнях від дій певної кількості користувачів. Найбільш відомими інструментами проведення тестування навантаження є Gatling і JMeter.
Як стати тестувальником у 2023 році? Що потрібно знати тестувальнику?
Перетворюємо список наведених вище технологій на туторіал. Починаємо з шляху Manual QA.
Ви можете навчатися самостійно – за книгами або відео курсами, а можете записатися на курси тестування для максимально ефективного навчання. У будь-якому випадку спочатку потрібно дуже добре вивчити теорію тестування і базові теми в IT: веб-технології, API, клієнт-серверна архітектура, бази даних, комп'ютерні мережі, операційні системи (звернути особливу увагу на Unix), дрібні підтеми, як, наприклад, системи числення і т. д. Конкретні теми з тестування ми розписали в одному з перших розділів. Потім вам слід опанувати написання тестової документації (для чистого тестувальника), а для QA знадобиться ще й знання стандартів забезпечення якісного ПЗ (ISO 9000) для додаткового документування, модель CMMI.
Аби безпроблемно читати код розробників і розуміти, що в ньому відбувається, слід володіти основами програмування. Для цього краще вибрати або Java, або C# — документація за даними мовами є дуже інформативною, наявне велике ком'юніті. Більше того, безліч програм навчання за цими мовами має прекрасний бекграунд (історія програмування, як працюють обчислювальні системи і як вони обробляють інформацію), який закладає міцний фундамент програмування. Також варто опанувати мови верстання HTML і CSS – вони дуже прості і використовуються в усіх веб-застосунках.
Для роботи із забезпеченням, яке використовує бази даних, необхідно вивчити основи SQL.
Далі приступаємо до вивчення веб-сервісів, а потім – популярної баг-трекінгової системи Jira і потужного набору інструментів для тестування API – Postman.
Створення програмного продукту зазвичай ведеться у команді, тому знання методології командного розроблення є не менш важливим, ніж попередні технології. Приділіть час вивченню принципів Agile/Scrum — з їх допомогою ефективно розробляється сучасне програмне забезпечення. Методологія гнучкого розроблення є дуже важливою для тестувальника, оскільки він бере участь у виробничому циклі так само, як і розробники.
Також не забудьте підтягнути вашу англійську як мінімум до рівня Intermediate. Вона потрібна для комфортного пошуку потрібної інформації в інтернеті, читання технічної документації, роботи з іноземними колегами, а також для можливої взаємодії із замовником. Все ж таки англійська в IT ще нікому не заважала, ба навіть давала нові кар'єрні можливості та вищу зарплату.
Щоб ваша робота приносила вам задоволення і ви себе не змушували працювати, вам слід володіти наступними софт скілами:
уважність, вміння концентруватися на задачі;
ініціативність;
посидючість;
організованість, проактивність, націленість на результат;
стресостійкість;
емпатія до користувача, разом із тим – розуміння бізнес-процесів;
комунікабельність;
інші якості, які ми зазначили у відповідному розділі.
З цими навичками та знаннями ви зможете приступати до практики. Вивчіть Git, почніть працювати над будь-яким проєктом: покрийте його тестами, напишіть тест-документацію. Опублікуйте напрацювання на GitHub – це дасть вам цінний досвід роботи з розподіленою системою керування версіями та дозволить перевірити свої навички у вирішенні реальної задачі. Декілька гарних проєктів, і повноцінне портфоліо готове, а з ним ви можете впевнено подавати резюме на вакансію мануального QA інженера.
Якщо вас цікавить автоматизоване тестування, додатково вивчіть Python або Java + фреймворк для тестування (Selenium, PyTest, Robot Framework або інший). Це дозволить вам створювати скрипти, які автоматично виконуватимуть тестування, позбавляючи вас зайвої рутини.
Дуже бажано мати досвід роботи з інструментами навантаженого тестування. Це може бути JMeter, Gatling чи будь-який інший популярний аналог. Такий досвід дасть вам додаткову вагу в очах роботодавця, що зіграє вам на руку, оскільки конкуренція за місце тестувальника дуже висока.
Величезною перевагою буде наявність наставника, який міг би стежити за вашим прогресом, відповідати на питання, що виникають, давати корисні поради і направляти в потрібне русло - тоді у вас буде чіткий план того, як стати тестувальником з нуля.
Кар'єра QA спеціаліста
Які перспективи кар'єрного розвитку у тестувальника після отримання першої роботи?
Шлях QA дуже нагадує самурайський шлях розробника: Intern/Trainee, Junior, Middle, Senior, Team/Tech Lead. Найбільш коректний шлях кар'єрного зростання передбачає наступне:
Робота над hard skills. Поглиблення знань та навичок у межах технологічного стеку, який ви використовуєте, а також розширення цього стеку. Дуже перспективним вважається саме автоматизоване тестування, тому на короткій дистанції найбільший успіх чекає на тих тестерів, які рухатимуться у бік програмування.
Прокачування soft skills. Дуже важливо не припиняти роботу над внутрішнім стрижнем. Сюди входить безліч моментів: вміння відстоювати свої позиції, чітко аргументувати свою думку, бути приємним комунікатором, уважно та відповідально ставитися до своєї роботи, займати проактивну, ініціативну позицію в команді, працювати над підвищенням власної продуктивності тощо.
Позаробочі активності. Сюди можна віднести читання технічної літератури та актуальної інформації з вашої спеціалізації, відвідування тренінгів, проходження курсів, застосування нових знань на практиці, наприклад, у створенні pet-проектів або безпосередньо на роботі.
Також важливо працювати в різних компаніях, змінюючи їх приблизно раз на 1,5-3,5 роки. Це дозволяє, з одного боку, не "закостеніти" на поточній роботі, а з іншого – залишатися в тонусі, отримувати цінний досвід роботи з різними командами та проєктами, збагачувати професійний кругозір, опановувати нові та розвивати вже наявні hard та soft навички.
Крім цього, зміна місця роботи раз на 2-3 роки дає відчутний приріст у зарплаті, оскільки грошова оцінка ваших знань та навичок у різних конторах може істотно відрізнятися.
Говорячи про кар'єрні перспективи, ви також можете піти шляхом суттєвого розвитку hard skills і, опанувавши програмування та супутні технології, поповнити ряди розробників. Якщо ж ваша сильна сторона – це soft skills і ви плануєте зробити наголос саме на них, можете розвиватися в напрямку бізнес-аналізу або менеджменту.
Зарплати QA
Скористаємося літньою зарплатною аналітикою за 2023 рік від DOU – спільноти професійних українських розробників, та дізнаємось, скільки заробляють наші тестувальники.
Медіанні зарплати станом на червень 2023 року:
Junior QA Engineer – 800 USD
Middle QA Engineer – 1800 USD
Senior QA Engineer – 3300 USD
QA Team Lead – 3400 USD
QA Tech Lead – 4000 USD
Найвищі медіанні заробітні плати у Automation QA, найнижчі – у Manual QA, причому різниця на рівнях Middle та Senior може сягати більш ніж 1000 USD на користь автоматизованих тестерів.
Найбільш оплачуваними мовами програмування у QA фахівців є:
TypeScript – 3350 USD.
Kotlin – 3300 USD.
Java – 2838 USD.
C# – 2750 USD.
Ruby – 2652 USD.
Python – 2500 USD.
JavaScript – 2220 USD.
SQL – 1661 USD.
Інші мови – 1955 USD.
Вище наведено саме медіанні зарплати.
Англійська також впливає на грошову винагороду як новачків, так і досвідчених фахівців QA. Логіка залишається незмінною – що краще знаєш англійську, то більше отримуєш.
Підсумки
У цій статті ми постаралися зробити максимальне охоплення теми тестування. Була розглянута не лише спеціальність тестувальник, а й дві її надмножини — QC та QA. Зараз лінії розмежування між цими трьома професіями за великим рахунком стерті і простежуються лише у серйозних компаніях. У більш дрібних тестувальник, QA можуть запросто бути синонімами. Тим не менш, у нашій статті висвітлено ті технології та галузі знань, які підійдуть як тестувальнику, так і QA інженеру. Також, ми розглянули відгалуження Manual QA та Automation QA. Як з'ясувалося, без знання мануального тестування вам не стати автоматизованим тестером. Адже як можна писати автотести, якщо ти в принципі не розумієш, що, де і як досліджувати на предмет багів?
Незважаючи на високу конкуренцію за місце тестувальника, кількість вакансій залишається однією з найбільших на ринку праці в IT. Перегляньте популярні ресурси з працевлаштування в IT і ви самі в цьому переконаєтеся. Тому нами й були вказані деякі необов'язкові технології — ми хочемо озброїти наших читачів максимально промовистим стеком, щоб ви були на голову вищими за конкурентів.
Якщо вас цікавить цей напрямок і ви хочете стати QA інженером, пропонуємо до вашої уваги добірку курсів та вебінарів ITVDN, які ви знайдете на сторінці спеціальності Quality Assurance.
Бажаємо успіхів у вивченні IT!
Залишайтеся з ITVDN!
Яку мову програмування варто вчити першою
Автор: Влад Сверчков
На що впливає вибір мови програмування?
Які мови обирають першими?
Рейтинги мов програмування.
Індекс TIOBE.
Індекс PYPL.
Stack Overflow Developer Survey 2022.
Рейтинг від GitHub.
Які мови найпопулярніші відповідно до цих рейтингів?
Які мови обирають українські розробники?
Кількість вакансій та відгуків в Україні.
Висновки.
Перша мова програмування (скорочено – МП) відкриває світ створення коду перед новачком. І від обраної мови дуже часто залежить те, яким буде цей «світ» – цікавим та захоплюючим, або ж недружнім та занадто складним. Якщо ви хочете з цього знайомства винести максимальну користь для себе, варто уважно підійти до вибору першої мови програмування – і наша стаття вам у цьому допоможе.
Ми розберемо мови програмування, які можуть бути чудовими у якості перших мов. Ви дізнаєтесь, в яких ІТ-професіях затребувана та чи інша мова – а також багато іншої корисної та цікавої інформації.
На що впливає вибір мови програмування?
Для новачка обрання першої мови – важливий крок, який може визначити його подальший шлях розвитку в якості розробника. Головні пункти, на які впливає МП:
Швидкість опанування бази. Мови програмування мають різну складність вивчення. Наприклад, JavaScript досить легко вивчається, в той час як C++ носить більш хардкорний характер, а мови сімейства Assembler можуть кинути виклик навіть тим, хто вже є розробником. Мови з динамічною типізацією (JavaScript, Python, Ruby тощо) вивчаються швидше за мови зі статичною (C#, Java, C/C++ та ін.).
Парадигма мислення. Мови мають різні парадигми, відповідно до яких ви створюватимете код: процедурна, імперативна, об’єктно-орієнтована, функціональна тощо. Від парадигми обраної вами мови залежить те, як ви будете підходити до вирішення задач. Наприклад, якщо ви вивчаєте ООП-мову, то при зіткненні з мовою з функціональною парадигмою ви витратите додатковий час, аби зрозуміти її і писати код по-іншому (наприклад перехід з Java на Scala).
Перспективи працевлаштування. Кожна мова має свої сфери використання – і ви маєте це враховувати, якщо плануєте після опанування МП шукати роботу. Інакше доведеться вчити нову, втрачаючи дорогоцінний час.
Напрямок розробки. Хоча найпопулярніші мови програмування є досить універсальними, все ж є напрямки, в яких вони цінуються найбільше. Наприклад, для Java – це Enterprise та мобільне розроблення, JavaScript – веб-розроблення, Python – BackEnd веб-розроблення, написання скриптів, нейронні мережі, C# - корпоративні додатки, бекенд та ігри на Unity, C/C++ - високонавантажені застосунки, Embedded розроблення тощо. Відповідно, якщо ви оберете JavaScript, то працювати за Embedded напрямком у вас не вийде – якісь бібліотеки для роботи з мікроконтролерами з використанням JavaScript ви, можливо, таки знайдете, але роботодавця – навряд чи. Навіщо забивати цвях монітором, якщо є молоток?
Пошук ментора та ком’юніті. У кожної МП своє ком’юніті та свої джедаї, що готові брати до себе юних падаванів. У популярних мов більша аудиторія, є гарні та детальні документації, легше знайти ментора – це дозволяє зручніше та швидше навчатися. У більш нішових МП ком’юніті скромніше, тому знайти практикуючого розробника, який візьме до себе учня, аби навчити його програмувати, а також знайти якісні гайди – ще ті задачі. Ментор важливий тим об’ємом знань та практичних навичок, які може вам передати: підказати, як правильніше робити, де ви помиляєтеся, на чому зосередити увагу. Ці поради пришвидшать ваше вивчення МП і дозволять швидше рухатися далі назустріч омріяній ІТ-спеціальності.
Стиль програмування. Пункт дуже схожий на 2-й, але якщо там справа стосувалася етики мови програмування, то тут мова більше про етику самого програміста. У різних мовах можуть бути різні правила написання коду, погоджені спільнотою програмістів. Тому опанувавши одну мову, ви можете зіштовхнутися з геть інакшою кодерською етикою при переході до іншої МП (як приклад – перехід із Go на Java).
Легкість пошуку відповідей. Чим популярніша мова, тим легше гуглити та шукати відповіді, оскільки багато інших розробників до вас цікавилися тими ж питаннями (високоймовірно). Однак якщо ви захочете використати мову в екстравагантних цілях – для яких вона не призначена – можуть виникнути проблеми з відповідями.
Перехід на іншу мову. Деякі технології та мови застарівають, і доводиться вчити новий стек. Наприклад, так сталося з мобільними iOS розробниками, котрі писали мовою Objective-C і були змушені перейти на Swift, оскільки компанія Apple так вирішила. Зважайте і на це при виборі мови.
Які мови обирають першими?
Раніше вивчення програмування починалося в школах з мов Pascal або Basic. Ці мови гарно підходять для знайомства з алгоритмічним підходом, структурами даних та фундаментальними концепціями програмування. Вони навчають грамотності та раціональному підходу до вирішення програмістських задач, але у комерційній розробці сьогодні майже не використовуються.
Наразі у школах дедалі більш розповсюдженими стають такі популярні мови, як Python та JavaScript (JS). Вони досить прості в опануванні і дозволяють швидко подолати відстань між початком навчання і отриманням справжнього кінцевого результату. Скрипт на JS взагалі можна написати за допомогою звичайного блокноту у Windows і запустити в будь-якому браузері – навіть встановлювати додаткове ПЗ не треба. Простіше кажучи, ці дві мови просто цікавіші та дають більше зручностей та можливостей, аніж Pascal або Basic.
Вивчення JavaScript та Python у школі має на меті зацікавити учнів програмуванням і показати, наскільки легко та просто це може бути, які можливості може дати вміння писати код.
Аби відчути силу тієї ж пайтон, можете глянути цікаву підбірку з 10 проєктів довжиною у 10 рядків коду за посиланням.
Таким чином, ці мови не тільки знайомлять з програмуванням, але й дозволяють максимально швидко влитися в ІТ і створювати сучасні застосунки.
Рейтинги мов програмування
Аби краще розуміти, які мови нині користуються попитом, розглянемо декілька відповідних рейтингів.
Індекс TIOBE
Перша десятка мов відповідно до індексу TIOBE (за січень 2023 року):
Python
C
C++
Java
C#
Visual Basic
JavaScript
SQL
Assembly language
PHP
Аналітика індексу TIOBE відштовхується від кількості кваліфікованих інженерів у всьому світі, а також від того, яка кількість курсів та сторонніх постачальників є наразі.
Індекс PYPL
Перша десятка мов відповідно до індексу PYPL (січень 2023 року):
Python
Java
JavaScript
C#
C/C++
PHP
R
TypeScript
Swift
Objective-C
Аналітика даного індексу вибудована навколо частоти пошуку туторіалів (навчальних матеріалів) з тієї чи іншої мови програмування у пошуковій системі Google.
Stack Overflow Developer Survey 2022
Тепер подивимось на опитування Stack Overflow Developer Survey 2022 (більше 70 000 опитаних з усього світу). На картинці нижче можна побачити, які мови найчастіше використовують ті, хто тільки вивчає програмування та ІТ (на двох картинках нижче продемонстровано не всі мови з рейтингу):
Найбільший попит серед новачків викликають мови верстання HTML & CSS (ними створюють візуальне оформлення веб-сайтів), а також мови програмування JavaScript та Python. Решта мов йде з відривом у більше 19%. Тобто, сучасні початківці все більше і більше відходять від класичних Java, C#, а також Pascal і Basic, обираючи більш прості мови, з якими швидше потрапиш в ІТ.
Наступна картинка показує, якими мовами найчастіше користуються професійні розробники:
На першому місці JavaScript – маст хев мова для створення клієнтської логіки веб-сайтів та веб-сервісів, далі йде HTML & CSS, мова запитів SQL для роботи з базами даних, вже відомий лаконічний Python, синтаксичний цукор для JavaScript – мова TypeScript (TS), класичні Java і C# та інші мови.
Рейтинг від GitHub
Аналітика нижче побудована на основі того, які мови найчастіше використовуються у проєктах, котрі публікуються на GitHub. Це найвідоміший ресурс для розробників, де вони розміщують свої проєкти, що дозволяє не тільки демонструвати свої розробки іншим, а ще й зручно вести командне розроблення.
В лідерах – JavaScript, Python та Java, за ними – строго типізована TypeScript, C#, C++ та інші.
Які мови найпопулярніші відповідно до цих рейтингів?
Дуже часто на перших позиціях стоїть Python. Це і не дивно – вона проста, лаконічна і має безліч бібліотек та модулів, які ще більше спрощують процеси створення застосунків і сприяють швидшому вирішенню задач. Основні сфери застосування: системне адміністрування, DevOps інженерія, оброблення даних, Big Data, Data Science (великі масиви даних), ML (машинне навчання), серверне веб-розроблення (BackEnd).
У зв’язку з припиненням підтримки пайтона версій 2.x (наразі підтримується лише 3.x), виникла потреба переписувати старий код (legacy) у відповідності до третьої версії – це створює додатковий попит на пайтон розробників.
JavaScript також вирізняється простотою та лаконічністю, але її основна сфера використання обмежена WEB-ом, хоча JS має достатньо засобів, аби нею вести зручне розроблення серверного ПЗ, мобільних та десктопних додатків тощо.
Рейтинг від Stack Overflow показав, що саме цим двом мовам програмування найчастіше віддають перевагу початківці.
TypeScript – це та сама JavaScript, але зі строгою типізацією та іншими фішками, котрі роблять код більш структурованим та зменшують кількість потенційних помилок.
Наступні позиції зазвичай займає Java – класична та універсальна мова, яка була створена наприкінці 20 століття, але яка при цьому досі популярна і затребувана. Найуспішніше себе зарекомендувала в кросплатформних застосунках, Enterprise (створення ПЗ для великого бізнесу), а також у мобільному розробленні, хоча її сфера застосування ними не обмежується. Також існує багато легасі коду на Java, який вимагає підтримки та оновлення, що створює додаткову затребуваність грамотних Java девелоперів.
Часто згадуються C/C++ - це корифеї серед сучасних мов програмування, часто вивчаються у ВНЗ. Складні в опануванні, але дуже потужні у використанні. Саме вони застосовуються у ресурсоємних застосунках, мікроконтролерах та інших додатках, яким важливо контролювати затрати пам’яті. Якщо хочете швидко потрапити в ІТ – C/C++ не варіант, але у якості мов для вивчення програмістської бази вони – те, що треба. Вивчивши «плюси», ви зможете з легкістю переходити на інші мови.
C# - популярна універсальна мова від компанії Microsoft, яка перш за все орієнтована на створення застосунків під ОС Windows, однак вихід платформи .NET Core дозволив створювати ПЗ і під інші популярні платформи. Найбільше застосовується у розробленні корпоративних застосунків, серверної сторони веб-додатків (BackEnd), ігор на Unity, десктопних додатків.
PHP – популярна мова для серверного веб-розроблення. Не дивлячись на її поважний вік, досі активно використовується у бекенді. Має своєрідний синтаксис і неоднозначне відношення зі сторони кодерської спільноти, хоча за своєю легкістю нагадує Python та JavaScript. Мовою PHP наразі написано багато legacy коду, тому окрім створення нових застосунків є потреба переписувати код іншими мовами.
SQL – класична мова запитів для маніпуляцій із даними. Використовується усіма розробниками, котрі працюють з реляційними базами даних, тому і має відносно високу популярність.
Bash/Shell – це командні оболонки для написання скриптів, котрі дозволяють автоматизувати виконання рутинних задач. Важливі інструменти в роботі системних адміністраторів та DevOps інженерів.
Які мови обирають українські розробники?
Також звернімося і до аналітики від DOU – спільноти професійних українських розробників, а саме – розглянемо зарплати українських девелоперів (зима 2023). Дізнаємось, які МП наші розробники використовують у якості основних:
Першими йдуть мови для створення фронтенду, оскільки майже весь веб FrontEnd створюється мовами JavaScript та/або TypeScript. За ними – універсальні мови C#, Java, Python та мова серверного розроблення PHP. Kotlin та Swift – це мобільне розроблення під Android та iOS відповідно. Далі йдуть менш популярні напрямки.
Таким чином, наразі більше 85% українських розробників-респондентів у якості основної МП використовують одну з восьми вищенаведених мов.
Тепер розглянемо медіанні зарплати українських розробників відповідно до МП, які вони використовують у якості основних:
Найбільш високооплачуваними для вітчизняних Junior розробників-респондентів є Ruby та C++. Але інші мови від них не сильно відстають. На рівень заробітньої плати також впливає навичка проходження співбесід, оскільки багато працедавців просто не вказують в оголошеннях конкретну суму, а отже, чим краще ви пройдете співбесіду, тим більшу суму вам зможуть запропонувати.
Динаміка зарплат для джунів за останні пів року:
JavaScript – не змінилася.
Java – на рівні грудня 2021.
C#/.NET – підвищилась на 50 USD.
PHP – знизилась на 50 USD.
Python – знизилась на 45 USD.
C++ - зросла на 100 USD.
Ruby/Rails – зросла на 125 USD (але кількість респондентів невелика, тому число може не відображати реальної ситуації).
Swift – підвищилась на 50 USD.
Kotlin – підвищилась на 100 USD.
TypeScript – підвищилась на 60 USD.
Кількість вакансій та відгуків в Україні
Розглянемо ще одну аналітику від DOU, яка стосується кількості вакансій та відгуків станом на грудень минулого року.
До деяких позицій наведемо мови програмування, котрі там використовуються:
Найбільше співвідношень відгуків до вакансій у FrontEnd (окрім JavaScript та TypeScript використовують ще мови верстання HTML & CSS) – конкуренція одна з найвищих на ринку ІТ.
Менше конкуренції у Java, Python, .NET – їхні сфери використання та мови вже розібрали вище.
Node.js – платформа для серверного розроблення мовою JavaScript або TypeScript.
Big Data та Data Science – у цих сферах найчастіше використовується Python.
iOS/macOS розроблення ведеться мовою Swift, рідше – Objective-C.
Flutter – це мобільне розроблення під Android та iOS мовою Dart.
Unity – створення ігор мовою C# на рушії Unity.
React Native – розроблення мобільних та десктопних застосунків мовами JavaScript & TypeScript.
Blockchain – розроблення за допомогою Java, Node.js, Golang, Rust та ін.
Android – створення мобільних додатків мовами Java & Kotlin (Kotlin – набагато затребуваніша тут).
DBA (Database Administrator) – розроблення ведеться мовою SQL, PL/SQL з використанням різноманітних СУБД (PostgreSQL, MySQL тощо).
Ruby – бекенд розроблення мовою Ruby.
DevOps – використовується мова Python, інструменти Bash/Shell.
Висновки
Тож яку мову програмування обрати у якості першої? Є три основні варіанти в залежності від того, яку мету ви перед собою ставите:
Якщо ви хочете опанувати програмістський фундамент, сформувати правильне алгоритмічне мислення, а вже потім орієнтуватися на більш прикладні речі – починайте свій шлях у програмуванні разом з Pascal, Basic або C++. Перші дві мови вивчаються ще в школі і закладають правильні кодерські звички, надійну базу, в той час як C++ - це значно складніша мова, котра зачасту розглядається в університетах, але вона також гарна у вивченні фундаменту. Варто відмітити, якщо ви будете успішні у C++, інші мови зможете дуже легко опановувати і швидко розвиватиметеся далі за конкретним напрямом розроблення. Цей варіант підійде тим, у кого є час (якщо йти шляхом Pascal, Basic) або ж тим, у кого є не тільки час, а й любов до викликів (C++).
Якщо ви хочете опанувати правильний програмістський фундамент, але прагнете вивчати мову, яка вже активно застосовується у розробленні і при цьому не потребує таких зусиль для вивчення, як більш складні C/C++ – обирайте між Java або C#. Це класичні мови, які навчать вас базі і при цьому будуть досить затребувані на ІТ-ринку ще довгий час, що дозволить відносно швидко знайти роботу. Це найкращий варіант з усіх трьох з точки зору компромісності між легкістю вивчення, швидкістю становлення в подальшому розробником і отриманням кодерської бази.
Якщо ви хочете максимально швидко потрапити в ІТ – зверніть увагу на JavaScript та Python. Вони легкі в опануванні, швидко вивчається синтаксис, ринок має досить багато вакансій під JavaScript. Також ці мови мають велике ком'юніті, тому матеріалів для вивчення ви знайдете вдосталь.
Багато хто хоче потрапити в ІТ саме через останній – третій варіант. Але в чому його недоліки? Почнемо з JS:
велика конкуренція (згадували під час розгляду аналітики);
надто велика варіативність – кожен розробник може писати код за своїми власними правилами і буде важко читати та розуміти логіку його роботи;
в інтернеті багато відповідей низької якості;
з джаваскрипту важче переходити на інші мови програмування, аніж навпаки;
значний шанс пропустити базові концепції програмування і високий ризик написання поганого коду.
У Python приблизно ті самі проблеми плюс наявність своєрідного синтаксису, який може плутати.
Це не означає, що дані мови – погані. Абсолютно кожна має як свої плюси, так і мінуси – і це нормально.
МП треба обирати, відштовхуючись від сфери, в якій ви збираєтеся себе реалізовувати. Тільки тоді цей вибір буде максимально вдалим і корисним для вас.
Коротенько резюмуючи: якщо вас цікавить розроблення веб-сайтів – всього того, що на стороні клієнта, ви хочете постійно бачити наочний результат своєї роботи, – обирайте JavaScript. Якщо цікавить кросплатформне ПЗ, Enterprise або мобільне розроблення під Android – вчіть Java (у мобільному розробленні потім довчите Kotlin). C# - гарний вибір для тих, хто хоче працювати з інструментами від Microsoft, створювати корпоративні застосунки, BackEnd веб-додатки, ігри, десктопні додатки під Windows. Python – незамінний у автоматизації рутинних задач, популярний у роботі з великими даними, BackEnd-ом, штучним інтелектом. Ці 4 мови покривають досить великий відсоток ІТ-спеціальностей, тому обравши одну з них ви не прогадаєте.
Де можна вивчити мови програмування? Наші курси допоможуть кожному, хто збирається вивчати популярні мови програмування та супутні технології. Портал ITVDN налічує понад 230 відео курсів та має власні програми навчання за 15 найпопулярнішими IT-професіями, серед яких:
Верстальник сайтів
FrontEnd Developer
Java Developer
Python Developer
C# / .NET Developer
Android Developer
Unity / Game Developer
PHP Developer
та інші.
Навчання відбувається у форматі записаних відео курсів – ви можете навчатися у той час, який є для вас комфортним. З усіма спеціальностями можна детально ознайомитись, перейшовши на сторінку спеціальностей ITVDN.
Якщо вас цікавить вивчення тільки мови програмування, відповідні курси ви знайдете у нашому каталозі.
Бажаємо успішного навчання та досягнення ваших амбіцій в ІТ!