Vadim Chistiakov | IT
1.87K subscribers
67 photos
2 videos
101 links
Сообщество разработчиков со всего мира: boosty.to/chistiakov
Менторство: https://vadim-chistiakov.github.io
Автор: @chvadim

Рассказываю о программировании и жизни разработчика в Лондоне на Global Talent Visa. Делюсь мыслями, опытом и знаниями.
Download Telegram
OOP vs POP

И так, продолжаю рубрику - батл #versus
 
Объектно-ориентированное программирование (ООП) и протокольно-ориентированное программирование (POP) представляют различные подходы к структурированию и проектированию кода. Вот некоторые сходства и различия между ними, которые стоит упоминуть, отвечая на такой вопрос:
 
Сходства:
Оба подхода стремятся к абстракции и моделированию реального мира с помощью объектов и их взаимодействия.
И ООП, и POP позволяют использовать полиморфизм для работы с разными типами данных, обрабатывая их через общий интерфейс.
Оба подхода поддерживают концепцию инкапсуляции, позволяющую скрыть внутренние детали реализации и предоставить доступ только к необходимой функциональности.
 
Различия:
⚠️ ООП сосредоточено на использовании классов и наследования для организации кода. Классы могут наследовать свойства и методы от других классов и создавать иерархию наследования. В POP используются протоколы вместо классов для определения требований к функциональности.
⚠️ Наследование, может привести к сложным иерархиям классов и проблемам с тесной связностью. В особенности, множественного наследования (отсутствует в Swift). В POP используется композиция, где типы состоят из более специализированных компонентов через соответствие (conform) протоколам, обеспечивая более гибкую и модульную организацию кода.
⚠️ В ООП функциональность определяется внутри классов и их методов. В POP функциональность определяется через протоколы. Протоколы могут иметь требования к методам и свойствам, и типы должны реализовать эти требования.
⚠️ В POP протоколы позволяют использовать расширения протоколов для предоставления реализации методов по умолчанию. Это делает код более гибким и легким для расширения новыми функциями или высичляемыми свойствами. В ООП расширение функциональности класса может быть достигнуто через наследование или создание подклассов.

Какой подход выбрать зависит от требований и конкретной ситуации. В некоторых случаях ООП может быть предпочтительным, особенно если требуется сильная связь между объектами и наследование функциональности. В других случаях POP может предоставить более гибкую и модульную организацию кода с помощью протоколов и композиции. Apple транслирует в своих библиотеках именно POP, поэтому при разработке приложений на Swift он используется чаще.

#interview #swift #ios
🔥113👌2
SwiftData

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

Досадно немного, но зато сэкономил себе пару часов времени.
https://habr.com/ru/companies/surfstudio/articles/742696/

Ссылки на сессии по SwiftData с WWDC23:
Meet SwiftData
Build an app with SwiftData
Model your schema with SwiftData
Migrate to SwiftData
Dive deeper into SwiftData

UPD: Если кто-то может подкинуть еще интересных сессий напишите в комменты

#ios #swift
🔥6👍1
Многопоточность

Часто такие примеры встречаются на собеседовании. Нужно ответить в каком порядке будут выведены цифры в консоль.
Проверим ваши знания и внимательность.

UPD: Изначально скрин был неправильный, сорри)
#interview #ios #swift
🔥4
Capture list 🤔

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

Начем с самого простого. Переменная cityClass в пункте 4 меняет свое значение поля name. Т.к классы относятся к reference type, то захват в capture list никак не повлияет на итоговое значение. В консоле мы увидем в обоих случаях "Liverpool".

Переменная cityStruct - cтруктура, поэтому в первом замыкании она будет скопирована при захвате в capture list, а во втором обращение произойдет в момент выполнения замыкания к уже обновленной переменной. Поэтому "London" и "Marseille" соответственно.

Последний случай может показаться самым неочевидным. Переменная cityClassOptional захватывается в первом замыкании по слабой ссылке. В пункте 4 сначала создается еще один указатель на cityClassOptional, а потом заниляется. В замыкании closure1 будет выведено Paris - счетчик ссылок у объекта еще не равен нулю (doubleClass удерживает объект по сильной ссылке), а вот closure2 обратится по указателю уже к пустому значению.

Как итог, вывод в консоль будет выглядеть следующим образом:

1 - my city is Liverpool
2 - my city is London
3 - my city is Paris
4 - my city is Liverpool
5 - my city is Marseille
6 - my city is nil


А что произойдет если применить weak к переменной с типом структуры? К счастью, компилятор поможет понять, что такое действие недопустимо. ARC не применим к Value Types

'weak' may only be applied to class and class-bound protocol types

#interview #ios #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2😱2🤡1
Method dispatch

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

Разберем несколько "tricky" примеров-вопросов с собеседований, которые могут действительно застать врасплох.
 
На первом скрине, у нас есть вызов метода сначала у структуры, а затем у структуры приведенной к протоколу. В случае если метод определен только в расширении протокола, мы получим ответы:
// In Struct
// In Protocol
Будет использована Static dispatch для метода из расширения протокола.
 
Если же мы добавим метод и в объявление протокола, то будет применен Witness table (скрин 2) и ответ станет:
// In Struct
// In Struct
 
На третьем скрине ситуация посложнее. Метод определен в протоколе и в его расширении. Есть класс B, который реализует протокол, но не перегружает метод из него. И есть класс С потомок класса B и переопределенный метод из протокола P. При вызове метода у класса С приведенного к протоколу, логично предполагать, что будет вызван переопределенный метод из класса С, но мы получаем вызов метода из расширения протокола 🤯.

Баг открыт много лет и пока не был поправлен. Собственно, как можно его закостылись смотреть там же)

#ios #swift #interview
🔥7👍4👏2🤡2
Курс по подготовке к собеседованиям. 📝

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

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

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

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

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

Первый урок по ссылке

#course #ios #development
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍5😎4🫡1🆒1
Сделал еще несколько разборов интересных задач с интервью.

➡️ Похожая задача мне попалась на интервью в австралийский Google. Я с ней справился достаточно уверенно и, думаю, было бы полезно показать решение. Если в ваших планах - получить работу в FAANG или другом big tech, то обязательно разберитесь во всех нюансах.

➡️ Еще одна задачка от Yandex. На этот вопрос по проектированию модуля отмены и возобновления отводиться 30-40 минут, поэтому допускается не идеальное решение. Главное - показать правильный ход мыслей и структурированное, логически обоснованное рассуждение.

Напоминаю, что подписчикам доступен чат для любых вопросов по урокам.

#course #ios #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👎3🔥2🫡1
Задание на дженерики 💻

В открытый доступ вышло задание на работу с дженериками. Вы сможете вспомнить или узнать, какую проблему они решают. Также можете использовать это задание на собеседовании в ваши компании. Буквально за 20-30 минут оно проверяет, как кандидат умеет писать шаблонный код.

Ссылка на разбор

#couse #swift #ios
👍8🔥51
Айосеры 🍏

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

Айосеры - папка с каналами

На этих каналах вы сможете найти ответы на сложные вопросы по iOS разработке и следить за последними трендами мобильного мира. Подписывайтесь!

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

#ios #apple #channels
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥167👍7🏆1
Сделал разборы задач из топ компаний.

Встречались в Starling Bank, Binance и Яндекс.Маркет.

Задачи на Type Erasure

Задачи на DispatchGroup

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

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

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

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

Подписывайтесь чтобы не пропустить новые задания!

#course #ios #development
🔥13👎3😁3👍2💯22😐11