iOS Makes Me Hate
3.93K subscribers
1.16K photos
167 videos
15 files
1.33K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
⌨️ Практический Swift Councurrency: Batching

Иногда кажется, что у нас есть особое чутьё на то, что откликнется людям. Запускаем что-то новое и вдруг видим, как это подхватывают вокруг. Для меня это знак, что мы на одной волне с аудиторией и двигаемся в верном направлении.

Например, уже полтора месяца активно разбираем Swift Councurrency, проводим опросы и анализ что интересно аудитории, как вокруг внезапно за последние недели начинают выпускать новые статьи или роадмапы. Даже льстит, что мы так влияем на индустрию 🫣

Хватит шуток, приступим к работе. Этот месяц мы активно решили разбирать практические задачи. Одна из частых в продакшене, но непопулярных у популистов задач — это батчинг.

🌿 Batching — это важный инструмент оптимизации. Мы копим события или элементы и отправляем их пачкой по одному из правил. Где это встречается:
- при проектировании аналитических модулей
- чаты
- сложные логеры

Зачем это нужно?
- меньше сетевых запросов
- улучшение перфоманса
- экономия батарейки

Это очень крутая задача для лайфкодинга или систем дизайна. Можно много где развернуться и оценить как свои знания, так и кандидата.

На скрине сделал очень простую версию для знакомства с концепцией. Более production ready будет в закрытой базе вместе с другими практическими задачами. С более детальным описанием многих корнер-кейсов.

Интересные ссылки:
- Algorithm | Concurrent Batch Processing | Swift
- Простая реализация батчей
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8
📺Всё про MobDevOps

По опросу в канале аудитория посчитала, что это легче, чем "красить кнопки". Я посчитал это булщитом и большим заблуждением в сети. Поэтому я искал эксперта, кто может пояснить за CI/CD.

Мы с @MeGaPk решили разобрать подробнее все мифы и заблуждения этой темы.

В этом выпуске мы поговорили про:
🟡почему зарплаты MobDevOps'ов самые большие на рынке
🟡Почему многие думают, что СI/CD это только настройка Xcode Cloud или Jenkins
🟡как внедряют АИ кодревьюеров в CI/CD флоу
🟡Самые полезные функции для работяг
🟡Стоимость настройки на стандартном проекте
🟡Fastlane и другие тулкиты
🟡Как доказать бизнесу важность CI/CD

🧬 Получить доступ 💰тут или ⭐️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
41
Architecture Decision Records

Мы уже выяснили, что архитектуры — это не про выбор паттерна между VIPER/TCA/MVP. Писали это посте "Вы переоцениваете UI-архитектуры" и "О, нет! Ты выбрал неправильную UI архитектуру!". И нет, выбор архитектуры это тоже не про шаблонное рисование схем "System Design Interview: как сделан ютуб".

Выбор архитектуры — это оценка ресурсов, сроков. Где выбирая архитектуру ты должен задумываться об ее росте и сопротивлению деградации. Так тебе и команде проще жить.

Теперь перейдем из абстрактных советов к практике. Один из важных инструментов, которые помогают разрабам — это ADR.

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


В больших и сложных проектах, где внедрение или изменение технологий может идти годами. Может произойти такой момент, где все потеряют смысл и вектор происходящего. Зачем мы это делаем? Почему такое было сделано? Куда мы идем?

В этот момент помогают такие инструменты как TDR или ADR. На моей работе даже сейчас одна из сложных задач — это понять и зафиксировать вектор, а также не размыть и потерять все контексты.

Если у вас такие же проблемы, то вот отличные подборки публичных гайдов:

🌟 adr-tools
🌟 Amazon
🌟 GitHub
🌟 RedHat
Please open Telegram to view this post
VIEW IN TELEGRAM
19
🌄 Swift Concurrency: изоляция MainActor?

DispatchQueue.main.async ВСЁ! Теперь в современном мире мы используем MainActor. Но с ним есть множество нюансов, которые нужно учитывать.

Большинство иосеров думают, что @MainActor просто гарантирует выполнение кода на main thread. Но это лишь верхушка айсберга. Реальная магия и потенциальные проблемы скрываются в том, КАК именно Swift изолирует ваши данные.

Допустим, что если класс помечен @MainActor, весь код выполняется на main thread, верно?


@MainActor
class ViewModel: ObservableObject {
@Published var data: [Item] = []

// Весь ли код выполнится на main thread?
func loadData() async {
let items = await apiService.fetchItems()
self.data = items
}
}


На самом деле MainActor изолирует только доступ к свойствам, а не выполнение методов. Из прошлых постов про изоляцию мы уже поняли что await может переключить контекст.

Почему это важно? Ну, во-первых, это может сломать код, если после await apiService вы работаете с UI элементами.

Давайте разберем еще несколько важных примеров, где MainActor === изоляция данных, а не изоляция выполнения кода. Я мало где видел, чтобы спрашивали такие детали. Можете брать задачи для собеседований в свою компанию.

Получить доступ к еще большим разборам по последней летней скидке можно 💰тут или тут

Полезные ссылки:
- MainActor usage in Swift explained to dispatch to the main thread
- @MainActor – The Rules!
- How to use @MainActor to run code on the main queue
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8
Forwarded from TechSparks
Гугл не только других учит, как ИИ использовать, но и сам отчитался о целых 14 способах, которыми его сотрудники используют ИИ.
1. Естественно, генерация кода. 30% нового кода пишет ИИ
2. Ускорение всей разработки. Не только написание кода, но и его ревью, тестирование, миграции.
3. Приоритизация и починка багов
4. Помощь с креативами
5. Написание контента
6. Создание всякого визуального
7. Тестирование новых идей
8. Ускорение создания коммерческих предложений
9. Улучшение качества лидов
10. Генерация заметок после встреч и обсуждений
11. Безопасность пользователей на всех платформах: обнаружение контента, нарушающего правила
12. Улучшение работы с отзывами пользователей
13. Поиск новых талантов для найма
14. Снижение количества пищевых отходов
Масштаб, конечно, разный у разных пунктов, но в целом подход впечатляет. И это только начало, утверждается: Ultimately, AI not only boosts efficiency and fosters creativity but also leads to the creation of new roles and opportunities that help our teams concentrate on high-impact work
https://blog.google/technology/ai/google-ai-workplace-examples/
3
О благодарности.

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

Спасибо Вам. Ведь Ваша благодарность также является топливом.
130
ADR, System Design и глобальные рефакторинги

Кстати, отличная новость для тех, кто не знает чем заняться в субботу.

❣️ Тут в Яндексе устраиваем фестиваль практики и технобатлов для мобильных разрабов.

Если хотите увидеться, то я выступаю с нашим руководителем мобилки. Это не совсем доклад, а peerlab. Здесь ценится обмен живым опытом и общение.

На нем мы:
🌟поделимся опытом с каким вызовами сталкиваемся в разработке сложных продуктов большой экосистемы
🌟обсудим про mobile system design
🌟какие сложные задачи мы делаем в команде
🌟как планируются и реализуются сложные рефакторинги
🌟что такое ADR и как у нас происходит арх.ревью

Короче, глубоко погрузимся в Mobile System Design. Здесь будет много практики и закрытой кухни, которую обычными докладами и статьями не перенесешь.

А также многое другое. На этом ивенте мы будем много общаться и дискутировать.

📍Приходите поддержать)
Please open Telegram to view this post
VIEW IN TELEGRAM
210421
📺 Mobile System Design: Принцип Separation of Concerns

Вам больше не нужны фреймворки и шаблонные архитектуры.

Есть более фундаментальные и важные принципы, которые лежат глубже, чем SOLID. Они настолько базовые и естественные, что часто не проговариваются явно. Они становятся чем-то вроде "инстинктов" программиста. Настолько встроены в мышление, что воспринимаются как само собой разумеющееся.

К таким относятся KISS, DRY, YAGNI. А SOLID — это уже надстройка, а в основе лежат вот эти глубинные принципы, которые пронизывают всю инженерию. По сути, тру инженер не просто берет готовые фреймворки и надстройки, но и легко может оценить их с позиции фундаментальных принципов, которые являются атомами любой идеи или технологии.

Когда ты работаешь в компании из 100 разных команд, которые придумывают каждый месяц переосмысление очередных велосипедов, то ты не смотришь на шаблоны и фреймворки. Ты смотришь на ДНК системы:
- Какие проблемы это реально решает?
- Улучшает ли это бизнес, или это просто модная штука ради наград, о которой через год забудут?
- Понимают ли авторы и разрабы этой штуки реальные проблемы или это каргокульт?

Удивлен, что мало кто говорит про самый полезный принцип, который вызывает больше всех споров и стал отцом избыточных и фригидных фреймворков а-ля TCA, — Separation of Concerns.

Суть в самом принципе: чистое разделение ответственности даёт масштабируемость и ясность, без которых не живёт ни одна система.

Separation of Concerns отлично заходит с большими масштабами. Где четкие шаблоны не работают. Например, с модуляризацией проекта.

Пример:
У нас есть огромный монолит. Когда было 2-3 разраба все всех устраивало. Не было проблем с пониманием кто за что отвечает. Как только кол-во разрабов сильно выросло, то с масштабами и быстрым ростом кодовой базы, появилось много новых проблем с которыми прошлая инфраструктура не справляется.

Симптомы переросшего монолита:
- Смешение зон ответственности
- Снежный ком зависимостей
- Медленные сборки и "мертвые" ветки
- Неясная ответственность команд

Многие решают такую проблему натягивая на проект общую архитектуру а-ля VIPER/TCA. Но это работает исключительно в слабой инженерной культуре, где большинство джунов, готовых следовать правилам по инструкции.

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

Так зачем нужен Separation of Concerns?
Separation of Concerns — это принцип, который помогает системам расти без хаоса и жестких ограничений шаблонных архитектур, которые чаще ломают большие проекты и не создают культуру доверия внутри проекта. Правильное понимание и ощущение принципа помогает не скатываться в диктатуру и шаблонность, которая будет вставлять палки в колеса своими ограничениями.

Полезные ссылки:
- Separation of Concerns in Software Design
- Separation of Concerns (SoC)
Please open Telegram to view this post
VIEW IN TELEGRAM
26
🎒 Обновление базы и Цикл статей: Основы промт-инженеринга для iOS разработчиков

В нашем маленьком комьюнити выиграла тема про юзание АИ инструментов для работы. Поэтому я решил обвонить базу и хорошо подготовиться к созвону. Дать уникальный и структурированый материал.

Ну и самому подтянуться, чтобы не нести дичи 😂 Промт-инженеринг, из zero/one/few-shot промтинга, вырастает в сложную науку, которую нужно изучать и понимать.

Опросив аудиторию получил такие цифры:
🌟Почти 63% используют аи в работе
🌟43% имеют подписки на 2-3 агентов под разные задачи
🌟39% уже не могут без использования АИ-агентов в работе!
🌟25% уже заменили гугл, курсы, чужие материалы для обучения (!)
🌟Интерес к материалу по аи растет на 12% к каждому месяцу.
🌟уже в 35% компаниях разрешено использовать Cursor и аналоги над работой в продакшене. А где-то созданы отдельные направления.
🌟появляется новый тип собесов - вайбкодинг секция

Мы поняли, что рынок требует навыка работы с ИИ, а большинство разработчиков используют его хаотично и неэффективно. Конечно, есть градус маркетинга и хайпа в этой теме, а также слепая критика скептиков с бесполезными советами в стиле "развивайтесь" aka "не забывайте дышать". В этом мусоре важно отделить плевелы от зерен и сформировать конкретный план, а не абстрактные лозунги. Если ты стоишь на месте в параличе сомнений — ты умер.

Сопротивляться бесполезно. Многие уже подсели на эту дофаминовую иглу. Блогеры уже делают курсы по решению задач с помощью АИ. Другие организовывают конференции. А в некоторых крупных компаниях считается, что если ты не умеешь использовать аи-асссистенты в жизни, то ты — “неэффективный”. Даже у меня в компании собираются гильдии аи-enjoyer'ов и рассказывают секреты и приемы по упрощению работы.

Короче, полный отказ от этого инструмента, и отрицание пользы, — равен самоубийству и замене.

В этом цикле я попробую изучить этот инструмент:
🟣Искать обходные пути для решения рутиных задач
🟣Как настроить АИ чтобы заменял чужие роадмапы, курсы и базы знаний :)
🟣Понимать галлюцинации и сайд-эффекты.
🟣Изучать техники эффективного использования.
🟣Избегать траты токенов впустую.
🟣Делать мини-воркшопы и шпаргалки
🟣Понимать где бесполезно конкурировать с АИ и что теперь нужно прокачивать.

Давайте вместе разбирать не только внутренее устройство этих инструментов, но и границы практического применения. Соберем лучшую базу про АИ в iOS разработке. Будем экономить часы своего времени. Научимся юзать ИИ так, чтобы не ломать прод. Соберем готовые щаблоны и промты, а не абстрактные советы "изучайте базу".

Все есть яд и лекарство. Вопрос дозировок и применения. Пока остальные критикуют и тратят время — мы учимся пользоваться любым инструментом. Получить новый материал в новом формате можно тут.

В этих статьях мы узнаем:
🔘Как настраивать LLM
🔘Как работать с "температурой" и знать когда у АИшек едет крыша
🔘Техники сэмплирования: Top_p, Greedy, Top-p и тп
🔘Техники промтинга: Zero/Few shots, Chain-of-Thought, Generated Knowledge Prompting и тп
🔘уйма гайдов и полезных статей

Пока остальные критикуют, не могут оторваться от старых привычек и отстают от рынка — мы принимаем правила и обучаемся.

Получить доступ последней летней скидке можно 💰тут или тут
Please open Telegram to view this post
VIEW IN TELEGRAM
322