В прошлом году конференция DotNext проходила в Москве один день, а в этом стала двухдневной. Теперь, когда очередной московский DotNext позади, а зрители прислали свой фидбэк, время оглянуться: как всё прошло, и что вошло в увеличившийся хронометраж? Подробности под катом, а для затравки скажем, что слово «performance» оказалось актуально в обоих значениях: и «производительность», и «художественное выступление».
Первым спикером первого дня стал Андрей DreamWalker Акиньшин (JetBrains), представлять которого зрителям DotNext уже не требуется: его доклады каждый раз получают отличные оценки. Но если на предыдущем московском DotNext он рассказывал о такой «общей» теме, как арифметические операции, то теперь о «близкой к продакшну»: тестировании производительности. Недостаточно просто проверить производительность однократно — что делать, чтобы при каждом новом релизе быть уверенным, что она внезапно не просядет? Многие выбирают вариант «ничего», но таких в выступлении мимоходом пожурили.
Понятно, что для самого Андрея эта тема актуальна в связи с его работой над Rider, и, рассказывая о возможных проблемах, он ссылался на опыт проекта: «при переходе с Mono 4.9 на Mono 5.2 ряд наших тестов стал внезапно вылетать по таймауту. Что делать? Говорите, увеличить таймаут? Остаться на старой версии Mono? Нет, это всё нехорошие варианты». И способы справляться с проблемами тоже брал из собственной практики: «у нас есть merge robots, которые при каждом merge автоматически прогоняют тесты, и если они не пройдут, то ничего не смерджится».
Слово «перформанс» в первый день можно было услышать и от других спикеров — скажем, у Карела Зикмунда (Microsoft) оно содержалось прямо в названии доклада «.NET Core Networking stack and Performance». Но внимание к производительности не означает, что больше было не о чем послушать. Например, одним из любимцев публики оказался Дмитрий Сошников (Microsoft): ранее он уже рассказывал на DotNext про AI-решения от Microsoft, но тогда они были ориентированы в первую очередь на Python, а теперь появились более подходящие для .NET-разработчиков, так что его новый доклад об искусственном интеллекте был встречен очень тепло.
Анатолий Кулаков, как и Андрей Акиньшин, порицал подход, когда просто пишут работающий код и не интересуются его дальнейшей судьбой — по его мнению, разработчикам надо понимать, что потом происходит в продакшне, и доклад был посвящён сбору и представлению различных метрик. Из него можно было, в частности, узнать интересные подробности о time series databases, хранящих всё с привязкой ко времени. Поскольку о таких БД слышно реже, чем о реляционных или графовых, на них легко не обращать внимания, считая трендом графовые — вот они, мол, активно растут. Но Анатолий обратил внимание аудитории на то, что вообще-то по темпам роста как раз time series далеко впереди. Конечно, это ничего не говорит об абсолютных цифрах (легко быстро расти, когда ты маленький), но это даёт повод присмотреться внимательнее.
Когда начинаешь собирать и хранить множество данных, встаёт вопрос объёма — и среди прочего Анатолий показывал, как впечатляюще в time series database ужимают информацию вида «timestamp / tags / fields». Для временных меток можно не сохранять каждый раз полное время, а указывать дельту с предыдущим замером — это уже экономит место. А если снимаешь показания через определённые промежутки времени, эта разница оказывается одной и той же, и тогда полезнее дельта второго порядка: она становится вообще нулевой. Благодаря этому всему в Facebook обнаружили, что 96% их временных меток ужимаются до одного бита. С тегами тоже есть куда потесниться: когда количество возможных сочетаний не астрономическое, можно закодировать каждое из них и указывать только код. Хорошо, а что с самими фиксируемыми значениями, которые гораздо непредсказуемее? Практика показала, что даже тут куда экономичнее хранить вместо полного значения его XOR с предыдущим.
Вагиф Абилов рассказывал про потоки Akka Streams — например, о том, как «обратное давление» (backpressure) помогает потокам данных идти с нужной скоростью, используя и pull-, и push-подход. Самым удивительным моментом для многих оказалась концовка доклада, когда Вагиф «для закрепления пройденного» исполнил композицию собственного сочинения «Akka Stream Rap» (там тоже не обошлось без «применения backpressure, чтобы справиться с нарастающим темпом песни»). Зрители реагировали на это в духе «теперь я видел всё, осталось разве что зачитать исходники .NET Core под “Кровосток”».
Но на самом деле в тот момент зрители видели далеко не всё: это выступление было лишь разминкой. После того, как все доклады первого дня закончились, дело дошло до вечеринки, и началось более масштабное шоу. Кроме Вагифа, на DotNext присутствовал ещё один музыкальный спикер — англичанин Дилан Битти, который любит переделывать рок-хиты в песни о разработке. Представление о его творчестве можно получить по этой пародии на Pink Floyd «Another Brick in the Wall (Part 2)»:
Дилан возит с собой на конференции компактную гитару, а Вагиф играет на клавишных, поэтому они решили объединить усилия и устроили совместный performance, исполнив и целый ряд пародий Дилана, и тот же «Akka Stream Rap» Вагифа. Присутствовавшие получили много удовольствия: тот же Карел Зикмунд по ходу действия написал целый ряд твитов, становившихся всё более и более восхищёнными, а позже на YouTube под «Enterprise Waterfall» появился комментарий «мы с тимлидом решили повесить в офисе постеры с цитатами из этой песни».
Когда пародии кончились, перешли просто к кавер-версиям, но даже тут Дилан удивил многих, специально к DotNext разучив русскоязычный припев «Песни для радио» Noize MC. В общем, вечеринка удалась.
Второй день тоже начался с одним из самых любимых спикеров DotNext-аудитории: Саша Гольдштейн говорил об отладке и профилировании .NET Core-приложений под Linux. И об уровне его погружения в тему хорошо говорит фраза из начала доклада: «кое-что из того, что покажу, сейчас держится на написанных мной скриптах, но я надеюсь, что в будущем появится официальная поддержка». Когда спикер недоволен тем, что предоставляет вендор («Microsoft предлагает под Linux создать файл mytrace.zip, а затем скопировать его на Windows-машину и открывать там с помощью PerfView — но ведь у нас под рукой может даже не быть Windows»), и сам доделывает ещё не реализованное, это дорогого стоит.
Из-за того, что ситуация с Linux-инструментами в .NET-мире пока что оставляет желать лучшего, ранее в связи с Linux Саша обратил внимание на Java и даже выступил на нашей конференции JPoint. Забавно, что на DotNext в одном временном слоте с ним оказался спикер с противоположной ситуацией: Егора Бугаенко давно знают джависты, а тут он впервые пробовал себя перед дотнетчиками.
Егор известен тем, что при его появлении всё начинает бурлить: одни бурно возражают его радикальным идеям, другие соглашаются, а третьи говорят «я не согласен, но тут есть повод задуматься». На DotNext он говорил о TDD (эта тема как раз не привязана жёстко к конкретному стеку) — и здесь произошло то же самое. Позиция «зачем писать тесты, когда баги ещё не дали о себе знать» прожгла не один зрительский стул. Вот показательная деталь: когда после конференции зрители присылали отзывы на доклады, в случае с Егором один из отзывов оказался не стандартной короткой репликой, а возражением на три тысячи знаков. Неудивительно, что в дискуссионной зоне, куда каждый спикер отправлялся после своего доклада, Егор тоже услышал немало контраргументов от зрителей. Кстати, эти зоны вообще полюбились спикерам DotNext:
Несмотря на «холиварность» Егора, рекордсменом по проведённому в дискуссионной зоне времени стал Федерико Луиc. И хотя в своём докладе он возвращал всех к теме производительности («Patterns for high-performance C#»), серьёзность темы не помешала ему покорить наши сердца маленьким эффектным жестом. Как известно посетителям наших конференций, всем докладам мы проставляем значки, говорящие об уровне их сложности («введение в технологию», «для практикующих инженеров» и «хардкор»), скажем, у самого Федерико стоял «хардкор». А он взял и использовал эти же значки в самом докладе, продемонстрировав там три других «уровня сложности»:
После обеда на сцену первого зала вышел Дилан Битти — и показал, что в качестве спикера выступает не хуже, чем в качестве музыканта. Он не стал сразу нырять в техническую конкретику, а начал с общих рассуждений о том, как технологический продукт может облегчать разработчику его освоение (давать «поиграться» и пояснять, что произошло не так, вместо простого «не запускается, идите штудировать документацию»). Это стимулирует регулярные выбросы допамина — а благодаря ним разработчик не только получает больше удовольствия, но и лучше всё запоминает.
При этом, по мнению Битти, мы зачастую считаем понятие UX «чем-то для фронтендеров», хотя вообще-то любой написанный нами код потом будет использоваться другими людьми. А значит, у него будет user experience (в частности, та же кривая обучения), и об этом стоит думать. Затем Дилан перешёл к примерам того, что именно можно делать, и в итоге его доклад настолько понравился зрителям, что оценки уступили только выступлению Саше Гольдштейна. Особое внимание привлёк слайд «как на самом деле стоило бы назвать уровни логирования»:
Затем снова появился Гольдштейн, но уже в другой роли: он вёл круглый стол о профилировании и оптимизации с участием других спикеров DotNext — от того же Акиньшина до Сергея Быкова (Microsoft). Отзывы показывают, что такой формат застал многих зрителей врасплох, и возможность задать свой вопрос целой коллегии экспертов была использована не на полную катушку. Но потенциал у неё явно есть, и учтём это при проведении следующих DotNext.
Наконец, завершал конференцию кейноут ещё одного спикера с громким именем, Дино Эспозито. В первый день Дино выступил с более серьёзным докладом «I have a microservices architecture and I didn't know», а тут, когда что-то сложное зрители уже вряд ли смогли бы хорошо воспринимать, позволил себе пофантазировать. Он представил себе «DotNext 2048», проходящий в блокчейновом будущем — в котором, например, спикер Алекс Тиссен вместо своей нынешней темы «serverless computing» рассказывает уже про «developerless computing». Учитывая артистизм Дино, тут тоже получился своего рода перформанс, и без отсылок к известным песням тоже не обошлось (даже название кейноута, «Unchain my heart», взято у Джо Кокера) — так что второй день, как и первый, закрывался очень ярко.
В итоге на конференции было и чем загрузиться по уши, и над чем посмеяться после этого. Два значения слова «performance» хорошо дополнили друг друга, а два дня дали достаточно времени, чтобы влезли и обе этих вещи, и много докладов на совершенно другие темы (от безопасности до Apache Kafka). Но вот в этот текст подробное описание остальных докладов уже не влезет — иначе и читать его вам пришлось бы тоже два дня.
Автор: Евгений Трифонов