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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
🔥 Что такое ассерты и зачем их использовать?

На одном собесе меня ввел в ступор вопрос: "А как бы ты сделал свой force unwrap?". Я начал паниковать и потеть. Тогда я еще не знал, что вопрос был супер изивым и на самом деле меня спрашивали про assert'ы

Так для чего же они нужны? Да как раз сломать приложение. Если вы думаете, что любая ошибка в программировании приводит к крашу, то это не так. Это очень везет, что мы легко понимаем где и почему у нас пошло не так. Об этом я писал в посте про fail safety и его вреде

На деле же мы сами можем преждевременно завершить работу нашего приложения если:
- неправильно используем API или SDK
- неверный результат
- неожиданное поведение

Ассерты могут быть 5 видов. Подробнее о них в слайдах.

👌 Зная их мы можем сделать работу нашего приложения более предсказуемым и безопасным
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥114🐳21
Про выгорание

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

Данные советы не являются рекомендацией.

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

С 10 лет я ушел на казахскую борьбу. Это было навязанное решение моим отцом, который был и тренером. Он много отдал спорту и его кумирами были Ван Дам и Шварцнегер. Даже сейчас он выглядит в свои 51 моложе чем я. Но обратим особое внимание на навязанность. Пару лет у меня ничего не получалось. Меня все выигрывали, а любая моя маленькая победа была семейным праздником. Я с неохотой ходил в зал, халтурил, когда он отворачивался. В 10 лет я будто приходил на ненавистную работу, на которой мне нужно просто отсидеться.

Все изменилось в 16. Я пришел на боевое самбо. Этот вид единоборств был богаче и разнообразнее. Тут у меня появилось желание и я начал выигрывать сложные бои в столичных соревнованиях (моя любимая история про супер приз — ложки и кружки), а позже, в 21 год, стал призером одного из престижных республиканских соревнований, где было разрешено почти все: и в пах бить, и с головы, и с логтей. Это были 5 сложных боев в моей жизни, но помимо увлекательной истории Вам и моим внукам, с привкусом крови на губах я получил понимание как достается победа.

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

Мои правила:
- Успех — это марафон. Под успехом можно вкладывать любой смысл: получать регулярно зп, карьерный рост
- Любой процесс базируется на внутреннем желании. Его нужно сохранять и не убивать износом организма
- Здоровый образ жизни. Да да. Я сам могу выпить и закурить, но делаю это крайне редко. Не чаще 1 раза в 1-2 месяца.
- Здоровый сон.
- Активный образ жизни. Баланс требует контраста. Если мой труд — сидячий образ жизни, то ментально и физически я могу отдохнуть только работая телом.
- Путешествия.
- Книги
- Уметь правильно отдыхать. Звучит как успешный успех, но после 25 уже примерно начинаешь понимать что это такое, а к 30 еще лучше. Говорят к ближе 40 вообще гуру становишься

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

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

Но я не доктор Хаус и все советы работают только со мной.
🔥16👍3😁1
💎 Single Responsibility in Swift

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

Сейчас опустимся до деталей и посмотрим на реальный код на самом простом примере

🟢lvl: jun
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6😢42😐1
DIP (Dependency Inversion Principle)

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

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

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

🟢lvl: jun
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2
🍏 iOS simulator

Вы не ждали, а он пришел.

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

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

Основная идея проста — сделать лучший симулятор для тренировок. Где будет баланс прикладной практики и фаном.

⭐️Что наc ожидает?
⁃ максимально рыночные вопросы собранные сотнями часами практик менторства и десятками годами работы в крупных компаниях
⁃ Статьи и учебные материалы
⁃ Реальные и полезные задачи
⁃ Интерактивные испытания
⁃ режим паники. в любой момент все может сильно усложниться
⁃ Доступ в секретный чат для обсуждений
⁃ Элементы геймфикации от нуля до Стива Джобса
⁃ Ежедневные испытания
⁃ Каждое задание будет вызывать челендж и азарт
⁃ Много новых и крутых фич

🚨 В конце следующей недели стартует закрытая бета. Оставляй заявки для активного тестинга до релиза. Помоги нам сделать лучшее образовательное приложение в мире
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥57❤‍🔥31
В интернете все больше набираются теории про массовые увольнения в фаанг компаниях. Какие работники первые кандидаты на увольнения? Как не быть ими? Как стать ценным сотрудником?

Даже у Роберта Мартина в "Идеальной работе" много актуальных и похожих советов. Я посмотрел много видосов, почитал множество мнений. все ссылаются почти к одним требованиям:

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

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

https://www.youtube.com/watch?v=AjkghMCKN_0
😢1
Open-Closed Principle в Swift

Идем дальше по самым популярным принципам.

Этот принцип в иос часто путают с extension (расширениями), но это далеко ошибочное от источника представление.

Принцип открытости/закрытости гласит:

Программные сущности должны быть открыты для расширения и закрыты для изменения.
Принцип открытости/закрытости — одна из движущих сил в архитектуре систем.

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

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

🟢lvl: jun

Let's go to practice
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
💋 KISS

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

KISS (keep it simple, stupid)
Как-то в разговоре с коллегой он сказал, что я выдумал этот принцип. Ведь такое название и его расшифровку мог придумать только какой-то гопарь и ни один адекватный человек не будет воспринимать нэйминг всерьез.

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

По названию нетрудно понять, что он требует. У него много трактовок, но попробуем пройтись по основным:

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

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

🟢 lvl: jun
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍1
🎚 Антипаттерны в продуктовой разработке

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

Одна из турбулентностей для пришедших галлерных разработчиков в продуктовку — это простои. Я сам страдал после аутсорса. Человеку с ресурсным мышлением очень сложно работать в больших и крупных компаниях. Всегда будут большие процессы доставки нашего кода и придется развиваться в других плоскостях. Уметь коммуницировать, понимать процессы, менторить, вести задачи. Иными словами тут приходит уже не модный t—shaping.

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

Какие же антипаттерны в продуктовой разработке?

🔴 не думать о бизнесе. Почему это плохо, ведь есть же бизнес-аналитики и продакт менеджеры? На самом деле очень большое кол-во слоев аналитиков и продакт менеджеров — это одна из самых проигрышных стратегий. А знание бизнеса для инженера — уменьшает неопределенность на проектирование и понимание задачи.

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

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

🔴 Непринятие творческих подходов — это снова из заказной. Где эксперименты не приветствуются, ведь все завязано на сроках и контрактах. Здесь умирает способность к инновациям.

Это одни из многих антипаттернов. Еще добавлю, что сильно влияют финансовые модели команд внутри одной компании. И здесь важно уметь переключаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10💯3🔥1😁1