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
Созвон прошел.
Все материалы и запись с ресурсами будут в ноушене и уже в чате.

Спасибо всем, кто пришел и участвовал.

Следующий созвон будет более интерактивным.

🖤
238
Рекомендации книг для программистов

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

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

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

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

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

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

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

Вступай
1122
Дрейфусовская модель приобретения навыков

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

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

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

Подборборка интересных ресурсов по теме:
- Как построить матрицу компетенций с нуля
- Матрица компетенций в авито для инженеров
- iOS skills matrix

💎 Ну и я выложил обещанные материалы и инструменты для построения матрицы в ноушен, вместе с моим докладом и презентацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
9
System Design: Сбор требований

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

В реальных задачах писать код чаще это 30-40% рабочего времени. Все остальное большая роскошь. В крупных бигтехах создаваемые инструменты будут надолго. Ими будут пользоваться множество других разработчиков. Поэтому уделять этому этапу необходимо много времени.

Почему?
🔘Хороший дизайн вашего апи будет удобен клиентам
🔘Чистый код и логичные конструкции избавят от проклятий других разработчиков
🔘Умение замечать функциональные и нефункциональные требования перед дорогой реализацией.

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

Основные этапы проектирования:
🔘 Сбор требований
🔘 Оценка нагрузки
🔘 Высокоуровневый дизайн
🔘 Компонентный дизайн
🔘 Повышение отзывчивости и отказоустойчивости
🔘 Мониторинг и алертинг
🔘 Безопасность

В этой статье мы расмотрим этап проектирования — это сбор требований. Есть два красных флага, когда кандидат не справляется с задачей на этом этапе:

1️⃣ Сдается и отпускает руки
2️⃣ Сразу преступает молча к реализации

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

***Уточнение:** На интервью не стоит тратить много времени на сбор требований. Но на реальном проекте это один из важнейших этапов.*


Вы получаете дизайн экранов от дизайнеров или менеджеров и сразу должны задать вопрос:

*️⃣Все ли состояния экрана проработанные
*️⃣Что будет при ошибках?
*️⃣Что будет, если данных не будет хватать?
*️⃣Что будет, если нет интернета?
*️⃣Будет ли поддержка планшетов, макОС?
*️⃣Откуда берутся данные?
*️⃣Кэширование или локальное хранилище?

И это только то, что приходит в голову сразу. А есть еще много неизвестных, которые нужно уточнить или собрать.

📌С чего же начать? Правильней всего будет выдержать баланс и не закопаться в деталях. Уметь быстро выявить важные требования и отсеять второстепенные. На этом этапе нужно забыть об архитектурах или выборе SwiftUI или UIKit

Лучшее решение на первом этапе - это лучше понять проблему.

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

Об этом в следующих постах.

Полная и расширенная статья с ресурсами уже доступна в ноушене
Please open Telegram to view this post
VIEW IN TELEGRAM
142
Неписанные правила: как вести переговоры с Meta*

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

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

Прежде чем вести переговоры:
1️⃣ Не говорите, что вы будете торговаться или собеседуетесь. Если вы сообщите заранее, то торги начнутся преждевременно
2️⃣ Убедитесь, что у вас есть несколько других офферов перед торгами. И не просто офферы от обычных компаний, а по статусу не меньше, с кем намечается торг
3️⃣ Если вы метите торг в крупную компанию, то подготовьте офферы заранее.
4️⃣ Будьте френдли. Налаживайте отношения с рекрутерами. Задача рекрутеров — закрыть ставку. Но это не значит что нужно на них давить и примерять роль избалованного хамла.

*Запрещенная в РФ
Please open Telegram to view this post
VIEW IN TELEGRAM
7
🛹 Вопросы для собеседований | Диспетчеризация | ч. 1

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

Вместе с чатом начали собирать кучу вопросов, задач и статей по диспетчеризации. Все будет с комментами и объемно. Уже есть около 10 задач и 10 статей. Закинул туда и свои старые посты с трекингом перфоманса.

Доступ можно получить все там же
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
132
⚙️ Коллекции в Swift

Если вы думаете, что в iOS только три типа коллекций (Array, Set, Dictionary), то вы ошибаетесь.

Вчера в чате мы разобрали еще около 20 видов. Из которых многие очень экзотичные. А какие-то популярные:

OrderedSet — упорядоченная коллекция уникальных элементов.
OrderedDictionary — упорядоченная коллекция пар ключ-значение.
Heap — контейнер элементов Comparable, с константным доступом к min и max членам. И вставкой новых элементов с logn сложностью.
Deque — упорядоченная двухсторонняя очередь

Уже сформировали вопросы на мидла для ноушена по Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
13
💬 Техники решения алгоритмов: Скользящее окно

Продолжаю цикл постов про техники, которые упрощают написание алгоритмов.

Техника скользящего окна по реализации и сложности похожа на технику двух указателей, о которой я писал ранее.

Она используется для решения некоторых типов проблем:
Максимальная сумма подмассива размера
Минимальная сумма подмассива размера
Сумма подмассива минимального размера
Самая длинная подстрока без повторяющихся символов

Условия для понимания, что проблема может быть решена с помощью этой техники:
Мы ищем свойство, принадлежащее диапазону элементов массива (например, сумма, длина, уникальность и т. д.).
Интуитивный метод грубой силы для решения этих задач часто представляет собой встроенный цикл for/ while, требующий временной сложности в n-квадрате или n-кубе.

Когда использовать метод скользящего окна?
в задаче передаётся упорядоченная и итерируемая структура данных, вроде массива или строки
просят найти подпоследовательность в массиве/строке, самое длинное/короткое, среднее/большое/маленькое и т. д.
первым в голову приходит наивное решение со сложностью *O*(*n*2) или даже *O*(2*n*)

💎 Еще больше техник с разбором задач из собеседований тут
Please open Telegram to view this post
VIEW IN TELEGRAM
73
Сейчас я работаю над проектом финтеха и мне эта доменная область очень нравится.

Говорят, финтех это скучно. Я сам так считал, но сейчас не соглашусь. Здесь повышенное внимание к задачам, к каждой детали трепетно относятся. Лучше чувствуешь продуктовый вес задач, тк вы генерируете бабки.

Хочу собрать подборку ключевых навыков для таких проектов. Например, работу с числами, строками, архитектура.

Те, кто с опытом, поделитесь еще чем нибудь что стоит учитывать.
1691
🌄 Подборка обязательных видосов WWDC за все время

Ролики WWDC очень информативные. В них тонны ценой инфы. Но далеко не у всех есть время их смотреть, а еще важно обсудить и понять. Часто бывает, что одного просмотра мало и непонятно.

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

Получить доступ можно тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
147
🟦 SwiftUI: Объяснение разницы State, StateObject EnvironmentObject, ObservedObject

Одна из самых запутанных тем для новичков в теме property wrappers.

В SwiftUI мы не управляем вьюхами напрямую, а вместо этого изменяем состояние или источники истины, которые влияют на результат.

SwiftUI дает нам несколько способов хранения состояний, но важно понимать их отличия:

State — это propperty wrapper, для управления простыми типами значений, такими как Int, String, Bool и т. д.,они изменяемые и обновляют вью при изменении значений.

🔵StateObject — юзается для хранения сложных локальных объектов.

🔴ObservedObject — юзается для хранения сложных локальных объектов, переданных извне.

🟠 EnvironmentObject используется когда у нас модель распределена во многих местах. Аналог DI.

Еще больше отличий написал в ноушене. А также добавил статьи про жизненный цикл SwiftUI.

Также там внес поправки с учетом iOS 17
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
232
Новый инструмент в AppMetrica: Предикты lifetime value и оттока

С помощью Предиктов можно находить наиболее эффективные рекламные каналы и работать с оттоком пользователей. Причем строится предиктивная модель на основе machine learning с использованием данных десятков тысяч приложений, поэтому наличие или отсутствие монетизации не влияет на результат.

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

Потестить можно бесплатно
5
Делаем проект вместе на SwiftUI

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

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

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

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

Этот проект одна из песочниц. Где снова я придумал нам полезное занятие на выходные в легкой и игровой форме.

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

Голосованием выбрали онлайн-кинотеатр, нарезали задачи, почти нарисовали дизайн и будем экспериментировать. Цель масштабная.

В рамках этого проекта мы попробуем сделать все на SUI:
1️⃣ VIPER, TCA, MVI
2️⃣ Напишем свои архитектурные паттерны
3️⃣ Сделаем метрики для перфоманса
4️⃣ Слои для нетворка и кжширования
5️⃣ Сложные анимации, метал и шейдеры
6️⃣ Подготовка инфраструктуры
7️⃣ Тесты
8️⃣ DI

Любой желающий может взять задачу из бэклога, скачать проект и начать контрибьютить туда. Но если пройдет ревью.

Так этот опыт похож на реальную практику, мы делимся знания, экспериментируем и даем комменты по коду.

Вступить к нам ты можешь тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
191