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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
☕️ Как я баг исправил, который не могли найти два года

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

Я всегда ищу интересные задачи: помогаю коллегам на работе; менти; беру небольшие подработки, если мне интересен проект. Так я улучшаю карму, повышаю навыки, выходя за границы привычных задач и, конечно, зарабатываю 🤡

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

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

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

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

Окей. С логами понятно, но что будем трекать?

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

Так. Мы научились понимать когда main thread завис. Теперь нам нужно как-то понимать что стало причиной его зависания.

Тут тоже все тривиально. Мы берем Stack Trace и записываем его в файл и отправляем в Firebase. Стандартный
Thread.callStackSymbols
мне не подходил, так как не давал понятной информации. Да и мне хотелось сделать универсальный механизм, который может принимать любой поток и получать его колстэк.

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

Дополнительно сделал экран в дебаг меню, который записывает в формате "Date -> Thread.callstack" логи. Чтобы можно было сразу мне отправить лог, как только получили зависание.

После релиза, спустя десяток минут, я получил первый лог. В нем сразу была показана причина зависания. Это был мертвый код, давно ушедшего разраба. Связан он был с расширения кэша картинок для либы SDWebImage

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

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

Делитесь своими метриками, которые помогли решить редкие баги
Please open Telegram to view this post
VIEW IN TELEGRAM
466
Сегодня 01.11 у меня др

Завтра я этот пост удалю, не хотел его писать, но вдохновился постом Дурова на свой др.

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

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

Я ни разу не просил рекламу и делал только то, что нравится мне. Писал то, что думал. Старался задумываться о своих читателях. Банил хейтеров.

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

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

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

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

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

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

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

Поддержать вы его можете конечно же тут 🤡
Please open Telegram to view this post
VIEW IN TELEGRAM
25720
повтор чужого опыта — это скучно

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

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

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

Сгенерированный текст от чатгпт сразу видно. Накрученный опыт легко раскусить. Сворованный дизайн вызывает отвращение.

В копирках вечное противоречие и двойные стандарты. Они на природном уровне не дают нам их принять, освоить. Это требует дополнительных ресурсов для поддержания.

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

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

Не будем жалкими пародиями, а станем неповторимыми оригиналами. Наполним себя уникальной экспертизой и творческой энергией
18
💎 БУМ! Воркшоп по собеседованию на тему Swift Concurrency

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

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

Сергей делает сложный мессенджер, где на практике использовал всю мощь Swift Concurrency.

За целый час мы узнали:
🟣Какие задачи нужно давать для оценки навыков
🟣Дает ли буст Swift Councurrency в сложных приложения?
🟣Какие знания он ждет от сеньора?
🟣Как ускорил приложение с помощью SC?
🟣Какие баги были и есть в SC?
🟣А также многое другое

Выпуск получился супер техническим и с кодом. Дополнительные ссылки и полезные ресурсы прилагаются

🧬 Получить доступ к этому видео можно тут
Please open Telegram to view this post
VIEW IN TELEGRAM
8
Об ИПР и карьерном росте

Опять же читаю книгу "the software engineer's guidebook" и дошел до советов по карьерному росту. Я как раз делал недавно новый ИПР и хочу тоже прокомментировать некоторые советы из книги, вперемешку со своими личными.

Расти по карьере — это такой же скилл, который нужно прокачивать отдельно, как и навык прохождения собеседований. Ты много можешь слушать и смотреть, но важнее всего практиковаться. Сейчас я понял, что засиделся на одном грейде слишком долго и нужно уже расти. Мне и так было раньше комфортно, но хочется новых задач и вызовов. Да и зона комфорта такая вещь, от которой веет забвением.

Иногда рост по карьере может сильно отличаться от профессионального развития, это писали при чтении книге "Growing As a Mobile Engineer". Поэтому есть много важных действий, которые необходимы к ускорению

Эти комменты могут быть полезны и вам:

🟣Иди по лестнице последовательно

Одна из моих ошибок, что смотря на следующий грейд, я думал так: "Ага, для след. грейда нужно написать статью или выступить с докладом. Слишком легко. Сделаю конференцию и там будет три доклада" или "Нужно улучшить компоненты компании. Ага, я создам новый стрим с юнит-тестами". Но этот подход не очень помогает оценить твой дифф между текущим уровнем и следующим. А также требует хорошей защиты. Для карьерного роста гораздо лучше идти последовательно к целям 1, 2, 3, 4, 5. А не пытаться прыгать 1, 3, 2, 5, 4. Лучше делать небольшие иттеративные шаги, чем прыгая вперед на два шага, а потом назад один. Это как качаться в качалке с разными весами каждый день и не иметь четкую последовательность, режим.

🟣Не игнорируй маленькие задачи

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

Маленькие задачи могут приносить большой эффект.

🟣Планируй outcome'ы на старте

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

Например, внедрение технологии BDUI помогло нам повысить метрики по качеству или выручки на 3-4%. А благодаря КМП мы ускорили разработки фичи на 30% сторипоинтов.

Иначе, без метрик или четких доказательств, все задачи будут busywork'ами.

🟣Веди логи все время

Очень многое зависит от того, как ты оформишь свой лист с перфоманс ревью. Почти как с резюме. У меня часто бывало, что когда я только начинал писать, то почти все забыл. И думал, что толком ничего не сделал, даже листа не наберу. Потом я тратил много времени собирая все свои output'ы и outcome'ы. Где в итоге, на последнем перфревью, вышло аж 15 листов (конечно, с комментами и другими артефактами)

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

А так хоть самому потом проще собирать для ревью информацию

Делитесь своими советами.
Please open Telegram to view this post
VIEW IN TELEGRAM
12
Короче, вдохновившись "the software engineer's guidebook" у меня появилась гениальная (бредовая) идея НАПИСАТЬ СВОЮ КНИГУ.

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

Путь будет долгий и книга будет писаться не один месяц. Мне придется много читать и изучать. Спрашивать и разговаривать. Идти в исходники, а может даже в офис Apple и других крупных компаний. Но я выложу все свои силы и попробую укомплектовать все в один материал, тем самым сделав картину полной. Попутно развивая себя, брав интервью и черпая знания у лучших практикующих разрабов и уходя всё глубже.

Впереди новый цикл развития контента.
524410
Ну и кстати про важность окружения.

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

О чем это говорит? Как минимум одна из версий правильная:
- Люди делятся знаниями только для членов своего сообщества
- Связи и среда обитания решают больше чем талант и трудолюбие
- Награды дарят только своим
- Умные люди учат умных
- Сильные наставники взращивают сильных инженеров

Окружаем себя только реальными экспертами, а не накрученными?
12
iOS-разработчикам, которые хотят прокачать свои навыки работы с многопоточностью – совсем скоро стартует Podlodka iOS Crew!

С 11 по 15 ноября лучшие эксперты разберут многопоточность, Swift Concurrency и алгоритмы в формате удобных онлайн-сессий.

В программе:

🔹 Александр Андрюхин проведёт нас через особенности Swift Concurrency, которых ты точно не знал
🔹 Swift 6 глазами Александра Априамашвили – как переход на новую версию поможет в повседневной работе.
🔹 Антон Марченко расскажет, как async в алгоритмах делает их быстрее.
🔹 Александр Сычев раскроет механизмы работы Thread и объяснит, как это важно для работы с многопоточностью.

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

Присоединяйтесь 👉 https://podlodka.io/ioscrew

А промокод ios_crew_14_MwdnTN сообщества даёт скидку в 500 руб🥳
2
База знаний по Swift Concurrency

В закрытом канале мы уже поделились полезными ссылками и задачами по Swift Concurrency от Сергея. В этом списке мне понравился один авторский репозиторий.

Здесь собраны интересные материалы, где можно узнать всю базу и не только, по теме. Я как раз собираюсь углубленно изучать Swift Concurrency, так как Сергей поделился как ускорил производительность синхронизации чата своего приложения из 15 минут в 3 секунды. Но тут главное быть осторожным, а то можно наоборот все ухудшить.

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

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

Например, в коде выше, до Swift 5.10 не гарантируется упорядоченность.

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

Первое рабочее название iOS Engineer Story.

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

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

Я настроен крайне воинственно. Это будет мой опус магнум, после которой я почувствую себя свободнее
23555
🌟 Подборка задач на Swift Concurrency

Ну и заканчиваем эту неделю разборами Swift Concurrency подборкой задач.

В них собрал все задачи, которые мы разбирали в комьюнити за последнюю неделю, а также что встречались на созвоне:
- Задача на понимание работы async/await
- Задача на группировку тасок
- Задача на отмену тасок
- И другие

💎 Бонусом сделал скидки в честь черной пятницы
Please open Telegram to view this post
VIEW IN TELEGRAM
Управление памятью в ассемблере для Apple Silicon

Все знают насколько тема об управлении памятью популярная. Вокруг нее много холливаров насколько глубоко и широко рядовой разраб должен ее знать. Как часто, кроме собесов и споров в чатах, нужно рассказать чем отличается unownend(safe) от unowned(unsafe)? Насколько детально нужно помнить про жизненный цикл RefObject и этапы создания SideTable? Как правильно считать байты с помощью MemoryLayout?

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

Автор залез еще глубже и разобрал управление памятью в iOS с помощью ассемблера. Мем стал реальностью
4
Рецензия на любимую книгу Илона Маска

Дочитал книгу «от нуля к единице: как создать стартап, который изменит мир». Мне о ней многие говорили: пара бывших руководителей считали ее одной из любимых. Ребята из сообщества ее также рекомендовали. И не без основательно. Ее автор создатель PayPall и близкий друг Илона Маска, с которым они вместе делали одни из лучших продуктов.

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

Я разберу несколько острых глав:

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

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

3. Рекрутинг — важнейший навык компании. Есть много заблуждений в интернете, что ИИ убьет рекрутинг или хантинг. Что это вредная профессия или абсолютно ненужная. Чаще это пишут люди уже очень далекие от реальности. Смотря сейчас что происходит с рынком США, где хороший рекрутер может получать 20к$, то мы можем понять что эта профессия только стоит перед активным развитием.

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

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

6. Не забывайте о рекламе. Большая проблема инженеров — считать бессмыслицей рекламу и продажи. Ставя реальный труд руками выше грязного маркетинга. Обвиняя маркетологов в переоценке своего труда. Но чаще же работу инженеров и ученых переоценивают

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

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