Що має знати Senior Android Developer. Аналіз вакансій на DOU
У дев’ятому випуску рубрики «Що має знати Senior» розглядаємо вакансії Senior Android Developer, опубліковані на DOU у вересні та жовтні
Вакансії яких компаній потрапили в дослідження?
4IRE, AgileEngine, Ajax, appflame, AUTODOC, Brightgrove, BP Mobile, Capgemini Engineering, Envion Software, FORM, GlobalLogic, Godel Technologies, Intellias, itransition, JMIND, KitRUM, Leia Labs, Levi9, Lyft, Newxel, N-iX, NCube, Pinngle, Postindustria, Product Madness, Raiffeisen Bank, Reface, Sigma, SPD-Ukraine, SoftServe, Svitla, Tango Me, Transcenda, Vimeo, Wirex, Yalantis, Zenia, ПУМБ.
Reface не використовує тайтли, але я все одно додав у дослідження їхню вакансію Android Developer, яка вимагає чотири роки досвіду. Компенсація до $6000.
Також у дослідження потрапила вакансія Android Developer від Lyft, у якій серед вимог 6 років досвіду та знання англійської на рівні Advanced.
Досвід, освіта, англійська
Маючи три роки досвіду, можна вже претендувати на Senior-позицію. Кожна п’ята компанія готова взяти на роль Senior спеціаліста з мінімальним досвідом.
Освіта рідко відіграє роль, але все ж трапляються вакансії, де вона необхідна.
Capgemini Engineering (колишня Lohika) запрошує на проєкт у медичній галузі. Потрібно мати профільну вищу освіту та досвід роботи з Bluetooth Low Energy.
GlobalLogic шукає Android-розробника з експертним знанням C/C++ на проєкт в автомобілебудівній галузі. Обов’язкова профільна вища освіта, а також досвід розробки з використанням Linux.
Щодо англійської, то Intermediate може бути достатньо, щоб претендувати на Senior-позицію. Кожна п’ята компанія готова взяти на посаду Senior Android Developer спеціаліста з таким рівнем. Однак розмір винагороди буде відрізнятися залежно від рівня володіння англійською.
За традицією погляньмо на цифри. Альтернативний зарплатний віджет, який базується на даних останнього зарплатного опитування DOU влітку цього року, дає для Senior Kotlin Developer такі дані:
Intermediate. 30 анкет. 3990 доларів на місяць після податків.
Upper-Intermediate. 51 анкета. 4041 долар.
Advanced. 9 анкет. 4780 доларів.
Закономірність незмінна. Удосконаливши свою англійську з Intermediate до Advanced, можна сподіватися на підвищення доходів на (4780 — 3990) x 12 = 9480 доларів на рік.
Однак хочу зауважити, що компанії рідко відкривають вакансії, у яких рівень Advanced був би зазначений хоча б як «would be a plus».
Щодо інших мов, окрім англійської, то жодна компанія не вказала їх у вимогах. Але, вочевидь, в деяких компаніях знання додаткових мов може знадобитись. Так, в AUTODOC, за винятком звичних курсів англійської, пропонують оплачувані курси німецької та навіть польської.
Комп’ютерні науки, архітектура, мови програмування
Приголомшлива новина в тому, що 92,1% вакансій не згадують алгоритми як обов’язкову компетенцію для Senior Android Developer. Що вже говорити про інших, коли навіть у вакансії Lyft, американського сервісу таксі з мільйонами користувачів, про алгоритми ні слова.
Бувають і приємні винятки. Наприклад, KitRUM шукає розробника, що знає структури даних і алгоритми, оскільки позиція передбачає «a lot of vanilla solutions to a wide variety of software challenges».
Серед архітектур лідерами очікувано є MVVM та MVP, але вже з’являється і новіша MVI. А от VIPER ніхто не згадав. Для багатьох VIPER асоціюється з iOS-розробкою, але сайт Ray Wenderlich розвіює міфи та розповідає про VIPER під Android у книжці Advanced Android App Architecture.
Найчастіше у вакансіях Senior Android Developer вимагають знати як Kotlin, так і Java. Причому це настільки важливо, що обидві мови програмування невпинно згадують в абсолютній більшості вакансій. Можна дійти висновку, що не вдасться стати Senior Android Developer, маючи прогалини в хоча б одній з профільних мов.
Android-розробка
Кожна п’ята вакансія згадує Android Jetpack Architecture Components. Часто роботодавці очікують, що Senior Android Developer вміє виконувати performance tuning. З’являються вже згадки про Compose UI.
Графіки говорять самі за себе, тому нижче наведемо кілька прикладів без коментарів. Розділ на категорії є умовним. Про те, яка технологія має потрапити в яку категорію, можемо подискутувати в коментарях.
Асинхронне програмування
Dependency injection
Networking
Project structure
Інструментарій розробника
Testing
Інфраструктура розробки
Гібридна розробка, native code, нішеві знання
Попри весь хайп навколо гібридної розробки, особливо Flutter, ми бачимо, що роботодавці не вимагають від Senior Android Developer знати ці технології.
Гостра дискусія з цього приводу розгорілась у першій статті цієї рубрики про iOS. Деякі люди тоді дивувались, що про гібридну розробку не йдеться у вимогах, і ось це повторюється для Android. Думаю, причину варто шукати в тому, що гібридна розробка сьогодні виокремилась в незалежний напрям, і відповідні вакансії розміщуються на DOU в рубриках React Native та Flutter, а не Android та iOS/macOS.
Native code
Нішеві знання
Як плюс для кандидата найчастіше називали Kotlin, Firebase, Android NDK та OpenGL. Візьміть собі на замітку. Про Kotlin мовчу, адже це і так зрозуміло, але знання Firebase, Android NDK та OpenGL можуть знадобитися, щоб влаштуватися на посаду Senior.
М’які та гуманітарні навички
М’які навички відіграють велику роль для Senior Android Developer. У вас може бути мало досвіду, посередня англійська, але ви буквально мусите вміти спілкуватись і працювати в команді. У кожній третій вакансії йдеться про м’які навички. Подивимось, як компанії описують свого ідеального кандидата.
«We’re not asking you to be a 100% empath or to love everybody. Just don’t be evil, rude, or selfish. And try to communicate with the team like a human being» (Reface)
«A collaborative mindset with strong communication ability» (N-iX)
«Positive and open-minded style of communication» (AgileEngine)
«Well-developed communication skills» (Intellias)
Цікавинки, знайдені у вакансіях
Нещодавно вийшла новина про відкриття в Україні офісу Tango Me, однієї з найбільших стримінгових платформ, і ось вони вже шукають на DOU Android-розробників рівня Senior / Team Lead.
NCube і Newxel запрошують працювати над Viber.
Leia Labs пропонує компенсацію до $7000. Буде плюсом досвід з Computer Vision.
В офісі appflame є кімната для сну. А ще компанія регулярно ініціює загальнокомандні подорожі, відвідали навіть Мексику та Шрі-Ланку.
Product Madness може зацікавити відрядженнями зі Львова до Великої Британії.
SoftServe запрошує працювати над найбільшим у світі сайтом для мандрівників, який досягав 390 мільйонів унікальних відвідувачів на місяць. За даними SimilarWeb, найбільшою платформою про подорожі є TripAdvisor, який у серпні 2021 року мав трафік 143 мільйони відвідувачів, але до пандемії був значно популярнішим.
Yalantis пропонує sign-on bonus $1000. В Ajax такий бонус дорівнює одній зарплаті.
ПУМБ пропонує плюс одну зарплату за тренінг / сертифікацію.
В Zenia максимальна компенсація на позиції Senior Android Developer становить $3500. Потрібна англійська не нижче як B1. Буде плюсом досвід роботи з OpenGL ES / OpenGL / OpenCL, AR/VR. Є можливість релокації в Литву.
Думки технічних експертів
Анонімний Senior Android Developer, що має великий досвід проведення співбесід
Свого часу, коли шукав нову роботу, після кожної співбесіди нотував запитання. Приблизно третина з них перетиналася буквально на всіх інтерв’ю, дві третини повторювались хоча б раз.
На основі цього я й сформував свій список питань. Періодично його оновлюю, але загалом він не змінюється. Це розраховано на
Грубо кажучи, в мене є п’ять блоків: Computer Science, Java, Android, Kotlin, RX/корутини, архітектура.
У першому блоці запитую елементарне на зразок ООП, SOLID, чим наслідування від композиції відрізняється тощо. Відповіді тут майже не впливають на результат співбесіди. Я це запитую, щоб людина «увійшла в ритм», бо багато кому треба кілька хвилин, щоб розговоритись. Якщо бачу, що відповідають чітко, відразу переходжу до наступного блоку.
На початку співбесіди я завжди даю дисклеймер, що очікую відповідей, начебто я початківець, якого кандидат менторить.
Загалом список такий, що я б міг запитувати це і в джуна, але з іншим формулюванням. Наприклад, запитуючи у сеньйора «що таке RecyclerView?», я очікую спіч на
Передусім я дивлюсь на те, як людина комунікує, чи може вона викласти свої думки доступно і структуровано, а також звернути мою увагу на важливі моменти в питанні. Так, начебто я не розбираюсь в темі й мені потрібно провести короткий брифінг. I відповідь «я не знаю» значно краще, ніж намагатися додумати/вгадати або лити водичку. До незнання я ставлюсь толерантно й завжди ставлю більш детальні питання або перефразовую, якщо перший захід в тему був надто загальним і кандидат не розуміє, що я від нього хочу. Якщо спеціаліст сам ставить уточнювальні запитання, то це ледь не краще, ніж сама відповідь. На практичній частині це особливо актуально.
Якщо підсумувати, то я не можу сказати, що Senior — це той, хто знає певний набір технологій. З так званих хард-cкілів я очікую досвід роботи з більшістю стандартних компонентів SDK, знання популярних архітектурних патернів, синтаксису і стандартної бібліотеки Java/Kotlin. Ще, за відчуттями, корутини перейшли зі статусу «бажано» в «обов’язково». А от що обов’язково має бути — вміння доступно пояснювати іншим, як працюють штуки, в яких ти розбираєшся. Багато кандидатів, на жаль, погано це робить. А це важливо, нині розробка здебільшого командна, і вчасно та доступно проговорені речі економлять купу нервів не тільки вам, а й колегам.
Також за мотивами однієї з тем на DOU серйозно замислився над тим, щоб додати ще livecoding з FizzBuzz наприкінці співбесіди :)
Антон Козленко, Android Tech Lead в Noteworth
Я вважаю, що «seniority» вимірюється не тільки обсягом знань платформи та найпоширеніших бібліотек, інструментів, а більше умінням розв’язувати проблеми оптимальним способом і незалежно від рівня їх складності. Тобто Senior має вільно орієнтуватися у підходах до вирішення проблеми та вміти правильно обирати стратегію для кожного конкретного випадку.
Це не означає, що ви маєте знати абсолютно всі деталі платформи або бібліотеки (хоча на цьому етапі експертиза уже має бути солідна). Саме вибір підходу, початкової точки та розуміння загальної стратегії, які допоможуть досягти результату у відведені терміни, водночас на виході мати масштабований, чистий і стабільний код, який буде зрозумілий людині й достатньо швидкий у виконанні на машині — ось це необхідні навички для Senior Developer незалежно від спеціалізації.
На співбесідах я завжди приділяю увагу знанню базових речей в Android SDK (що є must), а ще намагаюсь запитувати так, щоб почути від кандидата, яким способом він би розв’язував задачу: питання щодо архітектури загалом чи щодо пошуку рішення для робочого застосунку. А також юніт-тестам, адже вони допомагають у написанні стабільного коду і водночас є своєрідною документацією для всієї команди.
Олександр Плєхов, Senior Mobile Engineer в Intellias
Хто такий Senior Android Developer? Мабуть, перше, що спадає на думку, це розробник, який знає та працює в усіх доменах, приділяє коду 100% часу та починає реалізацію відразу після вивчення головних вимог. Робить це, не зазираючи в документацію Android SDK та Stack Overflow, бо вже все знає. Здебільшого так і є, але є нюанси.
- Звісно, можна спробувати вивчити всі домени, якщо поставити таку ціль. Але це не має такої цінності, як технічний стек за плечима, що є матеріалом для будування будь-яких бізнес-завдань. Та й охопити всі домени нереально. Для нових ринків та регіонів потрібні свої підходи до реалізації.
- Якщо подивитися на роботу Middle- та Senior-розробників, можна помітити, що перший почне працювати над завданнями якомога швидше, на відміну від свого досвідченішого колеги. Все тому, що Middle Developer вже вміє вирішувати завдання самостійно, але ще не отримав достатнього досвіду, щоб передбачити наслідки поспішних рішень. Спочатку треба актуалізувати всі вимоги, скласти план реалізації та зробити його у поточній архітектурі.
- Від Senior-розробників не варто очікувати написання проєкту крейдою на дошці, якщо ми говоримо про тезисне будування кроків, а не компільований код. Android SDK та сторонні інструменти так швидко розвиваються та застарівають, що тримати весь синтаксис у голові неможливо та й не має сенсу. Наш мозок швидко видаляє непотрібну інформацію. Треба розуміти принципи мобільної розробки та стежити за трендами. Новий інструмент Senior освоїть швидко. Але базові поняття знати детально обов’язково. Якщо ви прийшли до розробки відразу на RxJava2 і Kotlin, наприклад, без знання Java Core та вміння працювати з класами Thread, то далі буде складно рухатися.
У кожній компанії/продукті своє розуміння того, хто такий Senior-розробник. Один і той самий фахівець в одній компанії не отримає підвищення через брак скілів, а в іншій він же буде перекваліфікований.
У моєму розумінні Senior Android Developer має:
- мати soft skills для комунікацій з будь-яким відділом розробки, виявляти деталі, розв’язувати конфлікти, пропонувати рішення;
- бути ментором, вчитися в колег, володіти актуальною технічною експертизою;
- мати комерційний досвід роботи з Java/RxJava/Kotlin/Coroutines/Android Jetpack та досвід у будуванні архітектури;
- завжди цікавитися, як це працює під капотом;
- писати код, який добре читатимуть люди, а не машини;
- мати досвід створення проєктів під ключ;
- вести pet projects, щоб практикуватися в альфа/бета-інструментах і з часом використовувати їх для продакшену;
- на питання «Як зробити?» пропонувати рішення, а шукати відмовки.
Добре, якщо:
- є досвід або розуміння кросплатформенних розробок. Це допомагає запропонувати зважені рішення для бізнесу;
- є знання С/С ++. Це дає змогу отримувати доступ до проєктів, де потрібна максимальна працездатність пристроїв.
Тобто Senior Android Developer — це окрема одиниця проєкту, якій можна дати опис задачі, а на виході отримати готове її рішення.
Рекомендовані книги:
- Effective Java, Joshua Bloc;
- The Clean Code, Robert C. Martin;
- Refactoring, Martin Fowler;
- Kotlin in Action, Dmitry Jemerov;
- Effective Kotlin: Best Practices, Marcin Moskala;
- Head First Design Patterns, Elisabeth Freeman.
Андрій Флінта, Mobile Engineering Lead в Intellias
Senior Android Developer — це насамперед досвідчений інженер із добре розвиненими soft та hard скілами.
Необов’язково ідеально знати технічну теорію, фреймворки, всі алгоритми тощо. Річ у тому, що наш мозок не є сховищем інформації, а має бути ефективним фільтром та обробником даних.
Отже, хочу виділити три основні навички ідеального Senior-інженера:
- Вміння ефективно використовувати технології, обробляти та розуміти різну інформацію та дані, адаптувати це під потреби проєкту.
- Вміння комунікувати та ділитися інформацією з колегами, замовником як вербально, так і за допомогою коментарів у коді, документації, діаграм тощо.
- Вміння писати зрозумілий, гнучкий і тестабельний код, наприклад, використовуючи SOLID, KISS, TDD принципи.
Якщо говорити про конкретний технічний стек Senior Android Developer, то це:
- SOLID, KISS, DRY;
- UML diagrams;
- Dependency injection;
- Unit testing;
- code quality, code review;
- Kotlin/Java experience;
- Android SDK/NDK;
- Android Multithreading (RxJava/Coroutines);
- Android Jetpack Architecture Components;
- Android SDK/NDK;
- Android Custom UI/Animations;
- MVVM, MVC, MVP;
- IPC;
- JNI;
- Application Profiler.
Роман Івасишин, Senior Android Engineer в Avenga
Архітектура Android-системи/застосунку є одним із найважливіших пунктів. Важливо знати принципи роботи Android-системи, модель взаємодії її компонентів, а також переваги та обмеження загалом. Поява і розвиток проєкту Android спрощує розв’язання архітектурних проблем під час розробки, але при цьому не треба забувати, що хоча знання бібліотек є must have, знання архітектурних компонентів Android SDK є основою. Що вирізняє Senior-розробника? Вміння аналізувати потреби проєкту та вдало використовувати потрібні архітектурні компоненти.
Також Android-система вимагає додаткових знань і зусиль:
- знати менеджмент і профайлінг пам’яті;
- враховувати енергоефективність;
- розробляти ефективні моделі роботи при різних типах під’єднання до мережі та відсутності мережі.
Крім того, треба вміти аналізувати потреби бізнесу і конвертувати їх в ефективний програмний інструмент. Великою перевагою є досвід в інтегруванні аналітичних інструментів, які будуть давати корисну інформацію про застосунок.
Необхідні вміння аналізувати і вирішувати нетривіальні задачі, логічне мислення. Розбивати систему на модулі та підсистеми. Ухвалювати обґрунтовані рішення щодо архітектури та використання різноманітних бібліотек. Важливим чинником є саме зважені рішення, а не гонитва за трендами.
Знання принципів UI/UX Android-системи є одним з важливих пунктів. Адже потрібно дати не тільки інструмент для бізнесу, а й зручний та ефективний застосунок для користувача. Перед Senior-розробником стоїть завдання транслювати U/UX-принципи, які притаманні Android-системі, всередині команди.
Також невіддільною частиною є ті знання і вміння, які має мати кожен Senior незалежно від напряму: софт-скіли, менторинг, структури даних, бази даних, алгоритми, патерни, bug tracking, testing, CI/CD...
40 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.