Що має знати Senior iOS/macOS Developer. Результати аналізу вакансій на DOU
Станом на 16 грудня 2018 в рубриці iOS/macOS на DOU було розміщено 34 вакансії Senior Developer. Це майже виключно iOS: 32 вакансії. 2 вакансії macOS-розробників. Та жодної, де хоча б в тексті згадано tvOS або watchOS.
Усі 34 вакансії я проаналізував вручну, щоб дізнатись, які навички очікували роботодавці від сеньора в 2018 році.
Розділяти iOS та macOS я не став, тому що в умовах, коли частка macOS на ринку дуже маленька, вакансії на macOS часто закривають айосниками.
Рейтинг навичок розділений на 2 частини: «Must have» та «Would be a plus». Скажу наперед, що загалом, на мою думку, вимоги виглядають адекватно. Лише 2 компанії вказали Xcode. Тому, думаю, варто звернути увагу на те, які знання очікуються.
Must have
Swift — 68% вакансій. Минулого року було 76%. Частка Swift є стабільною.
Objective-C — 59% вакансій. Великі зміни відбуваються саме з Objective-C. В
Client-Server Networking — 56% вакансій. Минулого року було 45%. Більшість iOS-аплікацій є клієнт-серверними, але не всі. Особисто я більше року працював на великому проекті на 7 iOS-розробників, де сервера не було в принципі. Таке буває. Якщо ви виросли на такому проекті, а на іншу роботу не беруть без знань комунікації з сервером, пройдіть курс «Networking and Security in iOS Applications», і все стане на свої місця. Найпопулярнішою технологією комунікації з сервером є REST, він вказаний у 32% вакансій. SOAP — тільки в одній вакансії. GraphQL не вказав ніхто, хоча розмови про його переваги чутно досить часто. Конкретні бібліотеки значення не мають. Alamofire та AFNetworking згадувались по 2 рази. В 1 вакансії як must have вказано OHHTTPStubs.
Англійська мова — 44% вакансій. Часто у вакансіях не вказують конкретний рівень англійської, а просто пишуть, що він має бути достатнім для комунікації. Для того, щоб зрозуміти, яку роль відіграє рівень, я звернувся до сирих даних останнього зарплатного опитування DOU на GitHub. Зробив вибірку Senior Software Engineer, що програмують на Swift та Objective-C, та розбив на 4 групи залежно від рівня англійської. Pre-Intermediate — 3 анкети, середня компенсація 3.067 долара після податків. Intermediate — 11 анкет, 3.173 долара.
Upper-Intermediate — 25 анкет, 3.502 долара. Advanced — 10 анкет, 4.035 долара. Можна зробити висновок, що прохідним рівнем є Intermediate. А небажання вчитись та підтягнути свій рівень до Advanced коштує (4.035 — 3.173) x 12 = 10.344 долара на рік.
Git — 41% вакансій. Єдина компанія, яка вказує SVN — Genesis. Але Git їм теж підійде.
Object-Oriented Programming — 35% вакансій. Чесно кажучи, мені це здається дивним. ООП було безумовною парадигмою в Objective-C. Але в Swift Apple просуває Protocol-Oriented Programming. Останній згадано лише в 1 вакансії. В традиційному розумінні ООП базується на класах. Але в Swift класи є лише одним з кількох типів моделей. Більшість компонентів стандартної бібліотеки Swift реалізовані як структури, а не класи. Можливість крос-типових операцій забезпечують саме протоколи.
Multithreading — 26% вакансій. Минулого року було 27%. Конкретний інструмент не настільки важливий. GCD згадується в 15% вакансій, Operation (NSOperationQueue) — 6%. Враховуючи, що в перспективі в Swift може з’явитись first-class concurrency support (вбудована багатопоточність), як в Go, ключову роль відіграє знання принципів паралельних та розподілених обчислень, а не конкретної технології.
Unit Tests — 26% вакансій. Минулого року було 30%. На цей пункт слід звернути особливу увагу, тому що дуже багато проектів в принципі не мають юніт-тестів. Відповідно, ситуація, коли розробник не має досвіду з юніт-тестами, не є екзотикою. Не обов’язково це має бути TDD. Тільки 9% вакансій згадують саме TDD. Хоча добре знати TDD — ідеальний варіант. В деяких компаніях юніт-тести пишуть, як правило, джуніори. Але концепція TDD передбачає, що сеньор пише тести, що задають вимоги, а мідли та джуніори пишуть код, що відповідає цим вимогам. Особисто я треную навички TDD на сайті HackerRank. Там ти спочатку вчишся писати код, який проходить тести, а потім можеш додавати на сайт власні тести.
Continuous Integration — 24% вакансій. На великих проектах, як правило, є DevOps. Але більшість проектів в iOS маленькі, і Senior iOS Dev виконує там роль майстра на всі руки. Важливо знати саме принципи CI, а от знання конкретної технології тут теж є другорядним. Jenkins згадується лише в 9% вакансій, хоча Xcode Server немає в жодній.
M-V-VM — 18% вакансій. MVC згадується лише в 15% вакансій. Це можна пояснити тим, що розмежування на дані та інтерфейс вже є усталеним: всі так працюють. А от той факт, що дані можуть по-різному виглядати в базі та на екрані, є як мінімум цікавим. Але іноді використання M-V-VM є просто даниною моді. Сам автор M-V-VM John Gossman ще 2006 року писав: «For simple UI, M-V-VM can be overkill».
Core Data — 15% вакансій. Минулого року було 36%. Не думаю, що Core Data стали використовувати менше. Я припускаю, що на тексти вакансій могли вплинути коментарі під iOS-дайджестом на DOU: «Core Data на больших проектах беспомощна», «Нормальные пацаны уже юзают Realm». Для тих, хто вирішив стати «нормальним пацаном», Ray Wenderlich випустив книгу про Realm. Але лише 2 вакансії його згадують. А SQLite взагалі немає в жодній.
Auto Layout — 15% вакансій. Після переходу на iOS 7 2013 року Auto Layout був топовою темою на співбесідах. Не всі мали з ним досвід, і інтерв’юер мав шанс блиснути знанням «вищої математики» констрейнтів. Зараз всі зрозуміли, що то не так складно в порівнянні, наприклад, з багатопоточністю.
Цікаво, що кожна компанія використовує у своїх вакансіях власний спосіб написання назви Auto Layout. Наприклад, в компанію Rozetka потрібен спеціаліст зі знанням «Autolayaut».
Memory Management — 12% вакансій. 6 років тому, коли я почав працювати iOS-розробником, робота з пам’яттю була ключовим знанням, потрібним на всіх без виключення проектах. Ручне управління пам’яттю залишало великий простір для memory leaks. З того часу відбулись великі зміни: перехід на ARC та Swift. Знання про пам’ять все ще важливі, але вони вже не відіграють такої великої ролі.
Agile — 12% вакансій. Waterfall не згадується у жодній вакансії. Lean зустрівся 1 раз. Конкретизувати у вакансії фреймворк в межах Agile не прийнято: лише 1 вакансія згадує Scrum, жодна не згадує Kanban.
Core Animation — 12% вакансій. Минулого року було 21%. У 2 вакансіях згадується Core Graphics.
VIPER — 9% вакансій. VIPER в Україні популяризує компанія Genesis. Оскільки вони створюють топові проекти та потрапили в список «New Apps We Loved» від Apple, VIPER, який був модним у США з 2014 року, зараз у всіх на вустах в Україні. Тут можна почитати про VIPER, а тут Sergey Petrov критикує VIPER та називає його поганим вибором.
SOLID — 9% вакансій. Класика безсмертна. Але не SOLID єдиним. Щоб потрапити в компанію Wirex, потрібно знати та використовувати DRY, YAGNI та KISS.
Sockets — 9% вакансій.
CocoaPods — 9% вакансій.
А особисто я вважаю, що Senior має знати, чим відрізняються Sequence та Collection. Хоча деякі навіть плутають NSCoding та Codable.
Would be a plus
Тут немає таких явних лідерів. Але цей список цікавий тим, що як would be a plus компанії вказують ті технології, які вони реально використовують на проектах.
Objective-C — 9% вакансій.
C++ — 9% вакансій.
UI Tests — 9% вакансій.
Уточню, що 9% — це 3 вакансії. По 2 рази у вакансіях зустрічались TDD, Continuous Integration, fastlane, JavaScript, React Native та Agile.
Мій улюблений ARKit згадується лише 1 раз як would be a plus. В must have він відсутній. Загалом доповненою реальністю займаються згідно з вакансіями лише 2 компанії: Snap та Genesis. Машинним навчанням на Swift — ніхто. Create ML, Core ML, Vision та Natural Language немає в жодній вакансії. Хоча Apple цього року зробила ставку саме на ці технології. А ми в Perfectial вже використовуємо їх на комерційному проекті.
Також по 1 разу згадуються Docker, AWS, Xcode Instruments, Sketch, Metal, OpenGL, Python, C#, Node.js. Можна зробити висновок, що всім не вгодиш, але кожен знайде свою вакансію.
Цікавинки
В компанію ZEO Alliance потрібен Senior Objective-C Developer з хорошим знанням Mac OS X. Mac OS X існувала в
Компанія N-iX шукає Senior iOS Engineer для амбітного клієнта, що планує мати один мільярд користувачів до 2020 року.
Думки технічних експертів
Ольга Мацик, Senior macOS and iOS Dev в Augmentive, PhD in Computer Systems and Components
Борис Щербина, Senior iOS-разработчик в Beetroot
Ігор Рапалюк, Senior iOS Dev у Perfectial
P. S. Я планую протягом року підготувати аналогічні огляди про інші технології. Зокрема Front-end, Java, .NET, PHP, Node.js, Python, C++, Ruby, Android, Scala та Go. Якщо ви маєте бажання допомогти, напишіть мені приватне повідомлення на DOU. Навіть
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
20 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.