Хто відповідає за функціонал вебпродукту? Які навички потрібні для створення мобільного застосунку або гри? Чи тільки сеньйор може бути фулстеком? Чому девопси розуміються на всьому, а дата-саєнтисти — справжні футуристи? Зібрали разом із розробниками Genesis підбірку найактуальніших спеціалізацій та ключових навичок для входу в кожну професію.
Сайти мають «видиму» частину — це тексти, зображення та кнопки. Версткою всіх елементів та створенням повноцінного інтерфейсу займається фронтенд-розробник. Він не «малює» сайт самотужки, а «будує» за готовим макетом від UI/UX-дизайнера. Спільне завдання обох фахівців — зробити так, щоб користувач міг інтуїтивно знайти потрібну функцію. Іноді буває, що дизайнери розробляють макет, який має гарний вигляд у статиці, але не буде працювати у готовому інтерфейсі. Відповідно, хороший фронтенд може підказати колегам, що змінити, аби сайт можна було реалізувати технічно і юзер одержав найкращий клієнтський досвід.
Також фахівець тісно співпрацює з бекенд-розробником. Адже щоб клієнт отримав коректну відповідь (наприклад, перейшов на сторінку з обраними товарами, натиснувши на значок кошика), на сервер має надсилатися правильний запит. «Поєднати» інтерфейс і сервер — це також завдання фронтенда.
Що треба для старту?
Знати основні мови програмування. Сучасний фронтенд вимагає знання HTML, CSS та JavaScript. Перша потрібна, щоб зверстати «скелет». Друга формує стилі сторінок і надає сайту форми та вигляду. Третя робить елементи інтерактивними, забезпечує взаємодію з користувачами та сторонніми сервісами, з пошуковиками, системами трекінгу тощо.
Працювати з популярними CSS-фреймворками та UI-бібліотеками — Twitter Bootstrap, Foundation 3, Material UI, Semantic UI. До речі, у кожного фахівця є свої напрацювання, які він також зберігає у фреймворках.
Працювати з препроцесорами CSS, а саме з Sass та Less. Це надбудови над CSS, які дають раніше недоступні можливості за допомогою нових синтаксичних конструкцій. Препроцесори спрощують і, відповідно, прискорюють розробку та підтримку стилей у проєктах. Також варто освоїти шаблонізатори для HTML — йдеться про Haml, Jadе та Slim.
Розуміти основні принципи JavaScript-фреймворків ReactJS, VueJS, AngularJS. Адже сучасний фронтенд передбачає вміння використовувати безліч сторонніх бібліотек.
Освоїти системи збірки застосунків, наприклад, Webpack. Браузери працюють з HTML і CSS, але не з бібліотеками та фреймворками. Тому потрібна система, яка буде перетворювати весь код на те, що буде коректно «сприймати» браузер.
Розуміти, що відбувається, коли користувач вводить адресу сайту у рядок пошуковика й натискає Enter — від відправлення запиту до DNS-сервера до порядку рендерингу елементів на сторінці.
Використовувати Git або інші інструменти контролю версій. Система дозволяє легко працювати над кодом кільком людям одразу, не затирати код інших розробників, підтримувати базу в актуальному стані.
Розумітися на UI/UX дизайні. Хороший (читай — інтуїтивно зрозумілий для користувача) інтерфейс виходить, коли фронтенд-розробники та UI/UX-дизайнери добре розуміють одне одного. Якщо перші орієнтуються у принципах дизайну, а у других є мінімальні навички верстки, фінальний продукт стає якіснішим.
«Цінність фронтенда — у вмінні створити максимально зручний інтерфейс. Для цього він тісно співпрацює з дизайнерами та бекенд-розробками. Тому в роботі знадобляться не лише знання технологій, а й софт-скіли. Часто розробнику доводиться шукати вихід зі складних ситуацій або ж орієнтуватися в нових для себе умовах. Тут треба мати світогляд, який не дозволить здатися чи зайти в глухий кут», — Олександр Ковріжних, Front-end Developer в AmoMedia.
Якщо зовнішній вигляд та функціонал — це робота фронтенда, то за все, що «під капотом», відповідає бекенд-розробник. Іншими словами, перші — це про гарну форму реєстрації в pro-акаунті, а другі — про збереження даних, інтеграцію з платіжним сервісом, коректні переходи між сторінками та підвантаження нового контенту. Відповідно, серед обов’язків бекенд-розробника — забезпечити роботу всіх функцій, пропрацювати алгоритми, інтегрувати зовнішні сервіси, протестувати продукт та виправити знайдені баги. Тоді сервер коректно обробляє запити, і користувач отримує відповідь — наприклад, підтвердження успішної реєстрації в застосунку або повідомлення про помилку, якщо забув заповнити якесь поле. Також бекенд-розробник багато працює з даними. З одного боку, коли користувач залишає свої персональні дані у формі реєстрації (на фронтенді), то апка відправляє їх на сервер, зашифровує та зберігає там. З іншого — поведінку юзерів треба аналізувати, аби покращити. Для цього бекенд-розробники «виймають» потрібну інформацію, передають її аналітикам, а ті, своєю чергою, — маркетологам.
Що треба для старту?
Знати мови програмування бекенду — PHP, Node.js, Golang, Java, Python. Вибір мови залежить від компанії: у масштабних проєктах частіше використовують PHP, а Node.js — у стартапах. На Golang пишуть тоді, коли планується високий ступінь паралелізму та висока продуктивність. Python ідеально використовувати для задач із даними та машинним навчанням.
Розуміти, як влаштовані бази даних, працювати з MySQL чи іншою реляційною базою даних. Мови програмування та бази даних вчаться разом, наприклад, MySQL часто використовується з PHP, a MongoDB — разом з Node.js.
Використовувати патерни й принципи програмування, а також фреймворки Nest, Express, Symphony, Django тощо.
Розбиратися в роботі інструменту для контролю версій Git.
Знати, як працює веб, а саме протоколи TCP, HTTP, HTTPS.
Знати, як налаштувати сервери, до прикладу Nginx.
Працювати з API та як ефективно передавати інформацію за допомогою JSON (REST, GraphQL), Protobuf, XML.
Знати, як працює Docker, як створюються образи, як їх будуть використовувати для розгортання вебзастосунку в хмарних сервісах.
Вміти тестувати продукт — це дозволяє уникнути багів та підвищує надійність коду.
«Мені подобається продумувати архітектуру всього функціоналу. Не раджу клепати код нашвидкуруч, адже тоді його важко буде підтримувати й масштабувати. Щодо технологій — часто компанії шукають не бекенд-розробників, а фахівців, що спеціалізуються на конкретній мові, наприклад, PHP або Python. Це залежить від продуктів бізнесу, адже зміна однієї мови на іншу потребує багато часу та ресурсів», — Ігор Чорний, Back-end розробник у Boosters.
Це розробник-швейцарський ніж: і клієнтську частину спроєктує, і серверну реалізує. Він розуміється на всьому стеку технологій: інтерфейсах, серверах, операційних системах, базах даних тощо. Фулстеку не обов’язково бути фахівцем рівня сеньйор, попри те що він повністю закриває всі технічні процеси. Достатньо розумітися на основних технологіях та працювати з ними хоча б деякий час. Робочі обов’язки фулстека мало відрізняються від завдань програмістів інших напрямів. Однак часто це єдиний розробник на проєкті, який планує роботу, розгортає й тестує продукт, контролює його якість і запускає в продакшн. Вимоги до знань у фронтенді й бекенді залежать від актуальних завдань. Наприклад, із клієнтською частиною впорається мідл-спеціаліст, а з серверною — сеньйор. Компанії наймають фулстек-фахівців, коли, до прикладу, потрібно швидко реалізувати MVP, перевірити гіпотезу або продукт новий, часто змінюється та потребує доопрацювань. Тоді керувати всіма процесами простіше одній людині.
Що треба для старту?
Знати HTML та CSS, щоб зверстати сайт та застосувати до нього стилі. CSS згодиться ще й для того, щоб адаптувати вебсторінки до екранів різних розмірів.
Вивчити JavaScript. Робота з фронтендом неможлива без знання цієї мови. Для початку треба освоїти базові речі, як-от модулі, масиви, робота з DOM, JSON, ES6+ — і поступово поглиблювати експертизу.
Застосовувати фреймворки та бібліотеки, такі як React, Vue, Angular. Для початку можна обрати один інструмент і ретельно його вивчити. Краще глибоко розумітися на ньому, ніж поверхнево знати різні.
Володіти мовами програмування бекенду. Основні ми вже згадували — це Go, PHP, Ruby, Python. Тим, хто вже працював з JavaScript, легше буде почати з Node.js. З її допомогою ви зможете легко розробляти API.
Базово освоїти навички роботи у Linux, щоб конфігурувати сервери для застосунків.
Вивчити методи СІ/СD. Треба приділити увагу тому, як релізити код. Для старту варто спробувати GitLab CI/CD.
Знати SQL. Починати з базових навичок, наприклад, як створювати таблиці й заповнювати їх даними, а продовжити поглибленим вивченням рівнів ізоляції й нормалізації баз даних.
Вміти тестувати продукт, щоб уникнути багів та підвищити надійність коду.
«Кар’єру розробника я починав із фронтенду, але завжди хотів розібратися, як працюють інші компоненти системи— сервери, бази даних, CI/CD. Фулстек-розробник може розгортати проєкт самотужки, тож ризик непорозуміння між фронтендом та бекендом зменшується, як і час на комунікацію. На позиції швидко вчишся новому, отримуєш досвід у проєктуванні, і найголовніше — повністю занурюєшся в проєкт і бачиш цілісну картинку. Тому це гарний початок для охочих стати техлідом або архітектором. Проте не варто забувати, що вузькоспрямовані завдання швидше зробить спеціаліст суто у фронтенді чи бекенді», — Олександр Ситнік, Full Stack Developer в Keiki.
Операційною системою Android користуються 2,5 млрд людей, а в онлайновий магазин Google Play Store наразі завантажили 2,79 млн застосунків. Увесь цей всесвіт тримається на плечах Android-розробників. Вони долучаються до створення продукту ще на етапі проєктування, а потім «збирають» застосунок чи програму за макетом, який намалював дизайнер. Тестування, удосконалення та завантаження готового продукту в Google Play — це також завдання розробника. Якщо Apple розробила під сотню моделей, й iOS-розробники працюють лише з ними, то «видова різноманітність» продуктів Android обчислюється десятками тисяч позицій. ОС популярна серед виробників електронної техніки. Її можна встановити на різні пристрої — від смартфона до мікрохвильовки, тож розробник може експериментувати з різними платформами. Однак така різноманітність — це виклик. Наприклад, завдання може звучати так: «застосунки мають працювати на смартфонах різних виробників і не зависати навіть на старих пристроях».
Що треба для старту?
Знати мови програмування Kotlin та Java. Вони схожі, тому, знаючи одну, легко вивчити іншу. Kotlin — це нова мова з багатьма інструментами (функціональна парадигма, можливість використовувати UDF-архітектури тощо).
Використовувати фреймворк CI/CD для налаштування процесів доставлення білдів та тестування.
Працювати у програмі Android Studio. Це офіційне середовище розробки, де пишеться код. Тут є готові шаблони під різні пристрої, вбудований редактор макетів та функції для тестування коду. Середовище працює на будь-якій операційній системі.
Знати файлову структуру, компоненти застосунку та принципи роботи Android, бібліотеки Android Jetpack, Retrofit, Java RX, Dagger.
Вміти працювати з Git, щоб синхронізувати свою роботу з іншими розробниками проєкту, проглядати зміни, вести паралельну розробку.
Розуміти, як передаються дані через протокол HTTP(S), та базово розуміти REST.
Знати принципи OOP, Solid, Clean Architecture, MVP/MVVM/MVI, дизайн-патерни.
«Мені найбільш цікаво робити кастомні інтерфейси. Ми дуже заморочуємося над дизайном продукту, адже користувач буквально має бачити, за що він платить. І це найкрутіша частина мобайл-розробки — продумувати, як все працюватиме, яка буде навігація, як анімувати елементи. І головне — одразу бачити результат своєї роботи», — Артем Грищук, Android Lead в OBRIO.
У компанії Apple — все «своє»: хмарне сховище, стримінговий сервіс, застосунки та навіть спеціалізовані програмісти. iOS-розробник, як і Android, створює застосунки, програми та ігри. Однак працює лише з ґаджетами компанії Apple — смартфонами, розумними годинниками, ноутбуками та іншими пристроями, що підтримують операційну систему iOS. Робота не завершується після того, як розробник напише й протестує продукт. Він «викладає» застосунки та програми в App Store, а перед цим — вивчає правила співпраці з платформою й займається документацією. Після релізу iOS-розробник стежить за коментарями користувачів, вносить правки та додає нові функції.
Що треба для старту?
Вивчити основні мови програмування Swift та Objective-C. Перша стала популярною в останні кілька років, другою користувалися раніше й багато застосунків реалізовано саме на ній.
Освоїти Xcode — середовище для розробки, яке створили в Apple для «своїх» спеціалістів. Крім того, треба вміти користуватися iOS SDK.
Знати поширені бібліотеки й архітектури iOS, наприклад, ImageViewer.swift, PhoneNumberKit, Gmenu, SideMenu.
Опанувати правила проєктування. Мова про MVC (Model-View-Controller) або MVVM (Model-View-View-Model), а також про патерн делегування. Перші два визначають, як дані відображаються й оновлюються на стороні користувача, а другий допомагає раціональніше перевикористати код. Все це потрібно, аби зробити інтуїтивно зрозумілий інтерфейс.
Навчитись працювати з App Store. Саме розробник завантажує готову апку в онлайн-магазин, а тому має знати, що потрібно для релізу продукту, як завантажувати оновлення та інші правила співпраці з платформою.
«Я обрав iOS-розробку через любов до Apple й можливість швидко бачити результат роботи. Мій особистий челендж — написати застосунок за всіма стандартами App Store, аби користувачі насолоджувалися плавними переходами, анімаціями та гарним UI/UX-ом. У iOS-розробника — декількома шляхів розвитку. Наприклад, можна піти в Apple Engineer з перспективою стати архітектором, рухатися до позиції техліда або навіть продакт-менеджера», — Олексій Філобок, iOS Leader в Boosters.
Пам’ятаєте, як п’ять років тому ми всі бігали містом і ловили покемонів? Логіку мобільної гри Pokemon Go, а також безлічі інших популярних ігор реалізували на Unity. Це одночасно «ігровий двигун» і середовище для розробки, де можна працювати з асетами (звук, скрипти, картинки), збіркою, тестуванням, продумувати логіку поведінки об’єктів у ігровій сцені тощо. Сам код пишеться й редагується в зовнішньому редакторі, наприклад, у Visual Studio. Платформ для створення ігор багато, але Unity — одна з найпопулярніших. Причин декілька: низький поріг для входу, багато освітніх матеріалів (туторіалів, ґайдів, документів), використання мови С#, різноманітність інструментів, велика спільнота розробників. Відповідно, Unity-розробник — це фахівець, що створює мультимедійні цифрові ігри для різних платформ. Спочатку він разом із командою продумує концепцію гри, потім «збирає» ідею й робить так, щоб все працювало коректно. Розробник не лише реалізує гру з нуля, а долучається до тестування, займається підтримкою та оновленнями готової гри.
Що треба для старту?
Вивчити основи програмування на мові C#, добре знати ООП (об’єктно-орієнтоване програмування) та ознайомитися з механізмом .Net на базовому рівні.
Зрозуміти принципи роботи Unity. Для цього треба ознайомитись з офіційною документацією та з освітньою платформою Unity Learn.
Розібратися в особливостях роботи Android та iOS (якщо прагнете розробляти ігри для смартфонів). Unity забезпечує мультиплатформність, а це значить, що ваша гра має коректно запускатися на різних девайсах.
Згадати точні науки. Наприклад, тригонометрія потрібна, щоб правильно задати траєкторію рухів та обертань об’єктів. Дискретна математика допоможе при розробці алгоритмів пошуку шляху та систем штучного інтелекту. Лінійна алгебра знадобиться для правильного розташування об’єктів та балістичних розрахунків.
Грати в ігри. Так, це важливо. Чим багатший ігровий досвід, тим більша ймовірність створити геймплей, що сподобається іншим.
«Джуніор-фахівцям дуже корисно ознайомитися з документацією. До неї часто звертаються навіть досвідчені розробники. Щодо мене, то навіть на співбесіді я ставлю питання за документацією. Unity часто оновлюється, тож потрібно постійно навчатися, бути гнучким та не чіплятися за старі підходи. А ще — не здаватися. Інколи проблему можна вирішити кількома шляхами, і на вибір найбільш вдалого доведеться витратити багато часу», — Віктор Антоненко, Unity-розробник в OBRIO.
Слово DevOps складається з двох інших — Development+Operations. Це не просто назва посади, а ціла методологія розробки ПЗ. Вона з’явилася, аби розв’язати проблему нескоординованої роботи різних відділів. Річ у тім, що попри спільну стратегічну мету, тактичні завдання різних фахівців можуть відрізнятися. Наприклад, є програміст та є тестувальник. У кожного — своя щоденна рутина, свої інструменти, свої бібліотеки та фреймворки. Тому те, що працює в одних, може не працювати в інших. Через це у команді трапляються конфлікти: розробники думали, що проблема на стороні тестувальників, а тестувальники кивали на розробників. Девопси з’явилися, щоб згуртувати всіх навколо спільної мети — швидкого релізу продукту без багів. Їхню місію можна описати так: автоматизувати процеси та створити єдине операційне середовище для команд. Тоді співпраця набагато ефективніша: технічна команда може вчасно усунути проблеми та швидше зарелізити код. Етапи розробки продукту збігаються з робочими процесами девопса. Спочатку він оцінює інфраструктуру проєкту та вирішує, як оптимізувати процеси. Потім інтегрує операційне середовище в роботу й допомагає розгортати продукт. На етапі релізу стежить за продуктивністю процесів, і за тим, щоб знайдені баги не потрапили до користувача.
Що треба для старту?
Знати мови програмування — Python, JavaScript/TypeScript чи Go. Це спростить спілкування з розробниками та QA-інженерами. Доведеться засвоїти хоча б одну мову, адже для автоматизації робочих завдань потрібно писати скрипти. Почати можна з Bash.
Вміти працювати з операційною системою Linux. Це найпопулярніша ОС, у якої безліч дистриб’юторів, наприклад, Ubuntu, Debian і CentOS. Тому початківцям варто мати в резюме знання Linux та консольних команд.
Освоїти обчислювальні мережі й протоколи. Потрібно знати основи топології сіток, основні протоколи стеку TCP/IP (IP, TCP, UDP, HTTP/HTTPs), а ще — розуміти концепцію API (REST, gRPC, GraphQL).
Розумітися на основних сервісах: бази даних, вебсервери, проксі, балансувальники навантаження. Частина роботи девопсів — налагодження та обслуговування серверів баз даних, сервісів кешування, черг і балансування трафіку.
Опанувати CI/CD. Девопс-інженеру необхідно розуміти життєвий цикл програми (SDLC), знати деякі інструменти для реалізації безперервної інтеграції (CI) й безперервного доставляння (CD). Одними з найпопулярніших інструментів є Jenkins, GitlabCI, CircleCI, GitHub Actions, однак повний список дуже великий.
Освоїти концепцію Infrastructure-as-a-Code. Це одна з ключових компетенцій, яка допоможе автоматизувати розгортання інфраструктури й застосунків. Є чотири основні підкатегорії: контейнери (Docker, LXC), менеджмент конфігурацій (Ansible, Chef, Puppet), оркестратор контейнерів (Kubernetes, Nomad) й інструменти автоматизації розгортання інфраструктури (Terraform, Pulumi). Також варто звернути увагу на документацію Docker, Ansible, Kubernetes і Terraform.
Знати системи моніторингу й агрегації логів, аби завжди розуміти, що відбувається з продуктом чи сервісом. Зараз найпопулярніше рішення — це зв’язка Prometheus + Grafana для моніторингу й ELK (ElasticSearch, Logstash, Kibana) — для менеджменту логів.
Користуватися хмарними провайдерами. Компанії активно «переїжджають» з датацентрів у «хмару», тому дуже важливо розумітися хоча б на одному з найпопулярніших сервісів — AWS, Google Cloud чи Microsoft Azure.
«Девопс працює на стику Dev, QA й Ops, тому сама позиція — це уже виклик. Щоб будувати процеси всередині технічної команди та комунікацію з іншими бізнес-юнітами, важлива не лише технічна підкованість, а й софт-скіли — комунікація, критичне мислення й самоосвіта. Щодо бекграунду — в девопс приходять з системного адміністрування, рідше — з розробки. Я, наприклад, був сисадміном Linux. У будь-якому випадку, кар’єру девопса рекомендую починати з вивчення однієї з мов програмування — Python, Go або TypeScript», — Олег Лавренко, Head of Engineering в AmoMedia.
Коли ми перевіряємо прогноз погоди або потенційну ціну авіаквитків, то зіштовхуємося з інформацією на основі Big Data. Це величезні обсяги неструктурованої інформації. Зараз даних так багато, що зібрати й обробити їх вручну неможливо. Однак «приборкати» все-таки можна — цим займається дата-саєнтист. Фахівець аналізує дані й «тренує» ML-модель, яка може визначати певні типи закономірностей. Зокрема, розпізнати й класифікувати об’єкти на картинках та відео, рекомендувати товар в онлайн-магазині та друзів у соцмережах. Дата-саєнтист не лише проєктує користувацькі функції, а й робить корисні для бізнесу прогнози. Наприклад, чи повернеться новий користувач у продукт. Спеціаліст збирає дані й аналізує поведінку юзерів зі схожими характеристиками, а потім «навчає» модель робити прогноз.
Що треба для старту?
Знати кілька мов програмування хоча б на базовому рівні. Потрібні Python (зокрема, бібліотеки Pandas, Numpy, scikit-learn, LightGBM, CatBoost, TensorFlow) або R, а також SQL (для роботи з даними).
Згадати дискретну математику, статистику та статистичний аналіз. Ці знання знадобляться для аналізу даних, пошуку патернів і побудови математичних моделей.
Розумітися на основних алгоритмах машинного навчання — логістична регресія, дерева прийняття рішень, градієнтний бустинг.
«Дата-саєнтист — футуристична й творча професія. У ній практично немає тривіальних задач, кожного разу треба шукати нові підходи й тестувати. А перші результати взагалі викликають справжній захват. Наприклад, класична задача для дата-саєнтистів — визначити, хто з пасажирів «Титаніку» вижив. Розрахунки треба зробити на основі інформації з квитків. Натренована модель може передбачити результат з 97–98% точністю», — Олексій Міненко, Data Scientist в Jiji.
Помічали, як майстерно Netflix пропонує вам фільми та серіали, за якими можна просидіти дні й ночі? За вдалими рекомендаціями стримінгового сервісу стоїть робота інженера машинного навчання. Цей фахівець розробляє алгоритми, за якими «думає» комп’ютер. 90% часу ML-розробник працює з даними: вчить модель їх аналізувати та робити логічні висновки. Наприклад, впізнавати обличчя та інші об’єкти, водити автомобіль, радити товари, розуміти голос тощо. Так, персональні асистенти Siri, Android Now та Cortana з’явилися завдяки ML-фахівцям, що розробили передові алгоритми машинного навчання. ML-engineering — це підрозділ Data Science. Наука про дані більше про дослідження, побудову та інтерпретацію створеної моделі, а машинне навчання — це такий собі інструмент для створення цієї моделі. Спеціальність не дуже дружня до новачків: технології можна опанувати з нуля, але для цього потрібно ґрунтовно розумітися на дискретній математиці, статистиці та програмуванні. Ідеальний стартовий майданчик для інженера машинного навчання — дата-аналітика або бекграунд у розробці на Python.
Що треба для старту?
Ґрунтовно знати математику, теорію ймовірностей, прикладну статистику та вміти зіставити свої знання з бізнес-задачами. Наприклад, спрогнозувати, скільки заробить застосунок з одного користувача, чи окупиться він, як будуть перформити ті чи інші маркетингові креативи.
Програмувати на Python або R і навчитися використовувати готові бібліотеки — Pandas, OpenCV, NLTK, spaCy, scikit-learn та інші. Для роботи з базами даних і створення запитів потрібна мова SQL.
Освоїти моделі Machine Learning. Для кожного завдання застосовується своя модель. Для початку сфокусуйтеся на декількох класичних — логістична регресія, лінійна регресія, KNN, SVMs, дерева рішень.