В .NET-мире есть беда с пониманием рантайма. Ведущие разработчики крупных .NET-компаний, безусловно, понимают общие принципы работы GC, JIT-компилятора, аллокатора и других компонент. Но даже они признают, что не знают деталей. Отсутствие внятных технических докладов о CLR (и зарубежных и русскоязычных) от инженеров Microsoft порождает ненужное брожение в умах девелоперов. Закрытость информации порождает нажелание лезть вглубь. Всё равно фиг узнаешь, что там майкрософтовцы понаписали.
Осознав эту проблему, в апреле этого года мы вместе с компанией JetBrains провели конференцию .NEXT 2014 Piter, посвященную техническим аспектам программирования на .NET. Послушав некоторые доклады и вволю наобщавшись с людьми в кулуарах, я и сделал вывод, о котором написал выше. Под катом я расскажу о деталях прошедшей конфы и о том, на какие мысли они меня навели.
Идея новой конференции
Вот уже два года как я занимаюсь организацией разных технических ивентов. Получается неплохо — вроде народ доволен. Специализируюсь я на Java-ивентах: митапы Java User Group и конференции. В Java-стеке (и в том числе в Java-организации внутри Oracle) я проработал несколько лет, и поэтому неплохо понимаю, что происходит в Java-мире.
Около года назад парни из JetBrains пришли к нам с такой мыслью: мол, раз у вас так неплохо получается делать ивенты по Java, давайте сделаем совместный ивент и для дотнетчиков. Моя дотнет-практика до той поры ограничивалась годовым курсом в питерском универе и небольшой стажировкой в одном из стартапов в конце двухтысячных. Тем не менее, идея показалась интересной: во-первых, посмотреть на мир .NET и понять, что у вас, ребята, нынче творится. А во-вторых, попробовать сделать конфу по технологиям, в которых, как думалось, я мало что понимаю.
Мы готовились два месяца. Самым трудным оказалось собрать докладчиков. В плане спикеров у нас получился сильный перекос в сторону JetBrains: 6 докладчиков из 13 представляли именно эту компанию. Это связано с двумя вещами. Во-первых, наш программный комитет состоял из двоих ДжетБрейнсовцев: mezastel и philipto. Они знали нескольких сильных спикеров из JB, и позвали их в первую очередь. Во-вторых, о конференции мало кто знал. В форму Call-for-Papers мы получили только две заявки. И только один из двух CFP-докладчиков в итоге смог приехать.
Интересно тут вот что. Этот, казалось бы минус, странным образом сыграл непосредственно в день конференции. Во-первых, как выяснилось, именно джетбрейнсовские доклады собирали больше народа. А во-вторых, в рейтинге докладов, собранном из отзывов участников конфы, докладчики из JetBrains заняли первые 5 мест. Вот такой вот перекос.
Открытие
Конфу открывал Дима Нестерук aka mezastel. Немного философии, немного решарпера, немного общих вещей об индустрии, причём не только дотнетовской. Дима прошелся по больным вещам — скорость разработки, классические задачи vs специфические. Плюс много разного от фишечек R# до кодогенерации. Никакого хардкора, классический keynote.
Добро пожаловать в .NET
После Java, в которой всё открыто, мир дотнета кажется очень странным: GC нигде толком не описан, рантайм закрыт, про JIT вообще ничего не понятно. На эти темы существуют какие-то посты в блогосфере, но не более. Даже разработчики ReSharper'а, которые, казалось бы должны знать все детали, иногда теряются в догадках о том, как работает та или иная часть дотнетовского рантайма.
Это показалось странным, и поэтому мы позвали Стаса Сидристого aka sidristij из Luxoft рассказать какие-то куски о рантайме. Судя по отзывам, получилось довольно хардкорно. В отзывах очень чётко прослеживается два тренда: «доклад скучноват, лучше бы блогпост» и «интересно, но не применимо на практике». Иными словами, закрытость CLR приводит к тому, что народ в дотнет-мире не очень привык лезть в дебри, а больше ориентирован на практические вещи. Это было первое важное наблюдение.
Наши джавовские приколы с мясом, расчленёнкой и внутренностями C2-компилятора, которые на ура заходят на наших хардкорных Java-конференциях, тут не прокатили. Нужно ли двигаться в этом направлении, и объяснять дотнет-народу, как важно знать внутренности? Или забить и концентрироваться на тулинге? Вопрос открытый.
А что касается блогпоста — Стас вас услышал. Много хардкора есть в его блоге на хабре.
Об управлении зависимостями
Сергей Шкредов, глава .NET-подразделения JetBrains, нечасто появляется на публике. Тем интереснее было слушать его доклад о том, как они у себя в проектах разбираются с зависимостями. Получился высокоуровневый обзор. Ключевой, на мой взгляд, тезис был озвучен в самом начале: управление зависимости и развертывание приложения — это разные вещи, и смешивать их не стоит. Доклад вызвал оживлённую дискуссию, участники не отпускали его после доклада еще часа полтора — дискуссия продолжалась и в перерыве, и в течение следующего доклада.
Профилирование
Кирилл Скрыган, мой школьный сосед по парте, сделал прекрасный доклад о профилировании и оптимизациями. С одной стороны — это был лучший (по отзывам участников) доклад конференции: техники оптимизации узких мест, асинхронная работа с UI, Memory Traffic и т.п. С другой стороны — у меня было дикое разочарование на фоне докладов Шипилёва и Куксенко из Java Performance Team.
И вот тут надо пояснить. Фокус в том, что Кирилл рассказывает о профилировщиках. При этом, например, весь российский Java-мир давно уже знает, что профилировщик — это не первая, не вторая и даже не третья по порядку утилита, которую нужно открывать, если твоё приложение тормозит. (если кому-то интересно, по мотивам рассказа оракловых инженеров, Игорь Мазница сделал в 2012 году прекрасный Performace Mind Map, который рассказывает о том, куда копать в случае той или иной проблемы).
О чем это говорит? На мой взгляд, о том, что отсутствие хардкорных майкрософтовских девелоперов в России вкупе с закрытостью .NET-платформы сильно бьёт по нашем с вами знанию этих технологий. Именно поэтому мы, на мой взгляд, и слышим чаще и чаще обо всех проблемах озвученных Кириллом.
Что генерится в рантайме из лямбды? Сколько операций боксинга/анбоксинга генерит какая-нибудь неявная операция и сколько мемори траффика возникает в процессе? Что делать со «среднеживущими» объектами в памяти? Как в сборщике мусора в дотнете работают эвристике? Опирается ли он на слабую гипотезу о поколениях и если да, то каким именно образом? Как понять, что тот или иной алгоритм в библиотеках или внутри рантайма изменился (GC, JIT, collections)? Короче, одни вопросы.
Microsoft не осталась в стороне
Ромуальд Здебский рассказал на конференциях о новостях с апрельского Build. Вышло очень забавно: еще за два-три дня до .NEXT он не понимал, о чем ему можно рассказывать, а о чем нет. В итоге он ночью смотрел на идущий параллельно нам Build conference, а днём готовил доклад.
Сначала Рома рассказал о развитии платформы в целом, а потом еще долго отвечал на вопросы в кулуарах. Наш фотограф минут 40 пытался вытащить его на фотосессию, но в итоге забил и побежал фотографировать других докладчиков. Фоткать Рому пришлось позже.
Гигиена памяти от Романа Белова
Самое интересное, на мой взгляд, выступление конференции. Рома был неспавший, у него болел зуб, но он героически преодолел все эти трудности и сделал блестящий доклад о том, какие трудности есть с памятью в современных Managed-средах. Кто-то перезагружает сервера раз в неделю, кто-то избавляется от WPF, кто-то тратит кучу времени на оптимизацию статического футпринта. Рома обо всем этом так или иначе рассказывает и показывает решение, к которому пришли парни из JetBrains.
Итоги
Конференция была однодневной: 2 потока, 14 докладов. Участников было 300 с небольшим. Тематика — сугубо техническая: никакого буллшита карьерный рост, истории успеха, собеседования и прочие гибкие методологии. Нам хотелось посмотреть максимально плотно именно на технологическую составляющую современного дотнет-мира. И это, могу уверенно сказать, нам удалось. Полный обзор докладов и лучшие видео с конфы — на её сайте.
Сюрпризов было два. Во-первых, проблемы, с которыми борется современный дотнет-мир, очень сильно напоминают проблемы, с которым борется современный Java-мир. Это производительность (во всех смыслах этого слова), утечки памяти, тулинг для повышения эффективности современной работы, новости технологий от вендоров, автоматическое тестирование в различной форме, внутренности рантайма, кроссплатформенность. Во-вторых, это закрытость рантайма и, как следствие, отсутствие понимания его внутренностей даже у очень сильных разработчиков. И, как следствие второго уровня, понятие «сильный разработчик» из традиционного Java-мира здесь не работает. Акценты смещены с понимания рантайма на какие-то другие вещи. Какие — мне еще только предстоит разобраться.
Анонс .NEXT в Москве
Совсем скоро, 8 декабря, мы вместе с JetBrains проведём новый .NEXT — и на этот раз в Москве. Снова — технические доклады: никакого буллшита про карьерный рост, истории успеха, собеседования и прочие гибкие методологии. Наверное, на этот раз будет чуть меньше хардкора и чуть больше тулов. Благо, экспертов по тулам у нас в России довольно много.
Три зала, 18 докладов по 60 минут: 40-45 минут на доклад и обязательно 15-20 минут на вопросы-ответы. Вообще, отсутствие нормальной дискуссии из-за затяжек докладов начинает бесить. Будем жёстко останавливать спикеров на сорок пятой минуте, чтобы дать народу возможность задать вопросы :)
Пока что у нас снова перекос по докладам в сторону JetBrains и Microsoft, и именно поэтому мы очень-очень надеемся на читатели. Народ, нам нужны ваши доклады! Для подачи доклада просто заполните форму заявки.
Сайт конференции: dotnext.ru.
Приходите, будет интересно!
Автор: 23derevo