iOS дайджест #18: що повинен знати Senior Developer

Станом на сьогодні на ДОУ було розміщено 33 вакансії Senior iOS Developer. Я проаналізував їх усі для того, щоб зрозуміти, які скілли найчастіше очікують роботодавці від сеньйора.

1. Мова програмування Swift — 76% вакансій

Зараз вже неможливо уявити Senior iOS девелопера, який не прочитав книгу зі Swift від Apple. А для тих, хто прочитав, наступний крок — книга «Advanced Swift». Цю книгу радить Олександр Щербаков, iOS Software Engineer у компанії Prolific Interactive у Нью-Йорку.

2. Networking, REST — 45% вакансій

На цю тему нещодавно виходив окремий iOS дайджест.

3. Core Data — 36% вакансій

Темі Core Data також був присвячений один з останніх дайджестів. І хоча у коментарях до нього написали «Нормальные пацаны уже юзают Realm», знання Realm вимагають тільки 9% актуальних вакансій.

4. Unit Tests, TDD — 30% вакансій

Хороша книга «Разработка через тестирование для iOS» доступна російською мовою. Але якщо ви шукаєте щось новіше, зверніть увагу на книгу «Test-Driven iOS Development with Swift».

5. Multithreading, GCD — 27% вакансій

Володимир Павлюк, iOS Developer у компанії SoftServe з досвідом 7 років, радить книгу «Pro GCD and Blocks». Цитую його слова: «Одна из самых полезных книг по iOS».

6. Core Animation — 21% вакансій

Раджу книгу «iOS Animations by Tutorials» від Ray Wenderlich.

7. Local and Remote Notifications — 18% вакансій

Новий фреймворк UserNotifications було розглянуто у минулому дайджесті.


← Попередній випуск: iOS дайджест #17
Наступний випуск: iOS дайджест #19

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn



19 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Я ничего не буду говорить против, но хочу обратить внимание неокрепших умов, что обычно чтение книг по ios приводит к коду уровня рея вендерлиха и яблодоки.

Дмитро, корисна статья, дякую !

1. В iOS нет жизни за пределами главной страницы appstore, и нет даже вялого намека на существования за чертой Featured apps, Category tops, Editor’s choice и т.д. Поэтому думайте сами, решайте сами, интересно ли вам знать, что там используют 76% из числа неудачников, клепающих миллионы REST—оболочек на выброс, или нет. На мой взгляд, гораздо полезнее ознакомиться с исследованием используемости свиста внутри самого Apple. blog.timac.org/?p=1398 А потом трезво и адекватно оценить его роль в Тop100 приложений. Да, он используется как бы везде, но в качестве второстепенного язычка для тулинга, автоматизации тестирования и написания некритичных компонентов. По прошествии трех лет его существования можно уже смело говорить о том, что революционного потрясения, сравнимого по масштабу с переходами Carbon->Cocoa, Mac OS Classic->OS X, PowerPC->x86, не случилось. Больше напоминает GC в OSX. Еще вспоминается попытка продавливания .net как убийцы нативных языков в начале тысячелетия, и даже попытка писать на нем системные компоненты, в результате чего получился кадавр в виде Windows Vista.

2. REST — банальщина, не требующая упоминания. А фраза «Networking, REST» это просто песня! Смотрится примерно как «Кулинария, яичница».

3. Core Data на больших проектах беспомощна. О хипстозном рилме вообще умолчу. Только прямой sqlite, только хардкор. FMDB, разве что, допустим.

4. Капитан очевидность.

5,6. Два относительно годных пункта на весь «обзор». ИЧСХ, процент использования почти что 100-swiftUsage :)

7. Банальщина, не требующая упоминания.

EDIT: Прошу прощения, пункт 7 неправильно воспринял, профдеформация сыграла злую шутку. Если речь идет о Push—нотификациях, то да, там на практике довольно много сложностей.

Только прямой sqlite, только хардкор.
ну вы даете, тут же могут это читать дети.

В таком случае,
sed «s/Как найти девушку(.*[0-9]+)/Как искать детей в капусте\1»

Если речь идет о Push—нотификациях, то да

Так, мова іде про Push-нотифікації. Apple у документації використовує термін «Local and Remote Notifications». Локальна нотифікація — це, наприклад, повідомлення користувачеві, що він увійшов у певну географічну зону (не від сервера). А Remote — класична Push-нотифікація від сервера.

Поэтому думайте сами, решайте сами, интересно ли вам знать, что там используют 76% из числа неудачников
Сергей вы считаете что iOS разработчик не должен знать язык swift?
Ведь большинство статей, докладов на wwdc и курсов проводятся на swift.

Если в курсах только свифт, то с вас просто хотят содрать деньги.

Понимаете в чем проблема, большинство материалов и кода на свифте написано не на свифте, а на обжс или джаве с синтаксисом свифта людьми, которые свифта не знают. простой sanity check — если в коде есть имплиситы или много ифлетов и гардов, значит проггер не знает свифта.

На Obj-C написана куча кода, понятно что его никто не будет выбрасывать, потому массовый переход на свифт не произойдёт мгновенно. Но рано или поздно это случится. Хотя бы потому что свифт быстрее, на нём существенно быстрее писать и код получается чище из-за строгости языка

Насмешили. На статически типизированных языках код всегда пишется дольше. Тесты все равно писать что там, что там. Только на свифте даже тесты писать медленнее. Все плюсы типизации у свифта уничтожены наличием имплисит опшналов и форсов.

Скорость исполнения вообще неважна, тк вы все равно живете в бекграунде. Более того, поскольку все либы иос — это обжс, а не свифт, то особого различия в скорости нет, тк вы совсем ненадолго выбираетесь из обжс в свифт в пределах своей логики.

На статически типизированных языках код всегда пишется дольше
Это стёб такой, да? Да и в любом случае Obj-C не настоящий динамический язык, это не Питон. Его с-ма типов скорее «странная», но уж никак не динамическая. В конце концов, это ANSI C с плюшками.
Только на свифте даже тесты писать медленнее
А можно поинтересоваться почему?
Скорость исполнения вообще неважна
Это я вообще не знаю как комментировать. Скорость неважна, если пишем прогу с тремя кнопками и двумя табличками. Но благо не все проекты такие.
поскольку все либы иос
Не, ну пипец, как так можно бросаться необоснованными заявлениями то? Почти все важные third-party либы переписаны на свифте. А совсем важные либы вообще то на С написаны.

Я отдал Obj-C очень много лет, намного больше чем большинство нынешних синьоров ) Мне очень нравится этот язык, он крутой и необычный. Но стоит признать объективно — он устарел. А Свифт — это шаг вперёд.

Да и в любом случае Obj-C не настоящий динамический язык, это не Питон. Его с-ма типов скорее «странная», но уж никак не динамическая. В конце концов, это ANSI C с плюшками.

Мнда? Точно не динамический? Доказать сможете?

А можно поинтересоваться почему?

Сравните скорость написания тестов и сами тесты на kiwi и на quick+nimble. Одно отсутствие необходимости построения полноценных моков на обжективе чего стоит. Это я уже молчу, о проверке того, вызван ли был метод или блок.

Это я вообще не знаю как комментировать. Скорость неважна, если пишем прогу с тремя кнопками и двумя табличками. Но благо не все проекты такие.

Скорость исполнения важна при dsp. В этом случае уходят на С/С++. Ваши представления о скорости исполнения свифта взяты из рекламы яблока. Ну или поделитесь с нами, невинными, о том, как вы колбасите на свифте хотя бы пару мегабит данных в секунду и на каких проектах это необходимо.

Почти все важные third-party либы переписаны на свифте. А совсем важные либы вообще то на С написаны.

UIKit -> ObjC++, Quartz — ObjC++, Foundation — ObjC++, AudioUnit v3 — ObjC++. В принципе, в таком же духе можно перечислять все не с-шные библиотеки.

Вы б хоть поинтересовались тем, о чем пишете.

Я отдал Obj-C очень много лет, намного больше чем большинство нынешних синьоров )

Мне интересно, какая цифра опыта у человека, который не знает, почему ObjC — динамический язык, который по динамизму почти не уступает руби.

Но стоит признать объективно — он устарел.

Только в глазах рекламщиков яблока и хипстоты с 23-летними синиорами. Объективно, язык крайне сложный, имеет кучу правил, статически типизированный, что само по себе минус.

А Свифт — это шаг вперёд.

Свифт — это шаг назад в юзабилити и инструментарии. Да, есть пара милых фич, которыми все равно редко пользуются, т.к. большинство так и не вышло за рамки написания кода на Java с использованием синтаксиса Swift. Я уже молчу о компилере, который не может скомпилировать валидные языковые конструкты.

По поводу проблем свифта я даже спорить не буду. Их дохрена. Реально задалбывает, когда для более-менее сложных вещей приходится писать смешные воркэраунды. Особенно в случае дженериков, это печаль.

Мои представления по поводу скорости свифта отталкиваются от бенчмарков, которые я сам и писал. Если проявить ум и фантазию, то свифт проигрывает С++ в 2-3 раза, что на самом деле очень круто, как по мне. Речь сейчас о чисто алгоритмических вещах, сортировки, графы и т.д.

По поводу динамического Obj-C, моков и т.д. Да у Obj-C есть то, чего наверное нет ни у кого больше. Совершенный рантайм. И конечно, используя рантайм можно.. да всё можно наверное.

Но мы живём в реальном мире. Программы пишут живые люди. Они не всегда хорошо владеют инструментом, которым пользуются, ошибаются и т.д. А рантайм Обж-С — это способ не то что в ногу себе выстрелить, а тупо аннигилировать себя и половину города. С++ и не снилось.

Потому для продакшин разработки я считаю Свифт более подходящим языком. Соблюдая простые правила и следуя архитектуре писать можно быстрее и допускать меньше ошибок. В каких то моментах придётся код дублировать, в каких то писать кривули. Ничего не поделаешь — это жизнь. Вон Go вообще копипасту в ранг идеологии возвёл.

Просто из жизни. За пару последних лет мне нужно поднимать два легаси проекта, написанных ногами. Проект на Свифте был плох, очень плох, но в целом его можно было спасти. Обж-С спасти было нельзя, там ад и жопа. Трогаешь что то маленькое, сыпется всё. На Свифте банально сложнее написать очень плохой код. А вот на Обж-С вообще элементарно. Слишком много свободы.

Ещё один момент. Я верю что Свифт может в перспективе стать очень неплохим языком общего назначения и выйти за пределы Эппла. Пободаться с Гоу и Растом хотя бы. По крайней мере для себя я пишу пару проектов чисто консольных, под Линукс на Свифте. Очень всё нравится. Обж-С был и останется нишевым языком.

К тому что в сентябре придётся всё снова переписывать, я морально готов ) С 2.0 на 3.0 перешёл и не умер )

Речь сейчас о чисто алгоритмических вещах, сортировки, графы и т.д.

Мы же оба с вами понимаем, что эти вещи используются редко? МАксимум, на автоподсказку или кластеризацию для карт в большинстве приложений. Это если откинуть dsp и рендеринг, которые на свифте писать не стоит, также, как и на обжс.

Они не всегда хорошо владеют инструментом, которым пользуются, ошибаются и т.д.

Ну так мы же говорим о силе языка, не так ли? Любой динамический язык априори дает больше возможностей, но можно отстрелить себе ногу. С другой стороны, то же самое можно сделать, если использовать в свифте форс касты и анврапы, что делает абсолютное девов, чем нивелирует единственное преимущество свифта — compile time error checking. Т.е. незнание инструмента, а также адова лень, легко транслируется и на свифт, делая его абсолютно небезопасным.

А рантайм Обж-С — это способ не то что в ногу себе выстрелить, а тупо аннигилировать себя и половину города.

Вот странно, пользуюсь я и вся моя команда рантаймом для базовых вещей, типа проксирования, миксинов, моков, тестирования, город не аннигилирует. А также и для не очень базовых, например, при использовании RAC/RX (мне же не стоит напоминать вам, что они работают с рантаймом, так?).

Соблюдая простые правила и следуя архитектуре писать можно быстрее и допускать меньше ошибок.

Я категорически не согласен с тем, что можно писать быстрее. Ошибки, как было уже уопмянуто выше, с форсами (каст, анврап, имплисит), а также доступом к коллекциям по индексам, будут в свифте ловится точно так же только в рантайме. Зато в свифте из-за статической типизации, отсутствия дружбы генериков с иб, многие вещи писать приходится тупо дольше с точки зрения количества строк.

Слишком много свободы.

И вот это проблема. Я предпочитаю, чтобы программист сам решал, каким инструментарием ему пользоваться, а не чтобы его ограничивал компилер. Это дает существенные преимущества в скорости разработки. А вы сейчас, подобно гоферам, аппелируете к тому, что ограничения — это хорошо.

Проект на Свифте был плох, очень плох, но в целом его можно было спасти. Обж-С спасти было нельзя, там ад и жопа. Трогаешь что то маленькое, сыпется всё.

Простите, но я уже видел проект на свифте, который спасти было нельзя. Проблемы проектирования никак не связаны с языком. Только в свифте было так: что-то меняешь и проект перестает компилиться. А если и компилится, то падает в рантайме, то с null pointer, то из-за вылета за границы коллекции, то из-за неправильного использования unsafepointer, то из-за unmanaged.

Обж-С был и останется нишевым языком.

Я начал писать на обежктиве до появления иос и писал на линуксе консольки (gnustep). Так что ваше утверждение неверно. Что обжектив, что свифт нишевые, т.к. кроме стандартной либы все остальное и самое важное, благодаря чему сии языки хоть чего-то стоят, тивоизированы и завязына на инфраструктуру яблока.

Я верю что Свифт может в перспективе стать очень неплохим языком общего назначения и выйти за пределы Эппла.

Не может, он слишком сложный и силкшом сильно лезет в то, что его не касается. К тому же много крайне неочевидных поведений. Более того, он ни рыба, ни мясо. Он не объектный, не функциональный, стандартная либа написана странно, как минимум. Апи строк — это вообще обнять и плакать.

И у него слишком тупой компилер и даже в перспективе это не будет исправлено, т.к. они пилят бредовые фичи вместо того, чтобы хотя бы ввести совместимость ABI (я еще помню это прекрасное время, когда свифт уже новый, а большинство oss все еще на старом, на новом не компилятся и подрубить их, как so тоже не выходит).

С 2.0 на 3.0 перешёл и не умер

Говорит только о том, что вы либо пишете на свифте, как на Java с синтаксисом swift, либо о том, что проекты объемные, но простые.

В целом точка зрения понятна, просто я её не разделяю. Мне банально нравится Свифт, несмотря на все его недостатки. Мне приятно на нём писать. Из тройки «новых и модных» Go, Rust и Swift последний мне больше всего симпатичен. Go уж слишком для индусов, а Rust я как то не осилил сходу, он просто «не пошёл». Понимаю, что это субъективно. Так и то, что я с недоверием отношусь к динамическим языкам, 10 лет плюсцов дают о себе знать )

Вот чувак пишет довольно элегантно и прикольно на Свифте. Заодно там и про скорость много. github.com/…​tey/OptimizingCollections

Уже есть пара серверных фреймворков, тот же Vapor и Perfect. Да они сырые, в продакшин не готовы, написаны кривовато, но это ведь только начало.

ABI они обещают в след версии. Как и новые строки. Текущая реализация — это боль конечно, тут не поспоришь.

Время рассудит, короче.

Ну и да, iOS девы без знания Obj-C — это нонсенс, такие нам не друзья однозначно )

Сергій Мумряк в Києві рекомендує репозиторій awesome-swift для розширення світогляду
github.com/…​atteocrippa/awesome-swift

Я-то думал надо как-минимум в Swift коммитить.

я думал, без этого и мидлом не станешь, а оказывается можно уже и на сеньора претендовать

Дуже класна форма подачу з відсотками вакансій! Клас!
Зробить щось подібне і про інші мови/технології

Підписатись на коментарі