Как должна выглядеть .NET-конференция в 2016-м, когда в .NET-мире происходит тектонический сдвиг? Очевидно, что (ASP).NET Core очень сильно скажется на жизни разработчиков, но для большинства из них это произойдёт лишь спустя ощутимое время. О чём в таком случае рассказывать — масштабных новшествах, которые станут актуальны позже, или более привычных темах, которые важны здесь и сейчас?
Петербургский «Летний фестиваль разработчиков», состоящий из трёх конференций подряд, начался с DotNext 2016. Как там была разрешена возникшая дилемма, и как вообще прошёл DotNext? По снимку команды организаторов видно, что при всей хардкорности мероприятие не обошлось без летнего настроения, а все остальные подробности — под катом.
Сложно ожидать, что самой запоминающейся деталью на открытии конференции станет название задачи волонтёра, но здесь произошло именно так. Программный директор Андрей Дмитриев, говоря о том, что спикеры после своих докладов отправляются в «экспертную зону» (где отвечают на вопросы заинтересовавшихся зрителей), уточнил, что для задачи «отвести спикера после доклада» у волонтёров даже есть специальная роль. И называется она так: «буксировщик докладчика».
Звучит забавно, но в то же время момент показательный: это отвечает на вопрос «зачем ходить на конференции, когда можно и в интернете всё узнать». Возможность задать вопрос в кулуарах всегда была преимуществом личного присутствия, а когда для этого ещё и созданы все условия, с выделенной экспертной зоной и досками для иллюстраций, можно получить от мероприятия ещё больше.
После открытия был keynote от Дмитрия Сошникова (Microsoft) «Сколько жизней у .NET». Начав с ностальгии (на экране появился даже код на COBOL) и дойдя до будущего (вроде локальных функций в C# 7), в процессе он устроил шоу: с помощью Microsoft Band измерял свой пульс («тут резко упал, обычно это говорит о смерти докладчика, но не в этом случае»), а с помощью Microsoft Cognitive Services распознавал собственные эмоции по выражению лица («счастливым у меня лучше получается быть, чем печальным»).
Часть выступления была посвящена «развенчанию мифов о Microsoft». Неудивительно, что евангелист компании отстаивал её правоту в спорных вопросах, но его аргументы понравились залу. Например, оспаривая тезис «Microsoft заставляет разработчиков постоянно переучиваться», он покорил аудиторию фразой «Не Microsoft такой, жизнь такая» (смех смехом, но не поспоришь: переучиваться не приходится только там, где нет прогресса). А затем добил слайдом «Тем временем в параллельной вселенной», на котором были просто перечислены популярные JavaScript-фреймворки: по сравнению с этим постоянно меняющимся зоопарком .NET-мир и впрямь может выглядеть тихой гаванью.
Затем всё разделилось на разные залы, и тут стало ясно, как революционность и повседневность могут сосуществовать в рамках одной конференции: им попросту были отданы разные треки, так что каждый пришедший мог выбрать для себя, что ему важнее.
С главной сцены англоязычные спикеры (Морис де Бейер, Дино Эспозито, Адам Ситник) говорили о том, что для .NET-мира означает переход к (ASP).NET Core. Получился зал для тех, кто хочет уже сегодня быть готовым к вызовам завтрашнего дня.
Третий зал поначалу оккупировали спикеры от JetBrains с серией докладов о своей новой IDE Rider (недавно они уже вкратце рассказывали нам о ней, а тут смогли поведать детальнее). Поскольку проект ещё не дошёл до релиза, получалось тоже про будущее, но более близкое. Благодаря Early Access Program при желании его уже можно использовать, а в числе первых пользователей есть сами JetBrains, использующие Rider для разработки Rider. Это объясняет, почему их продукты так любят: можно ли эффективнее мотивировать разработчика совершенствовать продукт, чем когда он на собственной шкуре ощущает любые недостатки?
А во втором зале в это время были доклады о кодогенерации, оптимизации и динамическом прототипировании — то есть речь шла о том, от чего можно получать практическую пользу здесь и сейчас, не дожидаясь светлого будущего.
Любопытно, насколько по-разному звучали доклады о ASP.NET Core. Морис де Бейер спокойно констатировал факты: .NET в его привычном виде перестал соответствовать запросам времени, так что теперь всё станет модульнее и кроссплатформеннее (неудивительно: когда Azure стал много значить для Microsoft, жёсткая привязка к Windows начала мешать получать клиентов).
А вот Дино Эспозито использовал на всю катушку свою саркастичность, описывая ситуацию «Microsoft сначала устраивает революцию, а уже затем внезапно задумывается, какие проблемы возникнут у лояльных клиентов с legacy code». В его исполнении гипотетический диалог о миграции крупного проекта выглядел так живо, что зрители отлично поняли суть последней реплики, которую он изобразил беззвучно:
— Сколько нам потребуется вложить?
— Миллион долларов и год работы.
— А ради чего?
— Чтобы делать то же, что сейчас.
— …!
Внезапные перемены на стадии release candidate действительно выглядят странновато. Но это не означает, что Microsoft делает плохой продукт, и Дино такого и не говорил. Он заявлял только, что до стадии «по-настоящему подходит для продакшена» дело дойдёт лишь через пару лет. Как он ехидно заметил в конце выступления, «это хорошо сочетается с общей политикой Microsoft: их продукты не стоит использовать до третьей версии». Судя по громкости смеха в зале, для очень многих из собравшихся Windows когда-то началась с 3.x.
Эспозито сменил Саша Гольдштейн (Sela Group) с выступлением про PerfView. Это был уже третий подряд доклад на английском языке, а всего за день таких в главном зале оказалось целых пять: на этой конференции можно было не заскучать, даже вообще не зная русского. Как показали отзывы зрителей об докладе Гольдштейна, многие извлекли для себя практическую пользу, впервые ознакомившись с инструментом и сразу же захотев применять его.
А позже в другом зале он выступал с темой «The C++ and CLR Memory Models», и в этом случае отзывы оказались ещё восторженнее: многими была отмечена способность «говорить просто о сложном». В результате в топ-10 докладов DotNext (согласно зрительским оценкам) один и тот же докладчик взял и «золото», и «бронзу»:
- Sasha Goldshtein — The C++ and CLR Memory Models
- Dino Esposito — ASP.NET Core 1.0: Challenges and Opportunities
- Sasha Goldshtein — PerfView: Measure and Improve Your App's Performance For Free
- Андрей Акиньшин, Юлия Цисык, Анатолий Кулаков — Поговорим про арифметику
- Дмитрий Сошников — Сколько жизней у .NET: размышляем о судьбах любимой платформы
- Сергей Щегрикович — ETW для .Net разработчиков
- Игорь Чевдарь — Кодогенерация для оптимизации
- Дмитрий Иванов — Реактивное многопроцессное взаимодействие: JetBrains Rider Framework
- Игорь Лабутин — Диагностируем WCF
- Виталий Баум — Практические примеры создания Микросервисов
Тем временем во втором зале Ромуальд Здебский (Microsoft) говорил об играх, и возникал вопрос «насколько доклад актуален конкретно на этой конференции». Здебский использовал эффектные видеоролики новейших игр вроде Deus Ex: Mankind Divided, но это AAA-тайтлы, большой геймдев, крупные западные компании — а мог ли что-то извлечь для себя обычный российский .NET-разработчик? Как оказалось, мог.
Во-первых, доклад обращал внимание на то, что несложные игры (например, 2D) можно делать с помощью Xamarin — так что можно пробовать сделать что-то сразу для всех мобильных платформ, при этом не сталкиваясь с высоким порогом входа. А во-вторых, говорилось, что даже в более амбициозном проекте можно срезать углы: взяв движок Unity и купив модели в официальном магазине, создать полноценную игру без осваивания многих вещей.
Мимоходом было упомянуто решение Microsoft открыть платформу Windows Holographic (используемую в HoloLens). Прямо сейчас это на разработчиках не сказывается, но в перспективе новость хорошая: если рынок VR/AR окажется большим, то будет здорово писать код сразу для большой пользовательской базы AR-устройств от разных производителей. Кстати, в перерывах конференции можно было оценить перспективы VR/AR на собственном опыте и вестибулярном аппарате: аттракцион с DK2-версией Oculus Rift без дела не стоял.
Послеобеденный доклад в главном зале, хотя был совсем не о Core, тоже оказался в формате «вряд ли необходимо вам для текущего проекта, но вообще-то знать стоит». Андрей Акиньшин (JetBrains) представлял паззлеры, связанные с арифметикой, и открывал залу новое в, казалось бы, самых базовых операциях. Первый пример, «Write(0.1 + 0.2 == 0.3);», вряд ли удивил многих тем, что ответом оказалось false (широко известно, что операции с плавающей точкой подкидывают такие сюрпризы). Но вот дальше поводов ошибиться возникало много — например, оказывалось, что вроде бы очевидное выражение приводит к неожиданным результатам в специфической конфигурации. А как по-вашему, какой из вариантов верен вот здесь?
Затем два доклада подряд — от Никиты Цуканова (ProMarket) и Мориса де Бейера — были посвящены Docker. Как заметил Морис, название проекта и логотип выбраны крайне удачно: аналогия с погрузкой контейнеров на морские суда отлично объясняет его пользу. Когда-то на корабли всё грузили «как есть» (например, отдельными бочками), и это приводило к «проблемам совместимости»: как расположить их так, чтобы влезло как можно больше, и при этом всё не грохнулось? С появлением транспортных контейнеров строго фиксированного размера, гарантированно совместимых друг с другом, жизнь заметно упростилась, и погрузка кораблей стала гораздо эффективнее. Docker позволяет добиться примерно того же.
А Цуканов, перечисляя окружения для деплоя, обращал внимание на то, что потребность в кроссплатформенности начинается уже внутри команды разработчиков: «фронтэндщики сидят с джаваскриптом за своими макбуками, они эту нашу винду в гробу видели». Сразу хотелось дождаться HolyJS и услышать, будут ли в своих докладах упоминать Docker сами «фронтэндщики с макбуками».
Наконец, в последнем слоте был доклад Романа Неволина (WaveAccess) о машинном обучении. Здесь, как и в случае с докладом об играх, возникал вопрос «релевантно ли это для аудитории»: пусть за этим будущее, но имеет ли это значение конкретно для собравшихся? И здесь докладчик также объяснял, что имеет: круг задач, для которых машинное обучение может пригодиться, довольно широк, а порог входа ниже, чем можно предположить. Чтобы не быть голословным, Неволин демонстрировал его применение — например, для такой насущной задачи, как распознавание спама в потоке входящих сообщений. Особенно запоминалась фраза «метод научного тыка — это основа машинного обучения, он спасёт нас».
По словам Романа, машинное обучение прежде всего полезно в таких случаях:
1. Когда алгоритм трудно описать в коде, но легко объяснить человеку.
2. Когда пытаешься предсказать изменения (например, курсы акций).
3. Когда алгоритм должен совершенствоваться за счёт накопления данных.
Любопытно узнать в комментариях: в том, над чем вы работаете сейчас, приходится ли сталкиваться с задачами, которые подпадают под эти описания и в которых машинное обучение могло бы помочь?
На этом конференция закончилась (тех, кому хочется ещё, ждём в декабре на московском DotNext). Зато не закончился «Летний фестиваль разработчиков»: впереди оставались Mobius о мобильной разработке и HolyJS о JavaScript, и о них расскажем в следующих текстах.
Автор: JUG.ru Group