Начиная изучать SwiftUI мы должны немного перестроить свое мышление. Это часто советуют уже опытные разработчики, когда переходят с UIKit. Важно не только хорошо изучить АПИ фреймворка, но и понять его философию. Так глубже и лучше поймешь применимость.
Собрал краткие советы с примерами.
UIKit имеет императивный, где мы явно указываем КАК построить интерфейс. То SwiftUI декларативный, где мы описываем ЧТО должно отображаться.
UIKit это про ручное обновление UI при изменении данных. SwiftUI про автоматическое обновление UI благодаря привязке к состоянию (@State, @Binding, @ObservedObject)
UIKit чаще это про Auto Layout с constraints. SwiftUI в основе стеков (VStack, HStack, ZStack)
Как же перестроить мышление?
UIKit это обработка событий и обновление UI. SwiftUI про обновление состояния, UI обновляется автоматически
UIKit часто использует наследование. SwiftUI строится на композиции небольших вью
Используйте правильные property wrappers (@State, @Binding, @ObservedObject, @EnvironmentObject)
Познакомьтесь с жизненным циклом SwiftUI (onAppear, onDisappear вместо viewDidLoad и т.д.). Это лучше даст понять легкость и простоту фреймворка.
В UIKit вы изменяете объект напрямую, присваивая значения его свойствам. В SwiftUI вы применяете модификаторы к представлению, и каждый модификатор создает новое представление с примененными изменениями. Где каждая операция возвращает новое неизменяемое вью
Какие советы вы бы добавили?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1 19 3
Вы не забыли, что я делаю самый большой сборник реальных задач на управление памятью?
Стоит амбициозная цель сделать 100 задач. После решения которых не будет никаких проблем в реальной практике.
Я все же считаю, что навык поиск утечки или понимания жизненного цикла объектов гораздо важнее любой теории про кишки в регулярных задачах. Прошел на своей шкуре
Поэтому цель сборника набить руку.
Предыдущие части:
Please open Telegram to view this post
VIEW IN TELEGRAM
О реакциях и обратной связи
Выше я писал пост, что обратная связь для программиста — двигатель развития.
Но иногда она бывает неадекватной. Например, я искренне не понимаю реакций и дизлайков на по-настоящему крутые книги.
Как только материал чуть сложнее краски кнопок, то его дизлайкают. Например, книга «рефакторинг» Фаулера. Одна из фундаментальных книг была атакована дизлайками.
Тут важно понимать что не вся обратная связь, особенно основаная на коллективно бессознательном, полезная
Выше я писал пост, что обратная связь для программиста — двигатель развития.
Но иногда она бывает неадекватной. Например, я искренне не понимаю реакций и дизлайков на по-настоящему крутые книги.
Как только материал чуть сложнее краски кнопок, то его дизлайкают. Например, книга «рефакторинг» Фаулера. Одна из фундаментальных книг была атакована дизлайками.
Тут важно понимать что не вся обратная связь, особенно основаная на коллективно бессознательном, полезная
iOS Makes Me Hate
О реакциях и обратной связи Выше я писал пост, что обратная связь для программиста — двигатель развития. Но иногда она бывает неадекватной. Например, я искренне не понимаю реакций и дизлайков на по-настоящему крутые книги. Как только материал чуть сложнее…
кому-то настолько не понравился этот пост, что решили накрутить ботов...
ща почистим
UPD: Done, сорри кого задело шальным огнем
ща почистим
UPD: Done, сорри кого задело шальным огнем
Пережив атаку клонов возвращаемся к работе. Страсть к истиным знаниям им не затушить
Многолетний опыт изучения всяких фреймворков мне подсказывает, что прежде чем изучать его SDK и API — нужно изучить принципы. Не бежать делать анимашки, архитектуры или вьюшки, а понять как и почему это все строится. Так можно сэкономить уйму времени в будущем.
В комментах прошлого поста поделились одной из важных ключевых концепций — понимание дерева вьюшек. В книге "Thinking in SwiftUI" пишется так:
View trees and render trees are perhaps the most fundamental and important concepts to understand to work with SwiftUI. To achieve the layout we want, we need to understand how view trees are constructed. To understand how state works in SwiftUI, it’s important to understand the lifetime of a view and how it’s related to the view tree we’re building. Understanding the lifetime is equally important to writing efficient SwiftUI code that only loads data and updates views when needed. Finally, animations and transitions also require an understanding of view trees.
Прежде чем что-то делать — нужно понять как строятся вьюшки: порядок их отрисовки; порядок компановки; передача состояния.
Познакомимся с фундаментальными концепциями, которые помогут не допускать баги и лучше понять поведение:
В SwiftUI это структура, которую мы описываем в коде. Представим что это чертеж дома.
SwiftUI создаёт и обновляет его на основе View Tree, но не пересоздаёт полностью, а обновляет только изменившиеся части. Это дом, который построился по чертежу.
Это метод как SwiftUI отличает одну вьюшку в плане между собой.
Почему это важно знать
- Перфоманс: SwiftUI умно обновляет только те части Render Tree, которые изменились, что делает приложение быстрее.
- Анимации: могут быть сломанные или корявые анимации
- Дебагинг: понимание разницы помогает разобраться, почему иногда ui выглядит не так, как ожидали.
- Правильная работа с состоянием: (@State, @Binding, @ObservedObject и т.д.): ты должен понимать, какие элементы остаются “живыми”, а какие будут уничтожены и пересозданы.
Полезные статьи:
- SwiftUI Rendering and Identity
- A Day in the Life of a SwiftUI View
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Чувствуете кризис на рынке?
Anonymous Poll
31%
Да, просто жопа
31%
Да, вакансий стало немного меньше
19%
Ну так, чуток
12%
Нет, все отлично
6%
Нет, просто не сезон
SwiftUI: Advanced View Trees vs Render Trees
Начал новый большой цикл статей и материалов по SwiftUI. В этом блоке мы затронем фундаментальные вещи о важных концепциях:
🟣 View Trees vs Render Trees
🟣 Процесс рендеринга
🟣 Indentity
🟣 Лучшие практики
🟣 Решение задач на практике
Старался подобрать важные материалы, чтобы после не осталось никаких вопросов.
🧬 Получить материалы вы можете 💰 тут или ⭐️ тут
Начал новый большой цикл статей и материалов по SwiftUI. В этом блоке мы затронем фундаментальные вещи о важных концепциях:
Старался подобрать важные материалы, чтобы после не осталось никаких вопросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Performance_analysis_of_SwiftUI_and_UIKit.pdf
12.4 MB
Performance analysis of SwiftUI and UIKit
кек. Изучаю перфоманс двух фреймворков и нашел чью-то магистерскую диссертацию.
В ней автор делает анализ перфоманса по двум ключевым метрикам:
🟣 время работы CPU;
🟣 использование памяти для различных UI-компонентов.
Ключевые результаты:
🔘 UIKit в целом показал примерно на 25% лучшую производительность, чем SwiftUI
🔘 SwiftUI стабильно потребляет больше памяти, чем UIKit во всех сценариях
🔘 Наибольшая разница в использовании памяти наблюдалась в сценариях с кнопками и коллекциями
В целом, результаты не сильно удивляют. Так как SwiftUI все же зарекомендовал себя на рынке как фреймворк для быстрых прототипов и простых приложений.
кек. Изучаю перфоманс двух фреймворков и нашел чью-то магистерскую диссертацию.
В ней автор делает анализ перфоманса по двум ключевым метрикам:
Ключевые результаты:
В целом, результаты не сильно удивляют. Так как SwiftUI все же зарекомендовал себя на рынке как фреймворк для быстрых прототипов и простых приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Нельзя что-то изучить хорошо в вакууме. Статьи, видосы, LLM, книги и доклады — это только 1/5 реальной инфы из практики рядового работяги. Они не заменят реальную практику и опыт.
На опыте с UIKit и другими фреймворками я помню, что многие вещи, как кодстайл, бест практики и тп и тд нигде не фиксируются. Они приходят с реальной практикой и спорами с коллегами.
Реальный скилл набирается после сотен комментариев на кодревью. Поэтому решил собрать все худшие и лучшие практики.
Основные проблемы начинающих разработчиков:
Разберем в данном блоке одну из проблем.
Massive Views — это классическая проблема любой системы. Когда вся логика и UI-элементы сосредоточены в одном большом компоненте, это создает ряд серьезных проблем. Детальней на скриншотах.
А вы кидайте свои примеры или комментарии.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
The Composable Architecture — худшее, с чем я работал
В прошлом посте мы обсуждали тему декомпозиции и косвенно затронули тему архитектуры. Сейчас мы косвенно поговорим почему выбор паттернов и шаблонов, слепое натягивание SOLID'ов и использование чужих шаблонов чаще вредит, чем помогает.
При изучении SwiftUI нельзя не затронуть популярную архитектуру TCA. За все существование канала я почти о ней не писал и это не просто так. И сейчас объясню почему.
За практику работы с VIPER, когда его пихали в любой проект, я понял, что архитектурные паттерны UI слоя тоже должны выбираться с умом. У этого процесса должен быть этап обсуждений с командой и сбор требований. Груммить и челенджить их нужно до написания кода. Это здоровый и осознанный подход.
Но такого в 90% нет. Обычно какой-нибудь новоиспеченный лид с опытом 2 года насмотрится докладов с конференций или начитается статей. И вдруг заставит всех через диктатуру перейти на любимую им архитектуру. Я считаю этот подход самым худшим и наименее эффективным.
Вторая причина почему TCA мной нелюбим — это его попытка угодить всем и сделать стандартизированное решение. Люди пытаются сделать жестко ограниченный шаблон или фреймворк для 90% задач, но так не получается и ограничения приводят лишь к проблемам. Даже в нашем чате есть пару историй, как адепты TCA в итоге отказываются от него в проектах.
Ну и конечно, завязываться на платную поддержку архитектуры от сторонней команды — довольно сомнительное решение для коммерческих проектов.
Вот и автор статьи делится критическим взглядом на опыт использования:
🟣 Крутая кривая обучения: многие говорят, что большинство проблем с TCA — это skill issue и зависит от кривизны рук, но я так не считаю. И если технология требует много времени на обучение — это не очень и хорошая технология. Можно и молотком выполнять 90% задач.
🟣 Сложность структуры: Feature, State, Action и Reducer, приводит к усложнению кода и увеличению его объема.
🟣 Проблемы с производительностью: обсервинг состояний в TCA приводит к избыточным перерисовкам, что негативно сказывается на производительности.
🟣 Навигация и композиция: Автор критикует подход TCA к управлению навигацией и объединению функций, указывая на излишнюю сложность и нарушение принципов SOLID, особенно принципа единственной ответственности.
🟣 Управление зависимостями: Использование собственной системы управления зависимостями в TCA рассматривается как избыточное и усложняющее код без явных преимуществ перед стандартными методами.
В прошлом посте мы обсуждали тему декомпозиции и косвенно затронули тему архитектуры. Сейчас мы косвенно поговорим почему выбор паттернов и шаблонов, слепое натягивание SOLID'ов и использование чужих шаблонов чаще вредит, чем помогает.
При изучении SwiftUI нельзя не затронуть популярную архитектуру TCA. За все существование канала я почти о ней не писал и это не просто так. И сейчас объясню почему.
За практику работы с VIPER, когда его пихали в любой проект, я понял, что архитектурные паттерны UI слоя тоже должны выбираться с умом. У этого процесса должен быть этап обсуждений с командой и сбор требований. Груммить и челенджить их нужно до написания кода. Это здоровый и осознанный подход.
Но такого в 90% нет. Обычно какой-нибудь новоиспеченный лид с опытом 2 года насмотрится докладов с конференций или начитается статей. И вдруг заставит всех через диктатуру перейти на любимую им архитектуру. Я считаю этот подход самым худшим и наименее эффективным.
Вторая причина почему TCA мной нелюбим — это его попытка угодить всем и сделать стандартизированное решение. Люди пытаются сделать жестко ограниченный шаблон или фреймворк для 90% задач, но так не получается и ограничения приводят лишь к проблемам. Даже в нашем чате есть пару историй, как адепты TCA в итоге отказываются от него в проектах.
Ну и конечно, завязываться на платную поддержку архитектуры от сторонней команды — довольно сомнительное решение для коммерческих проектов.
Вот и автор статьи делится критическим взглядом на опыт использования:
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
The Composable Architecture: The Worst Thing I’ve Ever Worked With
Disclaimer
Топ советов для себя в начале пути
Собирая комменты аудитории я решил взглянуть на самые частые заблуждения и проблемы, которые повторяются у меня и у других. Решил собрать все свои заблуждения, которые мешали или продолжают мешать в инженерном пути.
🟣 Нет никаких гайдов.
Когда ты новичок ты думаешь, что твоя работа — это только писать код. Но чем дольше ты в индустрии, тем лучше понимаешь, что код — это только 1/10 эффективного результата.
Никто тебе не скажет в чем проблема и не создаст идеальные условия, где ты получишь идеально расписанную задачу. От инженера ожидается, что он создаст или организует идеальные условия себе сам.
🟣 Изучай всё. Наша индустрия развивается быстрее всех. Она создает целые виртуальные вселенные и только находясь внутри нее ты можешь ее чувствовать. Но иногда нужно выходить за границы и смотреть на нее со стороны.
Изучай базу, алгосы, архитектуры. Они отличный фитнес для улучшения кодерских навыков. Вдохновитель на новые идеи. Закрепление старых.
Ты не знаешь что будет актуально через год. Но почти все держится на одном фундаменте и идеях. Единственный путь оставаться актуальным — не прекращать развитие.
🟣 Понимай ценности для бизнеса.
Ты — коммерческий разраб. Тебя не нанимают для убыточного прожигания бюджетов бизнеса. Весь твой перфекционизм разбивается об прагматизм. Ты не просто пишешь код — ты создаешь продукт.
Особенно актуален этот навык с развитием ИИ, где все мы перестанем быть кодерами и будем микро-предпринимателями.
🟣 Будь частью команды.
Программирование стало командным видом спорта. Эпоха соло кодеров ушла. Большинство проблем, которые мы решаем — это договоренности, сбор требований и понимание потребностей. Ты выигрываешь не когда пишешь самый крутой код, а когда команда выпускает рабочий продукт.
🟣 Умей делать сложное простым.
Самый сложный для меня навык. Умение объяснять сложное простыми словами — редкий, но ценный навык. Это помогает и в код-ревью, и в защите решений перед продуктом или заказчиком. Это помогает не оверинженерить и находить множество эффективных путей.
🟣 Важна практика. На первый взгляд это самый банальный совет, но он находится в дефиците. Вокруг множество пустых каналов с пустым контентом. Накруток опыта. Творческой импотенции. Виртуальной симуляции. Из всего шума в сети почти нет голоса программистов-практиков. Обычных работяг.
В одном из последних ИПР на работе мы с моим руководителем придерживались концепции "80/15/5". Где 80% — это практика на работе, 15% это дополнительное образование и 5% это книги и другие источники образования. Многие лишь повторяют что практика нужна, но их слова или контент — это репосты чужих статей или копирование других идей. А их авторских мыслей или постов с уникальной экспертизой нет. Они лишь повторяют что важна практика, но каждое их действие — это очередная копия.
Мне не хочется идти по этому пути.
Собирая комменты аудитории я решил взглянуть на самые частые заблуждения и проблемы, которые повторяются у меня и у других. Решил собрать все свои заблуждения, которые мешали или продолжают мешать в инженерном пути.
Когда ты новичок ты думаешь, что твоя работа — это только писать код. Но чем дольше ты в индустрии, тем лучше понимаешь, что код — это только 1/10 эффективного результата.
Никто тебе не скажет в чем проблема и не создаст идеальные условия, где ты получишь идеально расписанную задачу. От инженера ожидается, что он создаст или организует идеальные условия себе сам.
Изучай базу, алгосы, архитектуры. Они отличный фитнес для улучшения кодерских навыков. Вдохновитель на новые идеи. Закрепление старых.
Ты не знаешь что будет актуально через год. Но почти все держится на одном фундаменте и идеях. Единственный путь оставаться актуальным — не прекращать развитие.
Ты — коммерческий разраб. Тебя не нанимают для убыточного прожигания бюджетов бизнеса. Весь твой перфекционизм разбивается об прагматизм. Ты не просто пишешь код — ты создаешь продукт.
Особенно актуален этот навык с развитием ИИ, где все мы перестанем быть кодерами и будем микро-предпринимателями.
Программирование стало командным видом спорта. Эпоха соло кодеров ушла. Большинство проблем, которые мы решаем — это договоренности, сбор требований и понимание потребностей. Ты выигрываешь не когда пишешь самый крутой код, а когда команда выпускает рабочий продукт.
Самый сложный для меня навык. Умение объяснять сложное простыми словами — редкий, но ценный навык. Это помогает и в код-ревью, и в защите решений перед продуктом или заказчиком. Это помогает не оверинженерить и находить множество эффективных путей.
В одном из последних ИПР на работе мы с моим руководителем придерживались концепции "80/15/5". Где 80% — это практика на работе, 15% это дополнительное образование и 5% это книги и другие источники образования. Многие лишь повторяют что практика нужна, но их слова или контент — это репосты чужих статей или копирование других идей. А их авторских мыслей или постов с уникальной экспертизой нет. Они лишь повторяют что важна практика, но каждое их действие — это очередная копия.
Мне не хочется идти по этому пути.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from XOR
«Мы ожидаем от всех сотрудников навыков владения нейросетями», — гендиректор Shopify разослал сотрудникам письмо. Кратко о новой реальности:
🟢 Использовать ИИ в работе теперь обязаны все: от рядового менеджера до CEO.
🟢 Навыки промптинга появятся в перформанс-ревью Shopify.
🟢 И прежде чем просить больше сотрудников и ресурсов команды должны ходить доказывать, почему они не могут обойтись помощью ИИ. 😭
Как бы вы отнеслись к такой новой политике в вашей компании?
🔥 — за
💔 — против
@xor_journal
Как бы вы отнеслись к такой новой политике в вашей компании?
🔥 — за
💔 — против
@xor_journal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM