Сергей Рыбалкин

Сергей Рыбалкин

Неделя
Jan 11, 2021 → Jan 17, 2021
Темы

Архив недели @lightdelay

Понедельник


Всем привет! На этой неделе с вами Сергей Рыбалкин @lightdelay. Я работаю в лондонском офисе Facebook над Kotlin Adoption, проблемами kotlinc и Redex.

Меня можно читать в твиттере @lightdelay и в tg-канале: t.me/rylive А чтобы вам было чуть интереснее на меня подписываться, в конце недели переведу сумму пропорциональную количеству новых подписчиков в фонд “Старость в радость” starikam.org

Работать в Facebook интересно, так что если вам нужен реферал - не стесняйтесь, напишите мне. t.me/rybalkin

Дисклэймер. Я не настоящий мобильный разработчик и никогда не писал под Android. Но надеюсь это не помешает нам весело провести время.

Точного расписания на неделю не будет, но вот о чем мы поговорим: - Моя карьера: как побывать CTO, пережить увольнение, переехать в Лондон - IT Образование: зачем преподавать, как сделать свои курс и сколько это стоит

- Alibaba: как работать в Китайской компании и не потерять рассудок - Facebook - Kotlin: Adoption at Scale, как пересадить 10000+ инженеров на новый язык

- Android: оптимизация DEX кода - как и зачем сжимать ваше приложение - kohttp: зачем понадобился DSL http клиент для Kotlin - Как выжить в Москве на 400k+ - иное

На этой неделе в Facebook проходит Performance Summary Cycle (PSC) - это довольно напряженное время. Сотрудники пишут большие отчеты о проделанной за полгода работе, дают фидбек своим коллегам и менеджерам, а вот на код уже времени не остается.

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

А чтобы вы не скучали по утрам, пока я увлеченно занимаюсь PSC, буду скидывать вам фотографии Лондона в локдаун.
notion image

Последние 4 года, сначала в Alibaba Group, а теперь уже в Facebook я занимаюсь Kotlin Adoption. Мне приходится искать и решать проблемы c Kotlin, которые возникают или когда-то возникнут у инженеров, команд и проектов.

Adoption любой технологии это довольно сложный процесс. Он начинается с вопросов: Зачем? Как? Сколько это будет стоить? - Ответы на них будут значительно отличаться в зависимости от профиля и размера компании.

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

Глава 1, в которой студент четвертого курса становится CTO стартапа. Рефлексируем

Вжух, 2012 год. Нефть стоит 100$, доллар 30₽. Российский бюджет в небывалом профиците.

К четвертому курсу универ отнимал уже меньше времени, чем раньше. А фундаментальное образование перестало быть таким интересным и захватывающим. Как раз в тот момент мой знакомый из НИИ при РЖД искал программиста для разработки систем Имитационного Моделирования.

Двигаясь по течению, я охотно согласился на работу Junior Java Dev в НИИ. Наша команда в 2 с половиной человека разрабатывала Имитационные Модели на базе Eclipse RCP одного российского вендор. Уже вскоре из 2.5 человек на проекте остался только я.

Не поленился и нашел на YouTube видео самой крутой нашей некоммерческой модели youtu.be/T_M56o7qDrM За кадром собственный алгоритм перемещения людей и система визуального программирования для инженеров(не software) на которой можно собрать всю модель.

Мы моделировали всё: поезда, автотранспорт, склады, пешеходов. Через некоторое время пришло осознание, что кроме нас в тот момент на рынке никто не способен построить модель перемещения 10 тысяч пешеходов в пространстве.

Звезды сошлись и именно в тот момент организаторы Sochi 2014 захотели потратить большое количество денег на обеспечение безопасности стадионов и пешеходных зон олимпиады.

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

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

Делаем первый вывод! Повышение из Junior Developer в СTO, как и любое преждевременное повышение опасно как для сотрудника так и для работодателя. Сказать что в первые полгода Я ОХЕРЕЛ, это ничего не сказать.

Вторник


Доброе утро! Вчера весь день ушел на написание PSC фидбека коллегам, постов с итогами полугодия, и проведение User Research Interviews. Сегодня должно быть больше времени на общение, а пока немного Лондона
notion image

Глава 2, в которой автор учится управлять стартапом и что-то идет не так

Заранее хочу сказать большое спасибо команде, вместе с которой мы всё это делали, вы крутые! Сейчас это успешные в своих областях люди из Reddit, JetBrains, Yandex, Avito и других компаний.

Несмотря на весомые контракты, основную фазу роста компания вынуждена была проходить с весьма скромным бюджетом на разработку. Максимум мы могли позволить себе нанять двух senior enginner’ов, которые скорее всего бы не пошли работать в ноунэйм фирму.

Мне очень жаль, что в тот момент мы не рассматривали выдачу опционов сотрудникам, эта схема позволила бы привлечь в команду экспертов которых так не хватало. Почему не рассматривали? - Я не знал что так бывает! Стоит ли говорить, что опыта найма у меня не было?

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

Как вам такая идея?

С некоторыми оговорками идея сработала, команда хорошо решала алгоритмические задачи для продукта, писала неплохой Java код (по моим стандартам 2012). Но мы не понимали как строить и масштабировать процесс разработки на несколько человек.

Будь хоть у кого-то из нас опыт выстраивания процессов и коллаборации над кодом такой проблемы бы не возникло. А в тот момент пришлось с нуля разобраться с тем что такое Git, Maven, Code Review, CI/CD.

Конечно же глупо винить в нашей ситуации только систему образования, но я до сих пор считаю, что выпускать Software Engineer’ов без понимания процессов промышленной разработки - как минимум безответственно

Разработка начинала набирать обороты, команда раз за разом достигала промежуточных целей. Мне даже удалось слетать в отпуск (были же времена). И тут, посреди ясного неба увольняется один из разработчиков.

Вы бы уволились в этот момент? Или подождали бы еще несколько твитов?

Я не смог присутствовать на exit interview. Но, судя по всему небо оказалось далеко не таким ясным. Через несколько дней после этого мы обсуждали с CEO сложившуюся ситуацию и он задал мне один очень важный вопрос:

Серёжа, а не говно ли мы делаем?

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

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

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

Я уходил из компании с весьма странным набором навыков - средненьким hard, product design и прокаченными soft skills. Не самый хорошо продаваемый на российском рынке skillset, как оказалось. Старайтесь управлять своим профессиональным ростом, он может быстро выйти из-под контроля

Кроме перечисленного вот какие советы я бы дал молодому себе: - Много читай - Пройди Internship в крупной компании - При выборе первой работы оценивай процессы в компании. Именно процессы будут способствовать или мешать самой интенсивной фазе профессионального роста.

- Иди работать в команды у которых есть чему учиться - Создавай diverse команды в которых у людей есть перспективы роста

Хорошо что у этого сообщества есть свои традиции
notion image

Обещал в тред по #FlatEarth 100 тезисов, я не берусь точно утвержать какой формы наш мир, но явный характер оккультности гелиоцентризма и космопропаганды очевиден. Для конструктива нужно понять разницк между логемой, логистикой и логикой, чтобы классифицировать утверждения
Тайна раскрыта! Вчера исполнился ровно год вот этому треду 🌎🌍🌏 twitter.com/mobileunderhoo…

Пора создавать новый подход к разработке: "Серёжа, а не говно ли мы делаем driven development?" twitter.com/mobileunderhoo…
Вся моя жизнь с тех пор такой девелопмент twitter.com/xd720p/status/…

@mobileunderhood Слушай, ну мы проходили процессы промышленной разработки, но там всё упиралось в рисование миллиарды UML диаграмм разной степени упоротости, составления требований в пяти томах на 10 лет разработки и подготовке отчётов. Эти знания даже применимы либо в НИИ, либо в 80-х
Без практики эти навыки очень сложно развить. Самый правильный способ, на мой взгляд, Internship в крупной компании. Универу сложно давать актуальные прикладные знания, в этом случае он должен выступать как networking, площадка для связи студентов и компаний twitter.com/xd720p/status/…

Истории успеха у всех на виду, они нас мотивируют. Из провальных же историй можно извлечь совершенно другие уроки. Итак, тред про то как меня уволили #MeToo Моя история начинается с этого письма
notion image

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

Возможно, если бы я вовремя поделился своей историей, дело было в 2015, вы бы никогда не прочитали habr.com/ru/post/335876/ , а карьера хотя бы одного инженера сложилась, чуточку лучше.

К моменту истории я уже некоторое время рассматривал возможные пути эмиграции. Через network узнал о том, что компания Xored вот-вот откроет офис в Праге и уже ищет сотрудников на релокейт. Мой друг совсем недавно подписал с ними оффер и готовился выходить на работу.

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

Что нужно было сделать 1? Определиться с тем, насколько я доверяю компании. Узнать как она устроена, неформально пообщаться с потенциальным коллегой. Узнать кто ей руководит, наконец Что сделал я? ¯_(ツ)_/¯

Что нужно было сделать 2? Обсуждать оффер, в 90% случаев вы можете увеличить свой доход или пакет бонусов в этот момент, НИКОГДА не стесняйтесь просить много/больше денег Что сделал я? ¯_(ツ)_/¯

Что нужно было сделать 3? Узнать умеет ли компания работать удаленно, понять есть ли у них опыт удаленного онбординга. Что сделал я? Подумал что всё будет хорошо

Весь месяц своей работы в Xored я занимался JVM-based тулами для корпоративных сетей. Это был абсолютно рядовой проект, не могу сказать ничего плохого.

Во время оформления контракта начались очень странные дела: Трудовой договор оказался срочным, условия релокации в нем не прописали

Серая зарплата приходила на карту иностранного банка, в отделение которого в Москве можно было попасть только по приглашению Купить железо пришлось за свои деньги, которые потом должны были возместить

Что нужно было сделать? Заранее проговорить все условия контракта и, обязательно, релокацию. Возможно обратиться к юристу. Что сделал я? ¯_(ツ)_/¯

Я постепенно втягивался в работу, пилил какие-то фичи, изучал проект. Всё выглядело обычно, до тех пор пока солнечным январским утром мой друг не позвонил со словами: “Прикинь, меня только что уволили!”

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

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

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

За месяц работы в компании я общался со своим менеджером 1 раз, это был обычный welcome talk без каких-то технических деталей

Чуда не произошло и через 10 дней меня уволили. К сожалению, за это время вразумительный фидбек по своей работе я так и не получил.

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

Что нужно было сделать? Дать компании меня уволить или уйти по соглашению сторон Что сделал я? Уволился по собственному желанию

Длительное время я пребывал в довольно плачевном состоянии задаваясь вопросами “А что если я плохой программист?” и “Кто же меня теперь наймет?”. Искать новую работу не было никакого желания.

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

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

Среда


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

Сегодня писал большой пост о достижениях нашей команды за последние полгода. У меня ушло на это примерно 4 часа чистого времени (1500 слов).
notion image

В очередной раз начал задаваться вопросом, зачем это всё нужно и стоит ли тратить столько времени на рассказы о своих достижениях, работа то уже сделана? Может лучше еще кода написать?

Какую часть своего рабочего времени вы тратите на рассказ о своих достижениях?

Какую часть своего рабочего времени вы тратите на рассказ о своих достижениях?
У меня вопрос к ответившим "Не трачу". Как ваш менеджер узнает о том когда вас нужно повысить или поднять зарплату? Как вы ищете точки роста своего проекта? twitter.com/mobileunderhoo…

@mobileunderhood Если менеджер имеется в виду тимлид, то он замечает, что я беру больше ответственности за разные участки. Надеюсь, замечает 🤔
Память тимлида обратно пропорционально количеству людей в команде. Узнали? Согласны? Другая проблема кроется в том, знает ли тимлид что вы решили какие-то системные задачи взваливая на себя бОльшую ответственность (уменьшили maintenance cost, ускорили билды, искоренили NPE) twitter.com/Miralasse/stat…

Вот уже несколько месяцев я пытаюсь собраться с силами и сделать доклад на тему “Почему Kotlin плохой язык”. Зачем? - Переходя на Kotlin у многих инженеров начинается Honeymoon период. Им всё нравится и они перестают замечать проблемы. Это очень опасное состояние.

Самое время расчехлить совой хейт 😃 Пожалуйста, накидайте в реплаи почему вы не любите Kotlin, какие проблемы у вас с ним случались. Можно с эмоциями, можно всего пару слов, можно ссылки - что угодно

Четверг


@IZhylenko @mobileunderhood Ну там же рефлексия, хз канеш как в свифте с рефлексией вообще дела обстоят
Пользуясь случаем пропиарю Swift Reflection Proposal от моего сокомандника forums.swift.org/t/pitch-2-opt-… twitter.com/l0skin/status/…

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

Сегодня разбираемся что же такое Kotlin Adoption, как мы несли добро в Alibaba Group. Тред, в котором даже упоминается мобильная разработка
notion image

Если, вдруг, вам надоел твиттер, то этот тред вы можете посмотреть на YouTube 🙃 HighLoad’18 youtu.be/wsz1hvO3Wgs или Kotlin Everywhere Moscow’19 youtu.be/4m9bS0M0Nww

Alright folks, gather round and let me tell you the story of (almost) the biggest engineering disaster I’ve ever had the misfortune of being involved in. It’s a tale of politics, architecture and the sunk cost fallacy [I’m drinking an Aberlour Cask Strength Single Malt Scotch] twitter.com/StanTwinB/stat…
Долго думал как сформулировать то, чем я занимаюсь в одном твите. Я стараюсь сделать так, чтобы не происходило такого twitter.com/stantwinb/stat… Очень крутая история про Swift в Uber.
notion image

Немного контекста. На протяжении всей карьеры я работаю с Java и всем что крутится на JVM. В 2016 пришел первым инженером в только что открывшийся офис Alibaba Group в Москве. Кулл сотри про работу в китайской компании будут в пятницу.

Большую часть своего опыта я постараюсь донести именно через этот кейс, потому что меня не ограничивает NDA. Про Alibaba можно задавать любые вопросы - Kotlin, Китай, деньги, офисная политика, “объединение” с mailru, постараюсь ответить по максимуму.

Alibaba это самый крупный в мире JVM деплоймент*. Сначала в AliExpress, а затем в AliCloud мы разрабатывали Function as a Service(FaaS) Платформу для облака Ali. Cамый известный FaaS провайдер - AWS Lambda. *честно пытался найти пруй, но не смог за разумное время
notion image

Выступление на конференциях, кстати, - это хороший лайфхак для избежания проблем с NDA.

Еще до моего прихода деплоймент Ali задыхался от монолитных приложений. Переход на микросервисы был осуществлен до Массового Микросервисного Помешательства В Индустрии.

А уже в 2016 Ali задыхался от микросервисов. Гранулярность выходила из-под контроля, мы очень плохо утилизировали железо. У разработчиков был слишком большой оверхед на доставку business value.

В любой ситуации создавался новый микросервис, было множество практически идентичных. Объем бизнес кода в поставляемых контейнерах зачастую был меньше 0.1%. Мы не использовали k8s, масштабироваться был тяжеловато.
notion image

Типичный график утилизации CPU выглядел так. Не буду говорить сколько у нас было таких машин, но это был весомый и бесполезный вклад в глобальное потепление. Есть идеи откуда на графике спайки?
notion image

Внедрение FaaS(Lambda) позволило бы нам отказаться от микросервисов примерно в половине usecase’ов: Mobile backend as a Service (да-да, мобайл), оркестрацию сервисов, map-reduce преобразование, фасады, ... А еще значительно сократить парк машин.

Предполагалось, что Lambda мы будем запускать внутри JVM. Выбирая язык для написания Lambda остановились на Kotlin. На картинке приведена часть критериев. Ожидалось что mobile, back и front разработчики смогут относительно легко втянуться. Сейчас в графу interop я бы поставил 95%
notion image

Почему interop 95%? Platform Types, очень сложно побороть 20-летний легаси Поддержка @Contract discuss.kotlinlang.org/t/contract-sup…

Масштабирование предполагалось по двум измерениям - количеству Lambda внутри одной JVM, и группировки Lambda в зависимости от телеметрии. Не буду углубляться в кишки, спрашивайте если интересно.

Принимая решение об онбординге Kotlin мы знали, что будут серьезные проблемы. Ожидали следующего: IDE будет тормозить Будут проблемы с корутинами Потребуется серьезные изменения в Spring Framework ...

... 4. Потребуется масштабный образовательный процесс 5. Будут сложности интеграции в CI/CD пайплайны 6. Сборка будет медленной

Как думаете, какая из этих проблем накрыла нас первой?

@mobileunderhood Если мемежеру надо рассказывать, то нахер он вообще нужен и чем вообще занят?
Семья, дети, возможно он ведет подкаст twitter.com/MadTester3/sta…

@mobileunderhood По критериям с этой картинки, сама Java рвет всех и вся, и надо отдельно сказать зачем вообще понадобился другой язык вместо неё.
Java 17 вообще в порядке! У меня сейчас большие вопросы к развитию Kotlin/JVM. Стоит ли его выбирать бэкендерам? twitter.com/i_sopov/status…

Всё время забываю что интерекшн с пользователем должен быть максимально простым, а не эти вот мои вопросы. Вы попали на необитаемый остров Backend разаработки. С собой можно взять только один язык. Что берем?

Напоминалка последователям! Я замьютил все #FlatEarth треды которые нашел. Теперь хотя бы могу видеть релевантные реплаи подписчиков.

@mobileunderhood Интересно немножко услышат про Spring. Какие такие серьёзные изменения кроме обновления его на 5.x?
Большой проблемой было уговорить Reactor работать вместе корутинами. Было огромное количество ThreadLocal оптимизаций которые пришлось переделывать. Апгрейд на 5.x произошел через 2 года после начала проекта. twitter.com/antonarhipov/s…

Кстати, очень много идей мы взяли из проекта Spring Fu github.com/spring-project… Thanks @sdeleuze for a great project!

Еще одним источником вдохновений был вот этот крутой документ, да и вообще материалы CNCF github.com/cncf/wg-server…

Прошелся сейчас по своим вопросам c SO того времени. Вспомнил, что потратили существенное время на различные кейсы SB Test stackoverflow.com/questions/5139… cc @antonarhipov

@mobileunderhood Хотелось бы услышать как решили (а не решали) вопрос nullability в кодовой базе - мы же говорим о jvm based lang и скорее всего о java.
Самый распространенный способ, свой статический анализ и снабжение кода метаинформацией - это очень дорого для компании. Тут мы выходим на тонкий лед, но я поделюсь вот этой ссылкой. fbinfer.com/odoc/next/infe… twitter.com/dolzhenko/stat…

Ребята из JetBrains, я вас очень люблю если что 😍

JetBrains производит лучшие IDE, поставляет их практически для каждого языка, своего рода монополия. Как думаете может ли однажды к ним заявиться FTC (Federal Trade Commission) c антимонопольным иском (Antitrust Complaint)? И заставить разделить продукты на отдельные компании?

Всё время забываю что интерекшн с пользователем должен быть максимально простым, а не эти вот мои вопросы. Вы попали на необитаемый остров Backend разаработки. С собой можно взять только один язык. Что берем?
Пока Kotlin одерживает уверенную победу в Калифорнии, Техас ожидаемо проголосовал за Java, ждем результатов из колеблющихся штатов twitter.com/mobileunderhoo…

Пятница


The morning after finishing Performance Review at Facebook #facebookengineering https://t.co/AcSHze2YmK
Приветик! Сегодня утро на самом деле доброе 🙌 twitter.com/lightdelay/sta…

@mobileunderhood С чего вы вообще решили , что они производят лучшие ide? То что нравится 👍 вам , не означает что оно нравится всем
Я спрашивал у своих друзей из JetBrains, они говорят что лучшие. Еще говорят очень удобна подписка на все продукты. А я что? - пошел купил, отношения нужно строить на доверии twitter.com/AntonKulibyaki…

Всё знать невозможно, мозг как LRU кэш вытесняет лишнюю информацию. Меня до невозможности бесит токсичность с которой junior разработчикам инкриминируются необходимые знания. Избавляемся от синдрома самозванца тред. 1 лайк = 1 факт от том чего мне не стыдно не знать или делать

Мне не стыдно каждый раз гуглить как пользоваться IO в Java и Kotlin - прочитать файл, записать в файл, угх!

Мне не стыдно не знать многих консольных команд, от sed у меня до сих пор мурашки

Мне не стыдно не знать того, что происходит на каждом уровне модели OSI.

Мне не стыдно шипить посредственный код, который решает актуальную проблему

Мне не стыдно посредственно/плохо/не разбираться в технологиях, с которыми я не работаю каждый день

Мне не стыдно не давать эстимейтов выполнения задачи, если я не понимаю сколько она займет времени.

Мне не стыдно работать с Git в визуальном редакторе или IDE

Мне не стыдно нажимать зелёный треугольничек в IDE вместо консольной команды для запуска приложения

@mobileunderhood А как иначе? В консоли с гитом работают только джуны, которым лень освоить IDE, чтобы достичь максимальной продуктивности.
Всё верно! Еще не успели выучить главные горячие клавиши, не развили мышечной памяти twitter.com/tagir_valeev/s…

@mobileunderhood А как иначе? В консоли с гитом работают только джуны, которым лень освоить IDE, чтобы достичь максимальной продуктивности.
Хочу только спросить: А Senior коллега вам когда-нибудь говорил "Да ты чего, не умеешь XYZ?". В его голове это могло звучать как challenge или какой-то призыв к росту. Но менее опытный коллега мог воспринять это совсем иначе. twitter.com/tagir_valeev/s…

@tagir_valeev @mobileunderhood Мне не стыдно не работать с Git хехе
В Facebook никому не стыдно не работать с Git twitter.com/ruggerprogramm…

Мне не стыдно повторно задавать вопросы коллегам, если чего-то не понял

Мне не стыдно взять day-off если я устал, а проект горит

Мне не стыдно, что не умею вращать деревья в уме

Не забывай, что у тебя есть возможность сделать это - safety net в виде огромного Facebook (а раньше это была алибаба), которому на самом деле пофиг на этот один день. И твои (и мои) проекты без дедлайнов настоящих. У кого-то такой возможности нет twitter.com/mobileunderhoo…
Не забывайте, что у меня, как и у любого человека есть bias! twitter.com/ruggerprogramm…

Мне не стыдно, когда junior во время pair programming видит баг, а я нет

Мне не стыдно, что не помню все уровни изоляции транзакций

Так, пристегнитесь! Мне не стыдно иногда не придерживаться SOLID

Раз уж такие дела, подписывайтесь на меня @lightdelay За эту неделю я вряд ли успею сказать все что хотел

Мне не стыдно тратить часть рабочего времени на самообразование, вместо доставки новых фич. #мненестыдно

Мне не стыдно просить у работодателя много денег за работу которую я делаю. #мненестыдно

Мне не стыдно через год уволиться из компании если наши цели разошлись. #мненестыдно

Мне не стыдно понимать статьи @shipilev не с первого раза shipilev.net/jvm/anatomy-qu… #мненестыдно

Мне не стыдно делать синтаксические ошибки в YAML файлах #мненестыдно

Мне не стыдно что Garbage Collector за мной убирает #мненестыдно

Мне не стыдно провалить собеседование. #мненестыдно Это чаще всего обидно и досадно, но происходит с каждым

Мне не стыдно не пойти/отменить митинг, если я не буду на нем полезен #мненестыдно

Мне не стыдно писать на Java try { foo() } catch(Exception ignored) { } #мненестыдно Создатели сами виноваты

Мне не стыдно долго и итеративно торговаться на этапе оффера в компанию #мненестыдно

Мне не стыдно, что не могу перечислить все порождающие паттерны проектирования. Почему?-Почему? на Mobile собеседованиях это такой популярный вопрос? #мненестыдно

Мне не стыдно КРАСИТЬ КНОПКИ* #мненестыдно *данный твит предоставлен автору сообществом

Суббота


Сегодня углубляемся в проблемы Kotlin/Android, разбираемся отчего растет DEX, и что с этим делать Ленивый субботний тред, поехали

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

У Kotlin/Android 4 главные проблемы: Время сборки, на больших проектах ощущается как медленно или очень медленно IDE количество фризов при использование проектов с Kotlin значительно больше

Размер поставляемого APK серьезно увеличивается при росте доли Kotlin кода в проекте Образование, Kotlin сложно стандартизировать внутри компании, объяснить как именно компания пишите на нем. Непросто найти баланс между "Jotlin" и идиоматическим языком

Давайте теперь пройдемся по каждой

Что важно понимать? Чем легче вам писать код на языке программирования, тем сложнее его разрабатывать. Синтаксический сахар - это ночной кошмар компиляторщиков.
notion image

Время сборки. Очень хорошо про трудности с которыми можно столкнуться написал @abreslav blog.jetbrains.com/kotlin/2020/09…

На небольших проектах вам будет комфортно, но как только речь заходит о 100+ модулях проблема уже дает о себе знать.

Чем крупнее компания, тем больше она вкладывала денег в ускорение сборки своих Android/Java приложений. А это значит, что kotlinc соревнуется вовсе не с javac, а с javaс на стероидах
notion image

Что же делать 1? Ждать новый компилятор с поддержкой IR. Очень хочется посмотреть как в цифрах будет выглядеть “really fast” blog.jetbrains.com/kotlin/2019/12…

Что же делать 2? Следить за релизами Gradle. Версия 6.8 обещает существенные улучшения для kts скриптов, особенно, если у вас нет ABI-изменений docs.gradle.org/6.8/release-no…

Что же делать 3? Искусственно дробить приложение на модули для ускорения билдов. При этом разработать roadmap с планом как же эту модулярность побороть, когда внутри Kotlin всё улучшат

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

IDE. Android Studio - это, пожалуй, первое приложение, которое заставило мой мак эмитировать звук взлетающего самолета. Лучший тревел экспириенс этого года 🛫

Большое количество фризов исчезает при переходе на Kotlin IDE Plugin на базе Kotlin 1.4. 1.4 - очень хороший релиз, на мой взгляд - своевременное решение притормозить выпуск новых фичей и заняться техническими проблемами

Некоторые IDE плагины, даже очень популярные, грешат тем, что ждут чего-то в Main thread. Такие фризы обычно просто поймать. Удаляем плагин, пишем багрепорт, а там как пойдет

Мой любимый источник фризов это jetbrains.com/help/idea/touc… Мало того, что топовый Мак нельзя купить без Touch bar, так тут тебе и второй сюрприз. Можно ли выпустить версию IDE, где весь код для поддержки Touch bar был бы убран?

Экосистема Kotlin становится сложнее с каждым годом: JVM, JS, Native, Script, Multiplatform. Каждая платформа значительно усложняет код IDE. В идеале, мне бы хотелось видеть разные билды IDE под каждую платформу. Чтобы гарантированно тратить CPU на важные задачи

Справедливости ради отмечу, что Idea Community у меня работает без нареканий с личными проектами на Мак'2012. Даже индексирование быстрое

Коллеги совсем недавно записали подкаста про Kotlin Adoption у нас. 50 минут, почти без воды, рекомендую pca.st/mst29xkj

Промышленная разработка всё больше уходит в Language Server Protocol и Remote Build Execution. Если RE можно сделать без какой-то привязки к IDE, то LSP должен быть ее частью, а это совершенно другой уровень инвестиций. Хорошая поддержка LSP делает VS Code серьезным конкурентом

Passive aggressive cooling system: ice bags help when your laptop can't handle combo of a heath wave in London, running a few IDEs and building big apps https://t.co/2NOWkNcQ7l
Этим летом разрабатывать Facebook было особенно сложно, Лондоне накрыла жара +32. Мой коллега даже обкладывался льдом twitter.com/ruggerprogramm…

Воскресенье


APK size. Мало кто хочет скачивать приложения размером в 200+ Mb, да еще и интернет не всегда стабильный. Исследования показывают, что уменьшение размера приложения на 10Mb увеличивает вероятность его успешной загрузки на 6%. youtu.be/h_Gkl5eAdc4

APK состоит из DEX (Dalvik Executable) файлов, ресурсов и кое-чего другого. Когда все ресурсы пожаты, а APK всё еще огромное пора браться за оптимизацию DEX #apkfatshaming

Тут вам на помощь спешат - ProGuard github.com/Guardsquare/pr… - умеет сжимать Java bytecode - R8 r8.googlesource.com/r8 - оптимизатор от Google - Redex fbredex.com - оптимизатор от Facebook

Решая применить оптимизатор в вашей Android Pipeline хорошо взвесьте все за и против, а лучше обратитесь за помощью к экспертам

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

Про R8 хорошо рассказывает вот это парень @JakeWharton . Если у вас есть время прочитать одну статью - выбирайте вот эту jakewharton.com/shrinking-a-ko…

Я работаю где-то на стыке Redex, kotlinc и Kotlin Compiler Plugins, так что R8 затрагивать дальше не буду.

Посмотрите доклад Chris Sarbora про Redex с Droidcon’17 youtu.be/vtxJvJj6gSE (30 min). Chris, в числе прочего, рассказывает про то как оптимизировать загрузку приложения, особенно на старых девайсах

А еще, замечательный выпуск @insidefbmobile про Redex и оптимизация в целом insidefacebookmobile.libsyn.com/9-android-byte… (40 min)

Ладно, давайте разберемся что же можно оптимизировать в DEX коде, а потом поймем как это применимо к Kotlin и какие там проблемы

Компиляторы или оптимизаторы, делают несколько (десятки/сотни) оптимизационных проходов пытаясь улучшить код по определенным параметрам - в Android это размер приложения и скорость выполнения в runtime. Ваш код меняется до неузнаваемости.

Каждый раз, когда слышу спор о том что лучше i++ или ++i, я быстро покидаю помещение.

Классический трейдофф скорость vs память. Решение довольно простое - ускоряем то, что часто используем. Остальное оптимизирует по памяти. Называется такая штука PGO (Profile Guided Optimization) en.wikipedia.org/wiki/Profile-g…

Одна из самых простых оптимизаций Redex - Bridge Removal Pass. Bridge Method - это такая синтетическая штука, которая создается javac для некоторых generic методов на этапе type erasure. На самом деле, вам такие методы не нужны! docs.oracle.com/javase/tutoria…

Есть оптимизационные проходы, которые убирают недостижимые или неиспользуемые поля, аргументы и целые классы. Они хорошо избавляются от Dead Code
notion image

Еще есть оптимизации, которые делают inline или outline методов. Заинлайниться всё может так, что половину своих методов и даже целые классы вы в результирующем APK не найдете.

В свою очередь Kotlin дал разработчикам Inline методы и классы. И инженеры точно в некоторых случаях будут применять их совершенно без причины, возможно даже мешая оптимизаторам

Kotдin Inline функции - это великолепный костыль на котором держатся две конструкции: Функции высшего порядка, лямбды - вместо создания анонимных классов получают возможность встраивать тело метода. Там есть нюансы с захватом контекста

Reified generics - попытка побороть Java Type Erasure в ограниченном множестве ситуаций. Это своеобразный бунт молодого языка, стоящего на плечах гигантов.

Сегодня великолепный солнечный день, самое время расчехлить велосипед и отправиться на essential sport exercise, единственную активность, которую разрешает правительство во время локдауна, кроме походов за продуктами
notion image

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

Центральный Лондон сегодня - это кадры из картины 28 дней спустя. Вспоминаю как 7 лет назад, впервые приехав сюда, толкался с туристами у всех достопримечательностей, аж мурашки
notion image

Многие писали, что знают меня по курсам “Разработка на Java”, которые читались в Техносфере и Техноатоме. Ретвитните, пожалуйста, если вы смотрели или проходили их! Очень хочу получить обратную связь. youtu.be/Ok81Ue2mu0A

Моя неделя в mobileunderhood заканчивается, так что буду рад фидбеку в личку @lightdelay

Если вы, вдруг, хотите нести добро в сообщество и преподавать, все материалы курса находятся в открытом доступе и распространяются по лицензии MIT github.com/rybalkinsd/atom

В этом году с моим partner in crime Сашей Помосовым мы сделали курс Java as a Second Language для data.mail.ru - это уже более advance материал. Его можно пройти онлайн без преподавателя github.com/JavaAsASecondL…

Лямбда выражения. Если не использовать Inline функции, то наблюдается серьезная регрессия, а чем плохи Inline функции написал чуть выше. Для нейтрализации оверхеда оптимизатору приходится делать агрессивный инлайнинг самостоятельно. InlinePass

Делегирование. Делегаты - это отличный инструмент, но порождает очень много мусорного кода. В 1.4 проблему частично закрыли blog.jetbrains.com/kotlin/2019/12…

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

Data классы. Очень полезная фича, которая избавляет от тонн бойлерплейт кода. Одно слово и вам сгенерят десяток методов. Оптимизаторы отлично справятся с удалением неиспользуемых, за это отвечает DeadCodeElimination. Не переживайте из-за лишних copy или componentN.

А вот из-за лишних hashCode, equals и toString переживайте! Оптимизаторы не умеют в общем случае узнавать используете ли вы переопределенные методы класса Object (Any)

Хотели бы вы иметь в поставке Kotlin компиляторный плагин, такой как parcelize или all-open для решения проблем оверхеда data классов? discuss.kotlinlang.org/t/allow-custom…

Давайте расскажу что-нибудь прикольное про курсы! Курс записывался на 4-ом прогоне, материал мы знали. Но совершенно забыли о дате первой лекции. Примерно за 30 минут до начала нам позвонил куратор и спросил: Всё ли хорошо с аудиторией

Мы с @Nullexander мгновенно выбежали с какого-то рабочего митинга и понеслись в МГУ. Какие-то изменения в репозиторий курса вносили уже в метро, стиль и шрифты поменять забыли Качество первой лекции могло быть в разы лучше, а мы серьезно уронили конверсию youtu.be/Ok81Ue2mu0A

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

Совет 2. Очищайте историю браузера (используйте отдельный) перед каждой лекцией не повторяйте ошибок коллег youtube.com/watch?v=WfIS-0…

Совет 3. Powerpoint/Keynote чрезвычайно плохой инструмент для коллаборации над слайдами. Мы использовали инструменты для преобразования кода в слайды. Сначала GitPitch gitpitch.com , а потом перешли на голый revealjs.com

Совет 4. Просите у студентов фидбек! После каждой лекции. Воспринимайте преподавание как проект, в нем есть свои метрики, а ваша задача их улучшать

Совсем забыл! На базе курса по Java мы пробовали запустить курс Kotlin Boot Camp. К сожалению, сразу после первого прогона заказчик решил отказаться от внедрения Kotlin в компании. Материалы тоже в открытом доступе, но они сырые github.com/rybalkinsd/kot…

@mobileunderhood Расскажи, пожалуйста про свою тулзу - kohttp. Были ли какие-то плюсы при трудоустройстве, каково это взаимодействовать с комьюнити и тд? Очень интересно.
У меня, к сожалению, не так много времени осталось. kohttp - это dsl http клиент для Kotlin. Используется в проде Alibaba (по крайней мере при мне использовался) github.com/rybalkinsd/koh… twitter.com/themrfroll/sta…

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

Есть еще много других проблем, я сейчас обкатываю доклад The Dark Side of Kotlin DSL, следите за обновлениями

Если вы не поняли, сегодня я буду твитить пока на меня не подпишется @igrekde

У kohttp есть свои клиенты, проблемы и задачи. Если кто-то ищет себе Kotlin проект, я с удовольствием помогу влиться в нашу команду разработки. У меня, к сожалению, далеко не каждую неделю есть время им заниматься

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

BREAKING. Никто не будет читать книги по Kotlin, если ему нужно уже сегодня на нем решить проблему.

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

Хотелось бы иметь headless линтеры и сигналы Idea, чтобы встраивать их куда-то на свое усмотрение

Всем спасибо! На этой неделе с вами был Сергей Рыбалкин @lightdelay t.me/rylive На меня за это время подписалось много интересных людей, а в начале недели я обещал поддержать фонд starikam.org

Помните, вы можете сделать много хорошего на те самые 400k
notion image

Ссылки