Пока я потихоньку готовлю большой раздел в закрытой базе про LLM и нейросети, посмотрите какую охеренную обложку замутил наш персональный художник @itsoveragain
Мне хотелось чтобы в визуальном стиле было 3 референса: Голубоглазый самурай, Katana Zero и немного Джона Уика.
Получилась уникальная смесь стиля и скилла.
Мне хотелось чтобы в визуальном стиле было 3 референса: Голубоглазый самурай, Katana Zero и немного Джона Уика.
Получилась уникальная смесь стиля и скилла.
Архитектуры SwiftUI: MVP vs MVVM
Немного отвлеклись на LLM благодаря яндексу, но напомню, что весь этот месяц мы вдумчиво изучаем SwiftUI и собираем полезный роадмап.
Писать про View, HStack, VStack и тп — скучно. Это легко найти в любом туторе, гпт или чатах для новичков. Нужно делиться тем, что стоит за изучением фреймворка и либ — опытом. Здесь я хочу делать акценты на важных вещах для коммерческого разработчика и опыте.
Когда говорят “архитектура” в мобильных приложениях, чаще всего говорят о паттернах, которые помогают организовать логику в UI. Так как именно с ним мы и работаем в 90% задач. Например: MVC, MVP, MVVM и тп.
Мобилки работают в условиях ограниченных ресурсов (память, батарея), и у них сложный жизненный цикл (например, когда пользователь сворачивает приложение). Поэтому архитектура тут — не просто теория, а практический инструмент, который помогает всё это учитывать.
Мы уже прошлись с критикой по TCA. Но почему столько споров вокруг MVVM?
MVVM — один из самых популярных паттернов в SwiftUI. Но есть громкое мнение: "Stop using MVVM with SwiftUI". Потому что:
🟣 SwiftUI сам по себе уже привносит много реактивности.
🟣 А MVVM, если использовать неправильно, может только усложнить код.
В комментах к прошлому посту даже обвиняли автора в пренебрежении SOLID, DI, CI/CD и других смертных грехах. Поэтому, нужно быть осторожным выссказывая свое мнение, что что-то не нужно.
Что же делать, если у каждой архитектуры тысячи критиков? Слушать самым подходящих нам и основываться на своем опыте😂
Как же без богов архитектуры из The Essential Developer. Мы уже говорили про них тут, если вкратце ребята работают в фаангах и у них есть самый дорогой курс в iOS за 2500$ про систем дизайн. Когда-нибудь я накоплю бабки и разберу его для подписчиков, а пока делюсь закрытым видосом из их базы.
Скоро ждите отдельную статью в ноушене с разборами архитектур в SwiftUI.
Немного отвлеклись на LLM благодаря яндексу, но напомню, что весь этот месяц мы вдумчиво изучаем SwiftUI и собираем полезный роадмап.
Писать про View, HStack, VStack и тп — скучно. Это легко найти в любом туторе, гпт или чатах для новичков. Нужно делиться тем, что стоит за изучением фреймворка и либ — опытом. Здесь я хочу делать акценты на важных вещах для коммерческого разработчика и опыте.
Когда говорят “архитектура” в мобильных приложениях, чаще всего говорят о паттернах, которые помогают организовать логику в UI. Так как именно с ним мы и работаем в 90% задач. Например: MVC, MVP, MVVM и тп.
Мобилки работают в условиях ограниченных ресурсов (память, батарея), и у них сложный жизненный цикл (например, когда пользователь сворачивает приложение). Поэтому архитектура тут — не просто теория, а практический инструмент, который помогает всё это учитывать.
Мы уже прошлись с критикой по TCA. Но почему столько споров вокруг MVVM?
MVVM — один из самых популярных паттернов в SwiftUI. Но есть громкое мнение: "Stop using MVVM with SwiftUI". Потому что:
В комментах к прошлому посту даже обвиняли автора в пренебрежении SOLID, DI, CI/CD и других смертных грехах. Поэтому, нужно быть осторожным выссказывая свое мнение, что что-то не нужно.
Что же делать, если у каждой архитектуры тысячи критиков? Слушать самым подходящих нам и основываться на своем опыте
Как же без богов архитектуры из The Essential Developer. Мы уже говорили про них тут, если вкратце ребята работают в фаангах и у них есть самый дорогой курс в iOS за 2500$ про систем дизайн. Когда-нибудь я накоплю бабки и разберу его для подписчиков, а пока делюсь закрытым видосом из их базы.
Скоро ждите отдельную статью в ноушене с разборами архитектур в SwiftUI.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
SwiftUI: MVVM vs MVP, Architecture, Dependency Injection, Migrating from UIKit | Live Mentoring
Want to learn how to choose between MVVM and MVP when using SwiftUI? Or how to pass dependencies to distant SwiftUI views without the service locator anti-pattern? Or how/when to migrate from UIKit to SwiftUI?
Watch this FREE mentoring session now to learn…
Watch this FREE mentoring session now to learn…
Важный опрос: как вы произносите ARC?
Anonymous Poll
31%
ЭйЭрСи
45%
АЭрСи
20%
АРК
0%
ЭйАрК
2%
АРЦ
0%
ЭйАрЦ
2%
Другое
Media is too big
VIEW IN TELEGRAM
Ну че, неделю я ежедневно кодил фичи и не редко пользовался Cursor.
Давайте поговорим про vibe coding. Где мне было кайфово, а где минус вайб.
За это время на нативке я закодил больше, чем бы за месяц в Авито 🙂 при всей моей любови, но мне там этого не хватало. Я почти все задачи писал на BDUI или бэк на Go, а в Яндексе чистый Swift. Соскучился по нему. Иногда кодинг меня засасывал до двух ночи. Авито отлично подходит качать софты, но с хардами надо чтоб повезло. Инженерно же сложные задачи для меня критически важные, тк в какой-то степени я стал заложником своего блога и историй у костра про технический контент.
Здесь же я чуть изменил свой старый опыт и экспериментировал с пилотами. Тут есть даже чаты поддержки по ним, разрешено пользоваться курсором, но только в private mode и в тех файлах, где нет чувствительных персональных или важных данных. Поделюсь какие вайб трюки мне больше всего помогли.
🟣 Начнем с первого вайба: вынесения констант.
Верстка. Верстать я люблю меньше, чем писать сложную логику. В отличии от многих разрабов мне не доставляют кайф анимашки, металы и UI. Я отношусь скорее к этому нейтрально. Мне нравится строить системы или дизайнить архитектуры. Сложность сделанной задачи для меня в объеме и комплексности выбранных решений. И когда появляется что-то, что помогает мне упростить процесс верстки — я сразу этим пользуюсь.
Самое бесявое в верстки это когда ты набросал экран, а потом все константы отступов, разметки и размеров нужно выносить в отдельный enum, структуру или класс со статичными свойствами. Лишняя рутина, которая меня бесила. Это простая, но супер утомительная работа.
Теперь с курсором это занятие для меня стало приятнее. Можно попросить вынести все захардкоженные константы отдельно или причесать твой код под уже привычную кодовую базу, сэкономив силы на другие и более важные задачи
⭐️ Оценка: твердые 4 вайба из 5.
Решил сделать вайбовые ролики про вайбовые трюки. Уходит на них немного времени, но прикольно.
Конечно, пилоты имеют также ряд дополнительных плюсов и более критичных минусов. О них поговорим в след постах.
Вкратце, когда одно чувство перестает работать, то все остальные обостряются.
Давайте поговорим про vibe coding. Где мне было кайфово, а где минус вайб.
За это время на нативке я закодил больше, чем бы за месяц в Авито 🙂 при всей моей любови, но мне там этого не хватало. Я почти все задачи писал на BDUI или бэк на Go, а в Яндексе чистый Swift. Соскучился по нему. Иногда кодинг меня засасывал до двух ночи. Авито отлично подходит качать софты, но с хардами надо чтоб повезло. Инженерно же сложные задачи для меня критически важные, тк в какой-то степени я стал заложником своего блога и историй у костра про технический контент.
Здесь же я чуть изменил свой старый опыт и экспериментировал с пилотами. Тут есть даже чаты поддержки по ним, разрешено пользоваться курсором, но только в private mode и в тех файлах, где нет чувствительных персональных или важных данных. Поделюсь какие вайб трюки мне больше всего помогли.
Верстка. Верстать я люблю меньше, чем писать сложную логику. В отличии от многих разрабов мне не доставляют кайф анимашки, металы и UI. Я отношусь скорее к этому нейтрально. Мне нравится строить системы или дизайнить архитектуры. Сложность сделанной задачи для меня в объеме и комплексности выбранных решений. И когда появляется что-то, что помогает мне упростить процесс верстки — я сразу этим пользуюсь.
Самое бесявое в верстки это когда ты набросал экран, а потом все константы отступов, разметки и размеров нужно выносить в отдельный enum, структуру или класс со статичными свойствами. Лишняя рутина, которая меня бесила. Это простая, но супер утомительная работа.
Теперь с курсором это занятие для меня стало приятнее. Можно попросить вынести все захардкоженные константы отдельно или причесать твой код под уже привычную кодовую базу, сэкономив силы на другие и более важные задачи
Решил сделать вайбовые ролики про вайбовые трюки. Уходит на них немного времени, но прикольно.
Конечно, пилоты имеют также ряд дополнительных плюсов и более критичных минусов. О них поговорим в след постах.
Вкратце, когда одно чувство перестает работать, то все остальные обостряются.
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый раздел в ноушене: AI & LLM для инженеров в мобильной разработки
Это должно было случиться. LLM и пилоты настолько стремительно вошли в нашу профессию, что многие уже не могут программировать без них. Уж слишком много где упрощений. Это как писать без автоисправлений или обучаться без гугла.
В этом разделе будут пополняться и собираться:
🟣 Как и зачем использовать LLM в работе
🟣 разбор популярных и не очень пилотов
🟣 советы и трюки (рефакторинг, упрощение кода, замена констант и тп)
🟣 Минусы вайбкодинга и как можно запороть проект без осознанного использования
А также многое другое. Это огромная тема, которая еще наберет свой пик популярности. Она также требует скиллов и внимательности.
🧬 Получить доступ к разделу и другой контент можно 💰 тут или ⭐️ тут
Это должно было случиться. LLM и пилоты настолько стремительно вошли в нашу профессию, что многие уже не могут программировать без них. Уж слишком много где упрощений. Это как писать без автоисправлений или обучаться без гугла.
В этом разделе будут пополняться и собираться:
А также многое другое. Это огромная тема, которая еще наберет свой пик популярности. Она также требует скиллов и внимательности.
Please open Telegram to view this post
VIEW IN TELEGRAM
How to measure productivity?
Очень советую эту статью.
Те, кто работал в Авито, наверное ловят флешбэки от таких слов как output/outcome. На каждом перфоманс ревью вы с вашим лидом оцениваете свою работу. В итоге, он вам помогает определить что полезно, а что нет.
Этот процесс болезненный, но отрезвляющий. Тк тебе нужно понять, что некоторые задачи которые ты делал, не так важны с точки зрения бизнеса, как ты думаешь.
Концепция outcome/output набирает популярность. Колличественные метрики заменяются качественными. Многие перестали считать коммиты, задачи, часы, сторипоинты и начали оценивать конечный результат.
🌟 Output — это всё, что физически создаётся в процессе разработки: код, тесты, документация и т.д. Это результат работы команды, но сам по себе он не гарантирует ценности для пользователя.
🌟 Outcome — это то, что происходит после того, как Output попадает к пользователю: изменения в его поведении, рост удовлетворённости, увеличение продаж и т.д. Outcome отражает реальную ценность продукта.
Пример: Если вы добавили новую функцию на сайт (Output), но пользователи ей не пользуются, то Outcome равен нулю.
В статье отлично выражено фундаментальное правило:
Очень советую эту статью.
Те, кто работал в Авито, наверное ловят флешбэки от таких слов как output/outcome. На каждом перфоманс ревью вы с вашим лидом оцениваете свою работу. В итоге, он вам помогает определить что полезно, а что нет.
Этот процесс болезненный, но отрезвляющий. Тк тебе нужно понять, что некоторые задачи которые ты делал, не так важны с точки зрения бизнеса, как ты думаешь.
Концепция outcome/output набирает популярность. Колличественные метрики заменяются качественными. Многие перестали считать коммиты, задачи, часы, сторипоинты и начали оценивать конечный результат.
Пример: Если вы добавили новую функцию на сайт (Output), но пользователи ей не пользуются, то Outcome равен нулю.
В статье отлично выражено фундаментальное правило:
Продуктивность в разработке — это не количество строк кода, а ценность, которую получает пользователь. Важно стремиться к максимальному Outcome при минимальном Output
Please open Telegram to view this post
VIEW IN TELEGRAM
Месяц заканчивается и впереди майские праздники и отпуска. А я не успел отдать некоторые долги. Поэтому догоняю упущенное.
Подготовил большую подборку важных задач для закрепления теории SwiftUI. Это поможет лучше набить руку и понять базовые особенности фреймворка. Большинство из задач встречаются на реальных собеседованиях:
Еще больше материала про SwiftUI:
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой контент по SwiftUI вам интересен
Anonymous Poll
23%
Базовые разборы задач на работе
30%
Основы и практики
50%
Архитектуры и паттерны
47%
Кишки и внутренности
35%
Верстка и анимации
52%
Перфоманс и оптимизации
7%
Другое
Еще я думаю о новом формате контента «круглый стол». Где мы будем звать экспертных гостей и обсуждать острые темы, делиться разными (не)похожими мнениями. Где каждый будет шерить свой опыт в формате живой беседы.
Например, хочется обсудить первой темой «BDUI: плюсы и минусы». Откровенно прожарить без продажных докладов. Или наоборот опустить градус ненависти и найти правильное применение.
Как думаете? Интересен ли такой формат? Ставьте реакции
Например, хочется обсудить первой темой «BDUI: плюсы и минусы». Откровенно прожарить без продажных докладов. Или наоборот опустить градус ненависти и найти правильное применение.
Как думаете? Интересен ли такой формат? Ставьте реакции
Опрос выше показал, что аудитории менее интересны темы про основу и базу, а больше кишки и оптимизации.
Тогда перейдем в поднаготную SwiftUI. На собесах в СНГ рынке есть такая особенность, что у нас особо никто не любит спрашивать базу, а сразу лезут в кишки. Для меня это спорный подход, но все же быть готовым к нему нужно. Поговорим про AttributeGraph.
AttributeGraph — это закрытый фреймворк SwiftUI. Он отслеживает зависимости между данными и вьюхами.
Когда вы используете свойства, такие как @State, @Binding или @ObservedObject, SwiftUI создает граф зависимостей, чтобы понимать, какие части интерфейса нужно обновить при изменении данных. Вместо того чтобы пересчитывать весь UI, SwiftUI благодаря AttributeGraph обновляет только те части, которые действительно изменились. Это делает апки более производительными.
Понимание работы AttributeGraph помогает:
Позже сделаю более детайльный пост с инфографикой.
Доп.статьи:
Please open Telegram to view this post
VIEW IN TELEGRAM
rensbr.eu
Untangling the AttributeGraph - Rens Breur
Media is too big
VIEW IN TELEGRAM
Этот канал превращается в тикток.
Выкладываю старый фулл ролик с задачами на управление памятью.
На майских сделаю может еще пару на SwiftUI и что-нибудь еще.
Выкладываю старый фулл ролик с задачами на управление памятью.
На майских сделаю может еще пару на SwiftUI и что-нибудь еще.
Мы уже объясняли такую ментальную модель как View Tree, но под капотом нет такого понятия. Есть только AttributeGraph. Разница между деревом (tree) и графом (graph) в том, что в графе зависимости могут течь в любом направлении. Это значит, что визуально структура UI напоминает дерево, на самом деле под капотом используется граф зависимостей, где узлы могут иметь взаимные зависимости.
Как мы уже помним, чтобы писать более производительный код на SwiftUI, мы должны понять этот фреймворк. Apple скрыл внутренности как это работает, хоть некоторые и пытались зареврс инжинирить. Вокруг этой темы нет документаций. Материалы отличаются только по уровню практических ресерчей от комьюнити. Единственное, что мы можем — опытным путем изучить работу этого механизма.
AttributeGraph — это граф с расширенной моделью атрибутов. Ключевая особенность — это не просто связи между узлами, а система распространения изменений атрибутов. SwiftUI — декларативный UI. А чтобы декларативный UI работал эффективно, нужен быстрый механизм обнаружения изменений.
AttributeGraph — это не уникальная концепция. Очень похожая есть и в React с его виртуальным DOM'ом и других технологиях.
Ключевые понятия AttributeGraph:
Схема работы AttributeGraph в SwiftUI выглядит так:
1. Создание узлов данных (Nodes): Когда ты описываешь @State, @Binding, @ObservedObject, SwiftUI: создаёт отдельные Node объекты для каждого состояния.
2. Первая вычислительная фаза — Построение зависимостей (Edges). Когда SwiftUI вычисляет body SwiftUI включает режим записи зависимостей: Каждый доступ к данным регистрируется как: graph.addEdge(from: variableNode, to: viewNode). Это происходит автоматически во время первого прохода по body
3. Реакция на изменение данных — Инвалидирование (Invalidation Phase). Система помечает изменённые узлы и пересчитывает только нужные значения.
4. После пересчёта SwiftUI перерисовывает только те элементы интерфейса, которые реально изменились.
Вдохновившись серией выпусков от objc.io решил сделать примерную реализацию графа. Детальней в скриншотах, но потом сделаю большую статью в ноушене. В будущих постах сделаем связь между узлами и других особенностей.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Makes Me Hate
Теперь можете брать задачу на собесы для SwiftUI - написать свою реализацию AttributeGraph 😂
Please open Telegram to view this post
VIEW IN TELEGRAM
На Я.Субботниках технические специалисты Яндекса рассказывают об устройстве сервисов, над которыми они работают. В этот раз собираемся в двух городах — Москва и Санкт-Петербург!
Что ждёт участников:
Среди тем докладов этого года: секреты адаптации мобильного приложения под ТВ, стратегии ускорения старта и observability-система для BDUI. Полное расписание ищите на сайте.
➡️ Регистрируйтесь и приходите слушать доклады, задавать вопросы и обсуждать кейсы
Please open Telegram to view this post
VIEW IN TELEGRAM