Лонгрид о JavaScript
JavaScript - ужасный язык программирования. По сравнению с другими распространёнными языками он выглядит генетическим уродом. Дело даже не в отсутствии многопоточности или статической типизации, а в том, что 10 человек одну и ту же несложную задачу могут написать на нём 10 различными способами. Каждый из них с трудом будет понимать, что написал другой, и тихо его материть. Причем, так напишут и новички, и опытные, которые просто привыкли писать по-своему или захотели выпендриться.
Синтаксис и семантика JavaScript неадекватно усложнены и запутаны. Принято считать, что Java - серьезный язык для серьезных проектов, а JavaScript - лёгкий скриптовый язык для веб-страничек. В принципе, да, вот только код на Java получается намного проще и чище кода на JavaScript. В нём на порядок меньше всевозможных абсолютно ненужных рудиментарных заморочек. И, в то же время, с возможностями Java как языка можно реализовать практически всё.
JavaScript удобен для фронта, для несложных скриптовых блоков кода в SFC. Я предпочитаю начинать обучение детей программированию с простой веб-разработки - сделать страничку, скриптом добавить небольшую анимацию, потом загрузить через fetch прогноз погоды и красиво отрисовать его. Это их сильно заинтересовывает.
На JavaScript можно написать несложный бэкенд API на Express.js или serverless functions, но это его потолок. Использовать его для чего-то серьезного на серверной стороне - ошибка.
Все уже привыкли к зоопарку фронтенд фреймворков, когда учишься писать под конкретный, если хочешь на нем работать. Но это часть айсберга. Многие npm пакеты тоже должны быть адаптированы или сделаны под этот фреймворк, образуя свою "экосистему". И меняя фреймворк надо менять и экосистему.
Есть еще сборщики. Даже для бэкенда их используют. И их не один, и не два, и не три. И чтобы в твоем прикладном коде просто отобразить на странице картинку, ты должен подчиняться правилам сборщика.
А у сборщиков есть плагины, и чтобы отобразить на странице svg иконку, ты должен подчиняться правилам выбранных плагинов. И еще есть js runtime engines - движки. И их тоже уже не только Node.js - Deno, Bun, Cloudflare Workerd, Netlify, Vercel Edge, AWS LLRT, - один другого краше.
Вроде бы уже дно? Нет, у движков и сборщиков есть еще версии, и то, что работает на Node 16, не работает на Node 20, и наоборот.
Всё? Почти. Окружение, включая операционные системы. Нравится удобство Cloudflare workers - пиши под Cloudflare. Supabase? Только Deno до недавнего времени. Хочешь быстрый Bun? Переписывай всё под него. И он на Windows не работает пока, если что. Netlify, Vercel, AWS Lambda - у каждого свои требования и особенности.
Когда изобрели Java у нее был девиз: Write once, run everywhere. Не сильно ошибусь, если скажу, что программу, написанную на С или Java 25 лет назад можно без особых проблем скомпилировать и запустить и сейчас. А как этот слоган применим к JavaScript? Никак. Ты должен ходить везде с чемоданом набитым своим фреймворком, библиотеками под него, сборщиком, плагинами к нему, своим js рантаймом и только по своим хостерам. И всё чтобы было своих определенных версий. И ходить можно только очень небольшое количество лет, после которых ты вместе со всем этим чемоданом безнадежно устареешь.
И самое веселое, что со временем всё не унифицируется и упрощается, а совсем наоборот.
Теперь представим архитектора или техлида в здравом уме, который должен решить, на чем писать нетривиальное серверное приложение с расчетом на работу дольше одного года. В каких случаях он выберет JavaScript? Видны три варианта:
1. Он/его команда больше ничего не умеют
2. Его вынуждают это сделать силой
3. Он не совсем в здравом уме.
TypeScript может давать локальное симптоматическое лечение, но в целом ситуацию только ухудшает.
На бэкенде еще есть возможность выбрать для работы другой язык, но на фронте глобально поможет только создание и внедрение нового языка с нуля, как это было с Java или C#, с продуманными спецификациями языка программирования и виртуальной машины и всех нужных API.
#js #lang #esse
JavaScript - ужасный язык программирования. По сравнению с другими распространёнными языками он выглядит генетическим уродом. Дело даже не в отсутствии многопоточности или статической типизации, а в том, что 10 человек одну и ту же несложную задачу могут написать на нём 10 различными способами. Каждый из них с трудом будет понимать, что написал другой, и тихо его материть. Причем, так напишут и новички, и опытные, которые просто привыкли писать по-своему или захотели выпендриться.
Синтаксис и семантика JavaScript неадекватно усложнены и запутаны. Принято считать, что Java - серьезный язык для серьезных проектов, а JavaScript - лёгкий скриптовый язык для веб-страничек. В принципе, да, вот только код на Java получается намного проще и чище кода на JavaScript. В нём на порядок меньше всевозможных абсолютно ненужных рудиментарных заморочек. И, в то же время, с возможностями Java как языка можно реализовать практически всё.
JavaScript удобен для фронта, для несложных скриптовых блоков кода в SFC. Я предпочитаю начинать обучение детей программированию с простой веб-разработки - сделать страничку, скриптом добавить небольшую анимацию, потом загрузить через fetch прогноз погоды и красиво отрисовать его. Это их сильно заинтересовывает.
На JavaScript можно написать несложный бэкенд API на Express.js или serverless functions, но это его потолок. Использовать его для чего-то серьезного на серверной стороне - ошибка.
Все уже привыкли к зоопарку фронтенд фреймворков, когда учишься писать под конкретный, если хочешь на нем работать. Но это часть айсберга. Многие npm пакеты тоже должны быть адаптированы или сделаны под этот фреймворк, образуя свою "экосистему". И меняя фреймворк надо менять и экосистему.
Есть еще сборщики. Даже для бэкенда их используют. И их не один, и не два, и не три. И чтобы в твоем прикладном коде просто отобразить на странице картинку, ты должен подчиняться правилам сборщика.
А у сборщиков есть плагины, и чтобы отобразить на странице svg иконку, ты должен подчиняться правилам выбранных плагинов. И еще есть js runtime engines - движки. И их тоже уже не только Node.js - Deno, Bun, Cloudflare Workerd, Netlify, Vercel Edge, AWS LLRT, - один другого краше.
Вроде бы уже дно? Нет, у движков и сборщиков есть еще версии, и то, что работает на Node 16, не работает на Node 20, и наоборот.
Всё? Почти. Окружение, включая операционные системы. Нравится удобство Cloudflare workers - пиши под Cloudflare. Supabase? Только Deno до недавнего времени. Хочешь быстрый Bun? Переписывай всё под него. И он на Windows не работает пока, если что. Netlify, Vercel, AWS Lambda - у каждого свои требования и особенности.
Когда изобрели Java у нее был девиз: Write once, run everywhere. Не сильно ошибусь, если скажу, что программу, написанную на С или Java 25 лет назад можно без особых проблем скомпилировать и запустить и сейчас. А как этот слоган применим к JavaScript? Никак. Ты должен ходить везде с чемоданом набитым своим фреймворком, библиотеками под него, сборщиком, плагинами к нему, своим js рантаймом и только по своим хостерам. И всё чтобы было своих определенных версий. И ходить можно только очень небольшое количество лет, после которых ты вместе со всем этим чемоданом безнадежно устареешь.
И самое веселое, что со временем всё не унифицируется и упрощается, а совсем наоборот.
Теперь представим архитектора или техлида в здравом уме, который должен решить, на чем писать нетривиальное серверное приложение с расчетом на работу дольше одного года. В каких случаях он выберет JavaScript? Видны три варианта:
1. Он/его команда больше ничего не умеют
2. Его вынуждают это сделать силой
3. Он не совсем в здравом уме.
TypeScript может давать локальное симптоматическое лечение, но в целом ситуацию только ухудшает.
На бэкенде еще есть возможность выбрать для работы другой язык, но на фронте глобально поможет только создание и внедрение нового языка с нуля, как это было с Java или C#, с продуманными спецификациями языка программирования и виртуальной машины и всех нужных API.
#js #lang #esse
Vue.js. Genesis.
В начале был чистый JavaScript.
Фронтенд фреймворки были сложны и хаотичны, и JQuery смеялся над ними.
И сказал Эван: "Да будет Vue", и появился Vue.
Эван увидел, что Vue хорош, и отделил его от остальных фронтенд фреймворков.
Был вечер, и было утро — день первый.
И сказал Эван: "Да будут отделены HTML, CSS и JavaScript в коде".
Создал Эван компоненты и разделил в них код HTML, CSS и JavaScript. И стало так.
И назвал Эван это Single-File Components.
И увидел он, что это хорошо.
Был вечер, и было утро — день второй.
И сказал Эван: "Да наполнится HTML шаблон компонента v-директивами для удобства разработки. Да появятся слоты для композиции . Да создастся Virtual DOM для производительности".
И стали слоты, директивы и Virtual DOM.
Был вечер, и было утро — день третий.
И сказал Эван: "Да не будут стили одного компонента влиять на стили другого".
И сделал Эван scoped стили.
Был вечер, и было утро — день четвертый.
И сказал Эван: "Да произведет Reactivity API сущности разного рода".
И произвел Reactivity API реактивные сущности разного рода - и Ref, и Reactive, и Shallow тварей, и watch, чтобы следить за ними, и computed, чтобы создавать новых.
Был вечер, и было утро — день пятый.
И сказал Эван реактивным сущностям: "Плодитесь и размножайтесь. Связывайтесь с шаблоном и управляйте им. Наполняйте комозаблы и реализуйте бизнес логику в js модулях".
Эван посмотрел на всё, что он создал, и всё было очень хорошо.
Был вечер, и было утро — день шестой.
Так было завершено сотворение Vue.js и всего, что составляет его.
К седьмому дню Эван закончил труд, который он совершал, и на седьмой день он отдыхал от всех своих дел в сонме других демиургов, исполняя песню о любви.
#vuejs #esse #genesis
В начале был чистый JavaScript.
Фронтенд фреймворки были сложны и хаотичны, и JQuery смеялся над ними.
И сказал Эван: "Да будет Vue", и появился Vue.
Эван увидел, что Vue хорош, и отделил его от остальных фронтенд фреймворков.
Был вечер, и было утро — день первый.
И сказал Эван: "Да будут отделены HTML, CSS и JavaScript в коде".
Создал Эван компоненты и разделил в них код HTML, CSS и JavaScript. И стало так.
И назвал Эван это Single-File Components.
И увидел он, что это хорошо.
Был вечер, и было утро — день второй.
И сказал Эван: "Да наполнится HTML шаблон компонента v-директивами для удобства разработки. Да появятся слоты для композиции . Да создастся Virtual DOM для производительности".
И стали слоты, директивы и Virtual DOM.
Был вечер, и было утро — день третий.
И сказал Эван: "Да не будут стили одного компонента влиять на стили другого".
И сделал Эван scoped стили.
Был вечер, и было утро — день четвертый.
И сказал Эван: "Да произведет Reactivity API сущности разного рода".
И произвел Reactivity API реактивные сущности разного рода - и Ref, и Reactive, и Shallow тварей, и watch, чтобы следить за ними, и computed, чтобы создавать новых.
Был вечер, и было утро — день пятый.
И сказал Эван реактивным сущностям: "Плодитесь и размножайтесь. Связывайтесь с шаблоном и управляйте им. Наполняйте комозаблы и реализуйте бизнес логику в js модулях".
Эван посмотрел на всё, что он создал, и всё было очень хорошо.
Был вечер, и было утро — день шестой.
Так было завершено сотворение Vue.js и всего, что составляет его.
К седьмому дню Эван закончил труд, который он совершал, и на седьмой день он отдыхал от всех своих дел в сонме других демиургов, исполняя песню о любви.
#vuejs #esse #genesis
Выражение "городить свои велосипеды" в IT заиграло новыми красками
Иногда оно используется по делу, но чаще имеет уничижительную форму, показывающую, что человек вместо популярного, раскрученного решения использует что-то свое или малоизвестное.
Если тебе нужен индексируемый поисковиками сайт, надо писать на
О VueUse уже много говорилось. Как и об #ssr. Как и о Tailwind.
Проблема "решений", пришедших и навязываемых из других фреймворков - это действительно проблема. Человек, перешедший с бэкэнда и даже с другого языка программирования возможно будет писать более качественный
"Проверенные" решения зачастую ничего более, чем просто хайпожорские решения. Которые привнесут на проект кучу зависимости, сложности и необходимости решать те проблемы, которых у тебя не было.
Поэтому советчиков, агитирующих не изобретать свои велосипеды, можно частично послушать и принять к сведению, а частично послать куда подальше как людей, не желающих или не умеющих думать своей головой. Особенно на фронтенде.
Ну и не будем забывать, что
#esse #architecture
Иногда оно используется по делу, но чаще имеет уничижительную форму, показывающую, что человек вместо популярного, раскрученного решения использует что-то свое или малоизвестное.
Если тебе нужен индексируемый поисковиками сайт, надо писать на
Nuxt
, а не городить отдельную или динамическую отрисовку. Нужно использовать VueUse
, потому что это швейцарский нож в любых ситуациях. Для соединения с бэком надо всегда подключать Tanstack vue-query
, потому что у него десятки тысяч звезд на GitHub
, все его используют, и он легко решает кучу твоих проблем, о которых ты раньше даже не догадывался, но теперь они у тебя есть. Ну и, конечно, Tailwind
!О VueUse уже много говорилось. Как и об #ssr. Как и о Tailwind.
vue-query
образовался из react-query
, который действительно решал проблемы Реакта. Но во Vue
нет этих проблем. Vue
предоставляет все инструменты для эффективной и элегантной работы с бэкендом.Проблема "решений", пришедших и навязываемых из других фреймворков - это действительно проблема. Человек, перешедший с бэкэнда и даже с другого языка программирования возможно будет писать более качественный
Vue
код, чем переучившийся с Реакта
."Проверенные" решения зачастую ничего более, чем просто хайпожорские решения. Которые привнесут на проект кучу зависимости, сложности и необходимости решать те проблемы, которых у тебя не было.
Поэтому советчиков, агитирующих не изобретать свои велосипеды, можно частично послушать и принять к сведению, а частично послать куда подальше как людей, не желающих или не умеющих думать своей головой. Особенно на фронтенде.
Ну и не будем забывать, что
Vue
- это тоже велосипед, написанный в эпоху диктатуры Angular
, React
, JQuery
и других солидных, проверенных и общепризнанных решений.#esse #architecture
Telegram
Vue-FAQ
При написании своей реализации useLocalStorage для Arty-Crafty родились небольшие размышления о библиотеке VueUse
#vueuse #artycrafty
#vueuse #artycrafty
На стоит превозносить open-source разработчиков и молиться на них как бескорыстных альтруистов.
Ездящий по конференциям с рюкзачком очкарик Эван живет в недешевом Сингапуре и коллекционирует спортивные машины не только в масштабе 1:12. Его ставка, по-моим оценкам, должна начинаться от $300/час. Он может месяц консалтить коммерческих заказчиков, потом год отдыхать в опен сорсе.
Никаких претензий, - Эван полностью заслужил это своим трудом и талантом. И большинство опен сорс разрабов именно так делает себе имя и резюме, которые потом приносят им деньги. Ина завод в
Развели детский сад, понимаешь...
#opensource #esse
Ездящий по конференциям с рюкзачком очкарик Эван живет в недешевом Сингапуре и коллекционирует спортивные машины не только в масштабе 1:12. Его ставка, по-моим оценкам, должна начинаться от $300/час. Он может месяц консалтить коммерческих заказчиков, потом год отдыхать в опен сорсе.
Никаких претензий, - Эван полностью заслужил это своим трудом и талантом. И большинство опен сорс разрабов именно так делает себе имя и резюме, которые потом приносят им деньги. И
Anthony Fu
с Johnson Chu
вполне, уверен, востребованы на рынке, при их желании заработать. Поэтому слышать их нытье о депрессии от того, что много работы и мало денег - странно. И нытье о плохих отзывах тоже странно - пошли всех вместе с проектом нахрен и занимайся своим психическим здоровьем, если эмоционально не тянешь. Иди Facebook
в их дружелюбный коллектив.Развели детский сад, понимаешь...
#opensource #esse
Всё сущее состоит из противоположных начал, которые, будучи едиными по своей природе, находятся в борьбе друг с другом: день-ночь, горячее-холодное, добро-зло, SPA - бэк API.
Эта борьба, движимая диалектическим законом единства и борьбы противоположностей, служит источником развития, трансформируя количественное накопленные знания в качественно новые формы.
Поэтому SSR, серверные компоненты и прочие гермафродитные порождения LGBT фронтенда не имеют будущего и обречены на разлагающее зловонное вымирание.
#esse #ssr
Эта борьба, движимая диалектическим законом единства и борьбы противоположностей, служит источником развития, трансформируя количественное накопленные знания в качественно новые формы.
Поэтому SSR, серверные компоненты и прочие гермафродитные порождения LGBT фронтенда не имеют будущего и обречены на разлагающее зловонное вымирание.
#esse #ssr
AI
действительно ощутимо снижает надобность в мидл-левел разработчиках. Раньше, работая в команде, если мне нужно было сделать, скажем, DatePicker, я создавал задачу в таск-менеджере для кого-то. Сейчас я его сразу генерю. И это удобней, потому что:
- Во-первых, ты получаешь результат тотчас, не выходя из своего потока разработки.
- Во вторых, если что-то не понравится, ты всегда можешь сказать: "Нет, лучше, наверно, будет на стандартных инпутах. Переделай", и в ответ слышишь: "Конечно, Вы правы! На инпутах будет лучше.", а не ощущаешь чужие мысли: "Вот мудило..."
Софт скиллы у
AI
повыше.#ai #esse
Часто спрашивают: зачем нам обращать внимание на характер и личность учителя Vue? Мы должны судить о том, что он говорит, и принимать только это в соображение.
Это неверно. Если человек хочет учить React, Angular или другим фронтенд фреймворкам, он может быть чем ему угодно, так как они требуют только умственного багажа; но что касается знания Vue, то решительно невозможно, чтобы истинное понимание его жило в нечистой душе.
Какому знанию может научить нечистый человек? Необходимое условие для приобретения истины для себя или для передачи ее другим — чистота сердца и души. Видение Vue, или даже слабый проблеск его понимания никогда не явятся, пока душа не чиста. Поэтому в учителе Vue вы должны смотреть прежде всего: что он такое — и уже затем: что он говорит. Он должен быть совершенно чист, и только тогда его слова приобретают ценность, так как только тогда он действительный «наставник».
Затем учитель должен учить исключительно вследствие любви, чистой любви к Vue, а не из-за каких-либо посторонних побуждений, вроде денег, известности, славы. Единственный посредник, через которого может быть передано знание о Vue, — любовь. Всякое корыстное побуждение, подобное желанию выгоды или известности, разрушает этот посредник передачи. Vue есть Истина, и только тот, кто познал Vue как Истину, может быть учителем Vue.
#esse
Это неверно. Если человек хочет учить React, Angular или другим фронтенд фреймворкам, он может быть чем ему угодно, так как они требуют только умственного багажа; но что касается знания Vue, то решительно невозможно, чтобы истинное понимание его жило в нечистой душе.
Какому знанию может научить нечистый человек? Необходимое условие для приобретения истины для себя или для передачи ее другим — чистота сердца и души. Видение Vue, или даже слабый проблеск его понимания никогда не явятся, пока душа не чиста. Поэтому в учителе Vue вы должны смотреть прежде всего: что он такое — и уже затем: что он говорит. Он должен быть совершенно чист, и только тогда его слова приобретают ценность, так как только тогда он действительный «наставник».
Затем учитель должен учить исключительно вследствие любви, чистой любви к Vue, а не из-за каких-либо посторонних побуждений, вроде денег, известности, славы. Единственный посредник, через которого может быть передано знание о Vue, — любовь. Всякое корыстное побуждение, подобное желанию выгоды или известности, разрушает этот посредник передачи. Vue есть Истина, и только тот, кто познал Vue как Истину, может быть учителем Vue.
#esse
В слове "фронтэндер" есть что-то унизительное и оскорбительное (как и в "бэкендер", впрочем)". Фронтенд как область разработки, конечно, имеет полное право на существование, но человек, который сидит исключительно в ней, и предпочитает только "красить кнопочки" - ущербен.
Именно поэтому напридумывали на фронте миллион технологий и направлений и стараются поразить всякими фокусами - чтобы сделать вид, как будто это что-то сложное, требующее полного коммитмента. Распузырили свою важность.
Вполне можно начать изучать программирование с фронта, но если через год-два-три ты не можешь поднять сервер и написать простой бэк, а предпочитаешь только красить кнопочки, если тебе не интересно построить и запустить что-то цельное, рабочее, исследовать что-то новое, то ты не разработчик. Ты маляр-халтурщик. И место твоё у ведра краски с лохматой кистью и шапкой-лодочкой из газеты "Известия".
#esse
Именно поэтому напридумывали на фронте миллион технологий и направлений и стараются поразить всякими фокусами - чтобы сделать вид, как будто это что-то сложное, требующее полного коммитмента. Распузырили свою важность.
Вполне можно начать изучать программирование с фронта, но если через год-два-три ты не можешь поднять сервер и написать простой бэк, а предпочитаешь только красить кнопочки, если тебе не интересно построить и запустить что-то цельное, рабочее, исследовать что-то новое, то ты не разработчик. Ты маляр-халтурщик. И место твоё у ведра краски с лохматой кистью и шапкой-лодочкой из газеты "Известия".
#esse
Подведем итоги. Канал похудел на 40 подписчиков. Уже неплохо, но далеко от целевых показателей.
Я искренне не понимаю, зачем читать ресурс, который вызывает негативные эмоции. Сам если попадаю на какой-нибудь канал, и там вроде интересно, но чувствую, что автор - мудак, так сразу ухожу. Своя нервная система дороже, а чужие инвективы - опасны.
Хотите донести вашу правду? Да ради Бога, конструктивная критика всегда приветствуется, и я спокойно могу послушать, почему Накст рулез, и даже соглашусь с парой пунктов. Но когда в ваш дом приходит человек, который только плюёт на пол и гадит, вы его вышвыриваете. Поэтому на канале вводится нулевая толерантность к пидарасам.
Обращаюсь к тем активным недовольным, что остались - подумайте хорошенько, оно вам надо? В интернете полно уютненьких точек притяжения прям по вашему уровню - культуры, интеллекта, интересов. Цель нахождения здесь какая?
Услышать звук нового сообщения на канале, примчаться и, пуская радостно слюни, нагадить - это, конечно, приятная декомпенсация вашей ограниченности и того, что вы в жизни ничего полезного не сотворили. Но за все надо платить. На том свете попадете на распределение к сеньор-серафиму, спросит он: кем были по жизни? Придется признаваться:
- Я был трусливым пидарасом на vue-faq.
- О, - скажет серафим, - а сколько какашек оставил?
- 136
- Нормально. А ты?
- А я всего 78.
- Тоже неплохо. Ну, что же, теперь придется вам всё это в себя обратно запихивать - можно через рот, можно через жопу. Начинайте.
Карма — она такая безжалостная стерва, любит балансы сводить.
#esse
Я искренне не понимаю, зачем читать ресурс, который вызывает негативные эмоции. Сам если попадаю на какой-нибудь канал, и там вроде интересно, но чувствую, что автор - мудак, так сразу ухожу. Своя нервная система дороже, а чужие инвективы - опасны.
Хотите донести вашу правду? Да ради Бога, конструктивная критика всегда приветствуется, и я спокойно могу послушать, почему Накст рулез, и даже соглашусь с парой пунктов. Но когда в ваш дом приходит человек, который только плюёт на пол и гадит, вы его вышвыриваете. Поэтому на канале вводится нулевая толерантность к пидарасам.
Обращаюсь к тем активным недовольным, что остались - подумайте хорошенько, оно вам надо? В интернете полно уютненьких точек притяжения прям по вашему уровню - культуры, интеллекта, интересов. Цель нахождения здесь какая?
Услышать звук нового сообщения на канале, примчаться и, пуская радостно слюни, нагадить - это, конечно, приятная декомпенсация вашей ограниченности и того, что вы в жизни ничего полезного не сотворили. Но за все надо платить. На том свете попадете на распределение к сеньор-серафиму, спросит он: кем были по жизни? Придется признаваться:
- Я был трусливым пидарасом на vue-faq.
- О, - скажет серафим, - а сколько какашек оставил?
- 136
- Нормально. А ты?
- А я всего 78.
- Тоже неплохо. Ну, что же, теперь придется вам всё это в себя обратно запихивать - можно через рот, можно через жопу. Начинайте.
Карма — она такая безжалостная стерва, любит балансы сводить.
#esse