Лонгрид о 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
JavaScript
по популярному рейтингу Tiobe
обогнал Visual Basic
в этом годуTiobe
просто подсчитывается количество результатов поисковых движков по каждому языку программирования.Более объективный StackOverflow Annual Survey показывает совсем другие результаты
#lang #js
Сколько лет современному программированию:
🟢 CSS is 29 years old
🟡 HTML is 31 years old
🔵 JavaScript is 29 years old
🐍 Python is 33 years old
🐘 SQL is 49 years old
🟧 Java is 29 years old
🟪 PHP is 29 years old
🔶 C++ is 38 years old
🔷 Ruby is 28 years old
🌐 Go is 15 years old
🟦 C# is 23 years old
🐳 Docker is 10 years old
🔵 TypeScript is 11 years old
🔵 Basic is 61 years old
🔵 ANSI C is 39 years old
#lang
🟢 CSS is 29 years old
🟡 HTML is 31 years old
🔵 JavaScript is 29 years old
🐍 Python is 33 years old
🐘 SQL is 49 years old
🟧 Java is 29 years old
🟪 PHP is 29 years old
🔶 C++ is 38 years old
🔷 Ruby is 28 years old
🌐 Go is 15 years old
🟦 C# is 23 years old
🐳 Docker is 10 years old
🔵 TypeScript is 11 years old
🔵 Basic is 61 years old
🔵 ANSI C is 39 years old
#lang
Сайт, на котором можно сравнить код разных языков программирования (почти 1000) при решении определенных задач
#sd #lang
#sd #lang
Rosetta Code
Sorting algorithms/Bubble sort
A bubble sort is generally considered to be the simplest sorting algorithm. A bubble sort is also known as a sinking sort. Because of its simplicity...