Джон Скит о .NET в 2020-м: «Моё главное нарекание — версионирование»

в 8:50, , рубрики: .net, .net core, C#

Джон Скит о .NET в 2020-м: «Моё главное нарекание — версионирование» - 1

Представлять Джона Скита особо не требуется: самый известный пользователь Stack Overflow (с кармой более миллиона), автор книги «C# in Depth», создатель библиотеки Noda Time и вообще человек, про которого шутят «даже Джон Скит не смог бы распарсить HTML регулярками».

В 2017-м Джон выступил у нас на DotNext. Тогда мы опубликовали на Хабре большое интервью с ним о состоянии дел в .NET и C#, где прозвучали громкие слова вроде «потеснит Java», и в комментариях возникли оживлённые дискуссии.

За прошедшие три года много оперативки утекло. Поэтому теперь, когда Джон выступит с двумя докладами на онлайновом DotNext, мы решили задать ему схожие вопросы, чтобы посмотреть, как изменились ответы.

А в качестве бонуса добавили в пост ещё один небольшой разговор со Скитом из онлайн-трансляции DotNext 2017 Piter: тогда его увидели только зрители трансляции, а теперь хабрачитатели получают и видео, и текстовую расшифровку.

Новое интервью: как 2020-й соотносится с 2017-м

.NET в целом

— В 2017-м вы очень оптимистично говорили о перспективах .NET, ожидая рост популярности. А как теперь оцениваете популярность: она превзошла ваши ожидания или не оправдала их?

— К сожалению, у меня недостаточно свидетельств в ту или другую сторону. Я думаю, всё ещё требуется доносить до людей, что .NET теперь кроссплатформенный. Кроме того, в сентябре 2020-го потребуется очень тщательная коммуникация, когда перестанут использовать бренд .NET Core и останется просто .NET 5. Когда пытаешься упростить ситуацию с двумя названиями до одного, но это одно название в некотором смысле новое, всегда сложно добиться ясности для всех. Но я думаю, что это правильный шаг, и в итоге он принесёт пользу.

— В 2017-м из-за .NET Core весь .NET-мир был в переходном состоянии. А теперь, когда пыль улеглась, как вам видится текущее состояние экосистемы?

— Она в отличном состоянии, с ярким будущим. В Microsoft сделали миграцию с .NET Framework на .NET Core настолько прямолинейной, насколько можно было надеяться, особенно с запуском вещей вроде WinForms и WPF на .NET Core 3. Если у вас всё ещё остались «старорежимные» файлы проектов, сейчас хорошее время мигрировать на «SDK-стиль»… он настолько приятнее!

Также упрощают жизнь мелочи вроде reference assemblies, которые позволяют собирать проекты для запуска на .NET Framework, даже если сборка происходит на Linux.

— А есть ли какие-то сложности или недостатки в .NET Core, которые за эти три года не были исправлены?

— Версионирование. Это сейчас моё главное нарекание к .NET, о чём уже известно читателям моего блога. Дело не в том, что в Microsoft не осознают проблему, а в том, что такую вещь очень сложно исправить, особенно на платформе вроде .NET с её статической типизацией. Надеюсь, что в следующую пару лет мы хотя бы получим тулинг, предупреждающий нас о проблемах заранее.

Как раз о версионировании будет один из двух докладов Джона на DotNext: Versioning, and how it makes my head hurt.

— А чего вы теперь ждёте от будущего? Что произойдёт с .NET в следующие три года? В 2023-м проверим :)

— .NET 5 станет большим шагом в смысле совмещения рантаймов. Но при этом я уверен, что нам понадобится долго привыкать к некоторым дополнительным опциям, связанным с AOT-компиляцией и другим.

Думаю, здесь есть деликатный баланс, который требуется осознавать и Microsoft, и всем, кто делает рантаймы: одни люди жаждут новых фич, а другим нужна относительная стабильность развития.

Новые версии C#

В 2017-м Джон охотно делился с нами мыслями о C# 7. Поэтому теперь, когда прошло три года, явно напрашивались вопросы про новые версии языка.

— В прошлый раз вы сказали нам, что глубоко погрузились в C# 7, работая над новым изданием книги «C# in Depth». А насколько имеете дело с C# 8 и планируете ли ещё одно издание книги?

— Мне определённо скоро пора приниматься за новое издание «C# in Depth», где будут рассмотрен C# 8. А учитывая, сколько времени уходит на работу над каждым изданием, дело дойдёт и до C# 9.

Я уже давно использую C# 8 и в личных проектах, и для работы. Применяю совершенно не все фичи — у некоторых вещей вроде дефолтных методов интерфейсов есть требования к рантайму, которые мне не подходят для библиотек, таргетирующихся на старые версии .NET Framework и .NET Core. Но то, что использую, мне нравится :)

— А есть ли у вас в C# 8 любимая фича?

— Разумеется, самая масштабная фича — поддержка nullable reference type, и она безумно полезная. Но тут есть и недостаток: мигрировать на неё проект может быть очень большой задачей. В сравнении с этим иначе выглядит другая из моих любимых фич — switch-выражения. Они никак не меняют генерируемый код, но просто позволяют выразить уже существующую функциональность куда проще. Не могу передать, сколько раз я работал над кодом из «времён до C# 8», и у меня просто руки чесались использовать switch-выражения…

— Что вы в целом думаете про C# 8? Это именно то, что разработчикам было нужно, или вы на месте Microsoft сделали бы всё иначе?

— Как человек, который выступал с несколькими докладами об этой версии, я бы хотел, чтобы в ней было поменьше фич! Просто невозможно покрыть их все хоть сколько-нибудь глубоко в течение одного выступления, даже длинного. Но в целом мне очень нравится.

Есть некоторые «шероховатости», связанные с nullable reference types, но они не означают, что я бы смог предложить что-то лучше — просто есть «рассогласованность» между nullable reference types и вещами, которые мы могли выразить раньше. Что особенно справедливо для дженериков: это вопрос работы с тем, что мы имеем, и принятия того, что язык развивается. Он не всегда в итоге оказывается таким, каким его сделали бы, если бы все требования (и ресурсы) были уже на старте.

— Если вы следите за работой над C# 9, что-нибудь по его поводу думаете?

— Признаюсь честно, не слежу сколько-либо детально. Надеюсь, что в итоге record types вырисуются-таки из тех сложных решений, которые сейчас надо принять команде.

Stack Overflow

В 2017-м Джон упомянул, что его беспокоит качество вопросов на SO: с ростом популярности сайта стали встречаться вопросы, состоящие из полотна кода с припиской «почему он не работает».

— Как за три года изменилась ситуация с качеством вопросов? Стало лучше или хуже?

— Честно говоря, ощущается так же. Возможно, стало чуть лучше, тут сложно дать объективный ответ (это подсказывает, что кардинальных изменений не произошло)… По крайней мере, в тех тегах, за которыми я слежу.

— Со временем что-то меняется и на самом сайте, и в сложившемся там сообществе. Что вам кажется важными изменениями?

— Я думаю, что взаимоотношения сообщества/модераторов и компании изменились в неловкую сторону. Компания теперь очень старается исправить эти взаимоотношения, но потребуется много работы и эмпатии с обеих сторон.

Честно говоря, на самом сайте я особых изменений не замечал. Но знаю, что происходили (и продолжают происходить) эксперименты со страницей «Задать вопрос», и это хорошо. Всё, что мы можем сделать для улучшения качества вопросов без распугивания новичков — это хорошо. К вопросу о новичках: значок «X is a new contributor to this site» мне тоже кажется хорошей мелочью.

— Существует проблема, когда ответ уже устарел, но он помечен как правильный автором вопроса, и на него попадают новые пользователи. Становится ли эта проблема острее с годами, когда всё больше ответов устаревают?

— Я на неё особо не наталкивался, хотя и уверен, что такое бывает. Не удивлюсь, если со временем на сайте появятся обозначения вроде «этому вопросу и принятому ответу уже больше 10 лет — они могут оставаться релевантными, но учтите, что что-то могло измениться».

— Есть ли что-то, что бы вам хотелось, чтобы произошло со Stack Overflow в следующие три года? Что сделало бы его лучше?

— Мне всегда нравилась идея интеграции с документацией. Я бы хотел, чтобы можно было выделить название метода (например, DateTime.SpecifyKind), нажать на хоткей, и сайт по тегам вопроса предположил бы, что мне нужна документация Microsoft, а мне осталось бы только согласиться, и была бы сгенерирована ссылка. А если бы по наведению курсора на эту ссылку появлялось превью документации — ещё лучше.

— А что, по-вашему, произойдёт на самом деле? :)

— Я думаю, будет налаживание связей между компанией и сообществом, и это займёт больше времени, чем всем хочется, и будет менее успешно, чем всем хочется, но ситуация всё же станет лучше. Я уверен, что по-прежнему будут хорошие вопросы, плохо сформулированные вопросы, вежливые пользователи, неприятные пользователи, и так далее. Я буду удивлён, если случится что-то масштабное. Когда платформа устоялась, перемены обычно неспешные.

Джон Скит о .NET в 2020-м: «Моё главное нарекание — версионирование» - 2


Напоследок

В конце предыдущего интервью Джон дал читателям три совета: попробовать Noda Time, побольше внимания уделять документации и способствовать разнообразию (diversity) в технологической индустрии.

— А что хочется посоветовать сейчас?

— Прежние три совета по-прежнему в силе. Пожалуй, я бы ещё предложил думать о версионировании, и стараться быть добрым к другим. Я не хочу сказать, что сейчас читатели недобрые, но я считаю, что сознательно думать об этом почаще помогает нам быть добрее.

— Многие онлайн-дискуссии о diversity выглядят базарными перепалками. Кажется ли вам, что, помимо самих вопросов diversity, есть отдельная проблема обсуждения этих вопросов? У вас получается говорить об этом куда спокойнее — можете ли дать какой-то совет по уравновешенному подходу?

— Проблема тут есть, но она не только с diversity, а с любой острой темой. В последние годы Великобритания ощутила это очень остро в связи с «Брекзитом». Не думаю, что многие люди поменяли свои взгляды (в любую сторону) — мы лишь сильнее укрепились по разные стороны баррикад. Это и со мной тоже происходит. Я бы хотел лучше уметь видеть всё глазами тех людей, с которыми совершенно не согласен. То, что я осознал это в себе как недостаток — уже начало для исправления, но на одном осознании далеко не уедешь.

И по поводу diversity: я нашёл аналогию, которая звучит для людей осмысленно. Прошлым летом я начал играть на ударных. Я по-прежнему плохо играю, хотя и становлюсь лучше — но куда более разительная перемена произошла с тем, как я теперь слышу музыку. Я могу услышать композицию, которую слышал сотни раз, но теперь выделяю партию ударных гораздо более чётко. Это просто пример того, как твой опыт сказывается на взаимодействии с вещами вокруг тебя. И если мы хотим разбираться с проблемами, стоящими перед миром, то нам явно нужно учитывать так много разных точек зрения, как возможно. А это и есть diversity.

— Каким бы вы хотели видеть мир IT в 2023-м?

— Я бы хотел видеть в нём больше человеческого разнообразия, но не думаю, что в этом отношении произойдёт что-то потрясающее. Я был бы рад увидеть более разношёрстную аудиторию на конференциях и встречах юзер-групп. Среди спикеров стало больше разнообразия (прошу, организаторы конференций, продолжайте работать над этим!), но я часто обнаруживаю, что общаюсь с залом, почти полностью состоящим из белых мужчин :(

Я бы хотел, чтобы конференции и юзер-группы по-настоящему вложили усилия в то, чтобы понять, что удерживает женщин и людей с другим цветом кожи от посещения мероприятий. Это очень сложно, потому что люди, которых при этом хочешь услышать — это как раз те, кого услышать сложнее всех… В этом случае каждый из нас может действовать в пределах своей социальной группы. Возможно, встречи юзер-групп во время ланча могут помочь? Могут ли компании помочь? Могут ли юзер-группы делать детский уголок, и помогло бы это или нет?

— А каким мир IT окажется на самом деле?

— В плане технологий я уверен, что мы будем видеть всё большее движение в сторону облаков. Хотя и ожидаю, что это всё чаще будет гибридный вариант: либо сочетание разных публичных облаков, либо сочетание on-prem с публичными. А помимо этого, почти ничего не представляю, но с интересом смотрю в будущее…


Бонус: старое интервью

В 2017-м мы вели на YouTube онлайн-трансляцию DotNext 2017 и брали там у спикеров небольшие видеоинтервью. После конференции видеозапись была переведена в доступ «только по ссылке», но теперь делимся ей с Хабром, разговор с Джоном начинается с 25:30:

А для тех, кто предпочитает читать, вот её текстовый перевод на русский:

— Вы известны и как автор прорвы ответов на Stack Overflow, и как автор книги «C# in Depth», и как спикер технических конференций, при этом у вас есть основная работа разработчика, и, наконец, вы отец и муж. Как вообще возможно совмещать такое количество ролей?

— На самом деле это ещё не всё. Я христианин и являюсь местным проповедником. Также я феминист и состою в британской Women's Equality Party.

Многие спрашивают, как я успеваю сделать так много, и это значит, что они переоценивают, сколько я делаю на самом деле! То, что у меня много ролей, не значит, что я справляюсь с любой из них очень хорошо. Если говорить про мнения людей обо мне, как о разработчике… Я понимаю, что существует синдром самозванца, но скажу серьёзно и искренне: я не такой умный, каким люди меня считают. И я пишу не так много кода, как люди считают.

Как вы уже сказали, я автор «C# in Depth», сейчас работаю над четвёртым изданием. И у меня получается выделять на это час-другой: вот как раз сегодня в самолёте из России в Великобританию я надеюсь получить целых два часа на это, должно получиться несколько страниц. Я постоянно стараюсь впихнуть все эти вещи в свое время. В тоже время, как и все, я лежу перед телевизором с женой каждый вечер. В этот момент чувствую себя виноватым: я должен что-то делать для сообщества, работать или писать. Но потом я чувствую себя слишком уставшим для этого всего и просто засыпаю под телевизор.

Но вот что у меня действительно получается — это быстрое переключение контекста. Я могу ответить на пару вопросов на Stack Overflow, пока происходит сборка или прогоняются тесты, зачем могу вернуться к работе, ответить на вопрос жены, а потом снова вернуться к ответу на вопрос на Stack Overflow. Я без труда могу переключаться с одной вещи на другую и думаю, что это действительно помогает.

Исключение составляет только написание книги. Если пытаешься объяснить сложную тему, там иногда требуется чуть больше времени, чтобы вникнуть в суть и поймать мысль. Но большую часть времени я легко переключаюсь с одного дела на другое.

— Говоря о переключении, у вас есть какие-то определенные стратегии тайм-менеджмента?

— Нет. Ну, в Google я начал трекать то, что делаю в течение недели,. На протяжении всей моей карьеры мне то нравится, то не нравится это делать. Это штука довольно полезна, когда дело доходит до оценки производительности — можно показать, что ты сделал все эти вещи. Но в целом, с тайм-менеджментом у меня довольно ужасно в том смысле, что я не занимаюсь им систематически.

И я думаю, что мне очень повезло, что без всякого тайм-менеджмента всё складывается довольно неплохо. Не знаю, может быть я бы успевал больше, если бы как-то придерживался каких-то стратегий. Мне часто задают вопросы по поводу моей карьеры, потому что люди видят, что я люблю то, чем занимаюсь. Когда они спрашивают, что делать, чтобы получить такую работу, я всегда призываю не делать так как я. Я как пинбольный мяч. Лечу из одного места в другое. У меня никогда не было плана, никогда не расписывал, что я буду делать в ближайшие пять лет. Обычно, все как-то само собой шло хорошо. Я думаю, мне просто везёт, поэтому не делайте как я. Пусть у вас будет план, старайтесь делать вещи сознательно.

— Да и потом, если следовать вашему пути, то получишь не работу своей мечты, а работу вашей мечты.

— Все вёрно, людям стоит равняться не на меня, а на того человека, которым им хотелось бы стать. Стоит задуматься о том, что вы делаете сейчас и чем вы бы хотели заниматься. Не могу сказать, что у меня не было совсем никаких планов или амбиций. Я смотрел на Джошуа Блоха с его книгой «Effective Java» и думал: я хочу быть как Джошуа Блох, только в С#. Вот такое подобие плана у меня было. Это было примерно пять лет назад.

Вы всегда можете становиться лучшей версией себя. Это может быть и про технологии, и не только. Например, вы можете сказать себе, что можете более старательно писать тесты. Это очень конкретный пример. Если вы будете постоянно будете в голове держать информацию о том, каким вы хотите стать (таким человеком, который пишет тесты, чистый код, комментарии), то этот человек будет перед вами. Не я, не мы с вами, а тот, кем вы хотели бы стать. Я думаю, я мог бы направить вас на путь становления, но не более того.

— Возвращаясь к теме множества ролей по жизни: а помогают ли эти роли друг другу? У вас был интересный твит про «talk-driven development»: во время работы над кодом полезно сочинять доклад о том, что делаешь, потому что если не можешь хорошо объяснить свои решения, то и с кодом проблемы. Есть ли ещё такие пересечения?

— Эта была довольно интересная идея, которую мы обсуждали на работе. Он был о проектировании библиотеки аутентификации. Аутентификация — действительно сложная штука, там легко превратить код в непроходимые чащобы. Мы постоянно обсуждаем темы для докладов, и подумали, что доклад об аутентификации будет полезен, а раз мы собираемся проектировать новую библиотеку для аутентификации — стоит работать над тем и другим параллельно.

Вчера в кейноуте я озвучивал свои мысли о концепциях даты и времени. Эти концепции очень сильно сказались на Noda Time. Поэтому думаю, что разбираться «как объяснять это другому человеку» очень ценно.

Временно уйду в сторону от исходного вопроса: например, в Noda Time до 1.0 появился тип, который у нас до сих пор присутствует в кодовой базе, он называется LocalInstant. Для меня это осмысленное понятие, но его очень сложно объяснить. И тот факт, что его сложно объяснить, заставил меня скрыть этот тип от пользователей. Потребовалось переделать некоторые вещи, чтобы убрать его из публичного интерфейса. Но о том, что это надо сделать, мне сигнализировало именно то, что я не мог его объяснить. Это важная деталь имплементации.

Возвращаясь к тому, что помогает… Можно выступать на технические темы, можно писать о них, а можно непосредственно заниматься ими. И один из лучших способов изучить подробнее фичи в С# — это попробовать их описать. Во время написания «C# in Depth» я узнал множество нового. Я становлюсь лучше в плане разработки, когда пишу об этом.

Конечно, не обязательно писать книги — пары постов в блоге о новой фиче вполне достаточно. Например, я узнал о ней, попробовал поэкспериментировать, попробуйте и вы! Опишите ваши ощущения и результаты.

Находясь здесь на конференции, я экспериментирую с документацией для Noda Time. Мы уже делали нечто подобное с платформенными библиотеками. Идея в том, чтобы в качестве примеров давать сниппеты в виде юнит-тестов. Потому что они работают. Нет ничего хуже, чем когда читаешь документацию, там пример, ты его копипастишь, а он не компилируется или падает. Хочется то, что будет работать.

Поэтому я с помощью Roslyn написал кое-что для трансформации примеры в сниппеты, которые можно включать прямо в документацию. Я обсудил это с коллегами и мы решили, что это отличная идея для блог-поста: и о том, что можно сделать, и интересное о Roslyn, и конкретный результат.

Конечно, это всё сочетается. А вот что удивительнее, так что это что нетехнические вещи сочетаются с техническими. Я не буду говорить, что я классный спикер, скорее я чувствую, что мне довольно комфортно на сцене. Я гораздо лучше чувствую себя с аудиторией в сотни людей, нежели в диалоге с двумя или тремя, которых толком не знаю… ну, не считая нашей беседы сейчас! (смеётся).

Во всём этом мне помогают проповеди. Я примерно раз в месяц читаю проповеди в церкви. Именно так ты получаешь навыки спикера. Конечно, проповедь отличается от доклада (15 минут против одного часа). Но вы должны изложить свои мысли кратко и понятно. В общем, я могу сказать, что я стал лучше как спикер благодаря тому, что я проповедник, и наоборот.

Я черпаю идеи из других сфер своей жизни. Мой феминизм определяет мои проповеди и мое поведение в техническом сообществе. Я думаю, будучи личностью, вы не можете разделять себя по частям. Я стараюсь соблюдать work/life balance, но это совсем не значит, что навыки, которые я получаю в работе, не могут быть применимы в личной жизни или наоборот. Я думаю, что быть личностью — это как раз про извлечение выгоды из всех сфер вашей жизни.

— Это ваш первый раз в России. Помимо конференции, вы увидели немногое но всё равно спросим: соответствует ли увиденное вашим ожиданиям?

— Я стараюсь не иметь никаких ожиданий насчёт страны в целом, потому что такое только ведёт к проблемам. Но могу сказать, что все встреченные мной люди оказались очень дружелюбными, и английский у всех просто замечательный. Как человек, который говорит только на английском и не знает иностранных языков, я всегда восхищаюсь людьми, которые хорошо говорят более чем на одном. По всему миру столько людей, которые говорят на множестве языков и отлично говорят по-английски — по крайней мере, в IT-сообществе.

Также было приятно увидеть большое количество участниц-женщин на конференции и я увидел, что они не чувствуют себя тут ниже по статусу, чем мужчины. Это очень здорово. А ещё очень много еды! У нас был спикерский ужин в первый день и еда просто появлялась и появлялась. В тот момент, когда ты думаешь, что уже объелся, тебе говорят, что будет еще основное блюдо. То же самое могу сказать о нашей спикерской комнате на конференции. Еда постоянно прибывает. (Смеётся) При этом здорово видеть, что русские люди не выглядят огромными при таком количестве еды.

— Есть всё, что предлагают, не обязательно!

— В некоторых культурах отказываться от еды, которую тебе предлагают — грубо. В других же нужно ждать приглашения, даже если еда прямо перед тобой. Очень тонкий момент.

— Есть ли какой-то вопрос, на который вы хотели бы ответить, но который вам еще никогда не задавали?

— Да. Был вопрос, который я когда-то хотел получить на Stack Overflow: какая разница между reference, object и variable? Я считаю, это самый сложный для понимания аспект в С#. В конце концов об этом спросили, и я был очень счастлив. Я также хотел бы видеть больше вопросов о Noda Time, потому что это бы говорило о том, что люди ее используют.

Я люблю вопросы, которые на Stack Overflow считаются оффтопиком. Те, где выражается личное мнение по вопросу. Например: почему дизайн языка именно такой? В С# некоторые вещи задокументированы, например, почему наследование работает определённым образом. А мне то, как оно работает, кажется немного «сломанным»: если я люблю С#, это совершенно не значит, что мне нравится в нём всё. Но я могу сказать: «он пытается решить такую-то проблему, и в таком-то случае у него получается, а в таком-то нет».

Думаю, есть не то что бы конкретные вопросы, а такие области, которые я хотел бы видеть лучше разъяснёнными. Например, версионирование. Я планирую пост о приближающемся апокалипсисе версионирования в .NET. Я думаю, крупные компании должны собраться вместе и подумать, что мы можем сделать с этим в .NET, чтобы избежать проблем версионирования. Это такой вопрос, который я бы задал всей вселенной.

— Спасибо за такие подробные ответы.

На приближающемся онлайновом DotNext Джон выступит с двумя докладами:
Dates and times: Hard, but not impossible: кому, как не создателю NodaTime, говорить о заковыристых нюансах дат.
Versioning, and how it makes my head hurt: на версионирование он уже пожаловался в этом интервью, а там расскажет подробнее о проблемах и вариантах их решения.

А кроме него, будут новые доклады от Андрея Акиньшина, Скотта Хансельмана, Дилана Битти — лайн-ап в этот раз получается особенно впечатляющий. Конференция пройдёт 15-18 июня, узнать все подробности о программе и приобрести билет можно на сайте.

Автор: Евгений Трифонов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js