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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Признание?
32102
Сила обратной связи. Топливо программиста

Почти 20 лет назад я уехал из маленького села и всю жизнь боюсь в него вернуться.

Искал свое место в большом мире. И найдя класс информатика, где стоят компы с интернетом, открыл окно в мир. Это сейчас кажется, что интернет что-то обычные. А тогда, когда света не было месяцами, а расстояния между городами были большими, интернет казался магией.

Любопытство и желание изучить мир всегда двигали создать микро-ячейки общества. В 8ом классе я создал группу своего поселка, чтобы люди делились интересными новостями. На 3ом курсе колледжа создал аналог "Подслушано", где хотел собрать все его важные новости, делиться советами и гайдами. Я даже был наивен и думал это поможет сплотить друг друга, чтобы мы были полезны и решали общие проблемы. Но кроме сплетен это ни во что не вытекло. Как мы так не ценим то, что дано? Не используем эффективно такой мощный ресурс.

В знании сила, как говорила моя семья учителей. Создавая этот канал я также стремился собрать агрегатор полезной информации. Никаких маркетинговых планов, только желание сложить всё самое нужное. Обмениваться толковой инфой.

Ведь без обратной связи весь наш путь не имеет смысла. Я могу закрыться в комнате с книжкой, но ту ли книжку я читаю и правильно ли я её пойму? Создам ли я вакуумный пузырь, как тот мой колхоз, из которого я всю жизнь пытался сбежать и который до сих пор снится мне в кошмарах? Ответить на это мне поможет только мое окружение.

Чтение книг, документаций, статей, пет-проекты — всё это бесполезно и даже опасно в соло. Мы не станем лучше, если будем закрываться в комнате и жадно питаться любыми знаниями. Нам нужна обратная связь и люди. Кодревью, комментарии мыслям, конференции, комьюнити, критика и даже похвала.

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

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

Что происходит без обратной связи
🔘Без мнения извне начинаешь вариться в собственных решениях. Иногда — неправильных. И даже не узнаешь об этом.
🔘Нет практики обсуждения — нет улучшения архитектурного мышления. Начинаешь проектировать так, как удобно тебе, а не как удобно команде и бизнесу
🔘Без того, чтобы кто-то сказал «тут можно проще», «это нечитабельно», «так не масштабируется», ты не замечаешь своих слепых зон.
🔘Чем дольше без фидбэка — тем страшнее его получать. Начинаешь воспринимать любую критику как атаку, а не как помощь.
🔘Опытные коллеги — это навигаторы. Они могут подсказать, куда расти, на что обратить внимание, что учить дальше. Без них можно ходить кругами.

Лучшая обратная связь — практика. Она указывает кто есть кто. Ставит на места и сортирует по справедливости.
Please open Telegram to view this post
VIEW IN TELEGRAM
242
🧬 Начало SwiftUI Roadmap

По результатам голосования весь следующий месяц мы преимущественно будем говорить про SwiftUI.

Я придумал новый формат. Теперь будут темы месяца, где мы в начале и конце будем делать:
🟣роадмап по теме
🟣воркшопы и статьи
🟣как помогает AI
🟣подборки вопросов и задач к собесам
🟣сложные и интересные кейсы
🟣важные видеоролики и интервью

Только реальная и полезная информация на практике.

Такой формат будет более комплексным и системным. Поможет держать фокус и внимание. А также поможет всем нам лучше закрепить и структурировать темы. Сделать наши знания качественней.

🧬 Получить доступ можно 💰 тут или ⭐️ тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
275
Computer Sience и дисциплина мозга

Говорят, рынок умер. Но не для всех.

Сейчас для своего контента переслушиваю книгу "История на миллион долларов" и сильно срезанировала одна мысль:

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


Также идет сериал "Киностудия" и я уже за две серии его считаю гениальным. Где в уникальной форме рассказывается история о внутреннем конфлитке творца и маркетолога. Что важнее, создать крутой фильм и получить признание и славу в тусовке или склепать очередное говно для кассовых сборов?

Сейчас же IT медиа в кризисе идей. Шаблонные рассказы и поверхностные формы. Копии чужих идей и адаптации. Я считаю, что то же самое применимо в программировании.

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

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

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

Также как и можно лутать бабки писав только говнокод? Можно. Но сомнительно, что вы выдержите конкуренцию против тех, кто принесет проекту идеи лучше.

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

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

Рынок изменился. Ни один временный тренд не будет жизнеспособней вечных принципов.

Теперь легче пройти реальный путь, чем сфабриковать или считерить. Вы не устали петь одну и ту же песню три года? Система уже выпустила пачт, билд понерфили. Самой динамичной сфере надоел летний поверхностный трек группы одного хита. Ей нужны фрешмены. Люди с новыми идеями и подходами. Свежая версия обновлений.

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

Я считаю, что путь «казаться, а не быть» — самый проигрышный на долгосрочной дистанции. Это как стероид, после которого импотенция. Не нужно загонять себя в клетку, где лежит бесплатный сыр. Ты станешь поверхностным пересмешником, который повторяет одну и ту же идею много лет. Выпуская ремастеры старых выпусков, вместо движения вперед. Не улучшаясь и не прогрессируя.

В нашем чате выделили главный навык для программиста — уметь адаптироваться. И это поможет только регулярная практика и умение адаптироваться к новым правилам, которые могут показаться абсурдными.
932
🧬 Полезные WWDC про SwiftUI

Ну что, потихоньку начинаем разгоняться. Следующий месяц мы говорим преимущественно про SwiftUI. Поэтому принес на разогревку полезные WWDC секции.

🟣 Introduction to SwiftUI: Базовое введение в принципы SwiftUI. Рассматривает декларативный синтаксис, основные компоненты интерфейса и модификаторы.

🟣Building Custom Views with SwiftUI: Фокусируется на создании собственных компонентов интерфейса. Объясняет композицию View, модификаторы и как конструировать сложные интерфейсы из простых компонентов.

🟣Data Essentials in SwiftUI: Глубокое погружение в управление данными и состоянием. Объясняет работу с @State, @Binding, @ObservableObject и другими механизмами. Демонстрирует однонаправленный поток данных и его преимущества. Критически важная сессия для понимания того, как передавать и обновлять данные между компонентами.

🟣Demystify SwiftUI: Разбирает внутренние механизмы SwiftUI и то, как фреймворк обновляет интерфейс. Объясняет процесс рендеринга, идентификацию View и процесс обновления. Даёт глубокое понимание жизненного цикла View и то, как оптимизировать структуру приложения. Незаменима для среднего и продвинутого уровня.

🟣Demystify SwiftUI performance: Концентрируется на оптимизации производительности приложений на SwiftUI. Разбирает распространённые проблемы, вызывающие лаги и низкую отзывчивость. Показывает инструменты для профилирования и методы для повышения эффективности. Предоставляет практические примеры оптимизации сложных интерфейсов. Обязательна к просмотру для разработки продакшн-приложений.

А в закрытой базе уже лежит два роадмапа
Please open Telegram to view this post
VIEW IN TELEGRAM
19
Андроид лучшая операционная система

Божественно красивая и удобная. Завязываю с iOS разработкой и начинаю пилить курсы по KMP, Compose.
50184
а еще я люблю BDUI
207
Как использовать Cursor AI в iOS

Сейчас курсор — лучшая тулза для кодинга. У меня 3 подписки на LLM: Cursor, Claude, ChatGPT. Каждая выполняет свои задачи хорошо и с каждой нужно знакомиться.

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

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

Нашел хороший обозревательный ролик, который поможет лучше понять инструмент
Please open Telegram to view this post
VIEW IN TELEGRAM
73
🧠 SwiftUI: Перестройка мышления с UIKit

Начиная изучать SwiftUI мы должны немного перестроить свое мышление. Это часто советуют уже опытные разработчики, когда переходят с UIKit. Важно не только хорошо изучить АПИ фреймворка, но и понять его философию. Так глубже и лучше поймешь применимость.

Собрал краткие советы с примерами.

🟣Декларативный vs Императивный подход
UIKit имеет императивный, где мы явно указываем КАК построить интерфейс. То SwiftUI декларативный, где мы описываем ЧТО должно отображаться.

🟣Состояние и данные
UIKit это про ручное обновление UI при изменении данных. SwiftUI про автоматическое обновление UI благодаря привязке к состоянию (@State, @Binding, @ObservedObject)

🟣Layout
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
1193
🧬 Сборник 100 задач на управлению памятью: Задачи с 30 по 40

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

Стоит амбициозная цель сделать 100 задач. После решения которых не будет никаких проблем в реальной практике.

Я все же считаю, что навык поиск утечки или понимания жизненного цикла объектов гораздо важнее любой теории про кишки в регулярных задачах. Прошел на своей шкуре 😂

Поэтому цель сборника набить руку.

Предыдущие части:
🔘Подборка задач и вопросов: Сopy-on-Write
🔘100 вопросов для подготовки к собеседованию по управлению памятью
🔘100 задач по управлению памятью

🧬 Получить материалы вы можете 💰 тут или ⭐️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
6
О реакциях и обратной связи

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

Но иногда она бывает неадекватной. Например, я искренне не понимаю реакций и дизлайков на по-настоящему крутые книги.

Как только материал чуть сложнее краски кнопок, то его дизлайкают. Например, книга «рефакторинг» Фаулера. Одна из фундаментальных книг была атакована дизлайками.

Тут важно понимать что не вся обратная связь, особенно основаная на коллективно бессознательном, полезная
6
🌳 SwiftUI: View Trees vs Render Trees

Пережив атаку клонов возвращаемся к работе. Страсть к истиным знаниям им не затушить 😂

Многолетний опыт изучения всяких фреймворков мне подсказывает, что прежде чем изучать его 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.


Прежде чем что-то делать — нужно понять как строятся вьюшки: порядок их отрисовки; порядок компановки; передача состояния.

Познакомимся с фундаментальными концепциями, которые помогут не допускать баги и лучше понять поведение:

🟣View Trees — это эфемерный план, который создается и уничтожается при каждой перерисовке. Он описывает, как должен выглядеть интерфейс.

В SwiftUI это структура, которую мы описываем в коде. Представим что это чертеж дома.

🔘Render Trees — это реальные вью на экране, которые существуют между перерисовками и обновляются на основе view trees.

SwiftUI создаёт и обновляет его на основе View Tree, но не пересоздаёт полностью, а обновляет только изменившиеся части. Это дом, который построился по чертежу.

🔴Identity — это то, как SwiftUI отличает одну вьюшку от другой, особенно при обновлении интерфейса (ререндере).

Это метод как 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
17