DotNext — Moscow 2016. Как это было
Впервые я побывал на «Дотнексте» весной этого года в Питере. Тогда меня привлекли имена Дино Эспозито и Саши Гольдштейна в списке докладчиков. По книге Дино я когда-то давно осваивал ASP.NET. Pro .NET Performance я не читал, но про книгу слышал исключительно позитивное. Никогда не считал performance своей сильной стороной, а необходимость сталкиваться по работе с оптимизацией производительности стала возникать довольно часто. Вдобавок, на тот момент у меня были смешанные чувства по отношению к .NET Core. Хотелось узнать, что думают другие по этому поводу. Решающим фактором, конечно же, стало желание девушки съездить в Питер на пару деньков. Мы поехали и не пожалели:)
С Москвой все было сложнее — этот город я недолюбливаю примерно так-же, как зиму в России. Решающим фактором на этот раз стали доклады C++ через C#, Моя жизнь с актерами, Squeezing the Hardware to Make Performance Juice и присутствие на конференции сотрудника Stack Overflow. Каждый из них был интересен в практическом плане, так что поездка предстояла не увеселительная, а рабочая.
Открывал конференцию Дино Эспозито и на этот доклад я опоздал. Во-первых, с весны мало чего принципиально поменялось в ASP.NET Core и еще тогда Дино четко обозначил свое мнение на 3 года вперед. Во-вторых, я слежу за .NET Core с пятой беты. Отсутствие SignalR можно пережить, воткнув для соответствующих целей socket.io. А вот EF7 все-еще сыроват.
Ознакомившись с видео-записью, я понял, что ничего не потерял. Стоит отметить, что для тех, кто не следит за развитием .NET Core доклад мог быть полезен, потому что в событиях периода RC1-RC2 действительно можно было потеряться.
Дальше я пошел в 4 зал, потому что портирование плюсов на C# — задача для меня актуальная. Доклад Егора заставил по настоящему зауважать разработчиков Mono за то, какую не тривиальную работу они проделали, не смотря на то, что традиционно Mono принято ругать и хулить, потому что «там баги» и вообще «все криво» и не тот «level of quality», что в Microsoft. В докладе была затронута тема предотвращения утечек памяти при взаимодействии из C# с плюсовым кодом. Если слайды, начиная с 25 го не вызывают у вас вопросов, вы знаете про внутреннее устройство .NET гораздо больше меня. В дискуссионной зоне удалось пообщаться про HoloLens.
Заказывать предварительную версию поиграться — жаба душит, а у Егора девайс есть. Я расспросил о деталях работы с «линзами». Не уверен, будет ли коммерческое применение «линзам», кроме как в визуализации интерьеров. Очень бы хотелось, потому что игрушка прикольная.
После перерыва мне пришлось выбирать между akka.net и Stack Overflow. Желание обменяться опытом и расспросить конкретные факты и цифры про akka.net победило и я остался в 4 зале. В итоге укрепился во мнении, что пора учить F#. Во-первых, функциональная парадигма выглядит лучше для event-driven систем. Во вторых, строки кода — это то, с чем я активно борюсь в последнее время, потому что кода слишком много.
Статистика Вагифа на слайде 83 далеко не в пользу C#. Хорошей новостью для меня стало, что persistent-actors вполне себя работают. Мы с момента беты не рисковали связываться. Уже за рамками доклада в дискуссионной обсудили перспективы akka streams. В России «Аккой» занимается не так много людей, поэтому обмен опытом был крайне полезным. Стоит отдельно отметить, что этот доклад был однозначно самым «творческим». Около 3 минут заняла песня, посвященная акторной системе. По-моему свежо:)
Следующий доклад меня, к сожалению, разочаровал. Показалось, что времени охватить многопоточнось с уровня процессора до .NET Framework, просто не хватило. Информации и цифр было много, но в итоге осталось ощущение недосказанности: что делать с этой информацией, на что обращать внимание, с какими проблемами можно столкнуться в «реальном мире»? Возможно, я просто стал заложником своих ожиданий. Не смотря на общее ощущение понравилась часть, посвященная ключевому слову lock. Деталей реализации (слайд 37), озвученных Гаелем, не попадалось на глаза в интернете/литературе. Мне казалось, что lock сразу переходит к шагу 3: «Create kernel event and wait».
Зато доклад Карлена, наоборот, оказался неожиданно ярким. Возможно, этому способствовала манера изложения спикера, которая мне очень понравилась. Я не фанат разглядывания ассемблерных листингов. Здорово, что кто-то может за тебя замерить производительность разных методов .NET и объяснить почему происходит именно так, а не иначе. Принято считать, что виртуальные методы — медленные. Карлен очень доходчиво продемонстрировал, что это не так. Посмотрите слайд 37, спорим, удивитесь. Вообще было много деталей про отличие классов от интерфейсов, реализации дженериков. Информация очень полезна для разработчиков библиотек.
Дальше — лучше. История о том, как Stack Overflow разрабатывала поиск по тегам — просто шедевр. Удалось осветить в одном докладе темы оптимизации БД, full text search, неожиданные детали GC, особенности параллелизации и работу с CUDA. И все это на реальном примере сайта, которым мы пользуемся чуть ли не ежедневно. Для меня — это, однозначно, лучший доклад на прошедшем «Дотнексте». В слайдах есть ссылки. Информация доклада описана так-же в интернете. Всем, кому нужен поиск в больших БД — абсолютный must read.
К концу конференции я стал уставать от обилия низкоуровневых деталей. Доклад Гольдштейна тоже не оказался простым. Казалось бы SIMD — это больше для геймдева и физики, математики. Но опыт Stack Overflow подсказывал мне, что может быть по-всякому. В любом случае, просто знание этой информации, может очень сильно помочь в принятии верных технологических решений. Один мой знакомый, занимается робототехникой. Большая часть софта — на плюсах по причинам производительности. Когда они начинали никто всерьез не рассматривал Java или C# в качестве платформы. Раньше я разделял такую точку зрения. Доклады Марко и Саши заставляют задуматься, а так ли это на самом деле?
Финальный доклад я тоже почти целиком пропустил, потому что общался с представителями RavenDB. Решил, что нужно обязательно посмотреть запись их доклада: судя по всему, ребята проделали большую работу в четвертой версии.
Понравилась идея map/reduce-репликаций в реляционное хранилище. RavenDB 4 еще в альфе, конечно, и в продакшн использовать рано. Но, если все действительно так хорошо, как говорят разработчики, то RavenDB сейчас — одна из наиболее привлекательных БД для рефакторинга legacy .NET-систем на NoSQL-хранилище (там где это действительно нужно, конечно).
Резюме
Описывать стенды спонсоров и обед мне не интересно. Спонсоры — предлагали работать у них или о своих продуктах. Обед был без очередей и задержек — все четко.
Так как поездка была рабочей, оцениваю я ее в терминах ценности полученной информации. Не смотря на высокую стоимость участия, думаю, что ездить нужно. В первую очередь, потому что можно задать интересующие тебя вопросы.
С этим, кстати, есть не совсем явная проблема: не с конференцией, а публикой. Некоторые доклады были на столько специфичными, что находилось всего несколько смельчаков с вопросами. У какого числа программистов в России есть доступ к самым новым процессорам и возможность проверить, побенчмаркать разные архитектуры? Вот тупит branch prediction в маленьких циклах на Haswell, а на Ivy Bridge — нет. Кто действительно полезет переписывать алгоритмы, чтобы вставить в них SIMD?
Если лет 5 назад я считал, что нет широкого рынка таких задач, то сейчас ситуация меняется. Не видим мы взрывной рост частоты процессоров и наращивание ядер, а значит, скоро придется снова оптимизировать алгоритмы. А знать как оптимизировать нужно уще сейчас.