Совсем скоро, 22-23 ноября пройдёт следующий московский DotNext. Программа стала более определенной, поэтому хотелось бы поделиться несколькими наблюдениями про хардкорные и архитектурные доклады.
Во-первых, есть часть докладчиков «без категории». Это те люди, которые сами по себе могли бы заполнить отдельную конференцию. Их имена вы знаете: Джеффри Рихтер, Павел Йосифович и Грег Янг.
Обычно в статьях на Хабре рядом со спикером мы сразу приводим его фотографию. В случае с Джеффри и Павлом случай особый — вы лучше вспомните этих людей по обложкам книг:
Справа — книги Павла Йосифовича. Он известен как автор «Windows Internals», «WPF Cookbook», «Mastering Windows C++ App Development» и пяти курсов на Pluralsight. Если вам вдруг интересен ещё и C++, то Павел недавно выложил видео на YouTube про модель памяти C++. Кроме того, он является известным разработчиком, тренером и спикером, но в этой роли мы его почти не видели — он почти никогда не бывает в России. И вот, Павел — у нас на DotNext. Это большая удача и победа, что всё получилось и он действительно приедет. В своём новом докладе, «Windows 10 internals for .NET developers», он расскажет об интересных внутренних фичах Windows 10, как эти фичи влияют на .NET-разработчиков и как их можно с пользой поставить себе на службу.
Слева — книга Джеффри Рихтера. Мы уже делали с ним подробное интервью для Хабра, если действительно хочется узнать, о чём думает человек, задающий направление развития Azure, — вам туда. Джеффри — серийный создатель классических книг. Обретя популярность ещё в начале 90-х благодаря книге о программировании Windows 3.1, он не остановился. Следующая большая книга, «Programming Applications for Microsoft Windows» стала классикой, позже издавалась как «Windows via C/C++» и выдержала несколько изданий. То же случилось и с «CLR via C#». Люди до сих пор спрашивают, когда будет следующее переиздание «CLR via C#» (если вас это тоже интересует — приходите на конференцию и спросите сами!). Сейчас он Partner Software Architect в Microsoft, работающий по направлению Distributed Cloud Apps & Storage и тащит за собой в светлое будущее всю платформу. Очень советуем сходить на его «Building responsive and scalable applications», доклад про эффективное использование облачного железа — от человека, который знает об этом всё.
Что касается Грега Янга, у него нет каких-то особо громких книг. Он «всего лишь» изобретатель термина CQRS, один из самых известных и знаковых деятелей в этом направлении. Как вы уже, наверное, догадываетесь, в CQRS всё совершенно не так просто и понятно, как кажется с первого взгляда, и Грег — тот самый человек, с которым можно всё это обсудить. Если хочется посмотреть, что рассказывает Грег,— он моментально ищется на YouTube, он когда-то писал на CodeBetter, и если посмотреть на амазоне книги по CQRS, то именно ему доверили написать введение к книге «Exploring CQRS and Event Sourcing» за авторством директора Splunk.
Хардкор
DotNext зарекомендовал себя как конференция, на которой раз за разом появляются ведущие спикеры, раскрывающие сложнейшие специальные вопросы. Есть несколько тем, которые превращают почти любой доклад в хардкор, например, обеспечение максимального перформанса и детали реализации сложных технологий.
Низкоуровневые подробности
Мы уже поговорили о Джеффри Рихтере и Павле Йосифовиче. Но это не всё! Давайте посмотрим, что для нас приготовили Raffaele Rialdi, Chris Bacon и Егор Гришечко.
Ну что, давайте зайдём с козырей, вы когда-нибудь хотели написать свой .NET-рантайм? А получилось? У Chris Bacon получилось сделать экспериментальный проект DotNetAnywhere, действительно совместимый рантайм с поддержкой таких вещей, как многопоточность, PInvoke, сборка мусора и так далее. Именно этот его проект использовался для построения фреймворка Blazor, который позволяет запускать .NET прямо в браузере с помощью технологии WebAssembly. (Кстати, доклад про Blazor делал Никита Цуканов, видеозапись есть на YouTube). В общем, на этом DotNext будет «So you want to create your own .NET runtime?» — весьма гиковский и необычный доклад про написание рантайма.
Перейдём к более практичным темам. Если вы бывали на DotNext, то должно быть, уже знакомы с Рафаэлем Риальди и темами, на которых он специализируется. Если нет — сейчас самое время ознакомиться!
В этот раз Рафаэль приедет с новым докладом «Boosting memory management in interoperability scenarios». Вы могли заметить, что появились новые API Span<T>
и Memory<T>
, и теперь можно иметь доступ к неуправляемой памяти, не занимаясь бессмысленными копированиями в управляемые объекты. Рафаэль по ходу доклада собирается забуриться в эти API, показать детали на практически интересных примерах вроде IoT, и что всем этим может заниматься простой смертный в повседневной деятельности.
Недавно в свежих версиях языка появились ValueTask, task-like типы и IValueTaskSource. Многие даже не знают о том, что эти типы существуют, а большинство из тех, кто знает об их существовании, не понимает, зачем они. Егор Гришечко в докладе «ValueTask: что, зачем и почему» расскажет, что это за новые средства, для чего они и когда их использование обосновано, а когда нет.
Максимальный перформанс
Почти все доклады так или иначе касаются перформанса, пусть даже вскользь. Это особенность работы разработчиком. Но некоторые хочется выделить специально, это доклады четырех спикеров:
- Konrad Kokosa
- Егор Богатов
- Евгений Пешков
- Alexandre Mutel
Мы уже видели доклад про собственный .NET-рантайм. А что насчёт собственного GC? Нужно ли нам будет патчить ужасный файл размером два мегабайта генерённого C++ кода? К счастью, нет. В .NET Core 2.1 добавили новую фичу под названием Local GC, позволяющую полностью заменить стандартный сборщик мусора чем-то самописным или наоборот — использовать стандартный сборщик вне обычной среды .NET. В докладе «Make your custom .NET GC — «whys» and «hows»» Konrad Kokosa познакомит нас с тем, как всё это делается. Интересно и полезно это будет в основном тем, кому хочется глубже разобраться с управлением памятью и поведением GC. Основная суть доклада не столько в том, что вот вы пришли домой с конференции и сразу перевели прод на самописное нечто. Скорее, это крутой вдохновляющий доклад, расширяющий представление о границах возможного. Вы не обязаны этого делать, но теперь есть возможность экспериментировать. GC все меньше кажется непонятной вещью в себе и всё больше ложится в руку как удобный и послушный инструмент.
Но GC — это только начало. В последнее время во многих рантаймах стало популярным давать пользователю доступ до генерации SIMD-инструкций процессора, таких как SSE и AVX. Например, в JS добавили (и убрали) SIMD.js, в Java этим занимается проект Panama и так далее. Не обошла эта мода и .NET. Нам дали суперсилы, но они таковы, что недостаточно их иметь — нужно ещё уметь ими пользоваться, и это сложно. С одной стороны, контроль на таком уровне требует огромной мотивации и квалификации: чтобы написать векторный код, который превзойдёт по перформансу скалярный, нужно напрячься не только с вещами вроде выравнивания, но и следить за конкретными наборами инструкций, думать о результате генерации и вещах, которые происходят, если сойти с быстрого пути. С другой стороны, если ты пишешь действительно максимально перформансное приложение и экономишь каждый такт, то можно встретиться с тупостью даже наиболее совершенных компиляторов. Даже такая сравнительно изученная проблема, как аллокация регистров, является NP-полной (раз, два), требуя вмешательства человека, и непохоже, чтобы ситуация с SIMD была чем-то лучше.
В этом году Егор Богатов приезжает с новым докладом «Оптимизации внутри .NET Core», в котором расскажет, как генерить SIMD из высокоуровневого кода. С Егором мы скоро выпустим развёрнутое интервью на Хабре. Сейчас хочется сказать, что Егор работает в Microsoft, специализируется на Mono и .NET Core, и на DotNext выступает с докладом не в первый раз. Держите парочку предыдущих записей:
Егор очень интересуется созданием компьютерных и мобильных игр, в которых как раз можно все эти оптимизации применять. Недавняя история с только что вышедшей Assassin's Creed Odyssey это подтверждает: разработчикам пришлось в минимальных системных требованиях указать процессоры с поддержкой AVX/SSE 4.1, даже несмотря на уменьшение клиентской базы (это процессоры Intel 2nd gen: Intel Core i5-2400 и выше, которые раньше назывались Sandy Bridge и которые есть далеко не у всех).
Если пример самой продаваемой игры вас не убедил, то точно убедит Alexandre Mutel. Это второй спикер, с которым у нас будет развёрнутое интервью для Хабра. Он работает в Unity Technologies, компании, создающей один из самых популярных игровых движков, Unity. (Кстати, они недавно открыли на чтение код С# части). Alexandre точно знает, что существует такой критичный код, с которым обычный C# всё-таки не справляется. Поэтому они изобрели специальный «burst» compiler: он превращает ограниченное подмножество C# в оптимизированный нативный код с помощью LLVM, что позволяет добиваться производительности, сравнимой с C++, а иногда даже быстрее. Как сгенерировать код лучше, чем RyuJIT? Какое подмножество C# имеет смысл для написания сверхбыстрого кода? Эти и другие вопросы будут рассмотрены на докладе «Behind the burst compiler, converting .NET IL to highly optimized native code by using LLVM» — вы точно не захотите пропустить это!
Хотелось бы закончить описание этой категории чем-нибудь таким, из чего можно мгновенно извлечь непосредственную пользу. Судя по всему, на эту роль отлично подходит «Системные метрики: собираем подводные камни». Евгений Пешков из компании Контур расскажет, как одолеть метрики: чем они между собой различаются, что делать с перформансными проблемами в Process
и PerformanceCounter
, как вообще внутри устроены Performance Counters и что из этого следует и так далее.
Предыдущий доклад Евгения, «Особые исключения в .NET», на конференции DotNext Piter 2018 занял второе место. В нём рассматриваются особенности каждого типа исключений, например, StackOverflowException
, ThreadAbortException
, AccessViolationException
и OutOfMemoryException
, которые возникают при ошибках на уровне операционной системы или рантайма.
Best practices и архитектура
После наших анонсов иногда может создаться впечатление, что DotNext — это какой-то сплошной хардкор для низкоуровневых разработчиков. На самом деле, в программе достаточно и других категорий. Внимательно взгляните на программу — рядом с большинством докладов есть тэги. Выбирая, на какой доклад дальше идти, обращайте на них внимание. Хардкор — это тэги про перформанс и детали работы компилятора, рядом с ними стоит говорящий значок с «козой». Но взгляните, сколько есть общечеловеческих тем, которые можно применить прямо сейчас!
Между тем, найти отличные доклады, посвященные «хорошим практикам» и «архитектуре» — очень сложная штука. То, что одним кажется гениальной идеей, для других звучит как полный бред и наоборот. У докладчика в компании сделали определённую архитектуру систему, а у нас — по другому? И что, что это может значить? К счастью, существует набор тем, которые можно обсуждать не только из соображений вкусовщины.
Best practices
Во-первых, это области, в которых очевидно творится беда. Каждый раз, когда вы летите на самолёте, хотите послушать коллекцию музыки, и один известный российский облачный сервис говорит — это хорошо, что вы закачали себе коллекцию на встроенный диск и перешли в оффлайн-режим, но нельзя ли проверить лицензию? До проверки лицензии десять километров по вертикали. На следующий раз вы качаете всё во Hi-Res на встроенный диск и собираетесь слушать приложением-плеером. И где-то посредине полёта честно купленный плеер спрашивает — всё хорошо, но я забыл проверить лицензию и докачать кой-чего. Докачаешь через десять километров по вертикали. С точки зрения разработчика это выглядит ещё более адово, ведь многие привычные фреймворки совершенно не подразумевают отсутствия сетевого соединения. В каких-то случаях приходится писать много уродливых вещей типа дублирующего кода для непосредственного и кэширующего чтения. Теперь множим всё это на кроссплатформу и остаемся у разбитого корыта. Или это так кажется вначале? Напишите в комментариях. На DotNext же будет замечательный доклад на эту тему, «Creating airplane mode proof Xamarin applications» от Gerald Versluis, которого вы можете знать по многочисленным выступлениям и блогпостам и парочке книг. Несмотря на название, этот доклад будет интересен даже тем людям, которые не знакомы с Xamarin.
Есть вечные темы, точного ответа на которые пока не найдено, но с каждым годом понимание сильно растёт. Одна из неугасающих битв — TDD vs TestLast. Начнем с того, что много у кого есть проблемы с тестированием вообще, на уровне процессов — в мире deadline driven development особо не развернёшься. Мы даже сделали специальную конференцию про тестирование, Heisenbug. У программистов всё ещё сложней — TDD придумали где-то в 99 году как часть Extreme Programming. Несмотря на всю гениальность, оно так и не захватило мир, чему способствует ряд факторов. В обычной жизни получается даже не Test-First, а самое настоящее Test-Last. У этого подхода тоже есть как преимущества (гораздо проще вписывается в дедлайны), так и ряд очевидных недостатков. Помните нещадно хайпанувшую статью «TDD is Dead» от создателя Ruby on Rails? Она была написана в 2014 году. Прошло 4 года, и маятник не остался на месте. А как вы сами относитесь к этому вопросу? На DotNext будет «Test Last, Test First, TDD: когда применять тот или иной подход» — доклад с говорящим названием от Александра Кугушева. Александр подробно остановится на всех этих подходах и рассмотрит их применимость на конкретных достаточно сложных примерах.
С этим докладом перекликается ещё один — «Pragmatic unit testing» Владимира Хорикова, специалист другого вида, эксперт по спасению огромных энтерпрайзных легаси-проектов. Да, мы не любим об этом говорить, но иногда глупейшие вещи приводят к крушению даже самых прочных, построенных навечно проектов. Один из технических факторов долгосрочного успеха технологических компаний — правильные юнит-тесты. Все мы знаем кучу практик, но на длинной дистанции не все практики одинаково полезны. Это доклад не для новичков — он для тех, кто умеет писать тесты и хочет вывести своё понимание на новый уровень. Кстати, у Владимира есть отличный блог в котором он разбирает самые интересные архитектурные задачи. Чтиво крайне рекомендуемое как начинающим джуниорам для просветления, так и прожжённым сеньорам для систематизации.
В разделе про хорошие практики хочется отметить ещё один доклад — «Как выжить под нагрузкой: отказоустойчивый сервер, умный клиент» Игоря Луканина. Игорь — это человек, который, как представитель компании Контур, побывал почти на всех наших последних конференциях. Мы с phillennium неоднократно брали у него интервью и быстро заметили, что он способен дать глубокий и точный ответ на огромное количество практических вопросов. К интервью с Игорем можно было не готовиться специально — мы задавали ему любые вопросы, и он отвечал практически на всё. Кроме самого главного вопроса: когда ты придёшь к нам на конференцию как докладчик? И вот оно свершилось. В описании доклада сказано просто: «Вы узнаете из доклада, как создавать такие микросервисы и проводить нагрузочное тестирование, чтобы убедиться, что они выдерживают нагрузку». Нет никаких сомнений, что именно так и будет, и это дорогого стоит. В конце концов, инфраструктура Контура — это, наверное, самый крупный продакшн .NET'а в России. В любом случае, вы всегда сможете задать дополнительные вопросы Игорю в дискуссионной зоне.
Архитектура
И вот наконец наша последняя на сегодня категория — архитектура. Многие из нас помнят статью Джоэля Спольского «Don’t Let Architecture Astronauts Scare You». Если не читали — посмотрите, с тех пор особо ничего не изменилось. «Помните, что любители архитектуры обычно решают проблемы, которые они думают, что можно решить. Совсем не те, которые решать полезно» — напоминает нам Спольский. Наши «архитектурные» доклады подбираются на общих основаниях: они должны иметь конкретную практическую полезность, конкретную целевую аудиторию, внятным образом доносить мысли всего за сорок минут, отведённых на доклад. Несмотря на внешнюю простоту таких требований, проходят их далеко не все заявки.
Итак, кто у нас на этот раз? Грега Янга мы уже обсудили в самом начале статьи. Это докладчик «вне категорий», на которого стоит сходить уже просто потому, что это Грег.
Вагиф Абилов (VagifAbilov) приедет с докладом «Жизнь акторов в кластере: зачем, когда и как». Вагиф — известный докладчик и член программного комитета DotNext. Кстати говоря, к докладу участника ПК предъявляются особо высокие требования — это должен быть пример того, как рассказывать хорошие архитектурные доклады. В этот раз будет мощный доклад про акторную модель, Akka и границы их применимости. Будем обсуждать масштабирование и основные шаблоны кластерных решений. Понятно, что можно рассказать больше, но это сложно сделать без спойлеров. Просто приходите на доклад и узнайте всё это самостоятельно. Все решения не являются каким-то полётом мысли астронавта, а проверены на опыте Норвежской вещательной корпорации (NRK).
Вагиф не сразу был членом ПК, а начал как спикер на предыдущих DotNext.
Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало.
В докладе «Быстрорастворимое проектирование» Максим Аршинов расскажет о критериях хорошего кода и плохого кода, как и чем его измерять. Сделает обзор типовых задач и подходов, разберет плюсы и минусы. В конце даст рекомендации и best practices по проектированию веб-приложений. Максим — как вы уже догадались, известный хаброавтор @marshinov. Он соучредитель казанской аутсорс-компании «Хайтек Груп» и кроме ведения бизнеса преподает в Высшей школе информационных технологий. То есть это доклад человека, побывавшего в проблеме «с обеих сторон баррикады»: и со стороны обучения новым технологиям, и со стороны использования в реальном бизнесе.
Ну и наконец, последний доклад в сегодняшнем обзоре. Алексей Мерсон с докладом «Domain-driven design: рецепт для прагматика» раскроет нам суть DDD. Точней, кто не знает — узнает. Кто знает — узнает лучше. Богатый личный опыт позволяет рассказывать Алексею сложные вещи простым и понятным языком.
Напоминаем, что DotNext 2018 Moscow пройдет уже совсем скоро — 22-23 ноября в Конгресс-парке «Рэдиссон Ройал Москва». Билеты всё ещё можно приобрести на официальном сайте конференции.
А еще у наших друзей DevZen Podcast недавно вышел выпуск с ПК DotNext, можно послушать на досуге.
Автор: olegchir