iOS Makes Me Hate
4.08K subscribers
1.31K photos
186 videos
24 files
1.44K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK

Самое большое сообщество практиков: https://boosty.to/lionbond
Download Telegram
Отпускной контент

Я же взял курс по аи-креаторству. Как делать крутые ролики и контент с помощью нейросетей. Поэтому ждите здесь первые труды. Буду спаривать образовательный контент с креативом.

Мне лично очень нравится художники, что уже не стесняются юзать аи-тулкиты. В правильных руках нейронки умножают твой талант.

Главная цель любого труда - насмотренность. Будь это аналитика конкурентов в стерильной коммерции. Живой опыт реальных экспертов. Референсы художников на кино лайк Тарантино.

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

1. The Northman (2022). Лучший дарк-фэнтези, что я посмотрел в этом году. Вайбы Берсерка и Саги о Винланде присутствуют.

Я долго откладывал кино, но являясь любителем жанра эпоса, не мог устоять. Это самый красивый фильм о викингах. Каждые 5-10 лет для меня открываются свои фавориты в фольклорных эпосах.

В 2010х - это «Вальгала» от Рефна с Миккельсеном.

В 2015 «Макбет» Курзеля с Фасбендером.

В 2020 неплохой «King» с Шалламе.

В 2025 же охеренный «The Northman» Эггерса.

2. «Человек-бензопила: История Резе». Я фанат мангаки. Мне нравится его FirePunch. Огромное кол-во отсылок на кино с прямыми заимствованиями и цитатами. Неординарный стиль и пост-модернизм.

Музыка и история первого сезона вдохновили прочитать еще пару лет назад всю мангу целиком. Тогда я очень ждал анонса этой одной из самых красивых историй. И судя по шуму в сети - экранизация очень удалась.

Перечитаю мангу.

3. «Братья Карамазовы» Достоевский. В эпоху нейронок нам все же не хватает естественности и живости. Следующий год я объявил для себя — годом классической литературы. Я хочу оживить речь и стиль.

Даже этот пост я начал писать потому что нужно размывать немного границы и уходить от фокуса только технического контента.

А почему начал с Достоевского? Потому что любимый автор.
1103
Эмпатичность в собеседованиях
Пока мы на теме найма. Я сейчас обучаю парочку людей в компании проводить собеседования и хотел поделиться одним приниципом, которому я всегда следую, собеседуя людей: эмпатичность.

Цель любого технического собеседования – получить сигналы о том, подходят ли кандидаты на должность, на которую собеседуются. Ещё раз, цель – не "уничтожить" кандидатов, не "провести им экзамен", не "вывести их на чистую воду". Цель – получить достаточно информации о требуемых для позиции навыках.

Поэтому во-первых, нужно чётко сформулировать – а какие навыки мы хотим проверить и как. И явно донести кандидатам, какой навык мы сейчас проверяем, что от них требуется продемонстрировать. Если тебе кажется, что знание об этом может как-то помешать проверить навык – значит ты что-то делаешь не так. Если задача составлена таким образом что основная проблема – это ДОГАДАТЬСЯ что от тебя хотят – мы проверяем догадливость, а не какой-то рабочий навык. Ну и самое главное – нужно убедиться что задача проверяет именно "навык", а не некоторое "знание". Поэтому я терпеть не могу опросники. Можно часами рассуждать про java memory model а потом не суметь обнаружить и устранить гонку в простейшем коде.

Во-вторых: для кандидатов собеседование – это всегда новая и стрессовая ситуация. Для собеседующего – это просто обычный день на работе. Особенно если собесы поставлены на поток, как в Яндексе. Люди в стрессовых ситуациях ведут себя не так, как в обычной жизни. А нам надо проверить, как они будут себя вести в обычной каждодневной работе! Поэтому, чтобы максимизировать сигнал от кандидатов – их нужно по возможности избавить от стресса. Улыбнуться, спросить как дела, про погоду там, ещё что-то. Объяснить как будет проходить интервью, сколько задач предстоит решить. Дать выбрать порядок решения задач, если это возможно. В общем нужно провести некий ритуал общественного поглаживания и сделать обстановочку чуть более безопасной.

Казалось бы простые и очевидные вещи, но их приходится проговаривать снова и снова. Теперь хоть смогу ссылку кидать. И ты сможешь
22
Architecture & Culture инженеры

Мне безумно нравятся проекты, где команда взрослеет до того момента, когда появляются роли, отвечающие не за "закрыть задачу", а за добавить осознанности в саму разработку.

Это те люди, которые приходят в проект не с вопросом "что нужно сделать?", а "почему мы делаем это именно так?"

Ставь лайк, если в твоем проекте не хватает Architecture & Culture инженеров
2126
2025: Год, когда SwiftUI умер

Мне повезло. На текущем проекте я могу использовать и SwiftUI, и SC, тк минимальный таргет сейчас 16 iOS. Поэтому я могу щупать это прям на многомиллионом приложении с дедлайнами, багами, автотестами и зависимостями.

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

С 2019 года идут слухи, что SwiftUI станет единственным фреймворком. Но мы уже давно пишем, что этого не будет. Всегда на больших проектах будет UIKit + SwiftUI. Что-то одно не заменит другое. Это два разных инструмента.

Вот и автор статьи уверяет, что 2025 год стал поворотным для SwiftUI. Он перестал быть общепринятым выбором.

Основные аргументы автора:
🟣UIKit обновился. Добавился @Observable который убил один из аргументов, что UIKit не реактивен.
🟣Скорость верстки увеличилась с ИИ. Раньше говорили, что на SwiftUI быстрее пишешь код и верстаешь, но ии-агенты обнулили аргумент и теперь скорость везде одинакова.
🟣Ограниченный SwiftUI. Хоть на дворе 2к25, но у SwiftUI до сих пор есть проблемы с производительностью и гибкостью.

Многое из этого мы уже прямо или косвенно обсуждали в SwiftUI System Design Interview

Ну а вы как считаете cтоит ли хоронить SwiftUI?

Ставь 💀 если так и не трогал SwiftUI в проде.
Please open Telegram to view this post
VIEW IN TELEGRAM
4213
Думаем….
256
Кстати, пишу это сообщение с 4к метров

Следующие посты посвящу систем дизайну и вопросу скорости интернета, размерам аудитории и странам с их покрытием

Эта тема супер интересная. Очень часто начинаю замечать запросы на разные скорости
1465
Mobile System Design: Почему важно учитывать размер аудитории

На тренировках по мобильному систем дизайну мы отдельно остановились на вопросе "Почему важно учитывать размер аудитории". Также нам подробно объяснила экс-тимлид Яндекса.

Грубо говоря, это одно из главных требований реального проектирования. Об этом много можно рассуждать, но лучше всего это сформулировано в книгах Mobile System Design и Building Mobile Apps at Scale.

Рост аудитории кардинально влияет на требования к архитектуре, качеству кода и техрешениям. Чем больше пользователей — тем выше цена любой ошибки, а значит и требования к зрелости продукта.

Все авторы выделяют такие набухающие блоки:

1️⃣ Один бинарник

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

Мобилки не обновляются мгновенно как веб. Если у тебя 500 000 пользователей, у каждого может быть разная версия, и каждая ошибка живет на устройстве долго.

Вывод: глубокое проектирование и четкая система релизов становятся критичными

2️⃣ Чем больше пользователей, тем дороже ошибки

Building Mobile Apps at Scale пишет: с ростом аудитории растет и команда, а значит растет и цена ошибок.

🟣При 100 пользователях: фича может падать 1 раз в сутки, лаги не критичны, можно быстро пофиксить.

🟣При 1 млн пользователей: маленький баг превращается в стихийное бедствие. Ошибочное проектирование хранения данных вызывает коллизии. Плохая работа с сетью может и вообще привести к падению серверов.

Вывод: Чем шире аудитория, тем выше требования к стабильности и предсказуемости.

3️⃣ Масштаб определяет выбор технологий

С ростом аудитории меняются и приоритеты.

Мало пользователей, значит можно выбирать модные технологии.

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

Вывод: системы, работающие на миллионах пользователей, почти всегда строятся на простых, проверенных и надёжных решениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
7
🌐 Mobile System Design: Мобильный интернет и регионы

Продолжаю серию постов про масштабирование. В прошлый раз мы обсуждали размер аудитории, сейчас про кол-во регионов.

Иногда встречаются крупные приложения, которые при этом работают только в одном регионе. Классический пример — Авито. Изначально он был частью OLX, где действовал простой принцип "одна страна — одно приложение". Отсюда и особенности архитектуры: отсутствие локализации, все тексты зашиты по-русски и в клиенте, и на сервере. Поэтому сегодня для них отдельный вызов — добавить поддержку ориентации и полноценной локализации в продукт, которому уже почти 10 лет.

Есть и другое распространенное заблуждение среди разработчиков будто некоторые продукты практически не имеют конкуренции. Такси, доставка еды, продажи б/у вещей. Кажется, что они существуют сами по себе и могут позволить себе любые архитектурные решения.

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

Зачем вообще оценивать скорость интернета?

Вы удивитесь, сколько на самом деле зарабатывают международные продукты. Иногда бывает так, что хорошо известное вам приложение под другим брендом или в виде локального клона в другой стране приносит не меньше, а то и больше денег. И вот вы выходите на новый рынок, а заказчик прямо говорит: "Наш конкурент в Пакистане загружает страницу за 4 секунды. Нам нужно сделать за 2".

В этот момент все, что вы тестировали и проектировали на своих дата-центрах, быстрых провайдерах и удобных VPN’ах, нужно переосмыслить под реальные условия этой страны. Потому что продукт будет жить не в вашей комфортной сетевой среде, а в их со своей задержкой, скоростью и ограничениями.

Tjeerd в Mobile System Design подчеркивает:
мобильные приложения — это работа в условиях постоянно меняющейся сети: Wi-Fi > LTE > EDGE > offline > captive Wi-Fi > обратно.


Это влияет на:
🟣архитектуру кеширования
🟣retry / backoff механизмы
🟣error state UX
🟣периодическую синхронизацию
🟣размер загружаемых пачек данных
🟣выбор форматов данных (JSON vs protobuf)

Скорость сети диктует структуру API и политику запросов. Cлишком много мелких запросов, которые убивают слабую сеть и создают network storm для бэка. Быстрый интернет это оптимистичное допущение. Проектировать надо под худший сценарий. Оффлайн режим становится обязательным, а не опцией

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

Скорость сети системное ограничение, которое меняет архитектуру всего мобильного приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
176
А этот опыт с нами сейчас в одной комнате? 🥺

⌨️ Загрузите своё резюме и бот оценит его по баллам, отметит слабые места и даст рекомендации.

А ещё сразу после проверки можно скачать гайд «Идеальное резюме» с подсказками по структуре, оформлению и навыкам. Функция доступна до 10 раз на пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
111
🔎 Рубрика "Алгоритмы под лупой": SwiftUI Identity vs Value

Понравился пост у ребят, где они разбирали, какие алгоритмы работают под капотом Diiffable. Вдохновившись решил сделать похожую рубрику, но с другим ракурсом. Хочу искать алгоритмы, которые спрятаны там, где мы обычно о них не думаем.

Почему это важно? Во многом наша работа держится на готовых фреймворках, и это нормально. Но когда понимаешь, как именно они устроены внутри, появляется совсем другой уровень инженерного мышления:

🟣Когда знаешь, какой алгоритм стоит за diffing, кешированием или версткой, проще понять, что подойдет для конкретной задачи, а что вызовет проблемы.
🟣Многая магие перестает быть магией
🟣Понимание внутренней кухни помогает не просто "делать, как принято", а осознанно проектировать UI, сеть, кеш, многопоточность.
🟣За каждым лагом стоит конкретный алгоритм: сортировка, диффинг, поиск, компрессия.
🟣На собеседованиях, в архитектуре, в ревью — чем глубже понимаешь механику, тем проще обсуждать решения и объяснять, почему они работают.

По шагам DiffableDataSource решил пройтись упрощенно по Identity. SwiftUI выглядит простым. Меняем состояние и UI апдейтится. Но под капотом работает довольно интересная система сравнения
Она решает два вопроса:
🟡Это тот же элемент интерфейса или новый? Тут идет сравнение View, id, Identifiable, .id
🟡Нужно ли действительно обновлять поддерево View?

Подробнее об этом мы писали несколько постов.

Какие алгоритмы помогают закрепить знания? SwiftUI не раскрывает свои алгоритмы полностью. Их можно собрать по кускам и лишь догадываться. Но есть три опоры, которые очень хорошо помогают понять его работу:

Алгоритм Майерса.
Этот алгоритм основа CollectionDifference. Находит минимальную последовательность изменений между двумя массивами.

Алгоритм Пола Хеккеля.
Используется в старом и забытом IGListKit. Помогает эффективно сравнивать большие списки и почему стабильные id — критичны.

Dependency Graph.
Помогает понять как SwiftUI выбирает минимальный набор обновлений. По сути это то, чем является AttributeGraph.

Полезные ссылки:
- репо DifferenceKit
- A fast and flexible O(n) difference algorithm framework for Swift collection
- Modern cell configuration
- Implementing modern collection views
Please open Telegram to view this post
VIEW IN TELEGRAM
2542
Тизер выпуска про аи инструменты на реальном проекте.

Все про AI инжениринг (согласовано с безопасниками)
1115
Еще одна традиция канала — ежегодно делиться итогами в Яндексе музыке. По праву лучшее музыкальное приложение СНГ (а может и мира), но постоянно лежат при релизе итогов.

Хоть я уже ушел окончательно в Apple Music (последний гвоздь был отсутствие ost плейлиста охеренной the Dispatch), но рекомендации в Яндекс.Музыке - лучшие.

Делитесь своими
9