Ответ
Мои основные профессиональные интересы сосредоточены на создании масштабируемых, поддерживаемых и производительных iOS-приложений. Конкретные области:
- Архитектура: Применение и анализ паттернов (MVVM, Clean Architecture, VIPER) для разделения ответственности и улучшения тестируемости.
- Современный Swift: Активное использование concurrency (
async/await,Actor), протоколов, дженериков и value-типов для написания безопасного и выразительного кода. - Производительность: Оптимизация интерфейса (60 FPS), работа с памятью, эффективное сетевое взаимодействие и фоновые задачи.
- Инструменты и DevOps: Настройка эффективного CI/CD, автоматизация рутинных задач, инструменты статического анализа кода.
Готов углубленно обсуждать любые технические аспекты, связанные с этими темами.
Ответ 18+ 🔞
А, ну вот, смотри, классический случай. Сидит чувак, открывает LinkedIn, и начинает строчить про свои «профессиональные интересы». Масштабируемые, поддерживаемые, производительные... Да ты погоди, дружище, давай на чистоту.
Вот представь: ты приходишь в бар, а не на собеседование, и начинаешь так же заливать. «Мои основные алкогольные интересы сосредоточены на создании сбалансированных, поддерживающих тонус и эффективных коктейлей. Конкретные области: архитектура стакана, современный лед, оптимизация процесса смешивания...» Тебя бы, прости господи, послали нахуй ещё на втором предложении.
Но ладно, раз уж начал, давай разберем твою писанину по косточкам, а то волнение, блядь, чувствую — человек реально в теме, но закопался в этих шаблонных фразах.
Архитектура. MVVM, Clean, VIPER... Ёпта, а главный паттерн-то какой? Паттерн «не выебать мозг себе и команде на ровном месте». Вот ты берешь тупенький экран с парой кнопок — и нахуяриваешь туда VIPER? Чтобы Interactor, блядь, данные из Realm тащил, Presenter их вьюхе отдавал, а Router тебя на экран «Настройки» вел? Это ж чистой воды пиздопроебина, прости господи. Весь смысл — разделить ответственность так, чтобы через полгода, открыв свой же код, ты не сказал «какой мудак это писал?» и не понял, что это был ты. И чтобы тесты, эти ёбаные unit-тесты, которые все ненавидят писать, хоть как-то запускались, а не падали с ошибкой «не найден модуль "Сocksucker"».
Современный Swift. Async/await, Actor... О, это моя любимая песня. Все такие: «ой, у нас теперь concurrency, как в больших языках!». А потом смотришь в код — и там Task { @MainActor in ... } внутри DispatchQueue.main.async, который внутри completion handler’а старого URLSession. Получается матрешка, блядь, из всех возможных способов работы с асинхронностью одновременно. Или объявляют весь класс Actor'ом нахуй, потому что «безопасность потоков», а потом рыдают, что каждый вызов свойства — это await. Чувак, инструмент — не серебряная пуля. Это как молоток: им и гвоздь забить можно, и себе по яйцам въебать. Надо думать, э, бошка, думай!
Производительность. 60 FPS... Ага, а как ты её добиваешься? Не делаешь тяжелую работу в main потоке — это святое. Но вот вопрос на засыпку: ты когда-нибудь смотрел, что творится в Core Animation инструментах, когда у тебя кастомная анимация через UIView.animate? Или почему твой UICollectionView с красивыми ячейками начинает подтормаживать на iPhone 8? Вот тут и начинается магия. Не «эффективное сетевое взаимодействие» в резюме, а реальное: кэширование, пагинация, prefetching, отмена неактуальных запросов. Без этого — пиши пропало.
Инструменты и DevOps. Ну, CI/CD — это вообще отдельный вид искусства и боли. Можно, конечно, просто нажать «Connect repository» в Bitrise и радоваться. А можно потратить неделю, чтобы написать свой скрипт на Fastlane, который будет не только архив собирать, но и прогонять линтер, считать покрытие кода тестами (которые никто не пишет, но всем надо), загружать dsym'ы в Crashlytics и слать сообщение в слак с результатом. И когда этот скрипт, наконец, заработает, ты почувствуешь себя богом. А на следующий день он сломается, потому что Apple обновила сертификаты, и ты поймешь, что ты не бог, а просто мудак, который опять потратил день на ерунду.
Короче, суть-то не в том, чтобы перечислить модные слова. Суть в том, чтобы понимать, нахуя это всё нужно. Зачем тебе Clean Architecture? Чтобы можно было выкинуть всю работу с сетью и подставить моковые данные для тестов. Зачем async/await? Чтобы не писать адские цепочки из completion handlers и не попадать в callback hell. Зачем линтер? Чтобы у всей команды код выглядел так, будто его писал один человек, а не сборище мартышлюшек с разными тараканами в голове.
Вот когда ты можешь объяснить каждое свое решение не цитатой из доклада с WWDC, а реальной болью, которую оно решает, — вот тогда ты и правда специалист. А так... ну, резюме как резюме. Стандартный набор заклинаний для HR. Дай угадаю, дальше у тебя идет «командный игрок, быстро учусь, люблю сложные задачи»? Ну давай, удиви меня, расскажи что-нибудь реальное. Про тот раз, когда твоя «масштабируемая архитектура» не вывезла резкий рост пользователей, и что ты сделал. Или как ты уговорил легаси-команду перейти с Objective-C на Swift. Вот это будет интересно.