Я порешал немного задачи на leetcode и остался не слишком доволен сервисом.
Leetcode — это онлайн-сайт с задачами по программированию. Даётся описание (какие данные приходят на вход, и что нужно получить). Можно отправить код на любом актуальном языке программирования, и ваше решение будет оценено по двум показателям: скорость и память.
Что не понравилось в сервисе:
1. Встроенный редактор кода поленились делать нормальным, это по сути блокнот без каких-либо хинтов и проверок. Проще сразу писать в IDE, а потом копировать. Но это мелочь, куда серьёзнее второй пункт.
2. Система оценки, о которой я упомянул выше, крайне неточная. Разброс по времени бывает в 1.5-2 раза у одного и того же кода. И, наоборот, почти не показывает важную разницу между разными решениями. По памяти то же самое: цифры плюс минус одинаковые, как бы вы ни решали задачу. Это выражается в том, что легко словить результат типа "Ваше решение лучше, чем 33.33% остальных", причем, много раз подряд. Это значит, что в точности треть решений попадает в какой-то один кластер оценки (либо что решений отправлено очень мало, но сайт популярный, так что не знаю даже). При этом подобная оценка — единственный показатель успешности вашего решения, поэтому она важна, но при таком разбросе теряет смысл.
Хотя сама идея, например, ежедневной новой задачи мне нравится — позволяет разминать мозги и держать себя в тонусе в некотором смысле. Впрочем, тут тоже есть нюанс: эффективное решение задач редко пересекается с правильным и реалистичным решением, которое требовалось бы от программиста в любом практическом сценарии.
Допустим, вам нужно наполнить ведро водой. В обычной жизни вы отнесёте его в ванну, откроете кран и наполните. А вот подход на Leetcode заставляет использовать извращения типа "вытащить из холодильника бутылку воды и разрезать её над ведром". И вот в какой-то момент вы понимаете, что быстрее всего выбросить ведро в окно, потому что под окном глубокая лужа, оно там утонет и технически станет наполненным водой мгновенно. О реальной жизненной применимости такого решения, думаю, говорить не стоит.
Но иногда буду решать. Сегодняшняя задача уровня Hard, такие дают за собеседованиях на middle и senior: поиск максимальной суммы прямоугольника внутри матрицы.
#dev
Попробовал, наконец, разработку на Blazor. Это такой фреймворк под .NET, который позволяет писать фронтенд на C#. Работает он двумя способами: либо собирает весь проект в WebAssembly, и бедный пользователь грузит себе мегабайтную dll, либо устанавливает клиент-серверное соединение через SignalR и шлёт клиенту информацию об обновлённых DOM-элементах.
Вот вторую то я и пробовал. Казалось бы — каждое нажатие кнопки требует отправить на сервер запрос и получить ответ. Никогда такого не было! Но субъективно разницы во времени отклика нет (потому что веб и так достаточно медленный, хаха).
Фронтенд-часть пишется очень похоже на JSX: вёрстка реактивно вперемешку с кодом. Когда-то я очень ругал React за такой подход, потому что каша. Но нетипизированный JS по-умолчанию каша, а здесь же по факту получается очень удобно: статический анализ не даёт тебе делать ошибки и писать ерунду.
Но приятный полноценный язык программирования вместо JavaScript это лишь вишенка на торте. Самое крутое — вся сила серверного кода с полноценной возможностью обращения к базе данных, шеринг моделей данных между сервером и клиентом, и, наконец, Dependency Injection любого серверного модуля в «клиент»! То есть вы не просто пишете одно приложение вместо двух, вы ещё и получаете отсутствие ошибок при каком-нибудь изменении моделей API, когда сервер стал отдавать не то, что ожидает клиент. Вам вообще теперь не нужен API, достаточно закодить нужную функцию на серваке и инжектировать её в нужный фронтенд-модуль.
Это супер удобно, супер быстро, супер устойчиво к ошибкам. Теперь не хочется возвращаться даже на вполне крутой Vue 3. Но, система пока новая, она не обросла решениями от комьюнити, а браузерный API всё равно придётся дергать через JavaScript Interop. Для совсем кайфа нужно подождать годик, поскольку развитие идёт довольно быстро. Например, там нет очень нужного в таком деле hot reload, но в .NET 6 он уже анонсирован, и вроде как есть в превью, а релиз в ноябре.
#dev
Ben Edgington | 𝕏🧵
Slides omit to mention "pissed off a large section of the community with arrogant plans to capture 100% of the stake".
Focusing on community staking and governance reform were *absolutely* the Right Things To Do and in no way a mistake. Respect.
I am much less concerned about Lido now than I was a couple of years ago, and I am glad we held their feet to the fire over this. https://twitter.com/tomwanhh/status/1956000751873851473
~
₿izFeed#⃣:#dev#ETH
Ben Edgington | 𝕏🧵
RT @TimBeiko: The @ethereumfndn is hiring a developer tooling coordinator 🛠️
You'll help us decide what to build, fund and support across the ecosystem!
Ideal candidate has technical experience across the Ethereum stack, an intuition for how dev tooling should evolve, and some ops chops 👇
~
₿izFeed#⃣:#dev#ETH