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
алло 😄 раз телеграм вернулся во времена маил агента и icq, то может чат создать? Там как раз по брейнштормим симулятор иосника 🥳🖕💃❤️🤬
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101💯1
Optional

🟢 lvl: jun

ℹ️ Зачем нужны опционалы, когда есть проверка на nil?

Как минимум, опциональность проверяется на этапе компиляции, что снижает количество ошибок в runtime. По своей сути опционал является обычным enum'ом, в котором 2 кейса: .some, .none.

Развернуть (анврапить) опционал можно множествами способами, но остановимся на самых неочевидных:

🟣 map —позволяет преобразовать опционал, если он имеет значение, или ничего не делать, если он пуст.

можно юзать map() для безопасного преобразования без проверки и анврапинга — если бы он был равен нулю, вызов map() ничего бы не сделал.

map вернет преобразованный опциональный тип

🔵 flatMap - делает почти тоже самое, только уберет дополнительное преобразование в опционал, если оно имеется
5👍5🤔1
Как найти работу?

Такой вопрос сейчас все чаще посещает мою голову. Нет, я не в поисках. Авито — one love ❤️ (байт на рефералку). За последнии 2 недели мне приходят ребята на солвери с вопросом как войти в ит, кто-то пишет в лс, даже моя девушка сейчас ищет первую работу.

Я не знаю. Можете дальше не читать. Точнее у меня есть свой подход, который не выстреливает со 100% успехом. Но точно в 60-70% я не жалел ни разу.

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

Но я поступил после 9 класса на программиста. Мои родственники не сильно были рады выбору профессии. Но колледж был якобы самый престижный в столице Казахстана + я попал на бюджетные места и этот факт их устроил.

После учебы в колледже мои родители разъехали и мне надо было как-то попасть в Россию. Я выбрал путь через получение высшего образования. Поступил в тюмени в нефтегазовый на профессию метролога. Опять на бюджет. Мои родственники были в диком восторге. Ведь это не программист и звучит престижно. Никто не понимал чем занимается метролог, включая меня, но это было что-то с нефтью в одном из самых нефтедобывающих регионов. Я быстро понял, что не хочу связывать следующие 4 года и жизнь с этой профессией. Поэтому очислился. Для моих родственников это был удар. Мало того, что свернул с выгодной тропы, не получил высшее, так и еще ушел в свое программирование.

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

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

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

Я люблю свою работу. Я люблю то, чем я занимаюсь. Настолько, что монета или похвала окружения не так важны, как то, где я чувствую себя лучше, полезнее и живее
Please open Telegram to view this post
VIEW IN TELEGRAM
19🏆3👎1🔥1
Го, я создал.

Мы из поколения мужчин выращенных женщинами... 👨‍👨‍👧‍👦

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

Заходите, потихоньку будем расти. Правила поведения просты.

Сегодня собираемся. Завтра напишу первые вопросы и накидаю концептов

P.S. Я надеюсь все понимают рофлы про радужные символы

https://t.iss.one/+rNag9KqMoo1kNzli
Я в танке, но честно всегда думал это рофл такой, что в раше одни из лучших программистов

Оказывается нет

https://www.sayonetech.com/blog/which-country-has-best-computer-programmers-and-developers/
🔥7
Крутая статья от авито. На днях только столкнулся с этим интсрументом внутри компании и думал "Оу, круто. Должна нам помочь для тестировщиков. Не будут годами сборку собирать и поможет легко детектить баги". Спустя пару дней о нем уже статью сделали

https://habr.com/ru/company/avito/blog/681752/
❤‍🔥6👍1
Hashable

🟢 lvl: jun+

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

ℹ️ Хэширование: что и зачем

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

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

Хэширование должно соблюдать правила:
🟪 Хэш-значения должны быть уникальными
🟦 Хэш-значения должны быть случайными
🟥 Хэш-значения не обязательно должны быть положительными целыми числами

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

Криптография: пароль
Чтобы защитить наш пароль нужно его захэшировать. Мало ли его перехватят

◾️Структуры данных в программировании: Словарь
Почти все современные языки программирования имеют тип данных Dictionary, хотя они могут использовать другое имя, такое как ассоциативный массив, карта, хэш-карта, хэш или объект.

Поняв общее представление о хэшировании опустимся к тому, что предоставляет Apple.

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

Подробнее можно почитать в этой статье, лучше о хэше не найдешь
🔥102
Помните я говорил про вачдоги?

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

В ватчдоге нет ничего сложного, но главное не пугаться и не теряться, если попросят что-то подобное сделать

вот еще одна статейка
🔥1
Fail Fast

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

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

С приходом свифта же чуть что-то поменялось, но несовсем...

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

https://paulpeelen.com/FailingSafely
👍6❤‍🔥1
Сейчас смотрю всякие видое с болями, трудностями джунов. Они допом помогают с бэклогом фич. Основная задача — принести ценность продуктом.

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

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

https://www.youtube.com/watch?v=WUpPg6JcBWc
👍3🔥3🏆1
Частый вопрос на собесах в тинек — как массив хранит ссылки? Сильно или слабо?

Правильный ответ — сильно.
А как сделать слабо? Использовать NSPointerArray

Подробнее тут
👍14
🤬
Please open Telegram to view this post
VIEW IN TELEGRAM
Короче, пока разрывает от того, что не хватает времени на интересные посты, симулятор иосника, дрочку литкода (да да снова начал) и сторонних зависимостей.

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

Этот материал также пойдет в основу симулятора иосника

контакт тот же. Ну или в чат кидайте https://t.iss.one/+rNag9KqMoo1kNzli
👍1
iOS Makes Me Hate pinned «Короче, пока разрывает от того, что не хватает времени на интересные посты, симулятор иосника, дрочку литкода (да да снова начал) и сторонних зависимостей. Поэтому я использую функцию "звонок другу". Нужен друг, или друзья, которые будут кидать классные…»
Defer

🟢 lvl: mid-

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

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

Или же, когда вы заалокейтили какую-то инфу в память, но после выполнения нужно все почистить.

Копания в кишки через дизассемблер
Хорошее объяснение с разными практическими примерами
👍6🔥1
📌 ЗАКРЕПЛЯЕМ МАТЕРИАЛ
Вообще у меня уже пару лет стоит пунктик покопать в сторону реверс инжениринга иос. Хочется обвалиться парой книг в будущем и пописать сюда выжимки, но пока читаем статью и думаем, как сделать свой ответ Appstore

https://habr.com/ru/company/dsec/blog/676094/
5💯1
Коллизия хэш-мапы

🟠 lvl: mid+

👆В предыдущих сериях мы узнали о Hashable и для чего он нужен. Сейчас же поговорим о коллизиях хэша.

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

До этого стандарта разработчики страдали частой коллизией, особенно работая с цветами.

ℹ️ Коллизия происходит, когда разные входные данные производят одинаковый хэш, но значения не равны

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

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

Детальнее можно познакомиться отличном материале SE-0206

Итого: По умолчанию Swift использует универсальную хэш-функцию, которая сводит последовательность байтов к одному целому числу.

Однако мы можем улучшить её, адаптировав хэш-функцию к своему домену.

- Почитать о производительности Hasher в треде с сеньором-помидором из яблока
- Мощненькое чтиво про приемы хэширования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
Чем отличается настоящий программист от кодера?

В снг (а может не только) почему-то считатается, что настоящий программист — это не только кодер, но и чел, кому можно доверить фичу.

Но что такое "доверить"? Хорошо координировать процесс разработки или быть уверенным в качестве продукта, в дедлайнах? Развиваться по менеджерской ветки или инженерной?

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

В книге сразу дается ответ на вопрос "Кто такой настоящий программист?"

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

Это сразу же подчеркивает, что окружает программирование в повседневной жизни инженера-программиста. Как и в более «традиционных» инженерных областях, когда вы строите что-то на века, вы хотите планировать заранее. Именно здесь в игру вступают встречи, проектная документация, интеграционные тесты и т. д.

А вы программируете или разрабатываете?

P.S. второй раз пришел к книге. Буду иногда вбрасывать вижимки
👍10😐4👎3