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
GCD: Основная и глобальная очереди, Async vs Sync, обновление UI, частые ошибки

По следам прошлых задач набросал в ноушене разбор, решения + причины.

Также дописал связав с прошлыми статьями:
- Что такое очереди
- Обновление UI
- Исправление частых ошибок

Доступ все там же
93
💀 10 советов по выживанию инженеров в бигтехах

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

Автор статьи дает советы по выживанию:

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

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

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

4. Принять Agile и гибкие методики развития. Scrum/Kanban это подходы, которые используются в 99% компаниях. Понимание и принятие подходов позволит лучше понимать устройство бигтехов.

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

6. Адаптивность. Все меняется, а ит меняется быстрее всего.

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

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

9. Life-work balance. Если ты не установишь границы, то бизнес навалит на тебя столько задач, пока ты не перегоришь. Умей их устанавливать пределы и выключаться после работы.

10. Развивай софт-скиллы. Лидерство, эмпатия, оптимизм. Это все необходимые навыки независимо от формальной ответственности.

А какой совет вы бы добавили? Я бы добавил "Для бизнеса важнее выгода, а не сложность твоих задач". Очень часто денежные задачи гораздо лучше влияют на рост и понимание ценности разработчика и даже целой команды, чем сложные и убыточные. Многие разработчики могут зарываться в создании убыточных технологий, затаскивать непонятную технологию и даже разрабатывать инструменты в вакууме, ожидая что все вокруг должны понять их импакт без дополнительных слов. Но чаще это приводит к недопониманию и сокращению ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
162
Реализация с нуля SerialQueue

🔘 Внимание, статья уровня сеньор 🔘

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

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

Если вы до сих пор задаетесь вопросом чем async на последовательной очереди отличается от sync, то вам лучше поможет код.

Также можете сразу ознакомиться с кодом сразу на гитхабе.

Позже в ноушене напишу упрощенную версию этой статьи с объяснениями, комментами, кодом работу очередей. А может даже видео.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
13
Идея ничего не стоит

Часто повторяю этот тезис, когда мы видим, как кто-то копирует наши решения/продукты. Если ты переживаешь, что кто-то вдруг скопирует тебя, то дальше будет идти только сложнее, да и с большой вероятностью ты уже проиграл эту гонку.

1. Скопировать можно все, что угодно. А вот что не получится скопировать, так это конкретно тебя — твой ход мыслей, идеи, видение будущего, взгляды, отношение с другими людьми и все то, что тебя делает тобой. Решения, которые видят конкуренты, — сильно на поверхности, но самое важное происходит «под капотом», самое важное — это то, что происходит у вас внутри команды, то, как вы осмысляете новый опыт. Это то, что сегодня пока никто не видит, а увидит через определённый отрезок времени. Вот этот отрезок и есть то, что невозможно скопировать, потому что он состоит из твоих уникальных особенностей и идентичности твоей команды.

2. А вообще, все вокруг — это копия чего-то. Только некоторые копируют 1:1, поумнее компилируют идеи между собой, и рождается что-то новое. В пустоте ничего не родится. Мы, как вид, потребляем гигабайты контента ежедневно. Современный человек получает за месяц информации больше, чем человек в 17 веке за всю свою жизнь. Так есть ли эта уникальность на самом деле? Уверен, что о том, что я пишу, кто-то уже писал неоднократно, но моё отношение к этому вопросу помогает посмотреть на него под другим углом и даст ход другим идеям, у других людей.

3. Мне нравится мысленный эксперимент: представь, ты делишься всеми текущими идеями/наработками, выкладываешь их в соцсети, максимально делаешь открытой информацию о том, над чем работаешь и с кем работаешь. Страшновато, не так ли?) Если после этого есть ощущение, что у тебя ничего нет, значит, мы по пути потеряли самое главное — знания о том, что ты будешь делать с этой идеей завтра и послезавтра, а без этого знания идея ничего не стоит.

P.S. Есть статистика Global Entrepreneurship Monitor (GEM), в которой подводят итог, что лишь малый процент людей переходит от идеи к действию, например, это хорошо видно по статистике желания людей войти в предпринимательство и фактические данные. В общем, по итогу из всех желающих предпринимателями становятся не более 5%. Бояться не стоит, а наоборот стараться зашерить что-то кайф, главное конечно правильно выбрать с кем)
83
Обновление ноушена за неделю:

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

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

Что же обновилось за неделю?
- Добавил блок с вопросами для собеседований по UIKit (закончен на 75%) и Swift (закончен на 50%). Их можно использовать не только для прохождения, но и для проведения. Тем самым почти закончив блок для джунов
- Начал закидывать вопросы многопоточность для мидлов.
- В алгоритмах добавил раздел об оценки по памяти
- В алгоритмах раздел "как вести себя на собеседованиях" или почему это также оценка софт скиллов.
- Добавил раздел "Частые задачи на собеседованиях" с их решениями
- Обновил оценки алгоритмов: добавил примеры на Swift факториал и 2^n
- Запланировал встречу “Я потерялся. Как развиваться?”. Уже накидываю туда материалы
- Набросал статью "GCD: Основная и глобальная очереди, Async vs Sync, обновление UI, частые ошибки" где разбирали задачи с async/sync

Также допом начали ежедневно решать алго задачи в чате и делиться своими решениями.

🌿 Доступ к ноушену
Please open Telegram to view this post
VIEW IN TELEGRAM
73
Culture Fit собесы

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

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

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

1. Нанимающие менеджеры проверяют соответствие принятых компанией или командой ценностей. простоту взаимодействия и потенциал кандидата.
2. Дать кандидату оценить своего руководителя. Узнать о проекте и будущих задачах

По каким критериям оценивают кандидата:
1. Какой опыт работы у кандидата уже есть
2. Самостоятельность инженера
3. Конфликтные ситуации и их решения
4. Инициативность
5. Коммуникация
6. По каким критериям выбираете новое место
7. Есть ли риски что вы быстро уволитесь
8. Стоите ли вы столько, сколько запрашиваете

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

Интересные материалы:
- 49 лучших вопросов для culture fit интервью
- Гайд от Яндекс Практикума

Больше гайдов в закрытой базе знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
82
This media is not supported in your browser
VIEW IN TELEGRAM
Наше сообщество стремительно растет.

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

Изначально была идея c только базой знаний. А теперь понимаешь, что сама по себе это важная, но бесполезная вещь без ресурсов, которые ее коллективно прокачивают. Все лучшие практики и идеи из симулятора иосника могут быть легко реализованы без долгих ожиданий на программирование. Если инфа или задачи не бустит тебя и нет нужного окружения для практики, то этот материал становится чисто академическим и ачивкой для эрудиции. А с любовью и страстью он точит себя как меч для битвы, а не для декорации. Без людей это инфо-мастурбация, инфа ради инфы.

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

Вступай в наше сообщество, если ты единомышленник.
11331
🧬 Some and Any

Ключевые слова some и any не новы в Swift. слово Some было введено в Swift 5.1, тогда как any было введено в Swift 5.6.

Если вкратце, то:

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

any — это экзистенциальный тип подобен коробке, содержащей что-то, что соответствует определенному протоколу. Эта коробка позволяет нам хранить в ней любой конкретный тип, если базовый тип соответствует указанному протоколу.

Попробовал показать пользу и решение проблем этих слов в изображениях.

Больше разборов some и any с комментариями и какие проблемы он решает в закрытой базе
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
216
Как джуны романтизируют сеньоров

Частое заблуждение у новичков — сеньоры и лиды все знают и поэтому должны меня обучать. Это разрушительно-губительное мышление.
ИТ невероятно быстро развивается и невозможно быть практикующим или экспертным разарбом, обучать других, если ты непрактикующий спец. Но и представлять, что практикующий спец с 10 годами в FAANG'ах, должен знать абсолютно — плохо.

Главная разница между опытным разрабом и начинающим это:
1. Уметь работать с неопределенностью
2. Задавать правильные вопросы
3. Знать как найти решение

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

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

Это все великая ложь.
9
В России обяжут apple сделать сторонние сторы

Как и следовало ожидать, уступки ЕС цепной реакцией будут требоваться и у нас.

Очень крутая новость даже с учетом, что мелким и средним апкам доступ закрыт.

Зато у банков вакансий больше станет.
12
Форма для вопросов к собеседованиям

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

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

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

Тыкни сюда

*ответ можно отправлять множество раз

UPD: смотрю ваши ответы и походу скоро будет много дополнений по джунам. Спасибо
8
Как работает сортировка в Swift

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

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

Сложность по времени функции sort — O(nlogn)

@eleev в чате дал комментарий:

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


let partIdx = try _partition(within: range, by: areInIncreasingOrder)
try _introSortImpl(
within: range.lowerBound..<partIdx,
by: areInIncreasingOrder,
depthLimit: depthLimit &- 1)
try _introSortImpl(
within: partIdx..<range.upperBound,
by: areInIncreasingOrder,
depthLimit: depthLimit &- 1)
}
}

Но
introsort использовалась pre Swift 5.0
; после
Swift 5.0
был введен
timsort
, который пришел в Swift
отсюда
.


Для подписчиков ноушена больше материала про разные виды сортировок c разбором исходников.
92
Навык программирования или как не путать искусство и искусствоведение

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

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

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

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

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

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

Программирование — это искусство. Безграничное, бездонное. Каждый может во что-нибудь влюбиться.
143
💎 Закончил первый блок вопросов для собеседований на джунов

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

📺 ~80 вопросов с ответами
📺 ~30 задач с объяснениями
📺 ~50 ресурсов и ссылок для изучения

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

Поэтому было решено сделать еще 2-3 части для джуниорова и других грейдов.

Нельзя объять необъятное, но мы попробуем.

💎 Доступ к ноушену тут. Забирай себе чтобы проводить или проходить. Также не стесняйтесь задавать вопросы прям в чат.

🌄 Опрос пройди еще раз.
Please open Telegram to view this post
VIEW IN TELEGRAM
81