Рубящие лес как пишется

Первая история: jaskellмне рассказывали когда-то о компании, которая писала бекенд на java и хотела нанимать талантливых разработчиков. чтобы привлечь их,

Первая история: Jaskell

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

Вот небольшое видео, иллюстрирующее эту идею:

Вторая история: Kotlin

Когда мы нанимали разработчиков в проект Kotlin, мы не могли ограничиться только теми, кто уже разбирался в разработке компиляторов. На рынке было просто слишком мало таких людей, а наш проект еще не имел мировой известности. Тогда я и начал учиться распознавать на собеседованиях тех, кто сможет разобраться на месте и будет двигать проект вперед, хотя раньше работал в другой сфере.

Это оказалось не так-то сложно: все-таки любой программист пользуется каким-то языком программирования каждый день, и на собеседовании можно поговорить про то, как все это работает внутри. Любознательные инженеры знают, как устроены их любимые игрушки, так что с темами для разговора проблем не было.

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

Со временем Kotlin стал известным и успешным, и нам стало проще нанимать людей с профильным опытом. Они принесли в команду очень ценные знания, и мы все вместе сделали крутой востребованный продукт. Но по сей день, насколько я знаю, опыт именно в компиляторах не является обязательным условием для найма в Kotlin.

Из этой истории у меня два вывода:

  • Бывают условия, при которых выгоднее брать просто толковых разработчиков, а не специалистов в узкой области.

  • Специалисты в узкой области дают большой буст, и их обязательно надо тоже нанимать.

Третья история: Alter

Сейчас мы нанимаем разработчиков в Alter. Тут мы не компиляторы пишем, а платформу для психотерапии. Ничего особо экзотического: Python, Django, MySQL, вот это все. Каждый день помогаем сотням людей.

А принципы найма остались те же: мы упоминаем стек в описании вакансий только в разделе «Будет плюсом, но необязательно» потому, что кандидатам хочется знать, на чем написан проект. Не было ни одного кандидата, которого мы не стали бы рассматривать из-за стека.

Но почему-то мы время от времени слышим от знакомых и знакомых знакомых: «а вот я хотел(а) к вам в команду, но я на Java пишу, а у вас Python». Так я и решил написать этот пост.

Важные оговорки:

  • Мы нанимаем опытных разработчиков (Senior и Middle), учить с нуля нам не выгодно. Когда берем Middle, следим, чтобы был потенциал роста до квалификации Senior. Если кандидат застрянет на уровне Middle навсегда, в небольшой команде такой разработчик не очень нужен.

  • На собеседовании мы обсуждаем вопросы, общие для всех бекендовых стеков: как работает HTTP, что делать, чтобы сервис держал нагрузку, как проектировать схемы БД, как искать и устранять ошибки и т.д.

А зачем вообще так делать? Вам что, питонистов не хватает?

Если вам хватает, мы за вас рады :)

Делать так стоит, только если затраты на поиск разработчиков на нужном стеке превышают затраты по онбордингу в этот стек. Ясное дело, если у вас очередь отличных специалистов, которые вдоль и поперек знают какую-нибудь Django (или на чем там у вас бек), то вы не будете смотреть кандидатов с опытом на FastAPI, PHP, Java и т.д. А если вы из десяти кандидатов скрепя сердце готовы взять одного, а он вам говорит, что неделю подумает, потому что у него тут еще три оффера намечается, то, наверное, вам имеет смысл подумать, как расширить воронку.

И, судя по общению с коллегами из других компаний, ситуация большинства работодателей в последнее время больше похожа на второй вариант.

То есть фундаментальная идея проста: человек, хорошо освоивший один инструмент, быстро переучится на другой, достаточно похожий. Если опытному человеку сложно освоить новый стек, то он, вероятно, достиг своего потолка, а это не очень хороший знак. Это дает нам возможность нанимать толковых программистов со всего рынка, а не только с некоторой его части.

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

Это как у Джоэла: Smart and gets things done?

Еще в 2006 года Joel Spolsky писал в своем The Guerrilla Guide to Interviewing (version 3.0), что достаточно знать о кандидате две вещи: толковый и доводит дело до конца (smart and gets things done). Зачем же тогда этот пост?

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

Во-вторых, если ограничиться «smart and gets things done», онбординг может оказаться существенно дороже, чем если брать человека, который решал похожие задачи, просто другими инструментами. Так что мы для себя считаем, что бекендер-джавист превращается в бекендера-питониста как на том видео выше, а вот что там насчет других специализаций — это уже сложный вопрос, который в каждом конкретном случае надо решать индивидуально. Массовому читателю я готов рекомендовать только быстрый онбординг в другой стек, не в другую специализацию.

А всегда ли это так хорошо работает?

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

Не любой разработчик захочет поменять стек

  • Кто-то привязан душой к своему любимому фреймворку и ни за что не «предаст» его. Ну, это не наш клиент, что делать.

  • Кто-то боится, что не справится быстро освоить новый стек. Даже если вокруг будут отзывчивые коллеги, готовые подсказать. Ну, имеет право, тоже не наш клиент.

Некоторые стеки отличаются сильнее, и между ними переход значительно тяжелее

  • Как правило, это связано с тем, что и задачи надо другие решать: если вчера писал обычный бек на PHP, а завтра надо делать highload на Java, онбордиться будет сложновато.

  • Некоторые платформы/проекты до сих пор используют более низкоуровневые абстракции. PHP, Node.js и Python более-менее избавляют от необходимости думать о тредах, а в Java при желании можно этого счастья хлебнуть ого-го сколько. Это зависит от того, как написан ваш Java-проект. Не надо ожидать, что онбординг питониста в мультитрединг будет таким же легким, как онбординг джависта в Django.

Чтобы быстро поменять стек, надо хорошо понимать основы

  • Если кандидат не очень уверенно пользуется своим основным языком программирования, то и новый ему осваивать будет не просто

  • Если HTTP-заголовки или SQL для кандидата — темный лес, тут не до смены стека

  • Если кандидат совсем не понимает, что его любимый фреймворк делает под капотом, ему будет сложно освоить новый фреймворк, который делает под капотом что-то другое

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

  • Поощрять вопросы и запросы на ревью

  • Быстро отвечать на вопросы, чтобы разблокировать товарища (если вопросы выглядят моментально гуглящимися, дружелюбно спросить в личке, в чем дело)

  • Вежливо и аргументированно подсказывать идиомы и разные фишечки на code review

  • Не ругать стек, с которого человек пришел, за недостаточно православное мировоззрение

Получается, для джунов этот подход не работает?

Тут как посмотреть. С одной стороны, для быстрого освоения нового стека надо хорошо знать старый, а Junior еще не успел в нем толком разобраться. С другой стороны, если ты и старый стек не очень знал, много ли ты потерял, пересев на новый?

На самом деле с Junior разработчиками вопрос вообще лежит в другой плоскости. Далеко не всем командам в принципе имеет смысл брать неопытных людей. То есть, если честно, скорее всего на предложение «нам трудно искать синьоров, давайте наберем джунов и доучим на месте», ответ: «отличная идея, но нам это не выгодно».

Не буду тут углубляться в анализ, но в целом понятно, что за обучение джунов вы платите не только их зарплатой, но и большим количеством внимания, которое их обучению уделяют более опытные разработчики. А они в это время могли бы двигать проект вперед. Ясно дело, что бывают очень бодрые джуны, которые учатся супер-супер быстро, и тогда их учить мега-выгодно, но если вы уже умеете нанимать таких джунов, то вы, наверное, или в хорошем ВУЗе преподаете для души, или у вас такие бюджеты на хайринг, что вам этот пост не очень интересен.

А разве смена стека — это не шаг назад в карьере?

Рекрутеры, а иногда и кандидаты, говорят: если я перейду на новый язык/стек, я в нем не буду таким профи, как в своем привычном языке/стеке — это ведь я стану менее ценным специалистом!

Честно говоря, мне немного грустно от такого подхода к жизни, но я стараюсь отнестись с пониманием и ласково объяснить, что

  • синтаксис языка выучить — это только в первый раз сложно, а третий-пятый язык уже учится гораздо легче,

  • твоя ценность как специалиста состоит не в том, что ты знаешь синтаксис языка и название стандартных функций фреймворка, а в том, что ты понимаешь, как система должна работать и в деталях, и в целом,

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

Вопрос в зал

А вот как вы думаете: для фронтэндеров это тоже работает? Мы пока пишем в своих вакансиях, что нужен опыт на React.js, но, может, зря мы так делаем?

Что такое звук, и как мы его слышим

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

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

Фото: Unsplash

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

Наш мозг — это классификационная машина. Он распределяет все, что мы видим, на множество категорий. Мозг порождает ассоциации, связи между предметами и понятиями, группируя объекты по различным параметрам

Лучано Фадига

Нейрофизиолог Университета Феррары (Италия)

Звуки раздражают, успокаивают и спасают

С точки зрения физиологии, все люди слышат абсолютно одинаково, но воспринимают информацию совсем по-разному, в зависимости от ситуации, опыта и других личных особенностей.

Как раздражают

Причины могут быть самые разные. Научные исследования показали, что звуки определенной частоты неприятны для человеческого слуха по умолчанию. Звук скрежета ногтями по доске попадает в диапазон от 2000 до 5000 Гц. К звукам с такой частотой наш слух особо восприимчив.

Недавно компания Cirrus Research, занимающаяся производством приборов для измерения шума, провела опрос в соцсетях, чтобы определить самый ужасный звук на земле. Результаты следующие:

  • 53% опрошенных — скрежет ногтей по доске
  • 21% опрошенных — звук будильника
  • 11% опрошенных — детский плач
  • По 5% опрошенных — зубной бор, рэп-музыка и жужжание осы или пчелы

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

Меня раздражает мелодия звонка на моем телефоне. Я могу менять ее хоть каждый месяц, но в скором времени бесить будет и новая. В последнее время меня раздражает даже вибрация телефона. Не только моего, но и моего собеседника. Особенно когда приходит много сообщений. Невыносимо

Мария, 24 года

Врач-стоматолог

Фото: Unsplash

Есть и определенные заболевания, которые вызывают несоразмерную реакцию на нормальные, как кажется, звуки. Например, гиперакузия — заболевание слухового аппарата, из-за которого звуки кажутся громче и неприятнее. Заболевание может быть постоянным или периодическим; односторонним или двусторонним. Точные причины все еще неизвестны. Но в зоне риска находятся люди любого возраста, даже маленькие дети.

Мисофония — редкое неврологическое заболевание, вызывающее целый спектр эмоций от ненависти и до страха к отдельным, казалось бы, привычным нам звукам. Чужое чавканье, дыхание и не только доставляют людям дискомфорт. Известно, что от этого заболевания, в той или иной степени, страдают от 6 до 20% населения Земли.

Еще одна самая простая причина, у которой нет объяснений, — индивидуальная особенность. Людям может не нравиться какой-то звук даже на физическом уровне.

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

Как спасают

Человеческий мозг работает всегда. Даже тогда, когда вы спите, он вылавливает из общего шума звуки, которые могут предупредить об опасности.

На определенные сигналы мы запрограммированы реагировать по умолчанию. Визг тормозов, выстрел, крик, падение предметов и многое другое заставляет нас насторожиться. Мы понимаем, что рядом опасность.

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

Как успокаивают

Последние исследования показали, что россияне считают самыми успокаивающими звуками мурчание котов и шум воды. К топу самых популярных звуков можно также отнести стук колес поезда и шум дождя.

Один из самых модных способов успокоить нервы — АСМР (автономная сенсорная меридиональная реакция). Относительно молодое явление, упоминание о котором впервые было замечено 25 февраля 2010 года.

АСМР – это приятная реакция человека в виде общей расслабленности и мурашек по коже, вызванная стимуляцией слуховых или зрительных органов чувств.

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

Наушники – аксессуар, который выбирается индивидуально, исходя из личных потребностей, физических особенностей каждого из нас и, конечно же, бюджета. Кто-то просто не видит смысла переплачивать, а кому-то нужны недорогие дополнительные наушники, которые всегда можно взять с собой. Недавно компания Honor представила Choice Earbuds X – бюджетные беспроводные наушники, которые работают целый день (и даже чуть больше — до 28 часов) и обеспечивают качественное и детализированное звучание как при прослушивании музыки, так и во время звонков.

Это тоже интересно:

b7oltmwu5ystcl0svtiouq8br7w

Как я сказал в первой части этой статьи, мы решили написать систему, которая преобразует команды для отправки многочисленных инструкций на различные IoT реле на Blazor. Где по-быстрому, практически на коленке собрали отличную систему работы с этими реле. Всё было просто замечательно и быстро! Но не всё было так просто, как обещали.

Теперь давайте погрузимся в тёмный лес странных вещей, с которыми пришлось разбираться в Blazor. Естественно, технология не самая новая, и на Stackoverflow с большинством описанных проблем более-менее разобрались. Местами остался неприятный осадок, местами — недопонимание.

Итак, подводные камни Blazor, на которые вы наткнётесь в ваших проектах.

Камень 1 — WASM

Практически самая бесполезная часть работы с Blazor. Почему? Потому что итоговый размер бинарника поражает воображение. Во время дебага приложения я залез в консоль и увидел, что конечный размер всех бинарников превысил 15 мегабайт. После запуска релиза размер был взят под контроль и составил 7 мегабайт.

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

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

Но при всём при этом, если писать на vugu(golang), то можно начать с 3-х мегабайт и жать до одного.

Так что сама разработка на подобном фреймворке — это что-то, что должно происходить после долгого и основательного обдумывания. Опять же, даже если мы переключим наше приложение в режим server-side, то оно не будет по-человечески работать без стабильного канала. А если связь выпадает один раз и что-то не рендерится, то приложение вылетает по полной программе и страницу надо будет перезагружать. При этом теряется весь стейт приложения.

Итак, заключение: WASM в Blazor хоть и есть, но является одним из самых тяжеловесных фреймворков, которые существуют на рынке.

Камень 2 — Razor

Название Blazor происходит от Razor. И хотя сам Razor (2010) намного старше Blazor (2018), в нём есть определённые, мягко выражаясь, странности.

Например, очень странно видеть, как такой, казалось бы, достаточно старый движок, непростительно относится к мелким ошибкам в коде. Один пропущенный символ @ приводит к абсолютно полному пересмотру всего кода страницы. Причём это никак не сообщается в процессе разработки. VSCode вообще об этом умалчивает (и подсвечивает код, как будто он написан правильно), а Visual Studio просто перестаёт подсвечивать код как код, и показывает его как текст.

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

Для людей, пришедших в разработку с React, это будет очень раздражительно.

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

Камень 3 — Общение компонентов

Как и в React, в Blazor существует понятие о том, что такое компоненты. И действительно, лично для меня в обоих языках компонентная система была самой используемой фичей. Но при всём при этом компоненты в Blazor намного более необщительные, чем в React.

Если я меняю строку поиска в компоненте поиска и хочу отобразить новые результаты в списке результатов на той же странице, то приходится доставать бубны.

В React с этим не всё так гладко, но всё же, есть намного больше способов общаться между компонентами. Существуют Overmind, MobX и старый добрый Redux. В Blazor такого пока что не наблюдается. Приходится использовать свои собственные костыли или просто смириться с существующей системой компонентов.

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

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

Выводы: Прекрасное общение между компонентами нужно будет реализовывать руками.

Камень 4 — Жизненный цикл

И борьба с этим жизненным циклом. Если вы пришли из мира MVC, то вы наверняка знаете, что существуют различные стадии жизненного цикла страниц и компонентов. В Blazor незнание и непонимание любых аспектов жизненного цикла просто фатально.

Казалось бы, что может быть проще? У тебя есть компонент, который хочет подписаться на события в начале своего жизненного цикла и отписаться от них в конце этого цикла.

Прекрасно, так и сделаем.

async protected override Task OnInitializedAsync()

{

	Refresher.Subscribe("ReBlaze.Pages.Devices", () =>

	{

    	UpdateDb().Wait();

    	InvokeAsync(StateHasChanged);

	});

	await UpdateDb();

	await base.OnInitializedAsync();

}

public void Dispose()

{

	Refresher.Unsubscribe("ReBlaze.Pages.Devices");

	Context?.Dispose();

}

И тут мы начинаем влетать в очень интересные дебри и проблемы. Сразу же стало понятно, что что-то не так, когда в SQL профайлере начали появляться двойные запросы в базу данных, а компонент по обработке подписок оказался постоянно поломанным из-за переподписок.

Пришлось лезть и разбираться, и в итоге после недолгих поисков был найден виновник. Им оказался тот ученик, который не сел и не изучил систему обработки жизненного цикла от начала и до конца. Естественно, жизненный цикл будет разным для WASM и Server-side приложения. Это да.

Но он в том числе будет разным для Server-side и Server-side. Чего? Ну да, мы как бы забыли вам сказать, и вы с этим встретитесь в мануалах, но чуть глубже. У нас есть два варианта Server-Side Blazor, один из них это Server Pre-Render. Этот замечательный вариант обработки будет рендерить страницу на сервере, чтобы она была. Это сделано для совместимости с поисковиками и для того, чтобы страница быстрее доставлялась на клиент при первом открытии.

Когда пользователь обращается к странице в первый раз, мы её рендерим на сервере и отсылаем на сторону пользователя. А когда она отобразится, то специальный javascript дозагрузит все необходимые компоненты, и страница начнёт работать. Всё замечательно, но при этом мы ещё раз запустим ваше событие OnInitialized. Ну так, чисто чтобы поржать.

Что мы получаем в итоге?

Жесть и безобразие. Страницы, которые неправильно отображают пустые компоненты, двойные запросы и поломанные менеджеры состояния.

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

После такого жёсткого обращения с детьми у нас появилось представление о том, что да как надо делать, и как правильно обрабатывать события жизненного цикла.

Ввиду того что приложение было локальным, мы просто отключили Server-Sider Pre-render и пошли простым путём.

Выводы: Если вы изучаете Blazor, ни в коем случае не пропускайте никаких материалов о том, как работать с жизненным циклом. Такие материалы просто жизненно необходимы для понимания того, как писать программу.

Камень 5 — Сообщество

Оно есть, но оно очень вялое. Естественно, когда вы придёте в сектор корпоративной разработки на Blazor из мира npm, то вы решите, что всё вообще заброшено.

На Blazor написана одна и большая CMS под названием oqtane. Система позволяет писать свой код на Blazor и при этом более-менее по-человечески управлять контентом. С точки зрения разработки, выглядит это просто жестоко.

При создании плагина для Oqtane вам нужно будет установить саму CMS, после чего вам нужно будет создать сайт и в нём уже создавать плагин. Результатом создания плагина будет новый Solution, который надо будет открывать в VS и продолжать писать этот плагин.

Сомнительное удовольствие. Сам Oqtane пушится повсюду его создателем, и хотя коммиты делаются до сих пор, выглядит CMS в лучших традициях 2016 года.

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

Выводы

Что мы имеем? Что-то такое очень интересное. Попытка взять первое место в мире подобных фреймворков идёт в никуда. Если в 2019 году я ещё видел статьи о том, что Microsoft наконец-то выпустила убийцу React, то в 2021 году подобных статей поубавилось, да и хайпа не так много.

В итоге у нас получилась очень хорошая система для тех, кто работает в корпоративном секторе. Blazor как нельзя лучше подойдёт для внутрисетевых веб-сайтов, которые будут подгружать корпоративные данные и показывать их на экране. Портирование уже существующего C# кода на Blazor и WASM не займёт много времени. Поддержка компилирования на очень высоком уровне. И да, вы сможете напрямую использовать .NET WASM, он компилируется и очень даже стабилен. Естественно, определённые вещи в WASM недоступны, но обычная бизнес-логика переносится за секунды.

Плюс, Blazor очень легко встроить в уже существующие .NET проекты. С этим особых проблем нет.

Писать 3Д игру в браузере на Blazor? Нет, всё же лучше не стоит. Если уж очень хочется таким заниматься, то добро пожаловать в мир Rust. Yew вам в помощь. Тут мы получаем намного более компактные бинарники. Или, если хочется, вот вам C++ awesome-wasm.

С другой стороны, в мире WASM фреймворков высокоуровневых языков .NET является самым продвинутым. pyodide.org и vugu.org ещё не видели такой поддержки, как .NET. Только вот в этом и заключается загвоздка. .NET, golang, python — это языки, изначально разработанные для другой платформы, нежели WASM. И хотя мы и научили их компилироваться прямо в окно браузера, выглядят эти фреймворки очень даже сомнительно, в основном потому что тянут за собой наследие платформ, для которых они разрабатывались.

Хотя, несомненно, Server-Side Blazor лишён этих недостатков и просто является большой утилитой по сокрытию огромного количества подлежащего кода, который служит для выполнения ваших инструкций.

При наличии хорошего стабильного канала, эта утилита работает более чем прилично.

Учить Blazor стоит, но только если вы уже погружены в инфраструктуру .NET и готовы с ней работать. Начинать новый сервис можно и на более распространённых языках. Возьмитесь лучше за изучение TS и React.


НЛО прилетело и оставило здесь промокоды для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.

Доступно до 31 декабря 2021 г.

  • Руби лукас однажды в сказке
  • Российская академия наук как пишется с большой буквы
  • Росток как пишется корень
  • Роно или рано как пишется
  • Росомаха рассказ для детей