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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
Думаю записать серию роликов. 🤡Торговать лицом и пытать вас своим сиплым голосом. Какие темы интересны?
Anonymous Poll
34%
Качественное тестирование
36%
Паттерны в реальной жизни
18%
UI и покраска кнопок
37%
Многопоточка
13%
Язык и его красота
7%
О жизни
51%
Да покайфу че нравится, то и делай
😁1
Необходимая база

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

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

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

Еще один канал с качественным техническим контентом. Роли об универсальной базе в программировании.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
🔥5
Пузырь лопнул

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

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

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

Dev OS, Swift AI или симулятор безработного 🤬🤣😬

https://www.youtube.com/watch?v=1S_1MmOY0yY
Please open Telegram to view this post
VIEW IN TELEGRAM
🗿6😁3💅2
365 дней богу Алгоритмов: Отчет за неделю

Вкратце: задачи на строки в swift — боль

Напомню, что вместо ежедневных постов решил сделать еженедельный.

Где-то получилось решить задачи костыльно, где-то с небольшими подсказками. А те, над которыми тупил и пришлось разбирать на ютубе — я просто пока не буду публиковать. Через время к ним вернусь без подсказок.

9. Найти наибольшое число, которое больше больше остальных минимум в 2 раза: Здесь я не стал что-то изобретать и просто закостылил. Не смотрел норм решения еще, потом разберу. Мб кто подскажет сразу как нужно было норм сделать

10. Плюс один к большому числу. Тут 2 решения: мое и неправильное. Неправильное оно потому, что решается как-то в лоб. А мое просто не срабатывало из-за больших чисел 🤣 Ладно, признаю, что переусложнил

11. Две суммы. Супер стандартная задача на всех собесах. Эту вариацию решил через хэшмапу

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

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

14. Самый длинный префикс. Решение неоптимальное. Строки все же боль в свифте

15. Реверс строки. Решил через 2 поинтера. Все супер изи. Дефолт задача на собесах

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

#365_дней_богу_алгоритмов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7🏆31👍1
This media is not supported in your browser
VIEW IN TELEGRAM
💎 Новая сборка симулятора иосника

Версия: 1.0 (7)

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

Наши спринты недельные и в этой версии для бета-тостеров мы добавили “Избранное”. Теперь можно фильтровать материалы по названию и добавлять понравившиеся в избранное.

Также мы сделали:
- Исправили баги предыдущей версии и завели новые 🤡
- Добавили дебаг меню. Теперь можно настраивать время тестов
- Убрали запрет на скриншоты и запись. Все равно до релиза все поменяется 😉
- Добавили новые материалы
- Локальные пуши. Теперь вам будут приходить напоминания о ежедневной практике

💎 Какие киллер фичи ожидать дальше?
- Тренажеры: GCD, escaping closure, Method Dispatch, capture list, hit testing
- Собеседования.
- Ежедневные испытания

А я напоминаю, что если хотите стать бета-тестером — заходите в этот чат. На отметке 100 человек закроем прием заявок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💅4🐳21
Метод двух указателей

Одна из базовых техник решения алгоритмов.

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

Когда применять?
Если требуется решить задачу с поиском подмассивов или подстрок.

Многие задачи, решаемые двумя указателями, можно решить и бинпоиском ценой дополнительного logN в сложности решения.
5👍2🔥1🌭1
🌐 Паттерн: Singleton

lvl: jun

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

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

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

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

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

🚓 Из недостатоков, которые вам напишут на ревью:
- Нарушает принцип единственной ответственности класса.
- Маскирует плохой дизайн.
- Проблемы многопоточности.
- Требует постоянного создания Mock-объектов при юнит-тестировании.
- Какой-нибудь душнила прибежит и скажет нужен обязательный приватный init

Пример взят из официальной доки эйпла
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4💅2
Не решал 100 задач на литкоде — не программист

Ну че, кто пойдет тренить алгосы в топ 2 ит компанию СНГ? (После авито)

https://yandex.ru/yaintern/algorithm-training
👍8
Как плохой дизайн стоил шесть разрабов

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

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

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

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

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

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

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

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

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