Результати пошуку за запитом: принцип открытости*
Кар'єра в 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!
Хто такий Full-stack розробник
Автор: Влад Сверчков
Суперечки навколо Full-stack
Різновиди Full-stack розробників. Стек мов та технологій для кожного
Плюси професії Full-stack Developer
Мінуси професії Full-stack Developer
Як стати Full-stack розробником?
Зарплати Full-stack розробників
Підсумки
Оновлено 9 червня 2023 року
Привіт, друзі!
Full-stack розробник (вимовляється "фул стек") – це якийсь майстер на всі руки у світі веб-розробки. Йому під силу реалізувати як клієнтську, так і серверну сторону додатку, якими, зазвичай, займаються FrontEnd і BackEnd розробники окремо один від одного. Таким чином, Full-stack спеціаліст здатний одноосібно вести проєкт від початку до кінця.
Ще в далеких нульових і раніше не існувало такого розподілу обов'язків між розробниками. Відносна простота ПЗ, що розроблялося, так само як і технології того часу дозволяли тримати процеси, які зараз виконують різні люди, в одних руках. Наприклад, у ті часи IT-фахівець, який називається веб-майстром, і зовнішній вигляд сайту створював, і серверну частину реалізовував, і розміщував сайт на хостингу. Тобто, Full-stack розробники існували і раніше, просто ніхто їх так не називав.
Однак IT-сектор не стояв на місці. Вимоги до програмних продуктів зростали, з'являлися нові мови та технології, змінювалися підходи до розробки. Дерево IT почало ставати все більш гіллястим, породжуючи нові спеціальності. Разом із цим професія універсального бійця розбилася на два окремі напрямки, а потім знову відродилася з гордою назвою "Full-stack Developer".
Суперечки навколо Full-stack
Не все так гладко, як здається на перший погляд. Багато досвідчених програмістів та IT-фахівців вищої ланки не визнають цю посаду за визначенням. "Чому?" — спитаєте ви. Адже раніше були ті самі веб-спеціалісти, які успішно поєднували обов'язки сучасних напрямків — фронту та беку. Чому сьогодні поняття Full-stack викликає суперечки?
Поширеною є думка, що Full-stack розробників не існує, а ті, хто такими називаються, насправді не відповідають вимогам цієї спеціальності.
Наприклад, Сергій Немчинський — програміст з 20-річним стажем, керівник та власник навчально-виробничої компанії FoxmindEd — в опублікованому відео на YouTube відгукується про Web Full-stack розробників наступним чином (посилання):
“В принципі, в ідеалі, Full-stack розробник – це класно та чудово. Проблема в тому, що... Таких немає. Фактично все, що ми маємо на ринку з тих людей, які називають себе Full-stack девелоперами – це приблизно 50% BackEnd девелоперів, які трошки вивчили FrontEnd і вже можуть Angular або React скомпілювати і, відповідно, зібрати-підключити, плюс трошки розуміють у верстанні – навіть не на рівні Junior верстальника. Вони у більшості випадків зробити добре, красиво не можуть ніяк. Максимум, що можуть – зробити так, щоб кнопка натискалася.
Або ж Full-stack девелопери – це решта 50% FrontEnd розробників, які трошки вивчили BackEnd; в більшості випадків – якийсь Node.js. Можливо, PHP. Такий розробник мінімально вміє щось підрихтувати, але, знову-таки, говорити про те, що він сяде і напише вам нормальний Full-stack додаток – ні, ні і ще раз ні.
(…)
Чесно скажу, мені ідея з об'єднанням у Full-stack девелоперів здається, з одного боку, не дуже вдалою, тому що фактично ми отримуємо "ні риба, ні м'ясо". З іншого боку, ринок вимагає – отже, треба. Тому затребуваність у Full-stack девелоперів, за великим рахунком, трохи більша, ніж у чистих BackEnd або FrontEnd розробників. Однак ринок вже усвідомив, що вони (Full-stack розробники) у своїй більшості "ні риба, ні м'ясо", і тому термін "Full-stack" починає пропадати. Тепер просто вважається, що це BackEnd розробник з невеликим знанням фронту і, навпаки, FrontEnd розробник з невеликим знанням однієї з BackEnd мов. Мені здається, що так набагато правильніше”.
Інші розробники схиляються більше до того, що Full-stack розробка – це ні що інше, як хитрощі бізнесу. Роботодавець не бажає переплачувати за двох різних фахівців, віддаючи перевагу більш дешевому аналогу, котрий вміє все те саме.
По суті, вся суперечка щодо Full-stack розробника зав'язана на скептицизмі. Прихильники міфологічності цієї професії не вірять у існування розробника, здатного добре реалізувати як FrontEnd, так і BackEnd частини, оскільки за обома ховається безліч технологій і мов, а вивчити все і працювати не гірше за фронтендерів і бекендників — практично неможливо.
Ті ж, хто займаються Full-stack девелопментом, парирують, вказуючи на велику кількість часу, проведеного за розробкою, в ході чого так чи інакше доводиться заглядати по інший бік барикад і розбиратися в усіх процесах, що супроводжують розробку всього проєкту від і до. Ну а далі справа техніки — вивчаєш необхідні інструменти, практикуєшся і можеш самостійно працювати над цілим проєктом. Звичайно, пізнання у всіх використовуваних мовах і технологіях у Full-stack спеціаліста будуть не такі глибокі, як у вузькоспеціалізованих побратимів по цеху, але зробити повноцінний робочий проєкт з нуля, реалізувавши як BackEnd, так і FrontEnd, йому буде під силу.
Різновиди Full-stack розробників
Варіацій Full-stack розробників насправді безліч: PHP Full-stack Developer, Node.js Full-stack Developer, Java Full-stack Developer і так далі. Назва, яка стоїть на початку спеціальності, говорить про те, яка мова/платформа береться за основу під час реалізації BackEnd частини. Стек технологій FrontEnd практично завжди однаковий і відрізняється лише використовуваними JavaScript-фреймворками / бібліотеками: Angular, React або Vue.js. А ось бекенд надає набагато більше можливостей для реалізації своїх амбіцій.
Ще раз проговоримо, що Full-stack Developer – це розробник, який бере безпосередню участь у всіх етапах розробки веб-додатків: від створення клієнтської частини (візуальна частина + логіка користувача) до реалізації серверної (бази даних, серверна архітектура, програмна логіка). Який стек технологій та мов знаходиться у розпорядженні цього фахівця? Якщо говорити про FrontEnd складову (клієнтська сторона), то вона у всіх приблизно однакова:
мова верстання HTML та мова стилів CSS;
мови програмування JavaScript та TypeScript;
препроцесори SASS та LESS;
фреймворк Angular/Vue.js або бібліотека React;
технології DOM, AJAX, REST API, знання про інтернет та веб-технології в цілому тощо;
навички адаптивного та кросбраузерного верстання.
А що потрібно знати full stack розробнику із серверного набору? Тепер розберемося з відгалуженнями в бекенді, які вказують на популярні мови та технології, що використовуються під час реалізації серверної сторони веб-додатків, котрі розробляються.
Node.js Full-stack Developer
BackEnd складова (серверна сторона) може мати різну начинку, на відміну від FrontEnd. Якщо говорити про Node.js Full-stack розробника, то в якості основної мови виступає JavaScript, а сам стек наступний:
платформа Node.js;
фреймворки Express.js, Nest.js;
пакетний менеджер npm;
Web Sockets;
розуміння REST API;
інші спеціалізовані технології.
Java Full-stack Developer
Головний акцент робиться на мову програмування Java та пов'язані з нею технології. BackEnd-стек у такого розробника має бути наступним:
мова Java + Java Core;
веб-сервер Apache;
інструменти для комфортної взаємодії з БД – JDBC, Hibernate;
веб-сервіси;
фреймворк Spring та його популярні модулі (Spring MVC, Spring Boot, Spring REST, Spring Web тощо);
ASP.NET Full-stack Developer
.NET розробники мають широкий інструментарій для самореалізації у вебі. Як основну мову програмування вони використовують C#. Скарбничка знань BackEnd частини у ASP.NET Full-stack Developer-а повинна містити:
мову C#;
знання інфраструктури .NET.
платформу ASP.NET MVC/ASP.NET Core (Web API);
Entity Framework (Core);
хмарний сервіс Azure;
мову T-SQL;
розуміння RESTful API.
PHP Full-stack Developer
PHP – класична мова веб-розробки. Типовий BackEnd-стек даного розробника відрізняється від інших своєю компактністю. РНР у вебі вже досить давно, а тому йому багато не потрібно; достатньо лише:
власне, сама мова PHP;
фреймворк Yii2/Symfony/Laravel.
Python Full-stack Developer
Універсальність Python не знає меж! Не стала винятком сфера веб-розробки. BackEnd-стек Python Full-stack спеціаліста наступний:
мова Python;
фреймворк Django/Flask;
REST API;
Web Sockets;
навички роботи з ОС Linux та веб-сервером Nginx/Apache (можливо);
досвід роботи із хмарними сервісами.
Також окрім спеціалізованих технологій, усім Full-stack розробникам необхідно:
знати систему керування версіями Git + сервіс для хостингу IT-проєктів GitHub;
знати реляційні (SQL) та нереляційні (NoSQL) бази даних, вміти їх проєктувати;
розумітися на протоколах HTTP, HTTPS та роботі FrontEnd + BackEnd загалом;
вміти оперувати мовою запитів SQL та однією із СУБД – MySQL / PostgreSQL / SQLlite, або однією з NoSQL СУБД (MongoDB, Redis, Cassandra, наприклад);
вміти проводити тестування додатків;
здійснювати Code Review;
використовувати Docker;
володіти англійською мовою на рівні Intermediate та вище;
знати популярні патерни програмування та вміти їх реалізовувати;
мати гарне знання алгоритмів та структур даних.
Також від Full-stack спеціаліста можуть вимагати навички мобільної розробки, якщо роботодавець має намір портувати веб-додаток на відповідні платформи.
Як бачите, список необхідних мов і технологій для створення гарної серверної складової веб-додатків є досить значним. У наступному розділі ми розберемося, які переваги та недоліки чатують на тих, хто таки має намір пов'язати свою професійну діяльність з Full-stack розробкою.
Плюси професії Full-stack Developer
Можливість самостійно вести цілий проєкт
Очевидна перевага розробника даної спрямованості полягає в об'єднанні двох течій – FrontEnd та BackEnd – в одному фахівці. Крім того, що такий професіонал здатний реалізувати обидві частини веб-додатку, він може безпроблемно налаштувати їхній взаємозв'язок, що є частим каменем спотикання між фронтендниками та бекендниками. Тим самим усуваються непорозуміння і протиріччя, які неминуче виникли б між декількома розробниками, які працюють над одним і тим самим продуктом.
В'ячеслав Лобода, Senior Full-stack PHP Developer, про свою професію відгукується наступним чином:
“Часто при вирішенні завдань веб-розробки виникає необхідність вносити редагування одночасно і до FrontEnd, і до BackEnd. Для цього можна найняти двох різних спеціалістів чи одного Full-stack розробника. Останній варіант дозволяє заощадити час на комунікацію”
Даний відгук і всі наступні взяті зі статті на dou.ua "Кар'єра в IT: посада Full-stack розробник".
Висока швидкість розробки, можливість приймати власні рішення, мінімальні витрати часу на зайву комунікацію
Full-stack розробник – це вже фахівець досить високого рівня, який здатний приймати певні самостійні рішення, не витрачаючи час на зайві обговорення та узгодження з іншими розробниками, адже проєкт цілком перебуває під його крилом.
“Подобається, що можу створювати веб-додатки одноосібно, менше затримок під час роботи. Наприклад, коли працюєш як FrontEnd і потрібно, щоб BackEnd віддавав нові дані, ти просиш колегу внести зміни, чекаєш. Full-stack розробнику чекати ні на кого не потрібно. Взяв і зробив як слід” – Геннадій Догаєв, Web Full-stack Developer
Легкість пошуку роботи на фрілансі
На біржах фрілансу замовники найчастіше шукають такого веб-спеціаліста, який зробить всю роботу самостійно без залучення додаткових розробників. Хто, як не Full-stack девелопер найкраще підійде на цю роль, маючи таку перевагу перед вузькоспеціалізованими побратимами? Отже, обравши цей шлях, ви не залишитеся без роботи і зможете користуватися всіма благами, які дарує фрілансерство.
Великі кар'єрні можливості
Широкоформатність професії Full-stack розробника дозволяє реалізувати себе в будь-якій сфері веб-девелопменту. Ви можете в будь-який момент перейти на більш вузький профіль – чисту FrontEnd або чисту BackEnd розробку (горизонтальний розвиток, поглиблення в конкретну сферу діяльності), а можете стати сильним тімлідом або архітектором, який чудово розуміється на всіх процесах створення веб-додатків і має багатий досвід за плечима (вертикальний розвиток, просування кар'єрними сходами).
Також Full-stack розробник може знайти успішне застосування своїм здібностям у стартапах. Стартап-команди, як правило, мають дуже малий бюджет і їм набагато вигідніше мати тих, хто може взяти на себе обов'язки декількох людей. Таким чином ви і новий досвід отримаєте, і зможете попрацювати над чимось свіжим, цікавим, раніше не баченим.
Ну а щодо потреб ринку в Full-stack розробниках навіть згадувати не варто – безліч компаній хоче отримати спеціаліста широкого профілю в свій штат. Кількість вакансій для них менша, ніж для фронтендників та бекендників, однак і конкуренції теж не так багато.
Мало рутини та вигорянь
Багата на різноманітність діяльність Full-stack розробників знижує ризики загрузнути в одноманітній роботі. Ви володієте великим арсеналом знань, що дозволяє вам періодично перемикатися між проєктами і менше втомлюватися від застосування одних і тих самих технологій.
Легкість у розвитку свого продукту
Ви маєте достатньо знань та вмінь, щоб самостійно створити власний проєкт. У майбутньому ви зможете організувати свою команду для вдосконалення та подальшого розвитку програмного продукту, проте вже на старті ви маєте все необхідне для того, аби реалізувати ваші ідеї.
Мінуси професії Full-stack Developer
Програш вузькоспеціалізованому розробнику на його полі бою
Full-stack девелопер володіє багатьма інструментами, але не може знати кожен настільки ж добре, наскільки окремо взятий фахівець. Ця професія передбачає подібне розпилення і унеможливлює поглиблення в будь-яку мову або технологію. Виходить, ви вмієте все, але гірше за розробника конкретного напряму.
Багато часу на навчання
Технологій, які має опанувати Full-stack спеціаліст, багато. Під час вивчення, наприклад, бекенду легко забути те, що ти вчив по фронтенду. Щоб усі знання та вміння утримувати на гарному рівні, необхідно витрачати багато зусиль. Впоратися з цим можна наступним чином: вивчаєте одну спеціальність, влаштовуєтеся на роботу, а потім вивчаєте другий напрямок. Виходить, ви не тільки поточні знання зберігаєте, але й примножуєте їх, рухаючись до фул-стек розробки.
“Нарощуйте компетенцію поступово, з невеликих завдань. Пройдіть курс із напрямку, якого вам бракує, щоб вникнути в базові принципи. А далі опановуйте знання на практиці за правилом Learning by doing” – Олексій Голубєв, Team Lead Full-stack Developer в GlobalLogic.
Важко стежити за новими тенденціями
Світ IT дуже гнучкий і мінливий. Наче імперії – виникають і руйнуються нові мови, технології, підходи в розробці ПЗ, техніки написання та ревізії коду. Вам, як фахівцю широкого профілю, необхідно знати всі новинки, адже, зрештою, цього і вимагатимуть від вас роботодавці — використання сучасних інструментів та підходів.
Занадто багато обов'язків
Роботодавці іноді починають висувати велику кількість вимог до фул-стек фахівця. Раніше згадуваний Full-stack розробник Геннадій Догаєв має таку думку щодо цього:
“Замовники хочуть звалити на одну людину надто багато. Наприклад, вже зустрічаються оголошення Node.js+React.js+React Native, тобто до веб-стеку додається ще й мобільна розробка. Це впливає на якість знань та кінцевого продукту: чим більше технологій потрібно охопити, тим більш поверхнево знаєш кожну з них. Крім того, людині не можуть подобатися всі напрямки одночасно. Мені з цього набору не дуже цікава мобільна розробка”.
Вами хочуть залатати дуже багато дірок
Фул-стек розробнику можуть часто делегувати різноманітні завдання на робочому місці. Дописати за кимось код, щось переглянути, пофіксити, доробити. Працювати замість FrontEnd/BackEnd розробника, який пішов у відпустку, – мила справа. А якщо вас найняли як альтернативу 5-ти розробникам, то й взагалі будуть тримати як раба.
Складні завдання
Ви знаєте більше інших, а значить, вам під силу розібратися з тою чи іншою важкою задачею. Принаймні так думає той, хто вам їх роздаватиме.
Велика завантаженість
Як ви вже помітили за попередніми пунктами, Full-stack розробнику не дадуть відпочити. Справ по вуха – це точний опис його стану на кожний робочий день.
Складнощі у заміні
Цей пункт одночасно є і перевагою, і недоліком. З одного боку, вам важко знайти заміну і, відповідно, вас цінуватимуть. З іншого боку, вам буде проблемно піти у відпустку, адже де взяти заміну? Тут і почнуться дзвінки у будь-який час доби, неможливість перекладання деяких завдань на інших розробників та інше.
Як стати розробником Full-stack?
Відповідь проста – оберіть найбільш близький до вас варіант професії та вивчіть необхідні технології за допомогою різних ресурсів, або підіть на курси full stack розробників. Радимо зробити свій вибір на користь освітньої IT-платформи ITVDN – тут ви зможете знайти 90% усіх потрібних вам відео курсів за будь-яким із обраних напрямків. Наприкінці статті ми залишимо корисні посилання на всі спеціальності, які допоможуть вам у вивченні ремесла Full-stack.
Наприклад, вам сподобався BackEnd-стек Python розробника – тоді вам підійдуть 2 курси за наступними спеціальностями:
FrontEnd Developer.
Python Developer.
З кожною програмою навчання ви зможете ознайомитися докладніше, перейшовши за залишеними посиланнями.
Зарплати Full-stack розробників
Відповідно до липневої зарплатної аналітики від DOU.ua (опитано 6605 українських розробників), медіанна зарплата FullStack розробників наступна:
Junior – 980 USD;
Middle – 2475 USD;
Senior – 4750 USD.
При цьому ЗП у колег по цеху – FrontEnd та Mobile розробників – приблизно такі ж. Єдині, хто помітно виділяються – BackEnd девелопери рівня Middle та Senior. Їхня медіанна оплата праці становить 2800 USD і 5000 USD відповідно, що на кілька сотень доларів перевищує зарплату фулстеккерів.
Якщо звернутися до міжнародного веб-сайту з пошуку роботи Jooble (має українське коріння), то станом на липень середня пропозиція щодо зарплати для FullStack Developer у Києві становить 114 183 грн (приблизно 3100 USD).
Відповідно до міжнародного опитування Stack Overflow Developer Survey 2023 (понад 90 000 респондентів з усього світу), річна медіанна ЗП FullStack фахівця складає 71 140 USD (приблизно 5930 USD на місяць).
Підсумки
Full-stack Developer — універсальний веб-розробник, який поєднує у собі силу FrontEnd та BackEnd напрямків. Так, спеціалізовані девелопери зроблять всю роботу краще, ніж фул-стек фахівець, проте головний коник героя цієї статті – можливість розробляти повноцінні веб-додатки самостійно, доводячи їх до повністю готового стану. Як і будь-яке інше, Full-stack ремесло має свої переваги та недоліки.
Шлях, яким повинен пройти full stack розробник з нуля досить тернистий і насичений. Проте недаремно казали класики — терпіння та праця все перетруть. Так що все у ваших руках!
Можливо, нас читають розробники Full-stack? Із задоволенням прочитаємо вашу точку зору на позиції, викладені в цій статті. Також будемо раді будь-яким питанням та зауваженням від усіх читачів!
Ну а тим, хто вирішив обрати професію Full-stack Developer, ми бажаємо бути впертими, оптимістичними і з незагасаючим вогником спраги знань в очах.
Успіхів та кодерського натхнення на вашому шляху!
Корисні посилання
Весь каталог спеціальностей: ІТ-спеціальності на ITVDN.
FrontEnd складова: відео курс за спеціальністю FrontEnd Developer.
BackEnd складова:
Python Developer
PHP Developer
ASP.NET MVC Developer
ASP.NET Core Developer
Java Developer
Онлайн навчання в групі з тренером за спеціальністю FullStack Node.js Developer.
Чи варто вчитися програмувати у 2026 році?
Автор: Редакція ITVDN
Ще якихось три-чотири роки тому відповідь на питання «Чи варто йти в IT?» була простішою за рецепт яєчні: «Звісно, біжи і навіть не думай!». Програмісти здавалися супергероями сучасності. За ними полювали рекрутери, компанії змагалися за найкращі офіси з безкоштовними смузі, а зарплати розробників зростали швидше, ніж ціни на нерухомість.
Але ласкаво просимо у 2026 рік. Сьогодні картинка в медіа виглядає геть інакше, а інтернет гуде від апокаліптичних прогнозів: «Штучний інтелект замінить усіх!», «Нейромережі пишуть код за секунди!», «Ера програмістів закінчилася!». Нейромережі навчилися не просто дописувати рядочки коду — вони створюють вебзастосунки, виловлюють найхитріші баги, пишуть документацію і розгортають цілі проєкти за одним коротким текстовим запитом.
Тож абсурдність ситуації досягла піку, і в твоїй голові цілком логічно виникає питання: «Чи є хоч якийсь сенс витрачати час, сили та гроші на вивчення програмування у 2026 році, якщо ШІ вже вміє кодити краще за середнього розробника?»
Коротка відповідь: Так, сенс є, і він величезний! Але правила індустрії змінилися на 180 градусів. Причина, чому тобі варто вчитися, тепер зовсім інша. Давай розберемося без паніки, міфів та рожевих окулярів, що насправді відбувається і чому це твій найкращий шанс увірватися в інвестування у власне майбутнє.
Світ змінився швидше, ніж ми очікували
Якщо ти кілька місяців не стежив за релізами у сфері штучного інтелекту, то, мабуть, застряг у часах, коли ChatGPT просто ввічливо відповідав на запитання чи писав кумедні віршики. Сучасні AI-асистенти, типу Claude Code чи просунутих агентів, — це вже не просто автокомпліт.
Нещодавно Марина Вісс, топовий Senior Applied Scientist в Amazon, яка створює складні системи машинного навчання, поділилася інсайтом, від якого у багатьох новачків поповзли мурахи по шкірі: «Я більше не пишу код вручну. ШІ пише практично кожен рядок, який я відправляю в репозиторій». Тільки вдумайся: людина на вершині айтішної кар'єри в одній з найбільших тех-компаній світу фактично перестала кодити руками!
Сучасні AI-асистенти виконують комплексні, багатоетапні робочі процеси, які раніше тривали днями. Вони можуть:
Створення архітектури: з нуля згенерувати каркас великого вебсайту чи мобільного застосунку.
Написання API та робота з базами даних: за лічені секунди зв'язати програму з сервером і розкидати дані по поличках.
Автоматичне тестування: написати тести, щоб перевірити, чи не зламається щось у п'ятницю ввечері.
Пошук та виправлення помилок: те, на що раніше програміст міг витратити три кави і п'ять годин лайки, ШІ знаходить і фіксить за мить.
Близько 80% рутинного коду сьогодні створює штучний інтелект. Але чи означає це, що інженери Amazon чи Google залишилися без роботи? Аж ніяк. Тут з'являється той самий великий і жирний нюанс, який рятує професію і робить її ще цікавішою.
ШІ чудово пише код. Але він абсолютно не розуміє бізнес
Уявіть, що тобі в підпорядкування дали неймовірно швидкого стажера. Він друкує зі швидкістю світла, знає напам'ять усі довідники світу і виконує будь-яку команду за мікросекунду. Але є одна біда: у нього геть відсутні життєвий досвід, логіка та розуміння реального світу. Він просто бездумно комбінує знаки.
Якщо ти скажеш йому: «Викопай мені яму», він почне копати прямо посеред твого кабінету. Бо ти не уточнив, де саме копати, навіщо і якої глибини вона має бути.
Саме так працює сучасний ШІ. Він геніальний виконавець, але абсолютно сліпий у питаннях контексту та бізнес-логіки.
Нечітке завдання = катастрофа на виході. Якщо замовник або менеджер не здатні чітко сформулювати, який продукт їм потрібен, ШІ видасть ідеальний, красивий, але абсолютно непотрібний код, який не вирішує проблему користувача.
Невміння бачити перспективу. Нейромережа створює рішення «тут і зараз». Вона не знає, що через пів року компанія планує масштабувати бізнес у три рази, і що закладена зараз структура просто «ляже» під навантаженням.
Галюцинації та код-зомбі. Популярні IT-експерти, які ділилися досвідом створення додатків за допомогою AI-інструментів, попереджають: якщо ти сліпо довіряєш ШІ й не розумієш бази, ти ризикуєш отримати купу коду, який ніхто не може контролювати чи перевірити на безпеку. Це так звані код-зомбі — вони наче працюють, але один крок вбік — і все розсипається.
Роль людини в IT нікуди не зникає. Вона просто переходить на вищий, інтелектуальніший уровень.
Кодування більше не є головною навичкою. Що каже статистика?
Давай подивимося правді в очі та звернемося до сухої статистики, яку розкопали дослідники у 2026 році. За даними Американського бюро статистики праці, чисті вакансії з назвою «computer programmer» (тобто суто кодер, людина-транслятор тексту в код) впали приблизно на 27% всього за два роки! Ринок чітко каже: «Просто кодери нам більше не потрібні».
Але водночас попит на Software Engineers (інженерів-розробників), архітекторів та дата-аналітиків залишається стабільно високим. Чому? Як влучно зазначають експерти індустрії: «Справа взагалі не в наборі тексту на клавіатурі. Справа в розумінні. Розумінні системи, архітектури та потреб твоїх клієнтів».
У 2026 році фокус остаточно змістився від «написання коду» до «створення цифрових рішень». Роботодавці шукають людей, які володіють такими навичками:
Переклад з людської на технічну: вміння вислухати хаотичні скарги клієнта, зрозуміти його біль і перетворити це на чітку технічну логіку для ШІ.
Системне мислення: розуміння того, як великі масиви даних зберігаються, що таке чисті дані і як витягнути з них користь для бізнесу.
Управління проектами та комунікація: оскільки ШІ взяв на себе технічну рутину, у розробників нарешті з'явився час на якісне спілкування з командою та створення продуктів, які дійсно зручні для людей.
Чому компанії ніколи не відмовляться від програмістів
Ось тобі ще один залізобетонний аргумент, про який чомусь мовчать диванні критики з соцмереж. В інженерній спільноті зараз активно обговорюють важливе правило ринку: «Людей судити чи звільняти значно простіше, ніж компанії чи алгоритми».
Уяви, що банківський додаток через збій у коді перерахував мільйон доларів не туди. Хто за це відповідає? Штучний інтелект? Нейромережа, якій не випишеш догану і не пред'явиш судовий позов? Звісно, ні.
Компаніям завжди потрібні живі, кваліфіковані фахівці, які виступають у ролі гейткіперів (стражів технологій). Спеціаліст, який натискає кнопку «Запустити проєкт», бере на себе особисту та професійну відповідальність за те, що цей код безпечний, стабільний і працює правильно. А щоб мати право та сміливість взяти таку відповідальність, ти повинен досконало розуміти базу програмування!
Чому розмови про «смерть IT» — це звичайна історична ілюзія
Щоразу, коли у світі з'являється якась революційна технологія, людство охоплює хвиля паніки. Це класичний сюжет, який повторюється століттями.
Коли з'явилися електронні калькулятори, всі кричали, що математики більше не потрібні. Що сталося насправді? Математики перестали витрачати години на додавання стовпчиків у блокнотах і зайнялися вищою наукою.
Коли з'явилися Excel та електронні таблиці, прогнозували занепад фінансових професій. Натомість це породило величезну індустрію дата-аналітики.
Коли з'явилися прості конструктори сайтів, усі пророкували смерть вебмайстрам. Але потреба в унікальних, складних та високонавантажених вебсистемах лише зросла.
Сьогодні те саме відбувається з AI. Як зазначають світові ідеологи штучного інтелекту, наші професії складаються з десятків різних завдань. Так, ШІ навчився виконувати деякі з цих завдань (наприклад, писати базові функції) значно краще і швидше за нас. Але він не може замінити роль розробника в цілому.
Раніше, щоб запустити стартап, потрібна була команда з 10 людей і пів року часу. Сьогодні один кмітливий розробник з AI-асистентом може зробити це за пару тижнів. Поріг входу став як ніколи низьким, а твоя потенційна продуктивність — космічною!
Що насправді варто вчити у 2026 році
Якщо ти вирішив почати вчитися зараз, у тебе є величезна перевага над тими, хто вчився раніше. Тобі не треба витрачати час на нудну рутину. Але тобі критично важливо правильно розставити пріоритети. Не намагайся зубрити — намагайся розуміти.
Ось на що має бути спрямована твоя увага:
1. Фундаментальні принципи (База)
Ти маєш чітко розуміти, як влаштовані програми «під капотом». Що таке змінні, цикли, умови, функції та обьєкти. Як працює клієнт-серверна архітектура. Якщо ти розумієш концепцію, мова програмування стає просто інструментом, який можна змінити за кілька тижнів.
2. Архітектура та екосистема сучасних систем
Сучасний застосунок — це конструктор, який складається з багатьох частин: бази даних, хмарних серверів, систем авторизації та безпеки. Твоє завдання — навчитися бачити всю картину цілісно і розуміти, як ці блоки поєднуються між собою.
3. Навичка керування ШІ та рецензування коду
Ти маєш стати крутим диригентом для свого цифрового оркестру. Навчитися правильно ставити завдання штучному інтелекту (промптинг) та миттєво бачити, де він зхалтурив або написав неоптимальний код, який загрожує безпеці проекту.
З чого почати прямо зараз? Практичний план дій
Якщо ти відчуваєш цей драйв і хочеш спробувати, ось тобі простий і зрозумілий покроковий план, як діяти без хаосу в голові:
Обери одну базову мову розробки. Для старту ідеально підійдуть Python (максимально простий і зрозумілий синтаксис, №1 у сфері ШІ та аналізу даних) або JavaScript (мова, на якій тримається весь сучасний інтернет).
Розберися з базами даних. Дані — це паливо для будь-якого бізнесу. Розуміння того, як зберігати інформацію про користувачів, товари чи замовлення, виділить тебе серед тисяч інших новачків.
Створюй свої проєкти. Придумай щось простеньке, що потрібно особисто тобі: телеграм-бот для обліку власних фінансів, трекер звичок, простий сайт для знайомих. Тільки через власні помилки та практику приходить справжнє розуміння.
Подружися з AI з першого дня. Не сприймай нейромережі як конкурентів. Використовуй їх як безкоштовного персонального ментора. Написав код? Попроси ШІ: «Поясни мені простими словами, як працює цей рядок». Це прискорить твоє навчання в рази!
Підсумки
Тож давай підіб'ємо підсумок. Чи варто вчитися програмувати у 2026 році?
Варто, як ніколи раніше! Але не для того, щоб стати роботом, який механічно штампує текст на клавіатурі. А для того, щоб стати архітектором, творцем та капітаном, який веде за собою технології штучного інтелекту.
ШІ не замінить програмістов. Але програмісти, які вміють ефективно використовувати ШІ, однозначно залишать далеко позаду тих, хто цього робити не вміє або боїться зміни правил гри.
Ми живемо в унікальний момент, коли технології стають доступнішими, ніж будь-коли в історії. Попереду — ера неймовірних можливостей, де виграють ті, хто має сміливість вчитися, мислити логічно і не боїться ставати лідером для штучного інтелекту.
Не питай себе: «Чи виживе кодинг?». Краще запитай: «Чи готовий я навчитися створювати круті цифрові продукти разом із ШІ?».
ТОП-10 лучших видео по .NET
Автор: Влад Сверчков
Здравствуйте!
Друзья, в этот раз мы подготовили для вас подборку лучших вебинаров от ITVDN по направлению .NET. В рейтинг вошли как познавательные вебинары с актуальной информацией, так и вебинары, ориентированные на прокачку ваших навыков создания кода. Давайте приступим к их рассмотрению.
Как стать C# разработчиком в 2021 году? .NET или .NET Core?
Автор — Дмитрий Охрименко, сертифицированный специалист Microsoft (MCTS, MCPD, MCT). Тренер-консультант, эксперт по построению распределенных и веб-ориентированных приложений. Автор курсов по .NET и FrontEnd разработке на ITVDN
C#/.NET разработка — это очень перспективное направление в IT, жизнь которому дала всемирно известная компания MIcrosoft. Если вам интересна данная сфера и вы хотите сделать в ней профессиональный старт, этот вебинар будет для вас как нельзя кстати!
Цель вебинара — помочь вам разобраться с главными аспектами данной специальности, опираясь на тенденции развития IT рынка, правильно расставить приоритеты и помочь спланировать ваше обучение и карьеру по направлению C# / .NET.
На мероприятии рассмотрены следующие важные вопросы:
Есть ли смысл начинать учить C# в 2021 году?
Что такое .NET Framework и что такое .NET Core?
Что учить и в какой последовательности? Карта специальности
Сравнение веб приложения на .NET и на .NET Core
Полезные ресурсы для обучения и развития
Вопросы и ответы
Как стать Full-Stack разработчиком?
Автор — Виталий Емец, FullStack Developer, Microsoft Certified Specialist
Full-stack разработчик (произносится “фулл стек”) — это мастер на все руки в мире веб-разработки. Ему под силу реализовать как клиентскую, так и серверную сторону приложения, которыми обычно занимаются FrontEnd и BackEnd разработчики раздельно друг от друга. Таким образом, в некоторых случаях Full-Stack специалист может даже в одиночку вести проект от начала до конца.
Какими навыками необходимо обладать, чтобы достичь такого уровня мастерства, и какой инструментарий должен быть у истинного Full-Stack разработчика? В чем преимущества данной профессии и какие у нее подводные камни? Каким образом Full-Stack разработка связана с технологиями C#/.NET? Все ответы на ваши вопросы вы получите на вебинаре Виталия Емца.
Что нового в C# 8, 9?
Автор — Алексей Никифоров, Software Engineer & Business Analyst at HYS-Enterprise
C# — это универсальный объектно-ориентированный язык, который является мощным инструментом создания программного обеспечения с широкой областью применения. При столь высокой функциональности он является достаточно несложным в изучении и отлично подходит тем, кто собирается сделать первый шаг навстречу программированию.
Данный вебинар предусматривает погружение в последние нововведения языка С#. Основной упор будет сделан на коммуникацию и обсуждение, предполагая, что участники вебинара — разработчики C#, которые следят за новинками данного языка. Автор пройдется по новым возможностям языка и обсудит, как эти изменения могут быть использованы с целью написания более выразительного и чистого кода.
Алгоритмы и структуры данных в .NET
Автор — Ярослав Кучук, .NET Developer
На вебинаре рассматривается вопрос фундаментальной алгоритмической подготовки – от математического обоснования мощности алгоритма до стандартных алгоритмов и структур данных. Базовые алгоритмы реализованы на C#; автор анализирует их с точки зрения их мощности.
На вебинаре рассматриваются следующие темы:
Понятие алгоритма
Сложность алгоритма и способы ее измерения
Основные структуры данных
Стек
Очередь
Связанный список
Хеш-таблица
Бинарные деревья поиска
Красно-черные деревья
Базовые сортировочные алгоритмы
Базовые поисковые алгоритмы
5. Безопасность .NET веб-приложений: частые ошибки и методы борьбы с ними
Автор — Алексей Голубев, Lead Software Engineer в компании SoftServe
Цель вебинара — обратить внимание разработчиков на проблемы в сфере безопасности веб приложений, которые можно устранить еще на этапе разработки. На вебинаре автор рассказывает о наиболее частых ошибках в приложениях, уязвимостях, связанных со сторонними библиотеками, и то, как их можно избежать.
Содержание вебинара:
Авторизация. Кражи сессий и стойкости паролей.
Человеческий фактор. Что разработчик может сделать не так и на что обращать внимание.
Инъекции. Какие встречаются чаще и чем опасны WYSIWYG редакторы.
Рандомизация. Случайности не случайны.
Вебинар подойдет .NET разработчикам — приветствуются специалисты любого уровня. Будет много практической информации которую можно применить как на этапе разработки, так и на этапе проектирования систем.
6. Техники тестирования для C# разработчиков. Уровень Advanced
Автор — Юрий Науринский, Senior Fullstack .NET Software Developer
На вебинаре будет рассмотрено 3 «продвинутые» техники тестирования, которыми должен владеть опытный разработчик. Будет немного теории, примеры и ответы на вопросы. Все примеры на языке С#. Ниже перечислены техники, которые рассматриваются на встрече.
Property based testing — техника тестирования, применяемая для проверки свойств функции, программы, системы. Ключевая идея в том, что описываются не заранее заданные ожидаемые значения, а свойства, которым должны удовлетворять тестовые примеры. Дальше, тестовые примеры генерируются случайным образом, постоянно проверяя, удовлетворяют ли они вышеописанным свойствам.
Performance testing — одна из самых важных техник тестирования, которую желательно знать каждому разработчику, применяемая для ответа на вопрос, насколько быстро работает функция, программа, система, а также отдельные её компоненты. Также, может отвечать на вопрос, сколько памяти потребляет функция, программа, система.
Load testing — техника тестирования, о которой желательно иметь представление каждому веб-разработчику; применяется для измерения поведения системы под различной нагрузкой, в частности нормальной и пиковой. Могут измеряться время ответа, пропускная способность, прочие бизнес-ориентированные метрики.
7. Docker для .NET разработчиков
Автор — Алексей Никифоров, Software Engineer & Business Analyst at HYS-Enterprise
Docker — это популярная платформа, которая используется при разработке, тестировании и развертывании программного обеспечения. Она позволяет сократить время между написанием кода и поставкой его на “production”. За последние годы популярность Docker’a сильно возросла и данная технология стала индустриальным стандартом в сфере контейнеризации программных решений.
Docker может быть полезен очень широкому спектру специалистов: разработчик, тестировщик, администратор, релиз-менеджер и т. д. Несмотря на то, что Docker написан на Go и использует особенности ядра Linux, .NET разработчики, которые традиционно ведут разработку под Windows, могут получить огромную пользу от использования Docker’a на самых разных уровнях. Знание данного инструмента повысит вашу продуктивность и даст конкурентное преимущество на рынке труда.
Вебинар будет полезен специалистам начального уровня, которые всегда хотели попробовать Docker. Ознакомление будет основано на .NET Core приложении. По завершению, вы смело будете ориентироваться в основных концепциях и инструментах и сможете успешно начать свою путь изучения Docker’а.
8. F# и функциональное программирование для C# разработчиков
Автор — Альберт Ташу, .NET Developer, тренер-консультант учебного центра CyberBionic Systematics, а также сертифицированный специалист Microsoft
С# — это мультипарадигменный язык, и с каждым релизом он приобретает всё больше возможностей, направленных на применение функционального программирования, которое является одной из самых востребованных парадигм в современной разработке программного обеспечения. Для того, чтобы легче было разобраться в этой парадигме, будет рассмотрен очень интересный язык платформы .NET — F#. Помимо этого, будут затронуты основные принципы функционального программирования и их применение при разработке на языке C#.
Содержание вебинара:
Введение в язык F#
Основы функционального программирования
Применение функциональных подходов при разработке на C#
Рефакторинг проекта на С#
9. Создание игры “Space Invaders” на C# с нуля
Автор — Армен Маилян, C#/.NET Developer, тренер-консультант CyberBionic Systematics
Какой самый лучший способ изучить что-то новое? Конечно же, превратить это в игру! Этот способ хорош и в обучении программированию. Начните изучение языка C# путем создания консольной компьютерной игры. Обещаем минимум скучной теории и максимум практики. Будет интересно!
Кому это будет полезно?
Новичкам. Никогда не программировали? Это не повод отказываться от нового крутого опыта. У вас есть шанс сделать свою собственную игру на C# и получить опыт практического применения данного языка программирования, а также попробовать себя в роли разработчика игр.
Начинающим C# разработчикам. Вы сможете углубить и применить на практике свои знания языка C# вместе с наставником.
Чему вы научитесь:
Разрабатывать простую игру на языке C#.
Разбивать большую задачу на отдельные этапы и последовательно их реализовывать.
Применять на практике процедурный и объектно-ориентированный подход для написания программ на С#.
Понимать и применять основы алгоритмирования.
Применять знания основ ООП для создания полноценной программы.
Использовать функционал .NET Framework.
10. Создание эволюционной игры Conway's Game Of Life на C# + WPF
Автор — Юрий Науринский, Senior Fullstack .NET Software Developer
На вебинаре будет рассмотрен Game Of Life — клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 году — и его реализация с помощью языка программирования C# и фреймворка WPF.
Прежде чем реализовывать игру, необходимо чётко определить задачу и постановку правил самой игры. Дальше будет рассмотрено, как реализовать саму логику игры без привязки к какому-либо фреймворку. Следующий логичный шаг после того, как была реализована основная логика игры — это рассмотрение привязки логики к фреймворку WPF и придание «жизни» игре. В конце вебинара автор расскажет, какие техники тестирования можно применить для гарантии корректности получаемого результата логики игры.
Данный вебинар будет интересен C# разработчикам, которые желают углубиться в разработку приложений с использованием технологии WPF, а также хотят рассмотреть с практической точки зрения достаточно интересную и известную математическую игру.
Изучайте .NET разработку на ITVDN!
7 найкращих ігор, написаних на Unity
Автор: Влад Сверчков
Добридень, дорогі читачі блогу ITVDN!
Тема комп'ютерних ігор часто опиняється в епіцентрі багатьох обговорень. На сьогоднішній день ігри є свого роду видом мистецтва, який має гіллясту класифікацію та різні горизонтальні і вертикальні поглиблення, подібно до інших видів творчої діяльності.
Як живопис, скульптура, фотомистецтво – ігри також мають свій жанр, котрий викликає у нас різні емоції та відчуття. Одні підносять сюжети, які захоплюють дух, інші змушують вирішувати головоломки, треті спрямовані на те, щоб полоскотати нерви. Кожна людина незалежно від віку та особистих переваг може знайти собі відповідний ігровий екземпляр.
Для того, щоб реалізувати свої ідеї та концепції у відеогрі, розробники використовують безліч інструментів: мови програмування, знання математики, фізики та англійської мови, системи контролю версій, а також ігровий рушій – фундамент будь-якої гри. Саме на останньому ми робимо акцент в даній статті.
Більш детально тему розробки ігор було розкрито в статті “Як стати розробником ігор”. Якщо вам цікаво дізнатися, в чому специфіка роботи гейм девелоперів, як вони сходять на ігровий Олімп і яким набором технологій при цьому озброєні, переходьте за посиланням вище – ви отримаєте відповіді на свої запитання.
Отже, ігровий рушій – це водночас інструментарій для створення гри та її базове програмне забезпечення; кілька підсистем, які мають працювати разом, щоб на виході отримати гру. У ці підсистеми входять рушії рендерингу, анімації, фізики, звуку, система скриптів, штучний інтелект, мережевий код та багато інших складових. Одним із найпопулярніших рушіїв є Unity (читається як "юніті") – кросплатформний продукт компанії Unity Technologies, що дозволяє створювати додатки більш ніж на 25 різних платформах. Цей перелік включає персональні комп'ютери (Windows, macOS, Linux), мобільні пристрої (Android, iOS), консолі (PlayStation, Xbox, Switch тощо), VR (Virtual Reality) та інші пристрої.
Unity можна назвати найбільш щедрим ігровим рушієм. І не лише тому, що на ньому випущено справді багато ігор різних жанрів під безліч платформ, а й за його безкоштовну базову версію. Unity значно зменшує трудові та грошові витрати розробників. Рушій порівняно простий у використанні для будь-якого девелопера-початківця, але при цьому не відстає від технологій поточного часу. Ця якість принесла Unity велику популярність серед інді-розробників. Однак і у колі великих студій його також використовують.
Давайте розглянемо ТОП-7 найкращих ігор на Unity, щоб переконатися в силі та здібностях даного рушія.
Hearthstone: Heroes of Warcraft
Карткова онлайн-гра за мотивами всесвіту Warcraft. Її суть полягає у віртуальних битвах один з одним за допомогою колод карт з покроковою системою передачі ходів між опонентами протягом матчу.
До виходу Hearthstone поняття “карткова гра” у цифровому середовищі сприймалося досить холодно. Багатосторінковий перелік правил, маса перевантажених механік, загальна недружелюбність до гравця – це спадщина попередніх екземплярів жанру, стикатися з яким середньостатистичному користувачеві не дуже й хотілося. Саме тому реліз альфа-версії Hearthstone сколихнув ігрову спільноту, викликавши велику увагу до гейм-продукту. Його відносна простота та захоплюючий ігровий процес не лише повернули надію гравцям-ветеранам, а й привели нову аудиторію. Можна сказати, що в жанрі карткових ігор відкрилося друге дихання.
Hearthstone: Heroes of Warcraft неодноразово нагороджувалася преміями в різних номінаціях, у тому числі: “найкраща мобільна гра”, “найкраща стратегічна гра”, “найкраща багатокористувацька онлайн-гра”. Більше того, вона стала однією з провідних кіберспортивних дисциплін у своєму жанрі.
Cities Skylines
Містобудівний симулятор, який спрямований на забудову та розвиток власного міста. Гра примітна тим, що крім архітектури необхідно займатися оподаткуванням, організовувати роботу міських служб та громадського транспорту, підтримувати рівень бюджету міста, населення, здоров'я, щастя, зайнятості, стежити за забрудненням довкілля, автотрафіком та іншими елементами гри. Підтримати розповсюдження парків, заборонити куріння, ввести закон про економію електроенергії — вам доступна безліч важелів управління вашим містом.
Також у гру вбудований API для створення модифікацій мовою програмування C#, що дозволяє гравцям додавати нові моделі будівель та транспорту, вносити свої корективи у процес гри. Наприклад, можна збільшити допустиму ігрову зону, змінити ігрову перспективу на перспективу від першої особи, автоматизувати деякі елементи гри.
Cuphead
Комп'ютерна гра, яка поєднує в собі жанри run and gun та shoot 'em up. Її головною особливістю є візуальна складова. Працюючи над стилістикою Cuphead, канадські інді-розробники надихалися роботами аніматорів 1930-х років, внаслідок чого графічно гра дуже відрізняється від будь-яких інших.
Cuphead анімована повністю на папері як справжній мультфільм тих часів. Комп'ютер був використаний лише для розмальовки ескізів, в той час як саме життя намальованим героям дали руки аніматора, які за допомогою олівця змалювали велику кількість аркушів паперу.
Однак Cuphead сподобалася гравцям не лише завдяки мальованій анімації. За мультяшною естетикою ховається шалений хардкор — платформер просто створений для того, щоб перетворювати голови геймерів на киплячий чайник. Невелика кількість життів та різноманітність випробувань/босів розставлять усі крапки над “i”. Навіть запросивши у гру свого друга, не сподівайтеся на поступки з боку гри.
Pillars of Eternity
Ізометрична партійна рольова гра, яка сповідує принципи "старої школи" і є духовною спадкоємицею гучних рольових ігор минулого: Baldur's Gate, Planescape: Torment та Icewind Dale. Pillars of Eternity не тільки нічим не поступається своїм попередникам із двохтисячних, а й привносить зручну сучасну механіку. Розроблена компанією Obsidian Entertainment, на рахунку якої такі відомі проєкти, як: Fallout: New Vegas, Neverwinter Nights 2, Star Wars: Knights of the Old Republic II, The Outer Worlds та інші. Всі необхідні грошові витрати на створення гри були покриті за допомогою краудфандингової платформи Kickstarter — в концепцію гри повірили вірні шанувальники творчості Обсидіан та фанати рольових ігор.
За допомогою Unity розробникам вдалося створити деталізований та пропрацьований світ, який високо оцінили як критики, так і геймери. Рушій дозволив дбайливо перенести старі механіки на нову платформу, при цьому відшліфувавши всі гострі кути, які були присутні в іграх-побратимах кінця дев'яностих та початку нульових. Звичайно, Pillars of Eternity не ідеальна, проте вона довела, що класні рольові ігри зі старим духом і водночас сучасною оболонкою можуть існувати та бути гарним прикладом для наступних екземплярів цього жанру.
Pokemon Go
Мобільна гра, яка у 2016 році прогриміла на весь світ. Їй присвячувалися репортажі новин у багатьох країнах, включаючи США, Росію, Україну тощо. Платформа Unity забезпечила вихід Pokemon Go як під Андроїд, так і під iOS. Грі вистачило лише одного тижня, щоб стати всесвітньо відомою.
Pokemon Go – це рольова багатокористувацька гра для мобільних пристроїв, що використовує технологію доповненої реальності, яка "викликає" віртуальних покемонів на певні ділянки реальної місцевості. Щоб побачити дане створіння і спіймати його, необхідно зайти в гру і направити камеру свого смартфона/планшета на місце присутності істоти. Самі покемони переміщуються ігровою картою в той час, як ви рухаєтеся у реальному світі. Таким чином, гра не тільки демонструє досягнення сучасних технологій доповненої реальності, а й мотивує своїх гравців на підтримку фізичної активності.
Subnautica
Гра на рушії Unity, розроблена інді-студією Unknown Worlds Entertainment у жанрі пригодницької гри та симулятора виживання з відкритим світом. Дуже тепло прийнята як критиками, так і гравцями. На Metacritic – популярному сервісі, який збирає рецензії до різних музичних альбомів, ігор, фільмів, ТВ-шоу, DVD-дисків та мобільних ігор – середня оцінка ПК-версії від критиків – 87 із 100 (39 видань висловили свою думку), а від користувачів – 8.5 із 10 (806 гравців висловили свою думку).
Геймплей гри побудований навколо виживання на барвистій океанічній планеті серед безлічі недружніх істот, куди герой потрапив у результаті аварії космічного корабля. Для різноманітності контенту та надання йому більшої кількості механік, в гру було введено зручну систему крафту. Не забули розробники і про сюжетну складову, яка здатна якщо не здивувати, то утримувати гравця в інтризі до самої розв'язки. Проте головною особливістю Subnautica було саме дослідження підводного світу, сповненого таємниць та небезпек. Перегляньте огляди на неї і ви дізнаєтеся, наскільки комплексну, багатогранну і при цьому красиву гру можна створити з використанням Unity.
Kerbal Space Program
Цікавий проєкт на Unity, котрий являє собою космічний симулятор. Жанр гри – пісочниця, в якій вам слід спорудити свій космодром, побудувати ракету і запустити її в космос. Обираєте цілі, збираєте літаючий апарат необхідної конфігурації, злітаєте, вирушаєте в якусь цікаву точку космосу, здійснюєте свої дослідження – і назад додому.
Звісно, не все так просто. Щоб здійснити задумане, вам потрібні хоча б поверхневі знання в області фізики, інакше ваша конструкція навіть на сантиметр не підніметься. Також не обійтися і без кмітливості. Конструювання ракети, вирішення питань паливного постачання, акумуляція електроенергії в космічному просторі та інше — іграшка для тих, хто не боїться експериментувати та кидати собі виклики. Створюючи її, розробники хотіли зробити не лише головоломку для аерокосмічних любителів, а й популяризувати наукову та інженерну діяльність у широкого загалу. Чудовий вибір для тих, хто бажає підвищити свою ерудованість.
Підсумки
Як ви помітили, ігровий рушій Unity демонструє чудові показники у створенні абсолютно різнополярних гейм-продуктів. Містобудівні симулятори, доповнена реальність на вашому смартфоні/планшеті, хардкорні ігри в стилі ретро-мультиків, підводні пригодницькі пісочниці, симулятори з великим акцентом на фізику та кмітливість, карткові ігри та ізометричні рольові стратегії... Це далеко не повний перелік жанрів, в яких Unity себе чудово зарекомендував. Щоб створювати захоплюючі і затягуючі ігри, необов'язково мати знання С/С++.
Якщо вас цікавить гейм індустрія і ви хочете пов'язати свою професійну діяльність з розробкою ігор, пропонуємо вам опанувати спеціальність Unity/Game Developer, яка доступна на ITVDN у форматі записаних відео уроків. Обов'язкова програма навчання включає наступні відео курси:
Unity Starter
Unity Essential
Unity Advanced
Основи використання Git
Unity User Interface
Крім цього, програма містить прикладні відео курси, в яких автор демонструє створення ігор, аналогічних таким загальновідомим, як: Need For Speed, Pokemon Go, Counter Strike, Agar.io тощо. Також в курсі приділяється увага створенню ігор VR (віртуальна реальність) та модифікації вже існуючих (як, наприклад, GTA V).
Для того, щоб створювати унікальні відеоігри з добре пропрацьованим геймплеєм, необхідно вивчити мову програмування C#. Безумовно, розробляти ігри можна, знаючи лише Unity, проте щоб внести щось своє до гри, потрібна C#. Ця мова є однією з найлегших та найзручніших у вивченні для новачків. ITVDN має невеликий “чит” для тих, хто хоче її опанувати – відео курси від Олександра Шевчука, експерта у галузі побудови архітектури інформаційних систем, бізнес-аналізу та управління IT-проєктами. Цей автор є одним із найулюбленіших серед наших студентів. Його манері викладання складно знайти рівних, як і рівню зрозумілості записаних ним уроків.
Нещодавно Олександр Шевчук випустив новий відео курс "Процедурне програмування мовою C#", який є оновленням курсу "С# Стартовий". Обираючи навчання у даного автора, ви досягнете дзену C# у максимально зрозумілій та мотивуючій формі, котру складно відшукати в інтернет-просторі. Поєднайте отримані знання з відео курсами спеціальності Unity/Game Developer та отримайте солідний інструментарій розробки відеоігор, з яким зможете підкорювати будь-які вершини ігробудівництва.
Якщо у вас виникли зауваження або побажання до статті, сміливо залишайте їх у коментарях.
Бажаємо успіхів та невичерпної мотивації на шляху до ваших цілей!
Залишайтеся з ITVDN!
Що повинен знати FrontEnd розробник у 2019 році
Автор: Влад Сверчков
Верстка сайтов и веб-программирование привлекают большое количество новичков в мир IT. Это связано с достаточно низким порогом вхождения. Количество желающих стать фронтендщиком с каждым годом увеличивается, вследствии чего растут и требования к кандидатам.
Какие технологии необходимо изучить, чтобы стать FrontEnd разработчиком в 2019 году? Давайте разберемся.
HTML5 & CSS3
HTML5 и CSS3 - это фундаментальные технологии, без знания которых не обойтись любому веб-разработчику. С помощью языка гипертекстовой разметки HTML создается разметка (каркас) каждой интернет-страницы. Затем язык стилей CSS преображает сайт и придает ему привлекательный и эффектный внешний вид.
Также необходимо владеть:
кроссбраузерной адаптивной версткой, чтобы уметь создавать сайты под мобильные устройства, планшеты и широкоформатные экраны и для различных браузеров;
семантической версткой для повышения качества разметки и улучшения поисковой индексации сайта.
Хорошее владение HTML и CSS уже позволяет заниматься версткой сайтов и начать зарабатывать деньги. Именно с этих двух базовых технологий начинается путь к профессии FrontEnd разработчика.
Bootstrap 4
Популярная HTML/CSS платформа для разработки адаптивных веб-приложений, которую применяют при создании сайтов и интерфейсов администраторских панелей. Основные преимущества Bootstrap:
высокая скорость верстки;
кроссбраузерность и кроссплатформенность;
наличие хорошей документации, большого сообщества и огромного количества разнообразных обучающих материалов;
низкий порог вхождения (необходимо знать лишь основы HTML, CSS, JavaScript и jQuery).
JavaScript
Язык программирования, который используется как при разработке клиентской стороны веб-приложения, так и серверной. При помощи JavaScript (сокращенно - JS) можно писать даже десктопные (настольные) и мобильные приложения, используя определенные программные платформы и библиотеки. Этот язык позволяет:
динамически изменять разметку;
осуществлять интерактивное взаимодействие с пользователем;
анимировать изображения;
совершать валидацию форм;
управлять мультимедиа и т. д.
Другими словами, JavaScript “оживляет” страницу и добавляет ей функциональности. Хорошее владение данным языком программирования является обязательным для каждого FrontEnd разработчика.
Сергей Росоха, Software Architect с 11-летним опыта во FrontEnd/JS, отмечает важность изучения алгоритмов и структур данных на JavaScript:
“JavaScript давно уже используется не только для разработки динамических интерфейсов пользователя, но и для написания достаточно сложной бизнес-логики. Поэтому знание алгоритмов и структур данных становится критичным для JS-разработчиков. ” (источник)
JavaScript использует официальный стандарт ECMAScript (сокращенно - ES), который подразумевает определенное формальное описание синтаксиса, базовых объектов и алгоритмов. На данный момент существует множество различных версий ES. Работодатели чаще всего требуют знание ES6.
Однако, вначале необходимо изучить чистый JavaScript и лишь потом вникать в новые стандарты. Как ни крути, а классику надо знать. Благодаря хорошему владению JS можно быстро разобраться в любой версии ES и затем освоить любой фреймворк или библиотеку.
Фреймворки JavaScript
Это инструменты, с помощью которых создаются динамические веб/мобильные/десктопные приложения на языке JavaScript. Они ускоряют разработку веб-приложений и предусматривают четко структурированную организацию кода, повышая его качество и чистоту.
Самыми популярными фреймворками для фронтенд-разработки можно назвать Vue.js, React и Angular. Каждый из них предназначен для решения своего спектра задач и имеет различную степень сложности: Vue.js - самый легкий (но и с наименьшим сообществом), React - средней сложности, Angular - высокой сложности. Стоит сконцентрироваться на глубоком изучении одного фреймворка, но в то же время очень рекомендуется знать особенности и сферу применения всех вышеперечисленных технологий.
Какой фреймворк все же выбрать? Мнения на этот счет расходятся. Инструментарий выбирается индивидуально под проект и трудно предугадать, какие задачи вам нужно будет решать. Мы рекомендуем Angular.
CSS препроцессоры
CSS препроцессор - это программа, которая имеет свой собственный синтаксис, но может сгенерировать из него CSS код. Самыми популярными считаются SASS, Stylus, LESS и PostCSS, однако, наибольшее комьюнити имеет именно SASS. Препроцессоры предназначены для:
ускорения процесса написания кода;
упрощения чтения кода и дальнейшей его поддержки;
минимизации рутинной работы при написании кода.
Для повышения эффективности написания CSS кода вполне достаточным будет изучение лишь одного препроцессора.
Git
Самая популярная распределенная система управления версиями, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Таким образом, если в процессе создания программный продукт стал неправильно функционировать, есть возможность вернуться к предыдущей рабочей версии вместо длительных поисков ошибок.
Также системы управления версиями являются неотъемлемым инструментом командной разработки, который дает возможность девелоперам работать над одним проектом одновременно, сохраняя внесенные изменения. Заодно удобно отслеживать выполнение задач каждым членом команды. Очень важный инструмент для любого IT-разработчика.
jQuery
Небольшая, быстрая и многофункциональная JavaScript-библиотека, для работы с которой необходимо владеть HTML, CSS и JavaScript на базовом уровне. Она призвана упростить программирование на JS. Данная библиотека представляет объемные решения распространенных задач в виде методов, которые вызываются одной строчкой кода.
Несмотря на то, что jQuery теряет популярность, уступая место фреймворкам JS, большое количество сайтов все еще используют эту библиотеку. FrontEnd разработчик, работающий в офисе, не всегда создает новые веб-сайты - необходимо поддерживать и обновлять уже существующие. Тут без знания jQuery никак не обойтись.
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.
Все три технологии являют особую ценность для каждого веб-разработчика и раскрывают организацию работы интернет-приложения.
БЭМ
“Блок, Элемент, Модификатор” - методология, предусматривающая компонентный подход к разработке веб-страниц, в основе которого лежит принцип разделения интерфейса на независимые блоки. Подход БЭМ позволяет повторно использовать существующий код в создании других страниц с сохранением всех его свойств (размеры, шрифт, цвет и т. д.).
Webpack
Мощный сборщик модулей, который позволяет скомпилировать в один файл несколько разных модулей. Используется во время работы над объемными проектами. Успешно применяется как во фронтенд-разработке, так и при создании бэкенд-приложений.
Flex и Grid CSS
Технологии верстки надежных адаптивных веб-страниц, которые позволяют легче создавать динамические сайты и удобнее структурировать их содержимое. Лучше всего Flex-верстку в действии показывает интерактивный сайт flexboxfroggy.com, а Grid-верстку - cssgridgarden.com.
Gulp / Grunt
Системы сборки, которые автоматизируют рутинные задачи разработчиков: минификацию кода, оптимизацию изображений, тестирование, анализ качества кода и прочее. Подходят при разработке небольших проектов.
TypeScript
Кроссплатформенный строго типизированный язык, который является расширением JavaScript. Строгая типизация позволяет уменьшить количество потенциальных ошибок в исходном коде, написанном на TypeScript. Также, этот язык реализует концепции, которые близки объектно-ориентированным языкам, таким как C#, Java и подобным. TypeScript повышает скорость и удобство написания сложных комплексных программ, вследствии чего их становится легче поддерживать, масштабировать и тестировать.
SVG
Язык разметки масштабируемой векторной графики. Изображения на странице, сделанные с помощью SVG, корректно отображаются на экранах с различным разрешением, не теряя при этом своего качества, в отличии от традиционных растровых .jpeg, .png и других.
Английский язык
Знание английского языка является одним из основных требований к фронтенд-разработчику, поскольку большое количество полезной информации находится именно на англоязычных сайтах. Уровень чтения технической документации будет достаточным для комфортного пользования иностранными ресурсами.
Итоги
FrontEnd разработчик - достаточно универсальный боец в мире веб-разработки. Он должен уметь и верстать, и создавать логику работы клиентской части, и понимать работу серверной части веб-приложения. Для освоения такого обширного инструментария стоит запастись временем, терпением и упорством. Перечисленные в статье средства разработки сайтов также имеют аналоги, поскольку для решения разных задач подходят разные веб-инструменты. Однако мы выбрали самые популярные и эффективные из них.
Если у вас остались вопросы о последовательности и необходимости изучения тех или иных технологий, ответы вы можете найти в видео Как стать FrontEnd разработчиком, в котором подробно рассматриваются основные технологии создания клиентских веб-приложений.
Для тех, кто хочет стать FrontEnd разработчиком, на ITVDN создана комплексная программа обучения, которая включает в себя 35 видео курсов.
Желаем вам успехов в достижении ваших целей!
Оставайтесь с ITVDN!
Ігри для тренування навичок програмування
Автор: Армен Маїлян
Code Wars
CodinGame
Cyber Dojo
CodeCombat
CodeMonkey
CSS Diner
Flexbox Froggy
Flexbox Defense
Ruby Warrior
Untrusted
Robocode
CheckIO
Elevator Saga
Вывод
Когда начинали писать код многие из современных гуру программирования, их возможности в обучении были ограничены – книги, справочники, наборы технической документации и спецификаций. Со временем ситуация улучшилась. Начали появляться различные онлайн ресурсы. Появилось множество видеоуроков. Родилось и набрало силы новое направление в обучении – онлайн обучение.
Онлайн обучение прошло долгий путь в последние несколько лет. Появились интерактивные курсы, в сети Интернет выложено множество видеоуроков, различные онлайн-уроки проводятся с квалифицированными тренерами по множеству направлений.
Одним из новых и очень увлекательных способов интерактивного онлайн обучения программированию стали игры, в которых нужно выполнять задания с использованием различных языков программирования.
Конечно, одно только написание кода в играх не сделают из вас профессионального разработчика, однако такие игры могут стать действительно полезным способом отработать навыки и поддержать интерес к обучению. Игры увлекают. Вы внезапно обнаружите, что потратили несколько часов на закрепление своих навыков программирования, даже не осознавая этого.
1. Code Wars
Code Wars поможет вам улучшить ваши навыки написания кода, соревнуясь с другими разработчиками. Игра предлагает большое разнообразие языков, включая JavaScript, Swift, PHP, Python, Ruby и Haskell. Сначала вам нужно будет подтвердить ваши навыки, пройдя базовый тест на понимание языка, который вы хотите практиковать.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: Clojure, C, C++, C#, Crystal, Dart, Elixir, F#, Go, Haskell, Java, JavaScript, PHP, Python, Ruby, Rust, Shell, SQL, Swift, TypeScript.
2. CodinGame
CodinGame предлагает набор бесплатных игр, которые помогут вам в освоении более 25 различных языков программирования, включая C#, Java, Python, JavaScript, Ruby и PHP. Вы можете выполнять игровые практические задания для проверки навыков или посмотреть примеры, объясняющие различные конструкции языка.
Одна из особенностей CodinGame заключается в том, что вы можете играть с друзьями или коллегами, а также участвовать в международных соревнованиях по программированию. Материалы игр доступны на английском и французском языках.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский, Французский.
Доступные языки программирования: Bash, C, C++, C#, Clojure, Dart, F#, Java, JavaScript, Go, Groovy, Haskell, Kotlin, Lua, Objective‑C, OCaml, Pascal, Perl, PHP, Python2, Python3, Ruby, Rust, Scala, Swift, VB.NET.
3. Cyber Dojo
В Cyber Dojo есть практические упражнения и задачи для десятков языков программирования, включая C#, Java, C++, Ruby, JavaScript, PHP, Python и другие. Каждое упражнение предполагает определенную задачу, чтобы дополнить имеющийся код, выполняющий определенную задачу. Несмотря на то, что это не совсем игра, а скорее большой набор интересных задач, это все же отличный способ попрактиковать свои навыки в коде.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: Assembler, BCPL, Bash, C, C#, C++, Chapel, Clojure, CoffeeScript, D, Elixir, F#, Fortran, Go, Groovy, Haskell, Java, JavaScript, Kotlin, PHP, Pascal, Perl, Python, R, Ruby, Swift, VHDL, assert, VisualBasic, NUnit.
4. CodeCombat
CodeCombat ориентирован на учителей и учеников, но играть может каждый. Эта достаточно яркая и увлекательная платформа подойдет для практики в таких языках как Python, JavaScript, CoffeeScript, HTML и CSS. На начальном уровне подземелий вы будете перемещать своего персонажа по различным уровням игры, используя базовые команды. Далее команды усложняются. Можно играть самому, участвовать в соревнованиях и многопользовательских вариантах игр – все это поможет вам не заскучать во время отработки в этой игре полученных ранее навыков программирования. Имеется возможность играть бесплатно, но получить доступ ко всему контенту можно только по платной подписке.
Особенности игры: браузерная игра, есть платный контент.
Доступные языки интерфейса: Английский, Русский, Украинский и еще 57 языков.
Доступные языки программирования: Python, JavaScript, CoffeeScript, HTML и CSS.
5. CodeMonkey
CodeMonkey это онлайн игра, которая обучает программированию с использованием CoffeeScript.
CoffeeScript – это современный открытый язык программирования, который по своей сути является просто надстройкой и синтаксическим сахаром для JavaScript. В основном CoffeeScript используется для веб-приложений. В игре пользователи с помощью кода контролируют поведение обезьяны и помогают ей собирать бананы.
CodeMonkey предназначен скорее для обучения детей. Однако данная игра подойдет и взрослым, желающим в простой игровой манере закрепить знания языка.
Несмотря на относительно детский интерфейс игры, задачи в CodeMonkey затрагивают такие темы языка программирования, как: объекты, вызовы функций, аргументы, циклы, переменные, массивы, цикл for, определение функций, булевые условия, цикл until, if и if-else условия, булевые операторы, события клавиатуры и мыши.
Имеется бесплатная триальная версия и ряд премиум подписок, позволяющих, в частности, учителям подключать учеников для обучения и контроля выполнения заданий.
Особенности игры: браузерная игра, триальная версия на 14 дней и платная подписка.
Доступные языки интерфейса: Английский, Русский, и еще 16 языков.
Доступные языки программирования: CoffeeScript (JavaScript).
6. CSS Diner
CSS Diner - простой, но достаточно увлекательный способ изучения языка CSS. Последовательно проходя 32 уровня, вы в игровой манере сможете познакомиться с основами работы CSS-селекторов. Начиная с простых селекторов по классам и тэгам уровни этой бесплатной игры постепенно усложняется, основываясь на том, что вы запомнили на предыдущих уровнях. Под конец вы будете использовать сложные структурные селекторы наподобие и их комбинации. Эта игра будет полезна тем, кто ищет удобный и нескучный инструмент, чтобы попрактиковаться в верстке.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: CSS.
7. Flexbox Froggy
Flexbox Froggy это удобный инструмент для тех, кто уже имеет определенные навыки работы с CSS и хочет на практике, и в интересной манере, изучить основы такой технологии, как CSS Flexible Box Layout Module (или CSS Flexbox). У Flexbox Froggy достаточно простой интерфейс, с помощью которого вы научитесь основам выравнивания во Flexbox, пока вы помогаете лягушонку Фрогги и его друзьям в их приключениях.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский, Русский, Украинский и еще 28 языков.
Доступные языки программирования: CSS.
8. Flexbox Defense
Flexbox Defense - еще один интересный способ попрактиковаться в навыках работы с Flexbox. Это игра по принципу Tower Defense. В этой игре вы будете с помощью CSS свойств размещать пушки в нужные места вдоль пути, чтобы победить встречные волны врагов. Вы получите нужную практику в интересной интерактивной манере, используя те же команды, что и в Flexbox Froggy.
Особенности игры: браузерная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: CSS.
9. Ruby Warrior
Если вы хотите изучать язык Ruby, тогда Ruby Warrior - это игра для вас. Управляя персонажем рыцаря с помощью кода на Ruby, вы будете выполнять игровые задачи, сражаться с монстрами и проходить подземелья. В игре есть простые и сложные задания, подходящие вашему уровню владения языком Ruby. Играя в Ruby Warrior вы улучшите ваши знания циклических и условных конструкций, создания и вызова методов. Авторизация в игре происходит через аккаунт Facebook.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: Ruby.
10. Untrusted
Untrusted - это приключенческая игра, которая поможет вам проверить и закрепить ваши знания и навыки JavaScript для решения различных проблем. Вы будете использовать код на JavaScript, чтобы провести доктора Эвала по разным локациям электронной вселенной. Это увлекательная бесплатная игра поможет отработать достаточно сложные навыки применения JavaScript.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Языки: JavaScript
11. Robocode
Robocode подойдет вам, если вы когда-нибудь интересовались играми с противостоянием различных роботов. Играя в Robocode, вы приобретете и укрепите навыки программирования, создавая виртуальные боевые роботы-танки. Логику поведения этих роботов вы будете прописывать, используя языки Java или C# с помощью вашей IDE. Битвы с такими роботами затем разыгрываются в браузере на экране в режиме реального времени.
Особенности игры: бесплатная игра; онлайн игра, но требует установки определенных модулей на ваш ПК.
Доступные языки интерфейса: Английский.
Языки: Java или C#.
12. CheckIO
CheckIO - это стратегическая игра, которая будет интересна как начинающим, так и уже продвинутым программистам. Вы будете выполнять задания, которые помогут лучше изучить особенности выбранного языка программирования. Данная игра поможет вам вписать код лучше. Набирая балы за выполнение задания, вы можете также сравнивать свои ответы с ответами других игроков CheckIO.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: Python, JavaScript.
13. Elevator Saga
Elevator Saga поможет вам протестировать ваши знания JavaScript во время решения проблем, связанных с перемещением лифта и транспортировкой людей наиболее эффективным способом. Начинается задача с перемещения 15 человек, затем задачи становятся сложнее.
Особенности игры: браузерная игра, бесплатная игра.
Доступные языки интерфейса: Английский.
Доступные языки программирования: JavaScript.
Для удобства подбора подходящей игры мы собрали их в таблицу:
Не всегда только суровая зубрежка и толстые учебники способствуют получению знаний. Обучение в игровой форме – это также один из лучших способов запомнить что-то новое или закрепить уже существующий навык.
Вывод
Многие из представленных в этом обзоре игр смогут реально помочь Вам улучшить понимание основного инструмента разработчика – языка программирования. Мы включили в этот обзор как игры, полезные при изучении языков программирования, так и те из них, что помогут лучше запомнить конструкции CSS, HTML, SQL. В некоторых играх вы будете выполнять готовые задачи, зарабатывая баллы и играя «против компьютера», некоторые игры позволят вам соревноваться с другими разработчиками в поиске решений чужих задач и предложении встречных задач.
Учитесь, играючи и обучайтесь во время игры! Мы надеемся, что наша подборка игр поможет вам в этом. Также всем, кто изучает программирование, мы рекомендуем использовать интерактивный тренажер навыков ITVDN.
В тренажере вас ждут задания, которые нужно выполнять, используя навыки программирования. За правильные решения вы будете получать баллы. В случае ошибки, вы сможете воспользоваться подсказками, но за использование подсказок будут сниматься баллы. Итак, ваша задача – выполнить все задания на тренажере, набрав максимальное количество баллов!
На ITVDN доступны интерактивные тренажеры по таким языкам программирования и технологиям:
HTML5&CSS3 (уровень Starter и Essential)
JavaScript (уровень Essential и Advanced)
Python (уровень Starter и Essential)
Java Starter
C# (уровень Starter и Essential)
SQL Essential
C++ (уровень Starter и Essential)
Перейти в Тренажер ITVDN
10 заповідей Node.js розробника
Автор: Редакція ITVDN
10 отменных советов как стать лучшим Node.JS разработчиком 2018 года от автора Азата Мардана. Эта статья содержит в себе собранный и тщательно отфильтрованный опыт писателей и спикеров технологии всего Веб-сообщества.
Заметка: первоначально заголовком статьи должно было быть «Лучшие практики Node.JS от Гуру Технологии». Эта статья охватывает не «новые» и «лучшие» практики 2017-2018 года, а тщательно выверенные и проверенные временем и практикой паттерны, которые стопроцентно приведут к успеху. И хотя многие из проверенных практик Вам определенно пригодятся в 2018, 2019 и даже более поздних годах, статья не включает в себя такие новшества, как async/await и прочее. Почему? Потому что эти фичи не включены в состав, собственно говоря, кода Node.JS-ядра или кода таких популярных проектов как npm, Express и прочие.
Полноценно заниматься разработкой на Node.JS я начал в 2012 году, когда присоединился к Storify. С тех пор я никогда не жалел о принятом решении и не ощущал, как будто я многое потерял, закинув Python, Ruby, Java или PHP – языки, с которыми я работал на протяжении предыдущего десятилетия.
Работа в компании Storify для мня оказалась достаточно интенсивной. В отличии от большинства компаний, все приложения Storify работают исключительно на JavaScript. Как вы понимаете, большинство компаний, особенно такие крупные как PayPal, Walmart или Capital One, используют Node.JS только для конкретных определенных задач. Как правило, это gateway API. Однако, с точки зрения программиста, ничего не может быть лучше, чем работа и погружение с головой в одну определенную технологию.
Краткая сводка:
Избегайте нагромождения – пытайтесь разбивать свой код на столько мелких составных частей, насколько это вообще возможно. И даже больше.
Используйте асинхронный подход – избегайте синхронное программирование словно чумы.
Избегайте блокировки потоков – помещайте ВСЕ требуемые утверждения в начало файла, ибо они синхронные и, следовательно, будут блокировать программу.
Require должен быть закеширован – считайте, это такая фича в Вашем коде. Или баг. Как Вам угодно.
Всегда проверяйте свой код – ошибки – это не вышивание, которое можно выбросить в любом момент. Никогда не упускайте обнаруженные ошибки!
Используйте try…catch только в синхронном потоке – try…catch бесполезен в асинхронном коде. Кроме того, v8 никогда не оптимизирует try…catch-код.
Возвращайте значения или используйте if…else – просто на всякий случай: возвращайте значения что бы остановить выполнение участка кода.
Обращайте внимание на события ошибок – почти все Node.JS-классы или объекты реализуют паттерн-наблюдатель и производят события-ошибки. Не стоит пропускать их.
Познайте свой npm – устанавливайте модули с ключами –S или –D вместо –save или –save-dev.
Используйте текущие версии в package.json – при работе с npm он по-тупому просто добавляет верхнюю скобочку по умолчанию при использовании вместе с ключом –S. Дабы избежать этого, просто вручную блокируйте версии. Никогда не доверяйте semver в своих приложениях, но доверьтесь ему в модулях с открытым исходным кодом.
Бонус – используйте разные зависимости. Помещайте то, что требует проект только в процессе разработки в devDependencies. После этого используйте npm i –production. Чем больше ненужных зависимостей используется, тем больше риск возникновения уязвимостей.
Давайте разберем некоторые из этих пунктов поподробнее:
Избегайте нагромождения
Взгляните на некоторые модули, написанные Исааком З. Шлейтером, создателем npm. К примеру, use-strict включает «строгий» режим написания JavaScript-модульного кода. Включается эта опция всего лишь в три строчки:
Но почему-же все-таки стоит избегать нагромождения кода? Одна известная фраза американского воздушного флота гласит: «все должно быть просто до идиотизма». И на это существуют свои причины. Человеческий разум не может держать в памяти больше чем от 5 до 7 вещей одновременно. Это просто как факт.
Разбивая код на небольшие составные части, Вы и другие разработчики легко сможете разобраться в нем и понять, для чего он предназначен. Так же упрощается процесс тестирования. Вот пример:
Или еще:
Уверен, большинство из Вас отдадут предпочтение второму примеру, когда имена переменных сразу же делают понятной их суть. Конечно, в процессе написания кода Вы можете думать, что Вы понимаете, как он работает и так. Возможно, Вам даже захочется продемонстрировать свою смекалку и сообразительность, объединив несколько методов вместе в одну строку. Пожалуйста, пишите так, как если бы Вы были более неопытны. Как если бы Вы не смотрели в код на протяжении 6 месяцев, или очень устали и, кроме того, еще и выпили. Если Вы пишете код на пике своей ментальной активности, Вам будет труднее понимать его позже, не говоря уже о Ваших коллегах, которые даже не знакомы с ходом Ваших мыслей. Держать все в относительной простоте единственно верный метод – особенно в рамках Node.JS-технологии, где используется асинхронный подход.
Другими словами, преимущества от использования подхода малых частей значительно более перевешивают недостатки. Помимо прочего, они позволяют значительно быстрее исправить различные ошибки, которые могут возникнуть по разным причинам в процессе работы с Node.JS-приложением.
Используйте асинхронный подход
Синхронный код мало где используется в нынешнем Node.JS. Как правило, он находит свое применение в написании CLI-команд или скриптов, не связанных с веб-приложениями. Что же касательно веб-разработки, Node.JS программисты предпочитают использовать асинхронный подход, так как это позволяет избежать блокировки потоков.
К примеру, синхронный код будет приемлем, если мы строит скрипт для работы с базой данных, не системы для обработки параллельных/конкурентных задач:
Но, в случае веб-приложения, лучше использовать следующее:
Отличительная особенность состоит в том, пишите ли вы долго исполняемый конкурентный код или небольшой скрипт с малым временем жизни. А вообще, лучше запомните одно хорошее правило: всегда пишите асинхронный код в Node.JS.
Избегайте блокировки require
S обладает простой системой загрузки модулей, которая использует общий формат CommonJS. Самый простой способ подключить модули, разбросанные по отдельным файлам – использовать встроенную функцию require. В отличии о AMD/requirejs, Node/CommonJS синхронна. По сути, функция работает согласно следующему принципу: Вы импортируете то, что было экспортировано в виде модуля или файла.
О чем большинство разработчиков даже не догадывается, так это о том, что require кэшируемая. Потому, до тех пор, пока нет заметных изменений зарезервированного имени файла (и, в случае использования npm-модулей, их нет), код модуля будет выполнен и подгружен в переменную только единожды (для обработки). Подобная методика позитивно сказывается на оптимизации. Однако, даже с кэширование, лучше сначала попробуйте обойтись без require. Попробуйте использовать axios-модули. Путь /connect в свою очередь будет медленнее чем требуется, ибо импорт модулей происходит после генерации запроса:
Гораздо лучше будет загрузить модули тогда, когда сервер еще даже не определен, не в маршруте:
Require должен быть закэширован
Хотя я и упоминал о том, что require может быть закэширован, но что так же интересно, так это то, что мы можем поместить код вне module.exports. К примеру:
Зная, что некоторые участки кода могут быть запущены только один раз, подобная реализация окажется более чем полезной.
Всегда проверяйте свой код
Node.JS – это Вам не Java. В Java Вы выкидываете исключения потому как в большинстве случаев Ваше Java-приложение не должно продолжать работать в случае ошибки. В Java для этого Вы просто используете try…catch.
В случае Node.JS история обстоит несколько по-иному. Так как технология выполняется в асинхронном режиме, контекст ошибки всегда будет отделен от любого перехватчика (такого как try…catch) в случае возникновения самой ошибки. Этот код в Node.JS будет просто-напросто бесполезен:
Но! Привычный try…catch все еще может быть использован в синхронном режиме. Вот более действенный рефакторинг предыдущего участка кода:
Если мы не можем обернуть request-вызов в блок try…catch, ошибка будет не перехвачена. Однако, это легко решается при помощи callback-аргумента error. Кроме того, Вам нужно всегда вручную отлавливать error в каждом и каждом callback`е. Проверяйте наличие ошибки (и убедитесь, что она не равна null) и затем, или демонстрируйте содержание ошибки пользователю или клиенту и потому логируйте ее, или отправляйте ее обратно в место вызова при помощи error-callback`а.
В качестве небольшого фокуса Вы можете использовать библиотеку okay. Применяйте ее как наведено ниже что бы обойти ручной проверки на ошибки:
Возвращайте значения или используйте if…else
.JS – параллельный. Эта особенность может привести к багам, если не отнестись к ней с должной осторожностью. Что бы обезопасить себя, останавливайте выполнение участка кода при помощи ключевого слова return:
Избегайте бессмысленной работы (и ошибок) из-за неостановленного вовремя исполнения:
Просто убедитесь, что return всегда будет стоять на страже целесообразности работы Вашего кода.
Обращайте внимание на события ошибок
Почти все классы/объекты Node.JS реализую паттерн-наблюдатель, который порождает событие-ошибку. Это прекрасная возможность для разработчика отловить особо подлые ошибки и придушить их до того, как они устроят хаос.
В качестве полезной привычки было бы неплохо создавать программы-прослушиватели событий-ошибок при помощи использования .on():
Познайте свой npm
Многие Node.JS и front-end событийные разработчики знают, что –save (для npm install) не только установит модуль, но так же и создаст запись в package.json с упоминанием текущей версии модуля. Для аналогичных целей существует и –save-dev, опция для модулей, которые нужны только во время разработки. Но знаете ли Вы, что вместо этого можно спокойно использовать –S и –D? Теперь да.
И пока Вы в режиме установки модулей, удаляйте символ ^, который будут порождать команды –S и –D. Эти значки могут быть особенно опасными, так как они позволят npm автоматически обновить модуль к последней незначительной версии (вторая цифра в семантике версирования). К примеру, с версии 6.1.0 до версии 6.2.0.
Команда NPM полагается на semver, но Вы не должны. Я хочу сказать, что они используют авто обновления к промежуточным версиям модулей с открытым исходным кодом, так как они полагают, что никаких радикальных изменений в этих самых промежуточных версиях не будет. Мой вам совет: не стоит слишком в это верить. Более того, используйте npm shrinkwrap. Команда создаст новый файл с текущими версиями зависимостей зависимостей.
И в заключение
В этом посте мы охватили много всего: от работы с callback'ами до работы с асинхронными потоками, проверки на ошибки и снятия блокировки зависимостей. Надеюсь, Вы нашли для себя что-то новое и познавательное здесь.
Немного об авторе
Азат является техническим консультантом и менеджером в Capital One. JavaScript/Node.js-эксперт, автор различных онлайн-курсов. Издатель более чем 12 книг, посвященных теме, включающие такие хиты продаж как Full Stack JavaScript, React Quickly, Practical Node.JS и Pro Express.js и другие. В свое свободное время Азат читает о технике на Webapplog.com, проводит конференции и работает над продуктами с открытым исходным кодом. До того, как стать экспертом Node.JS, работал в федеральных правительственных агентствах США, принимал участие в небольших старт-апах и больших корпорациях, имея дело с такими технологиями, как Java, SQL, PHP, Ruby и прочие. Азат обожает все, что связано с технологиями и финансами, так же увлекается инновационными способами обучения и просвещения людей.
Автор перевода: Евгений Лукашук
Источник
Як реалізувати інтернаціоналізацію в React
Автор: Yury Dymov
Об авторе
Юрий Думов работает архитектором программного обеспечения в SAP, имеет более 10 лет опыта в разработке веб и мобильных приложений.
Прежде всего, давайте введем некоторые сокращения. Internationalization - достаточно длинное слово, поэтому предлагаю его заменить в нашем контексте на “intl”.
Интернационализация в общем плане может быть разделена на следующие подпункты:
Определение пользовательской локали
Перевод UI-элементов, заголовков, подсказок и прочего
Поддержка местных специфических сервисов, таких как даты, валюты и числа
На заметку: в этой статье я заострю ваше внимание лишь на front-end части. Мы разработаем несложное универсальное React-приложение с полной поддержкой интернационализации.
Для начала предлагаю воспользоваться моим репозиторием. Здесь у нас есть веб-сервер Express для серверного рендеринга, вебпак для построения клиентского JS, Babel для конвертации современного JavaScript в ES5. Также мы будем использовать npm-run, nodemon для запуска веб-сервера под средой разработчика и webpak-dev-server для ассетов.
Нашей точкой входа в серверное приложение будет служить server.js. Здесь мы загружаем Babel и babel-polyfill для создания прочего серверного кода в современном стандарте JavaScript. В качестве бизнес-логики сервера мы используем src/server.jsx. Тут мы устанавливаем Express-сервер для прослушки порта 3001. Для рендеринга мы используем очень простой компонент components/App.jsx, который также является частью точки входа в универсальное приложение.
Точкой входа в клиентский JS нам служит src/client.jsx. Тут мы фиксируем корневой компонент - component/App.jsx - для placeholder'а react-view в HTML-разметке, предоставляемой Express-сервером.
Таким образом, сейчас мы склонируем репозиторий, запустим npm-install и выполним nodemon и webpack-dev-server одновременно в двух консолях.
В первой консоли:
И во второй:
Наш веб-сервер должен быть доступен по localhost:3001. Откройте предпочитаемый вами браузер и убедитесь в этом сами!
Итак, мы готовы начать.
Определение пользовательской локали
Существует два возможных решения этого вопроса. По какой-то причине большинство популярных веб-сайтов, включая Skype и NBA, используют гео-IP для определения местоположения пользователя, таким образом определяя его родной язык. Подобный подход не только является дорогим в плане реализации, но и еще не совсем точным. Сейчас очень много людей путешествует, по этой причине местоположение пользователя не является надежным ориентиром при выборе подходящего языка приложения. Вместо этого мы предпочтем второй способ решить данную проблему при помощи обработки на стороне сервера заголовка Accept-Language. Этот заголовок отправляется любым более-менее современным браузером.
-Language
Этот заголовок предоставляет информацию о возможных вариантах языка, принятого в качестве ответа. Каждый язык обладает своим «приоритетом», показывая, как часто пользователь может его использовать. По умолчанию уровень «приоритетности» равен 1. К примеру, «Accept-Language: da, en-gb;q=0.8, en;q=0.7» означает «я предпочитаю датский, но могу также принять британский или другие виды английского».
(Также стоит упомянуть, что сей подход так же несовершенен. К примеру, пользователь может посетить ваш веб-сайт из интернет-кафе или публичного ПК. Лучше всего разработать виджет, при помощи которого пользователь на интуитивном уровне сможет поменять язык сайта.)
Реализация определения локали пользователя
Вот пример кода веб-сервера Node.js. Мы используем пакет accept-language, что извлекает локали из http-заголовков и находит наиболее предпочтительные, исходя из поддерживаемых вашим веб-сайтом. Если таковые не были найдены, тогда сайт будет использовать свою дефолтную локаль.
Приступим к установке пакетов:
После чего в src/server.jsx у нас будет следующее:
Здесь мы импортируем accept-language и устанавливаем поддержку английских и русских локалей. Также мы реализовываем функцию detectLocale, что извлекает значение локали из куки. Если ни одна не была обнаружена, начинается обработка Accept-Language. Наконец, мы выбираем дефолтную локаль. После обработки запроса мы добавим заголовок Set-Cookie для обнаруженной локали в ответ. Это значение будет использовано для всех последующих запросов.
Перевод UI-элементов, заголовков, подсказок и прочего
Здесь я собираюсь использовать React Intl-пакет. Это наиболее популярная и, так сказать, проверенная боем реализация интернационализации для React-приложений. Впрочем все библиотеки так или иначе строятся по одному принципу: они обеспечивают нас компонентами высшего порядка, что внедряют уже готовые функции интернационализации для обработки сообщений, дат, номеров, валют посредством специальных фич React.
Во-первых, мы должны установить провайдер интернационализации. Для этого мы немного изменим src/server.jsx и src/client.jsx.
src/server.jsx:
здесь src/client.jsx:
Так, теперь IntlProvider-дочерний компонент получит доступ к функциям интернационализации. Давайте добавим переведенный текст в наше приложение и клавишу для изменения локали. У нас есть два способа, как это можно сделать: через FormattedMessage или через formatMessage – функцию. Разница в том, что компонент будет обернут в span-тэг, что хорошо для текстовых данных, но не хорошо для значений HTML-атрибутов, таких как alt и title. Давайте опробуем и их!
Вот src/components/App.jsx:
Отметьте, что атрибут id должен быть всегда уникальным для всего приложения в целом, так что было бы не лишним установить для себя некоторые правила именования сообщений. Я предпочитаю следовать формату «имяКомпонента.некийУникальныйИдентификатор». В качестве некой дефолтной локали будет использовано сообщение defaultMessage. Атрибут description предоставит некую информацию для переводчика.
Перезапустите nodemon и обновите страницу в браузере. Вы должны увидеть «Hello World». Но если вы открываете статью при помощи инструментов разработчика, вы увидите, что текст теперь внутри тэга span. В этом случае это не ошибка, но иногда мы предпочитаем просто получить текст, без никаких дополнительных тэгов. Для этого нам нужен прямой доступ к объекту интернационализации React Intl.
Давайте вернемся назад к src/components/App.jsx:
Нам нужно написать гораздо больше кода, чем раньше. Во-первых, мы используем injectIntl, который «упаковывает» наш компонент приложения и внедряет intl-объект. Чтобы получить переведенное сообщение, нам нужно вызвать formatMessage и передать в качестве параметра message. Этот message должен иметь свой уникальный идентификатор и атрибуты defineMesasges из React Intl.
Лучшее, что есть в React Intl, так это его экосистема. Давайте добавим babel-plugin-react-intl к нашему приложению и построим словарь трансляции. Мы передадим этот словарь переводчикам, которым не нужно никаких задатков программирования для выполнения своей работы.
.babelrc:
Перезапустите nodemon, и вы увидите, что папка build/messages была успешно создана в корневой директории проекта, вместе с некоторыми другими папками и файлами внутри. Теперь нам необходимо собрать эти файлы в один JSON. Для этого вы можете использовать мой скрипт. Сохраните его как scripts/translate.js.
Теперь нам нужно добавить новый скрипт в package.json:
Что же, попробуем!
В конце вы должны увидеть файл en.json в build/lang.
И все работает! Теперь пришло время для кое-чего поинтересней. На стороне сервера мы можем загрузить все переводы в память и, соответственно, выдавать их в зависимости от характера запроса. Однако на клиентской стороне этот подход неприемлем. Потому вместо этого мы будем один раз принимать json-файл со всеми переводами, а клиент автоматически определит, какой из текстов ему нужен.
Скопируем результирующий файл в public/assets.
На заметку: если вы пользуетесь Windows, симлинки для вас недоступны. Таким образом, вам нужно будет вручную копировать команды каждый раз, как только вы будете перестраивать ваши переводы.
public/assets/ru.json применим следующее:
Теперь нам нужно повязать серверный и клиентский коды.
Для сервера наш src/server.jsx должен выглядеть так:
Здесь мы делаем следующее:
Кэшируем сообщения и специфичный для данной локали JS для валют, DateTime, Number во время запуска приложения.
Расширяем метод renderHTML так, что мы можем вставить специфичный для данной локали JS прямо в разметку.
Предоставляем переведенные сообщения IntlProvider (все те сообщения теперь доступны в качестве дочерних компонентов).
Что же касается стороны сервера, во-первых, нам нужно установить библиотеку для выполнения AJAX-запросов. Я предпочитаю использовать изоморфное обновление, так как, скорее всего, нам предстоит запрашивать данные из сторонних API, и изоморфное обновление очень хорошо с этим справляется.
Вот src/client.jsx:
Также мы должны затронуть src/server.jsx, чтобы Express предоставлял json с переводом на сторону клиента. Заметьте, что на продакшине вы, скорее всего, будете использовать что-то вроде nginx.
После инициализации JavaScript, client.jsx возьмет локаль из куки и запросит JSON с переводом. Во всем остальном наше приложение будет работать, как и раньше.
Пришло время проверить, как все будет работать в браузере. Откройте вкладку «Network» в панели разработчика и удостоверьтесь, что JSON с переводом был успешно получен нашим клиентом.
Подведя итог, давайте добавим небольшой виджет для изменения локали в src/components/LocaleButton.jsx:
И так же в src/components/App.jsx:
Заметьте, как только пользователь меняет свою локаль, мы перезагружаем страницу, чтобы убедиться, что новый JSON-файл с переводом был успешно извлечен.
Теперь же время протестировать! Окей, мы изучили, как определять локаль пользователя и как отображать переведенные сообщения. Перед тем, как двигаться в направлении заключительной части, давайте обсудим пару также немаловажных нюансов.
Плюрализация и шаблоны
В английском большинство слов могут принимать одну или две возможные формы: «одно яблоко», «много яблок». В других языках все намного сложнее. К примеру, русский имеет 4 различные формы. Надеемся, React сумеет справиться и с этим. Он также поддерживает шаблоны, так что вы можете предоставить переменные, которые могут быть подставлены в шаблон во время рендеринга. Вот как это работает.
В src/components/App.jsx у нас есть:
Тут мы определяем шаблон с переменной count. Мы напечатаем или «одно яблоко», если значение переменной равно 1, 21 и так далее, или «два яблока» в противном случае. Нам нужно передать все переменные в formatMessage.
Давайте перестроим наш файл переводов и добавим русский перевод для теста.
Вот наш public/assets/ru.json файл:
Теперь все случаи предусмотрены!
Поддержка местных специфических сервисов, таких как даты, валюты и числа
Ваша информация будет представляться по-разному в зависимости от локали. К примеру, русская локаль нам покажет $500.00 и 12/10/2016.
Intl предоставляет React-компоненты для такого типа данных, которые автоматически обновляются каждые 10 секунд, если вы за это время не перезаписывали значения.
это в src/components/App.jsx:
Обновите браузер и проверьте страницу. Вам необходимо будет подождать 10 секунд, чтобы увидеть, как обновится FormattedRelative.
Круто, не правда ли? Что же, теперь мы можем столкнуться еще с одной проблемой – универсального рендеринга.
В среднем между формированием разметки и инициализацией JS проходит порядка 2-х секунд. Это значит, что все DateTime`сы, сгенерированные на странице, могут иметь разные значения на стороне клиента и сервера. Что, как следствие, разрушает универсальный рендеринг.
Вот src/server.jsx:
вот src/client.jsx:
Перезапустите nodemon и проблема почти исчезнет! Она может, правда, остаться в случае, если вы используете Date.now() вместо показаний, записанных в базе. Чтобы сделать пример более «жизненным», заменим в app.jsx Date.now() на последний таймштамп, что-то вроде 1480187019228.
(Впрочем, вы можете столкнутся с другой проблемой – когда сервер не в состоянии отрендерить DateTime в нормальном формате. Это потому, что 4 версия Node.js по умолчанию не поддерживала Intl.)
Звучит слишком хорошо, чтобы быть правдой, не так ли? Мы как истинные фронт-енд разработчики всегда были на стороже того, что касается браузеров и платформ. React Intl использует нативный браузерный API для обработки форматов DateTime и Number. И, несмотря на тот факт, что подобная функциональность была представлена в 2012 году, до сих пор есть современные браузеры, которые ее все еще не поддерживают. Даже Safari поддерживает ее только частично. Вот таблица с детальной информацией:
Это значит, что если вы желаете покрыть большинство браузеров, которые не поддерживают Intl API на нативном уровне, polyfill для вас просто незаменим. Хвала Всевышнему, существует Intl.js. С одной стороны, кажется, вот оно – идеальное решение, но, как показывает мой опыт, всегда существуют свои недостатки. Во-первых, вам нужно добавить Js-bundle, что несколько ресурсоемко. Также для уменьшения размера вам нужно будет передавать ваш Intl.Js только для браузеров, у которых нет своей нативной поддержки. Конечно, все эти техники уже давным-давно известны, и существует великое множество статей, посвященных им. Но все равно, Intl.js – не абсолютное решение, так как все же представления DateTime и Number на стороне сервера и на стороне клиента могут несколько отличаться, что, разумеется, влечет за собой ошибки при серверном рендеринге.
Наконец, я пришел к своему собственному решению, которое хоть и имеет свои недостатки, но мои запросы в большинстве случаев оно устраивает. Я реализовал очень поверхностный polyfill, что имеет лишь небольшую часть из требуемой функциональности. В то время, как в большинстве случаев подобное решение непригодное, оно лишь добавляет лишние 2 КБ к размеру JS-файла, так что даже нет необходимости реализовывать динамическую загрузку кода для устаревших браузеров, что значительно упрощает решение в целом.
И в заключение
Возможно, сейчас вас не покидает чувство, как будто здесь написано слишком сложное решение. Также, возможно, сейчас вы подумываете о том, чтобы реализовать все самим. Я бы не советовал этого делать. В конце концов, вы все равно придете к выводам, представленным в данной статье. Или, что хуже, зайдете в тупик одного решения и не сможете увидеть остальные. Вы можете подумать, что можно легко решить проблему с Intl API, используя вместо него Moment.js (я специально не рассматривал другие библиотеки, так как они либо неподдерживаемые, либо неиспользуемые). К счастью, я уже опробовал это, так что я могу сохранить вам много времени. Moment.js монолитен и очень тяжел, так что если для кого-то он и подойдет, то остальная масса пользователей будет неудовлетворенной результатом. Разработка собственного polyfill не звучит интригующе, так как вам наверняка придется выделить определенное время для борьбы с возникающими при этом багами. Подведя итог, могу лишь сказать, что не существует идеального решения касательно проблемы на данный момент: просто выберите то, что вам подойдет лучше всего.
Надеюсь, эта статья дала вам все, что нужно знать для создания интернационализируемого React front-end приложения. Теперь вы выучили, как определять локаль пользователя, сохранять ее в куки, писать виджет для изменения локали и многое другое! Также вы ознакомились с некоторыми возможными проблема и ловушками, в которые вы можете попасть в процессе написания приложения.
Удачи в разработке!
Автор перевода: Евгений Лукашук
Источник
Робота з Touch в Unity3D
Автор: Олег Загородній
Введение
Ни для кого не секрет, что в мобильных играх, в отличие от компьютерных, практически единственным “устройством ввода” является палец. То есть, все действия, которые пользователь выполняет в игре, совершаются благодаря прикосновениям к экрану, или же тачам (англ. touch – прикосновение). В этой статье мы с Вами рассмотрим, как можно правильно обработать тачи, разберем, в чем разница между глобальными и локальными тачами, а также реализуем обработку некоторых популярных жестов, которыми Вы оперируете не только в играх, но и в повседневном пользовании смартфоном – swipe и zoom. Разумеется, все это мы будем делать, используя исключительно встроенный функционал Unity3D, без внешних плагинов и ассетов.
Наведем справки
Перед тем, как начать, рассмотрим, какие возможности нам предоставляет библиотека для работы с тачами. В документации Unity видим, что разработчики движка рекомендуют использовать класс Input для получения доступа к данным об акселерометре и мульти-таче мобильного устройства. Это нас вполне устраивает.
В обязательном порядке необходимо подключить пространство имен UnityEngine.EventSystems, ведь именно оттуда родом большинство интерфейсов и классов, которые нам сегодня понадобятся. Например, IPointerClickHandler, IDragHandler и многие другие. В конце концов, классы BaseEventData и PointerEventData, из которых мы будем доставать все необходимые данные о событиях, проживают по тому же адресу.
Что ж, не стоит волноваться, если Вы видите эти имена впервые. Моя задача - сдружить вас и наставить на путь плодотворной разработки.
Если у Вас уже имеется опыт работы с данными классами, надеюсь, смогу поведать о каких-либо интересных спецификах работы с ними и еще некоторыми компонентами.
Ближе к делу или “Что такое глобальные и локальные тачи?”
Немного теории.
Чтобы правильно реализовать все, что мы задумали, сначала разберемся, что такое глобальные и локальные тачи. Если вкратце, то глобальные тачи – это прикосновения к экрану устройства в любой точке. То есть, мы будем говорить, что необходимо обработать глобальный тач, если для игрового процесса не важно, где именно игрок ткнет пальцем в экран. Думаю, все видели в играх заставку после загрузки уровня с большими буквами “Tap to start” либо что-то в этом роде. Бывают настолько простые игры, что, по сути, все управление игроком производится исключительно такими вот глобальными тачами. Например, в Flappy Bird, 2 Cars и многих других.
Разумеется, не всегда все так просто. Случается, нам необходимо обработать тач в определенной области экрана, или по какой-либо кнопке, или по объекту. Такие тачи мы с Вами будет именовать локальными, так как они должны производиться в некой локальной области. Причем принципы реализации обработки тачей по 2D объектам или же элементам UI и обработки тачей по 3D объектам на сцене немного отличаются. Эти нюансы мы также рассмотрим.
То есть перед тем, как перейти к воплощению идеи в жизнь, хорошенько подумайте, где и какой вид тача будет использоваться, ведь от этого зависит, как далеко в лес мы пойдем и как много дровишек нарубим.
Практика.
Подготовим рабочее место, как на картинке. Также создадим новый скрипт HandleScript и прикрепим его на куб.
Как же считать прикосновение к экрану? Если в случае с кликами мыши в классе Input есть методы GetMouseButton (...Up, ...Down), то для тачей соответствующие методы отсутствуют. Здесь все даже проще. Разработчики предоставляют свойство touchCount (только для чтения), в котором хранится количество тачей в текущем кадре. То есть, чтобы считать глобальный тач, нам необходима всего одна строчка в методе Update:
using UnityEngine;
using UnityEngine.EventSystems;
public class HandleScript : MonoBehaviour
{
void Update ()
{
if (Input.touchCount > 0) Debug.Log("Global touch!");
}
}
Как только пользователь задумает ткнуть пальцем в экран (чего мы, по сути, и ждем), выражение в блоке условия вернет true и на консоль вылетит наше сообщение. Что может быть проще?
Важно: проверить данный способ обработки на компьютере не получится, так как в свойство touchCount записывается именно кол-во тачей. Клики мыши не в счет.
Примечание: К примеру, при портировании на Windows Phone сообщения консоли, разумеется, отображаться не будут. Так что стоит реакцию на тач сделать более явной. Допустим:
if (Input.touchCount > 0) transform.localScale *= 1.1f;
Я специально буду обращать Ваше внимание на многие нюансы (для кого-то известные и очевидные, а для кого-то - нет), чтобы избавить от мелких и неприятных ошибок и сберечь парочку нервных клеток.
Попробуйте сбилдить на свой смартфон и немного потапать в разных частях экрана.
Что касается локальных тачей, то здесь есть несколько вариантов обработки. Также они зависят и от типа объекта – 2D или 3D.
Начнем, пожалуй, с 2D объектов. Давайте добавим на сцену какой-либо спрайт и сразу прилепим ему компонент 2D Box Collider (о нем чуть ниже).
Еще добавим к этому спрайту наш скрипт HandleScript, но немного его подкорректируем. В Unity есть перечень методов, которые являются обработчиками определенных событий. Например, метод OnCollisionEnter вызывается, когда два твердых (Rigidbody) объекта соприкасаются, если вкратце. Так вот, среди вышеупомянутого перечня методов есть такой себе OnMouseDown метод. Он вызывается, как вы уже, наверное, догадались, в момент нажатия левой кнопки мыши непосредственно на объекте.
Здесь есть три важных момента:
Метод вызывается непосредственно в момент нажатия кнопки, а не отпускания или полного клика.
Метод реагирует только на левую кнопку мыши.
Срабатывает только при клике непосредственно на объект.
Так как мы с Вами обрабатываем тачи, а не клики, то справедливы для нас будут только первый и третий пункты. То есть работу с человеческими пальцами данный метод тоже поддерживает. А может, и не только человеческими...
Как же будет выглядеть наш код?
using UnityEngine;
using UnityEngine.EventSystems;
public class HandleScript : MonoBehaviour
{
void OnMouseDown()
{
transform.localScale *= 1.1f;
}
}
Обратите внимание на сигнатуру метода и запомните. Ведь если сделать малейшую опечатку, событие касания/клика обрабатываться не будет. Проверить работу этого способа уже проще. Учитывая, что метод OnMouseDown реагирует как на мышь, так и на пальцы, билдить проект на смартфон не обязательно. Из этой серии есть еще метод OnMouseUp, который вызывается при отпускании пальца/кнопки.
Важно: все события, связанные с кликами, движок Unity считывает, неявно используя Raycast’ы (лучи). Именно поэтому мы добавили на наш спрайт компонент 2D Box Collider. Если Вы еще не знаете, в чем суть работы Raycast’ов, обязательно почитайте в документации Unity.
Важно: получается, указанные методы срабатывают при тапе/клике именно по коллайдеру объекта, а не по мэшу(Mesh)/спрайту.
Попробуйте сбилдить и потапать на спрайт ящика либо зеленого куба.
Теперь отключите их коллайдеры и проверьте, обрабатывается ли событие. Как видите, этот способ позволяет обработать тап как по 2D, так и по 3D объекту. Просто?
Следующий способ обработать локальный тач тоже работает для обоих типов объектов, но немного отличается конфигурацией компонентов. Здесь мы с Вами будем уже работать с таким пространством имен, как UnityEngine.EventSystems. Если оно у Вас еще не подключено, самое время это сделать. Там, как я уже говорил, находятся необходимые нам интерфейсы и классы. Теперь обязательно добавьте на сцену объект EventSystem. Он находится во вкладке UI контекстного меню создания объекта.
Итак, чтобы считать тап по 2D объекту (не элементу UI), необходимо обязательно прикрепить к камере компонент Physics 2D Raycaster. Для данного компонента обязательным является присутствие компонента Camera. Поэтому совсем неудивительно, что мы цепляем его именно на объект Main Camera.
То есть после всех наших манипуляций игровая сцена должна выглядеть, как на картинке.
Теперь, пожалуй, в код. Данный метод более универсальный, чем предыдущий, так как позволяет получить множество информации о состоянии курсора. Неважно, кто им управляет – палец или мышь.
Нам понадобится интерфейс IPointerDownHandler из подключенного пространства имен. После реализации единственного его метода, получаем код, не менее простой, чем раньше.
using UnityEngine;
using UnityEngine.EventSystems;
public class HandleScript : MonoBehaviour, IPointerDownHandler
{
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log(eventData.position);
}
}
Разумеется, ошибиться с сигнатурой метода у вас не выйдет, так как Visual Studio сразу ругнется за нереализованный интерфейс. А в параметре eventData типа PointerEventData будет храниться вся информация о курсоре на момент срабатывания метода, а это очень полезно.
Что же будет происходить? Здесь тоже все просто. В момент касания движок Unity пустит луч в сцену и в случае, когда тот пройдет сквозь коллайдер нашего спрайта, сработает метод обработчик OnPointerDown и в параметр eventData запишется вся информация о курсоре. Для считывания тачей также есть следующие интерфейсы:
IPointerUpHandler, IPointerClickHandler, IPointerEnterHandler и IPointerExitHandler.
Мне кажется, по их именам предельно ясно, какой из них какое событие позволяет обработать. Все, что Вам необходимо – наследоваться от нужного интерфейса, реализовать единственный его абстрактный метод и удивиться, как просто это работает. Главное, когда будете работать, не забудьте о компоненте Physics 2D Raycaster и объекте EventSystem, которые упоминались выше.
Как вы уже, наверное, заметили, на 3D объекты данный способ не распространяется. Как это исправить? Элементарно. На объект-камеру необходимо также прикрепить компонент Physics Raycaser. Вот и все. Остальная суть остается та же.
Попробуйте запустить проект. Заметили? Движок реагирует на клики мыши тоже. Теперь портируйте на ваш смартфон и удостоверьтесь, что все работает верно.
Чтобы обработать тачи по элементам UI, Вам необходим будет компонент Graphic Raycaster. Но для него обязательным является компонент Canvas. Это, думаю, тоже вполне логично. Если прикрепить его на объект Canvas, то методы рассмотренных нами интерфейсов позволят также обработать тачи по кнопкам, панелям, тогглам и т.д.
Итог по разделу о глобальных и локальных тачах.
Давайте немного подсуммируем все, что только что было рассмотрено.
Все тачи и клики обрабатываются неявным пусканием лучей из экрана в сцену. То есть определяется касание к коллайдерам объектов.
При использовании интерфейсов из пространства имен UnityEngine.EventSystems обязательно надо добавить объект EventSystem.
Physics 2D Raycaster – компонент для обработки тачей/кликов по 2D объектам.
Physics Raycaster – компонент для обработки тачей/кликов по 3D объектам.
Graphic Raycaster – компонент для обработки тачей/кликов по элементам UI. В отличие от предыдущих присутствует на объекте Canvas по умолчанию.
Обработка Swipe жестов
Как же выловить эти Swipe жесты и как определить их направление? На самом деле, это совсем несложно. Есть несколько интерфейсов, которые позволят нам это сделать:
IDragHandler, IBeginDragHandler, IEndDragHandler.
Причем, они отлично подходят как для работы с Drag, так и Swipe жестами. Давайте почистим нашу сцену и приведем ее примерно вот к такому виду:
У нас на объекте Canvas есть красная панель размером на весь экран и внутри нее имеется еще одна небольшая панель. Мы с Вами будем считывать Swipe’ы по красной панели и в зависимости от их направления двигать зеленую. Все до безобразия просто. Аналогичные действия Вы потом сможете проделать не только с элементами UI, как в этом примере, но и с 2D и 3D объектами. Сейчас же будем использовать панели, так как это получится более наглядно.
Скрипт HandlerScript прикрепляем к внешней (красной) панели.
using UnityEngine;
using UnityEngine.EventSystems;
public class HandleScript : MonoBehaviour, IDragHandler, IBeginDragHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
}
public void OnDrag(PointerEventData eventData)
{
}
}
Вот как изначально должен выглядеть наш скрипт. Мы должны наследоваться он интерфейсов IDragHandler и IBeginDragHandler. Этого будет достаточно, чтобы считать Swipe. Скажу даже больше. Мы будем использовать только метод из второго интерфейса.
Важно: необходимо обязательно реализовать интерфейс IDragHandler (пусть даже методом с пустым телом), чтобы срабатывали методы из интерфейсов IBeginDragHandler и IEndDragHandler.
Дабы определить направление Swipe’а, мы будет использовать свойство delta в параметре eventData метода OnBeginDrag. В это свойство записывается разница позиций курсора между текущим и предыдущим кадрами. Мы просто напросто в момент начала Swipe’а глянем, какое значение этой дельты, и из этого уже определим, какое направление жеста.
Возможно, у Вас возник вопрос. Откуда возьмется эта дельта, если метод OnBeginDrag сработает сразу, как только игрок начнет вести пальцем по экрану? Дело вот в чем. Этот метод вызывается только после того, как игрок сдвинет палец на какое-то пороговое значение расстояния от начальной точки. За это время успевает накопиться некоторая информация о происшедшем событии. То есть за этот небольшой промежуток времени мы можем определить, куда пользователь собирается вести свой палец.
Мы всего лишь должны построить правильную условную конструкцию для определения направления и, исходя из условия, двигать зеленую панель в соответствующем направлении. В будущем это может быть ваш игрок в раннере или что-либо иное...
using UnityEngine;
using UnityEngine.EventSystems;
public class HandleScript : MonoBehaviour, IDragHandler, IBeginDragHandler
{
Transform green; // здесь будет ссылка на компонент Transform зеленой панели.
void Start()
{
green = transform.GetChild(0); // получаем ссылку на Transform зеленой панели.
}
public void OnBeginDrag(PointerEventData eventData)
{
if (Mathf.Abs(eventData.delta.x) > Mathf.Abs(eventData.delta.y))
{
if (eventData.delta.x > 0) Debug.Log("Right");
else Debug.Log("Left");
green.position += new Vector3(eventData.delta.x, 0, 0);
}
else
{
if (eventData.delta.y > 0) Debug.Log("Up");
else Debug.Log("Down");
green.position += new Vector3(0, eventData.delta.y, 0);
}
}
public void OnDrag(PointerEventData eventData)
{
}
}
Что мы сделали? Сначала проверили, дельта по какой оси больше – X или Y? Если по оси X, значит движение будет по горизонтали, если же по Y – значит, по вертикали. А там еще раз проверили направление. Как видите, это делается элементарно просто, а работает безотказно. Обязательно проверьте, обрабатывается ли жест Swipe у вас на смартфоне.
Если же Вам необходимо получить непосредственно угол Swipe’а, можно использовать формулу , которая позволяет вычислить синус угла прямоугольного треугольника из отношения противоположной и прилегающей сторон.
Обработка Zoom’а
Вернем сцену к первоначальному состоянию. Чтобы считать жест zoom’а, нам необходимо обработать глобальные тачи, поэтому наш скрипт HandleScript можно прикрепить даже на камеру.
А код наш будет выглядеть вот так:
using UnityEngine;
public class HandleScript : MonoBehaviour
{
public float sensitivity;
Vector2 f0start;
Vector2 f1start;
void Update()
{
if (Input.touchCount < 2)
{
f0start = Vector2.zero;
f1start = Vector2.zero;
}
if (Input.touchCount == 2) Zoom();
}
void Zoom()
{
if (f0start == Vector2.zero && f1start == Vector2.zero)
{
f0start = Input.GetTouch(0).position;
f1start = Input.GetTouch(1).position;
}
Vector2 f0position = Input.GetTouch(0).position;
Vector2 f1position = Input.GetTouch(1).position;
float dir = Mathf.Sign(Vector2.Distance(f1start, f0start) - Vector2.Distance(f0position, f1position));
transform.position = Vector3.MoveTowards(transform.position, transform.position + transform.forward, dir * sensitivity * Time.deltaTime * Vector3.Distance(f0position, f1position));
}
}
В чем суть его работы? Если пользователь прикасается к экрану двумя пальцами, координаты двух тачей записываются в соответствующие поля f0start и f1start. Именно с ними будут сравниваться все остальные позиции тачей, пока игрок не уберет от экрана пальцы. То есть мы просто сравниваем расстояние между двумя тачами. Если текущее расстояние меньше, чем начальное, то камера будет двигаться назад, если же больше – вперед.
Условная конструкция в методе Zoom для того, чтобы позиции тачей записались в свойства только один раз в момент касания к экрану.
Чувствительность zoom’а вы можете регулировать значением поля sensitivity прямо в окне Inspector. Попробуйте усовершенствовать этот скрипт сами. Допустим, сделать, чтобы сравнивались позиции не текущих и начальных тачей, а позиции тачей в этом и предыдущем кадре. Сравните результат.
Заключение
Как видите, обработка тачей и рассмотренных нами жестов реализуется очень просто. Все, что Вам необходимо – внимательность и фантазия. Если что-то не работает, обязательно проверьте, присутствуют ли необходимые компоненты на всех объектах, вызываются ли нужные методы и так далее.
Совсем не обязательно искать внешние библиотеки, плагины и ассеты для того, чтобы работать с тачами в Unity. Разработчики предоставляют, по сути, всё, что вам может понадобится. Результат же зависит от Вашей фантазии.
Не забывайте заглядывать в документацию Unity, там есть много всего интересного. Хотя, среди того, что мы сегодня рассмотрели, есть вещи, о которых там не упоминают.
Благодарю за внимание и желаю всем творческих успехов!