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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Как плохой дизайн стоил шесть разрабов

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

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

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

Мы хотим обвинить других в непонимании наших дизайнерских решений. Ведь я же живу, удобно. А вон те, смотрите, ноют. Но всё стоит на общих правилах. Первый из них — не изобретай велосипед.

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

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

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

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

P.S. Если ты подумал про дизайн интерфейсов, то перечитай
👍8💯3
🔄 Паттерн: Reactor

lvl: mid

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

Один раз я встречал его на горе проекте, который взял концепцию ReactorKit, но смешал это с Worker'ами и Observer'ами.

Реакторы идеально ложатся на event-driven архитектуры. Где у нас есть общее событие для приложения, которое может повлиять на состояние экранов в разных местах. Допустим достижение нового уровня изменит наносимый и получаемый урон, откроет новые диалоги и локации.

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

В мире иос — реактором можно назвать обработку нажатий. Где есть Event Loop, который СИНХРОННО по-умолчанию выполняет обработку событий: тачи, таймеры, сигналы ОС. Очень важная деталь в синхронности, потому что если асинхронно, то это паттерн проактор.

Если этот пост наберет хоть один лайк, то когда-нибудь выйдет статья о реализации своего RunLoop'a
Please open Telegram to view this post
VIEW IN TELEGRAM
👍59
🤍О зрелости разработчика

В авито есть общие ценности. Я о них уже писал в начале карьеры и напишу о них на 9м месяце.

Больше всех мне нравится ценность «действуй масштабно и смело». С ней даже произошло пару забавных моментов. О них позже.

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

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

Благо этот вопрос решается здравым смыслом и оценками большинства.

Это очень важный принцип, который помогает в целеполагании и развитии.

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

Главное часто не проигрывать 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥2
😁31
🗺 Крутейшая техническая статья про создание своего EventLoop'a

Event Loop — это цикл, который обрабатывает события. Это не уникальная особенность iOS платформы. Такой механизм почти всегда используются в графических интерфейсах (Windows) и на серверах (node.js) .

События, которые обрабатывает Event Loop:
- Нажатие кнопок, клавиатуры
- Вводные данные от устройств, датчиков
- Сообщения от других потоков и программ

У каждого потока есть свой собственный Event Loop, но он может не работать и придется запускать самому.

Автор статьи сам с нуля делает свой Event Loop. Очень полезно понять как все работает кодом, когда же почти всегда о ранлупе говорят только концептуально. В cтатье и ограничение иттераций, и реализация очереди для тасок с нуля
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥141👍1
Вопрос от коллеги из вконтакте
👍5🔥1
Кстати, если у вас есть идеи и предложения какие интересные задачи из собесов, статей, работы добавить в симулятор иосника, то пишите мне @lvbond. Или в чат.

Там эксперты из авито, редмадроботс, вконтанте, озона и любых других компаний попробуют оценить и решить задачу
👨‍💻 Об обучении и заинтересованности

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

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

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

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

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

Вероятнее всего вы знаете примеры уже хороших учебных порталов и скините мне их. Тут нет в планах делать сайты и тп, а скорее создать живое комьюнити актуальных знаний по нашей специфике
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Концепции мотивации

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

Любая мотивация делится на 2 концепции: процессуальная и содержательная.

1️⃣ Процессуальная — эти теории базируются на причинах, по которым люди выбирают как им себя вести. Сюда относятся:

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

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

Теория X и теория Y. Это две теории подходят к мотивациям с двух противоположных сторон: авторитарной и демократической
👍5🔥5
365 дней богу Алгоритмов: Отчет за третью неделю

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

Как всегда где-то брутфорсил, где-то костылил, где-то подсматривал. Связанные списки какая-то срань. Где они вообще полезные?

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

18. Реверс слов в массиве. Решил задачу в лоб и по общим решениям оказалось, что и не самое худшее

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

20. Каждый индекс сумма прошлых элементов. Одна из легчайших из легких

21. Кол-во хороших пар. Брутфорснул

22. Сабсущность. Смотря на решение пары дней назад даже не понимаю каким воспаленным мозгом я к нему пришел

23. Реверс связанного списка. Ну тут изи. Комментов нет

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

#365_дней_богу_алгоритмов
42🐳2👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
💎 Новая сборка симулятора иосника

Версия 1.0 (10)

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

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

На экране достижений можно посмотреть текущие открытые и еще не полученные.

Ну как и обещали, всем бета-тестерам — уникальная ачивка

💎 Что ждать в будущем?

В чате бета-тестеров накидывают много идей. Из новых почти реализовали графики с прогрессом обучения и фильтрацию материалов по разным критериям.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
Структуры данных: Связанный список

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

Связанный список представляет собой объект, который обычно называют node. Она содержит все данные и ссылку на другую ноду.

В примере выше 2 реализации:
- через класс
- через enum
👍7