#НоваяАватарка #АвторНедели
Привет. Я, Александр Сычев (@asychev89), буду ведущим канала на 50-й неделе года.
Сей… twitter.com/i/web/status/1…
Кстати, срок оплаты налогов на имущество в 2018-м году истек неделю назад. После 3-го декабря автоматически начнет… twitter.com/i/web/status/1…
Пока додумываю список тем этой недели, напишите в реплаи, что хотите знать о работе мобильным разработчиком в "Сбер… twitter.com/i/web/status/1…
Что больше всего вас бодрит утром понедельника?
Темы этой недели
* Objective-C/Swift и Java/Kotlin: что выбрать в 2019-м?
* Количественные метрики работы программи… twitter.com/i/web/status/1…
@mobileunderhood Наконец-то полезные твиты в этом аккаунте!
Вопрос для коллег из мира iOS. На каком языке начнете писать новое нативное приложение: на Objective-C или Swift? И… twitter.com/i/web/status/1…
@mobileunderhood objc, потому что в свифт не умею
@mobileunderhood Kotlin Native пробовал, но пока он кажется сырым. А современные плюсы, на мой взгляд, не сильно ус… twitter.com/i/web/status/1…
Предсказуемо, большинство iOS-разработчиков (кроме Егора, но он и не разработчик) выберут Swift. Поэтому небольшой… twitter.com/i/web/status/1…
Objective-C язык не умирающий, но стагнирующий в своем развитии. Практически все последние фичи языка были добавлен… twitter.com/i/web/status/1…
Практически - это принесенный из GCC в LLVM extension __auto_type. Вроде как, само взлетело в Xcode 8, Swift тут не при чем.
Почему стагнирует, а не умирает, как кажется многим? Apple не отказывается от Objective-C и, думаю, не откажется. Н… twitter.com/i/web/status/1…
2018: developer.apple.com/videos/play/ww…
Вся первая часть про API refinements pic.twitter.com/lvvfucLwiE
Но утверждать, что Objective-C может в 2018-м развиваться самостоятельно, бессмысленно. Вот, что говорит Крис Латтн… twitter.com/i/web/status/1…
Вообще, лучше всю дискуссию посмотреть. Swift появился, не потому что Objective-C - так себе язык, а потому что дл… twitter.com/i/web/status/1…
В той же дискуссии Крис отмечает, что в Apple по-прежнему много кода даже на C (не Objective-C!) и вряд ли его когд… twitter.com/i/web/status/1…
Также посмотрите на декабрьский TIOBE. Objective-C за год поднялся на 10-ю позицию, опередив Swift, который откатил… twitter.com/i/web/status/1…
Другой рейтинг PYPL также говорит, что Objective-C - язык популярный и, что может казаться удивительным, впереди Sw… twitter.com/i/web/status/1…
Еще рейтинг, который нельзя обойти стороной, - зарплатный. Статистика "Моего круга" за 1-е полугодие 2018: "Наиболь… twitter.com/i/web/status/1…
Поэтому в качестве реакции на чуть ли не насильное насаждение Swift во всех проектах, Objective-C сообщество реагир… twitter.com/i/web/status/1…
Что отметить из этих материалов?
@mobileunderhood Swift для джунов, Objective-C - выбор мастеров
Кому нужен Objective-C в текущих реалиях? Крупным проектам, которые пришли к успеху в последние 5 лет.
Вот статист… twitter.com/i/web/status/1…
Кто пишет на Objective-C: Сбербанк, Почта Mail.ru, FunCorp, Joom, VK (сужу по открытым источникам).… twitter.com/i/web/status/1…
Подведу черту под этим тредом. Objective-C язык по-прежнему актуальный, его знание востребовано рынком.
При этом S… twitter.com/i/web/status/1…
В большинстве статей, что я приводил, основные доказательства мощи Objective-C основаны на статистике. Это второе п… twitter.com/i/web/status/1…
Почему? Вот отличный доклад про то, как статистика помогает предвидеть порно из будущего youtu.be/eQaHrzd5Uak
Привет. Я, Геворк Cафарян (@GeorgioSafo). Меня позвал помочь Александр Сычев, чтобы помочь в обсуждении Андройда.
С… twitter.com/i/web/status/1…
В ближайшую неделю, буду с Вами холиварить на тему Андройда, Архитектуры и проблем в больших проектах.
И вот, первы… twitter.com/i/web/status/1…
Мы с Геворком будем подменять друг друга в течение недели, так что спрашивайте также про Android-разработку вообще… twitter.com/i/web/status/1…
Большинство iOS-разработчиков выбрали Swift в качестве языка для своего нового проекта. Но, очевидно, он не может б… twitter.com/i/web/status/1…
Мои камни в огород Swift.
3. Swift performance — холодный старт приложения и время сборки проекта.
И главная мысль сегодняшнего дня. В наступающем 2019-м году iOS-разработчик не может позволить себе знать только од… twitter.com/i/web/status/1…
Вот статистика от JetBrains jetbrains.com/research/devec…
29% of Swift developers still have most of their codebase in Ob… twitter.com/i/web/status/1…
Хотите быть успешными на рынке - учите и разбирайтесь во всех основных инструментах вашего направления. Нельзя утве… twitter.com/i/web/status/1…
Язык для разработки новой фичи / проекта должен выбираться, как и любой другой инструмент, исходя из реалий и потре… twitter.com/i/web/status/1…
Балансировать между результатом сейчас и результатом потом - очень сложно. Главное - обеспечить себе возможность такой балансировки.
Выводы вчерашнего дня
Сегодня поговорим про метрики работы программиста.
Как вы оцениваете свою рабочую эффективность? Как вас оценивают?
#АдвокатJAVA Вопрос про Kotlin и java, на самом деле вкусовой.
Да, Kotlin как многие считают красивее и удобнее. Но….
Продолжение в треде…
На самом деле, если вспоминать опыт с Xamarin'ом, когда мы в коммерции разрабатывали на C#,
то тогда лично мне в ja… twitter.com/i/web/status/1…
Kotlin (обязательно с использование coroutines)
в моем случае данный вопрос порешал.
Но опять же это был дискомфор… twitter.com/i/web/status/1…
Но даже в этом случае, я новый Enterprise (ключевое слово) проект, андроид приложения, начну писать на Java. Для ме… twitter.com/i/web/status/1…
Плюс в дальнейшем, мне выгоднее будет в команду найти матерого разработчика, который знает Java, нежели хипстера, к… twitter.com/i/web/status/1…
Вот набор моих личных плюсов JAVA для Enterprise проекта:
1 Язык более понятный и легкий для code review
2 Явный и… twitter.com/i/web/status/1…
5 Холодная сборка на java, быстрее чем у Kotlin
(последующие с условием инкременты, конечно, быстрее на Kotlin, не… twitter.com/i/web/status/1…
7 Если хочешь сравнивать не по ссылкам переопределяй equals и hashcode в дата классах.
8 Отсутствие Null-safety, ка… twitter.com/i/web/status/1…
Итог:
Все аргументы справедливы сейчас и до поры пока условно не выйдет Kotlin 2.0 со своей JVM или KVM. Google мак… twitter.com/i/web/status/1…
@mobileunderhood почему Apple не говорит прямо, что всем необходимо переходить на Swift?
Комментариев по поводу оценки немного, поэтому просто расскажу, какие количественные метрики мы собираем и для чего.
Почему не буду делать акцент на качественных? По мне, они сильно зависят от вашего процессного фреймворка, структур… twitter.com/i/web/status/1…
Что мы из цифр собираем по разработчикам?
Самое главное
Количественные метрики - вспомогательный инструмент для принятия решения.
Естественно, данные собираются не руками. В внутреннюю Kibana сливаются данные разных систем, в том числе от BitBuc… twitter.com/i/web/status/1…
Статистику по Jira не используем. У каждой команды своя политика ведения бэклога (хоть и в рамках определенных общи… twitter.com/i/web/status/1…
Но если команда хочет личный дашборд, то собрать данные из любых систем (можно предлагать свои) - проблем нет. Опис… twitter.com/i/web/status/1…
Зачем нам эти метрики? В рамках каких процессов они нужны?
Почему собираем только статистику инкремента кода? Потому что этого достаточно, чтобы выявить закономерности в кома… twitter.com/i/web/status/1…
Чтобы статистика верно собиралась, разработчики должны не нарушать гайды по работе с git: указывать номера задач в коммитах и делать squash
Полученные графики выступают отличным индикатором потенциальных проблем в команде.
Отмечу еще раз - потенциальных… twitter.com/i/web/status/1…
Разберем один кейс.
У разработчика за выделенный период подозрительно мало закрытых PRs. О чем это может говорить?
1. Разработчик ничего не делает.
Причин много: низкая мотивация, конфликт в команде, разработчик ищет другую работ… twitter.com/i/web/status/1…
2. Плохо прогрумленный бэклог команды
Задачи выкатываются огромными PRs, которые долго висят на ревью и закрываются… twitter.com/i/web/status/1…
Почему так случилось, надо выяснять. Product owner может не знать, чем наполнить бэклог команды. Или команда не уме… twitter.com/i/web/status/1…
3. Отсутствует онбординг нового разработчика
За первые месяцы работы сделано мало. Необязательно мы ошиблись на со… twitter.com/i/web/status/1…
Все кейсы, выявленные количественными метриками, разбираются во время performance review экспертной группой, котора… twitter.com/i/web/status/1…
Естественно, кейсы бывают и успешные. Сразу видно тех, кто стабильно и качественно перформит. Тогда метрики выступа… twitter.com/i/web/status/1…
На TeamLead Conf 2018 был доклад GitLean на эту тему. Во многом мы пересекаемся, и я бы даже кое-что у них позаимст… twitter.com/i/web/status/1…
Какой самый сложный баг в стандартных SDK Apple или Google вам приходилось обходить? Делитесь историями.
Выводы вчерашнего дня
Посмотрите, если еще не, мотивирующий доклад про любовь к профессии с последнего AppsConf youtu.be/lp-fg17Qds4… twitter.com/i/web/status/1…
Сегодня поговорим про собеседования.
Было ли, что во время собеседования куда-то вы понимали, что не пойдете в эту компанию? Что это было?
@mobileunderhood Бывало, конечно. Например так: twitter.com/soft_skillzz/s…
@mobileunderhood - Вопросы в духе "назовите 5й способ создать синглтон" или "чем стратегия отличается от совковой л… twitter.com/i/web/status/1…
@mobileunderhood Охранник, отказывавшийся пропускать меня без паспорта даже вместе с представителями компании.
@mobileunderhood - А какой у вас режим работы?
@mobileunderhood Меня просили на собесе продать какой-то мой проект(!) по-английски(!!). Так я и попал в Рамблер.
Многие истории очень хорошо показывают, что собеседование - это всегда двусторонний процесс, на котором каждый учас… twitter.com/i/web/status/1…
Об этом часто забывают, тренируясь перед сложным интервью, но забывая, что нужно подготовить и свои вопросы для потенциального работодателя.
Ваша часть интервью отлично разобрана в статье Дейва Смита 2015-го года.
"You should be just as focused on intervie… twitter.com/i/web/status/1…
С небольшими изменениями я использую опросник из этой статьи для своего интервью. С кем вам надо поговорить (по воз… twitter.com/i/web/status/1…
От себя я добавил в этот список HR. С ним всегда нужно обсудить причины открытия вакансии.
Есть также очень хороший вопрос к нанимающему менеджеру и HR. "Как вы поймете, что я тот, кто вам нужен?" - если на… twitter.com/i/web/status/1…
Ещё кое-что про собеседования. Зачем на них вообще ходить?
Очевидно, чтобы найти работу. Но есть ещё причина: оцени… twitter.com/i/web/status/1…
Это нужно, чтобы посмотреть, не слишком ли вы зациклены на своих внутренних процессах и технологиях. Возможно, что-… twitter.com/i/web/status/1…
Безусловно, митапы помогают решать этот вопрос. Но атмосфера собеседования менее дружелюбная: а омогает оценить себя в атмосфере стресса.
А также, допустим, вы мечтаете работать в условном Google или Apple. Там много тестовых этапов, про них написано мн… twitter.com/i/web/status/1…
Выводы вчерашнего дня
Свежий email с предложением о работе. Что думаете, Objective-C - он или она? pic.twitter.com/HlEEyosrf6
Сегодня хотел поговорить про code review, и тут как раз по всему интернету разошлась эта статья… twitter.com/i/web/status/1…
@rbsgn @mobileunderhood @int02h Я уже даже засомневался, так ли в контексте мобильных важна о-нотация. У нас часто… twitter.com/i/web/status/1…
В продолжение темы общения на ревью еще одна статья, на которую навел Facebook habr.com/post/432700/
Тон статьи р… twitter.com/i/web/status/1…
@mobileunderhood Меня бы уже смутило, что парень говорит про то, что нет исследований про эффективность этики, и са… twitter.com/i/web/status/1…
В заключении темы code review - статья, которую я считаю базовой при организации процесса в команде (в двух частях)… twitter.com/i/web/status/1…
От себя добавлю небольшой совет.
Когда я смотрю pull-request и собираюсь добавить к нему комментарий, то прежде за… twitter.com/i/web/status/1…
Помните, что к комментарию в Bitbucket пока нельзя оставить интонации, которые крутятся у вас в голове при его напи… twitter.com/i/web/status/1…
Выводы вчерашнего дня
Пока додумываю список тем этой недели, напишите в реплаи, что хотите знать о работе мобильным разработчиком в "Сбер… twitter.com/i/web/status/1…
Если есть вопросы, которые еще не задали, пишите. Сегодня буду на них отвечать. twitter.com/mobileunderhoo…
Сегодня в формате дневника расскажу о своём обычном дне работы в Сбербанке
На самом деле, не очень обычно все. Сегодня заканчивается спринт, поэтому встреч больше, чем обычно.
Ещё провожу с… twitter.com/i/web/status/1…
Что уже успели: провели daily, обговорили один сложный баг, причину которого 4 дня коллега искал.
Совет на будущее… twitter.com/i/web/status/1…
Сейчас Демо. Показываем новый дизайн кое-чего в iOS, новый дизайн кое-чего в Android (ждите их в январе). А также c… twitter.com/i/web/status/1…
Собеседование прошло в позитивном ключе. Первый раз попробовал сразу спрашивать про плюсы-минусы о процессе и вопро… twitter.com/i/web/status/1…
Провели ретро по спринту. Не все цели достигнуты: переоценили себя немного.
Ещё добавили личные цели на следующий… twitter.com/i/web/status/1…
Мне передали список вопросов с последнего Mobius, а к нему добавлю те, что задали здесь. Итак, тред вопросов по Сбербанк
1. Какая зарплата (Mobius)?
В зависимости от уровня кандидата, вилка немного выше средней по рынку. Еще может быть годовая премия.
2. Правда ли, компьютеры выдают месяц, когда начинаешь работать (Mobius)?
Неправда. Обычно выдают в тот же день, ко… twitter.com/i/web/status/1…
3. Каков размер команды?
У нас кросс-функциональные команды 8-12 человек. Над "Сбербанк Онлайн" работает примерно 8… twitter.com/i/web/status/1…
4. Правда ли что все официально и строго: дресс-код и т.п. (Mobius)?
Не очень понимаю, что это значит. Дресс-код ca… twitter.com/i/web/status/1…
5. Есть ли у вас девушки в команде (Mobius)?
Есть в iOS у нас крутые разработчики-девушки. У меня в команде тоже ес… twitter.com/i/web/status/1…
6. Где спрятаны 200 фич (Mobius)?
Видимо, это из промо-ролика с конференции про 200 новых выведенных в production в… twitter.com/i/web/status/1…
Как эта цифра получилась? Давайте считать на примере одной команды. "Бюджетные платежи" в этом году (из крупного)
-… twitter.com/i/web/status/1…
7. Интересно про либы послушать. Какие используете статичные/динамичные. Как их вместе держите?
И то, и то использу… twitter.com/i/web/status/1…
8. Про карьерную линейку.
Есть разные ветки, расскажу про "Инженер DEV" (есть инженер OPS, бизнес-аналитик, дизайн… twitter.com/i/web/status/1…
Сотрудник решает сам, куда ему идти. Каждый трек содержит 4 уровня мастерства: junior, middle, senior, master. Кажд… twitter.com/i/web/status/1…
Например, разработчик уровня Master должен глубоко знать экспертную область, определять архитектуру своей системы и… twitter.com/i/web/status/1…
Критериями для продвижения являются: результативность команды и личный вклад в результат, личная оценка, профессион… twitter.com/i/web/status/1…
Продвижение возможно два раза в год. В принятии решения участвуют эксперты, управленческая команда Трайба, HR.
Про… twitter.com/i/web/status/1…
Сбор данных происходит через годовую оценку команды и сотрудника, performance review, нерегулярную обратную связь п… twitter.com/i/web/status/1…
9. Про ускорение релизного цикла интересно!
Могу немного про iOS рассказать. Релизный цикл был в начале года 4 неде… twitter.com/i/web/status/1…
Также автоматизировали сбор информации по релизу, научили команды правильно заявляться и готовиться к релизу.
На с… twitter.com/i/web/status/1…
10. Общая архитектура приложения. Какие third party компоненты используются?
Общая - модульная. Про это много докла… twitter.com/i/web/status/1…
Даже покодил немного сегодня: доделал одну фичу, закрыл тестами. Тесты модульные, чистые, по нотации arrange-act-as… twitter.com/i/web/status/1…
19:58 - Начальник что-то мне говорит.
19:59 - Начальник что-то мне говорит.
20:00 - Начальник что-то мне говорит, а… twitter.com/i/web/status/1…
Итак, пятница.
Какие у вас отношения с тестировщиками? Например, я как-то зашел так далеко, что одна из тестировщиц стала моей женой.
Поэтому ТОП-5 фраз, которые больше всего бесят в программистах тестировщиков
5-е место. "На регрессе пофиксим", а он во время регресса в отпуске.
4-е место. "Я только шрифт поменял", а он даже не слушал, что у него хотели спросить.
3-е место. "Билд не тот", хотя билды уже три дня не собираются.
2-е место. "Я проверял", а он, на самом деле, не проверял.
1-е место. "А у меня работает", а что работает, он не знает.
Выводы вчерашнего дня
Сегодня поговорим про мотивацию.
Что думаете, если в другой компании вам предложат на 30% выше зарплату, уйдете ли… twitter.com/i/web/status/1…
Есть разные теории мотивации. Обычно все знают про двухфакторную теорию Герцберга. Теория имеет много общего с теор… twitter.com/i/web/status/1…
Гигиенические - внешние по отношению к работе, они снимают неудовлетворенность работой. К ним относят: нормальные у… twitter.com/i/web/status/1…
Гигиенические факторы автоматически не определяют положительную мотивацию сотрудника. Отсутствие или недостаточное… twitter.com/i/web/status/1…
Мотивирующие факторы: успех, продвижение по карьерной лестнице, признание и одобрение результатов, возможности творческого и делового роста.
Эта группа факторов предполагает, что сотрудник может мотивированно работать, если видит цель и считает возможным е… twitter.com/i/web/status/1…
Основное отличие между Маслоу и Герцбергом в том, что по мнению второго работник начнет обращать внимание на гигиен… twitter.com/i/web/status/1…
Поэтому, если в среднем рынок платит больше (на 30% или даже 50%) за вашу работу, чем текущий работодатель, то вы б… twitter.com/i/web/status/1…
На самом деле, для анализа мотивации есть много теорий. Расскажу еще про одну - теорию поколений. Согласно ей, кажд… twitter.com/i/web/status/1…
Авторы теории, американские историки Хоув и Штраус, дали название и составили характеристику для поколений, начиная… twitter.com/i/web/status/1…
Наибольший интерес представляют те поколения, с кем непосредственно мы встречаемся на работе.
Они умеют делать практически любую ручную работу. Многие из «бумеров» активны, ходят в фитнес-центры, осваивают гад… twitter.com/i/web/status/1…
2. Поколение X, 1963-1984.
Поколения одиночек, нацеленных на упорную работу и личный успех. Ценности: готовность к… twitter.com/i/web/status/1…
Они предпочитают долго работать в одной организации, накапливая опыт и поднимаясь с самой низкой ступени до директо… twitter.com/i/web/status/1…
3. Поколение Y, с 1984 до 2004 г.
Поколение социальных сетей. Не готовы работать на одну компанию много лет, предпо… twitter.com/i/web/status/1…
Психологи отмечают их наивность и умение подчиняться, но нежелание строить планы на длительный срок. Как правило, э… twitter.com/i/web/status/1…
Занимаются спортом, потому что это модно и приносит удовольствие. Спорт должен быть красивым, нежели полезным (откр… twitter.com/i/web/status/1…
4. Поколение Z, с 2004 г.
Не представляют себе жизнь без цифровых технологий. Не привыкли к физическому труду и не… twitter.com/i/web/status/1…
Так же, как Y, не понимают корпоративных ценностей и легко меняют работу, если она не приносит личный рост или "мно… twitter.com/i/web/status/1…
Главные ценности - человек и уважение к его взглядам, быстрый результат при решении захватывающих задач, яркие эмоц… twitter.com/i/web/status/1…
Спорт для них - лекарство от засилья техники. Поэтому он должен быть прежде всего командным: футбол, баскетбол, бег… twitter.com/i/web/status/1…
Система поколений позволяет прежде всего выбрать стратегию взаимодействия с сотрудником.
Очевидно, что в мобильной разработке мы чаще сталкиваемся с поколениями Y и Z. Такие сотрудники всегда должны знать… twitter.com/i/web/status/1…
Выводы вчерашнего дня
Сегодня немного поговорим про горизонтальный рост, T-shape и D-people.
Как определяете для себя, какие навыки развивать?
@mobileunderhood Общаюсь с представителями других профессий и должностей, спрашиваю какие у них основные задачи, пр… twitter.com/i/web/status/1…
Итак, что такое T-shape и почему это столь важно для современных инженеров.
Изначально предполагалось, что человек, получив специальное образование (среднее или высшее), должен уметь делать ч… twitter.com/i/web/status/1…
Такие узкие специалисты называются I-shaped. Они обучены профессии, но мало знают о смежных областях. Это удобно: к… twitter.com/i/web/status/1…
Конечно, скорее не простаивают, но занимаются иными задачами и при необходимости переключают контекст. Где-то в так… twitter.com/i/web/status/1…
В современном цифровом мире это не работает. Время выпуска новых продуктов и функций должно быть минимальным. Качес… twitter.com/i/web/status/1…
В любой момент команда должна быть готова перестроиться, чтобы решить любую задачу за прогнозируемый срок. Поэтому… twitter.com/i/web/status/1…
Например, iOS-разработчик, который может добавить пару activity в Android и написать несколько автотестов, чтобы ра… twitter.com/i/web/status/1…
Для развития T-shape специалистов важны
Например, архитектура отдельного программного модуля жестко не задана, но должна ориентироваться на принципы "чисто… twitter.com/i/web/status/1…
2. Цель.
Важно, чтобы у всех инженеров команды была общая цель - выпустить нужный пользователям продукт. Соответст… twitter.com/i/web/status/1…
Основной профит развития T-shape сотрудников - это минимальный time-to-market и высокий bus factor. Обмен компетенц… twitter.com/i/web/status/1…
Очень важно, чтобы участники команды были готовы помогать друг другу наращивать экспертизу в смежных областях. Если… twitter.com/i/web/status/1…
Говорят, что T-shape повышает стоимость специалиста на рынке. Я считаю, что для текущих реалий это неверно: в больш… twitter.com/i/web/status/1…
Но развитие в смежных областях позволяет чувствовать себя гораздо уверенней на рынке в случае устаревания текущей с… twitter.com/i/web/status/1…
Подробней об этом можно посмотреть, например,
Важно помнить, что T-shape - это не серебряная пуля для ускорения time-to-market. Но этот подход вполне соответству… twitter.com/i/web/status/1…
(Рекламный твит)
В Сбербанк в рамках текущей стратегии развития существует программа подготовки T-shaped инженеров.… twitter.com/i/web/status/1…
Выводы сегодняшнего дня
Время подводить итоги моей вахты. За эту неделю твиты аккаунта посмотрели чуть больше 170 тысяч раз - отличный итог… twitter.com/i/web/status/1…
Спасибо @vvsevolodovich, @miha_x64, @MojoIvan, @igrekde и @AndreyMishanin за комментарии и поддержку. Отдельная бла… twitter.com/i/web/status/1…
Если у вас есть вопросы, я с удовольствием на них отвечу в Твиттере @asychev89 или Facebook facebook.com/sychevbrain89… twitter.com/i/web/status/1…
- https://developer.apple.com/videos/play/wwdc2018/209
- http://mail.ru/
- https://youtu.be/eQaHrzd5Uak
- https://youtu.be/lp-fg17Qds4
- https://youtu.be/bQth2oo66B8
- https://www.jetbrains.com/research/devecosystem-2018/swift-objc/
- https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
- https://blog.timac.org/2018/0924-state-of-swift-ios12/
- https://habr.com/post/432700/
- https://habr.com/post/429612/
- https://www.facebook.com/sychevbrain89