Поругайте TypeScript/node.js
От: vsb Казахстан  
Дата: 23.06.22 17:26
Оценка: 4 (3) +3 :))
Недавно рефлексировал и понял, что TypeScript мне кажется самым лучшим подходом для бэкэнда. В нём есть всё, чего мне не хватает в других языках/платформах.

1. Легковесность. Стартует быстро, потребляет мало памяти. Если сравнивать с Java — небо и земля.

2. Хороший язык. В нём нет дурацких решений вроде голанговской обработки ошибок. В нём очень богатая система типов, позволяющая творить просто чудеса, например в ORM объявляем тип, в котором перечислены все столбцы таблицы, а в конкретном запросе объявляем его "подтип", в котором перечислено подмножество этих столбцов, которые, собственно, запрос будет возвращать. Очень круто.

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

4. Очень богатый выбор библиотек и инструментов. В какой-то момент это даже становится минусом, легко слепить франкенштейна. Но, думаю, с должным уровнем консервативности и велосипедостроительства от этой беды можно уберечься.

5. Свободная IDE VS Code. Я очень люблю и уважаю идею, но она по сути проприетарна. VS Code мне идеологически нравится больше. Ну пункт субъективный, не буду на нём заостряться.

6. Совместимость с браузером. Какие-то куски кода можно держать общими между бэком и фронтом. В целом скорей мелочь, но где-то может быть полезно. А также возможность естественно пререндерить страницу на сервере, это уже не мелочь.

При всём при этом у меня нет особо опыта использования этого языка на бэкэнде. Поэтому интересно, что я упустил и почему всем не следует выкинуть всё кроме сабжа.
Re: Поругайте TypeScript/node.js
От: Anton Batenev Россия https://github.com/abbat
Дата: 23.06.22 17:39
Оценка: -3 :)
Здравствуйте, vsb, Вы писали:

vsb> При всём при этом у меня нет особо опыта использования этого языка на бэкэнде.


Думаю, что подобный опыт мало у кого есть, т.к. на бэке nodejs практически никогда не используется — это все же фронтовый стек (хотя понятно, что при специфических вкусах фронт можно хоть на C++ писать, за примерами далеко ходить не надо).
Re: Поругайте TypeScript/node.js
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.06.22 17:49
Оценка: +1 -3
Здравствуйте, vsb, Вы писали:

vsb>Недавно рефлексировал и понял, что TypeScript мне кажется самым лучшим подходом для бэкэнда. В нём есть всё, чего мне не хватает в других языках/платформах.


Blazor!!
https://www.telerik.com/blogs/whats-coming-blazor-dotnet-7
и солнце б утром не вставало, когда бы не было меня
Отредактировано 23.06.2022 17:58 Serginio1 . Предыдущая версия .
Re[2]: Поругайте TypeScript/node.js
От: vsb Казахстан  
Дата: 23.06.22 17:57
Оценка: +1
Здравствуйте, Anton Batenev, Вы писали:

vsb>> При всём при этом у меня нет особо опыта использования этого языка на бэкэнде.


AB>Думаю, что подобный опыт мало у кого есть, т.к. на бэке nodejs практически никогда не используется — это все же фронтовый стек (хотя понятно, что при специфических вкусах фронт можно хоть на C++ писать, за примерами далеко ходить не надо).


Судя по https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-programming-scripting-and-markup-languages node.js одна из самых популярных технологий. К фронту она отношения не имеет, только для сборки.
Re: Поругайте TypeScript/node.js
От: Vermicious Knid  
Дата: 23.06.22 17:58
Оценка: 2 (1) -2
Здравствуйте, vsb, Вы писали:

vsb>1. Легковесность. Стартует быстро, потребляет мало памяти. Если сравнивать с Java — небо и земля.

Java при этом работает в разы быстрее. А легковесность оказывается на практике не такая легковесная. Тот же Python жрет памяти в разы меньше.

vsb>2. Хороший язык. В нём нет дурацких решений вроде голанговской обработки ошибок.

Хороший язык не может быть построен поверх откровенного говна, которым является Javascript.

vsb>В нём очень богатая система типов, позволяющая творить просто чудеса, например в ORM объявляем тип, в котором перечислены все столбцы таблицы, а в конкретном запросе объявляем его "подтип", в котором перечислено подмножество этих столбцов, которые, собственно, запрос будет возвращать. Очень круто.

Крутость то в чем? Это какие-то шалости и игрушки, которые на практике не очень полезны.

vsb>3. Вполне солидная виртуальная машина.

Единственное с чем можно более-менее согласиться. И то есть ряд минусов, в частности неважный interop с C/C++.

vsb>4. Очень богатый выбор библиотек и инструментов.

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

vsb>6. Совместимость с браузером. Какие-то куски кода можно держать общими между бэком и фронтом.

На практике этого никогда не происходит. В браузер ты например не засунешь модные ORM, почти никак не переиспользуешь бизнес-логику.
Ну и не нужно этого делать, от этого больше вреда чем пользы.

vsb>При всём при этом у меня нет особо опыта использования этого языка на бэкэнде.

Я использовал немного. На мой субъективный взгляд серверные библиотеки/фреймворки для Node.js — неюзабельный кал.
В сравнении с Python, Java/Scala/Kotlin, Go. Даже .NET Core выглядит неплохо на фоне Node.js.
Re[2]: Поругайте TypeScript/node.js
От: vsb Казахстан  
Дата: 23.06.22 18:07
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

vsb>>1. Легковесность. Стартует быстро, потребляет мало памяти. Если сравнивать с Java — небо и земля.

VK>Java при этом работает в разы быстрее.

Это не важно. Всё тяжёлое во внешних сервисах вроде СУБД. Скорость не должна быть очень уж плохой, с этим всё в порядке.

vsb>>2. Хороший язык. В нём нет дурацких решений вроде голанговской обработки ошибок.

VK>Хороший язык не может быть построен поверх откровенного говна, которым является Javascript.

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

vsb>>В нём очень богатая система типов, позволяющая творить просто чудеса, например в ORM объявляем тип, в котором перечислены все столбцы таблицы, а в конкретном запросе объявляем его "подтип", в котором перечислено подмножество этих столбцов, которые, собственно, запрос будет возвращать. Очень круто.

VK>Крутость то в чем? Это какие-то шалости и игрушки, которые на практике не очень полезны.

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

vsb>>4. Очень богатый выбор библиотек и инструментов.

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

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

vsb>>6. Совместимость с браузером. Какие-то куски кода можно держать общими между бэком и фронтом.

VK>На практике этого никогда не происходит. В браузер ты например не засунешь модные ORM, почти никак не переиспользуешь бизнес-логику.
VK>Ну и не нужно этого делать, от этого больше вреда чем пользы.

Например можно классы запросов/ответов API держать общими. В итоге не будет рассинхронизации.
Re[3]: Поругайте TypeScript/node.js
От: · Великобритания  
Дата: 23.06.22 18:47
Оценка:
Здравствуйте, vsb, Вы писали:

VK>>Хороший язык не может быть построен поверх откровенного говна, которым является Javascript.

vsb>Нормальный язык. Есть некоторые исторические нюансы, но на практике это проблем не доставляет.
Мне тоже не очень нравится это. Вроде крутой яп, но столько дыр что немного шаг в сторону и в это говно проваливаешься. Енумы какие-то странные, натянутая сова на модель Javascript. Крутые проверки типов в компайлтайме вроде есть, но из-за странностей типизации контроль теряется, внезапно, например
interface Ro {
    readonly x: string;
}

const use = (v: Ro) => {
    console.log(v.x);

    //v.x = 'bye'; Compiler error: "Cannot assign to 'x' because it is a read-only property.". Хорошо!

    interface PublicMorozov extends Ro {
        x: string;
    }
    const rw: PublicMorozov = ro;
    rw.x = 'bye';// No errors, not even warnings. Всё молча отрабатывает.
}
const ro: Ro = {x: "hi"}
use(ro);
console.log(ro.x);// readonly field поменялось молча!

Та же беда с nulls/undefined.

В общем, для фронта оно ещё норм, когда альтернативой является Javascript, но для бэка есть гораздо лучшие яп. Возьми java, гораздо стабильнее и предсказуемее. Если экзотики хочется с типами, то можешь в "интересных" местах прикручивать Скалу. По поводу легковесности — это как напишешь. Если всякие спринги выкинуть, то всё летает.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Поругайте TypeScript/node.js
От: Vermicious Knid  
Дата: 23.06.22 18:53
Оценка:
Здравствуйте, vsb, Вы писали:

VK>>Java при этом работает в разы быстрее.

vsb>Это не важно. Всё тяжёлое во внешних сервисах вроде СУБД. Скорость не должна быть очень уж плохой, с этим всё в порядке.
Ну это уже зависит от твоей задачи. Иногда хочется достичь минимального времени отклика, иногда даже что-то близкое к реалтайму.
В Яндексе так вообще на C++ многое пишут и не считают это плохой идеей.

vsb>Нормальный язык. Есть некоторые исторические нюансы, но на практике это проблем не доставляет.

Typescript — это лишь попытка героически решить проблемы, которые на ровном месте создает JS.
В более вменяемых динамических языках, таких как Ruby, Python, Elixir, значительно более строгая типизация и это уже жирный плюс.

vsb>В том, что убирает баги. Без такой системы типов ты не будешь знать, что у тебя из БД пришло незаполненное поле, которое ты попытался использовать.

Не припомню, чтобы сталкивался с такими багами на практике. Можно более конкретный пример?

vsb>Например можно классы запросов/ответов API держать общими. В итоге не будет рассинхронизации.

Я в последние годы еще на этапе проектирования API заранее описываю типы запросов/ответов в TypeScript, вне зависимости от серверного языка.
По факту они меняются редко и некритично, поэтому выигрыш копеечный.
Re[2]: Поругайте TypeScript/node.js
От: Danchik Украина  
Дата: 23.06.22 19:43
Оценка: 1 (1) +4 -1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, vsb, Вы писали:


vsb>>Недавно рефлексировал и понял, что TypeScript мне кажется самым лучшим подходом для бэкэнда. В нём есть всё, чего мне не хватает в других языках/платформах.


S>Blazor!!

S>https://www.telerik.com/blogs/whats-coming-blazor-dotnet-7

Минус за то что постоянно пихаешь линки без собственных мыслей
Re[4]: Поругайте TypeScript/node.js
От: · Великобритания  
Дата: 23.06.22 20:06
Оценка: -1
Здравствуйте, ·, Вы писали:

·>    const rw: PublicMorozov = ro;
·>...
·>const ro: Ro = {x: "hi"}
·>use(ro);

Вот пока пример писал, ещё на граблю наткнулся. Используется ro из верхнего уровня внутри функции. Соответственно можно словить неинициализированную константу в рантайме если вызвать use сточкой выше.
В общем не язык, а наколенная поделка ради фич, дырявый до безобразия.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Поругайте TypeScript/node.js
От: VladiCh  
Дата: 23.06.22 23:51
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>Здравствуйте, vsb, Вы писали:


VK>>>Java при этом работает в разы быстрее.

vsb>>Это не важно. Всё тяжёлое во внешних сервисах вроде СУБД. Скорость не должна быть очень уж плохой, с этим всё в порядке.
VK>Ну это уже зависит от твоей задачи. Иногда хочется достичь минимального времени отклика, иногда даже что-то близкое к реалтайму.
VK>В Яндексе так вообще на C++ многое пишут и не считают это плохой идеей.

Когда у тебя один и тот же код крутится на десятках-сотнях тысяч машин, подобная оптимизация имеет смысл потому как может сильно сократить затраты.
Если же такого нет (где-то у 99% компаний), то можно и что-то помедленнее использовать.
Re[5]: Поругайте TypeScript/node.js
От: Vermicious Knid  
Дата: 24.06.22 00:54
Оценка:
Здравствуйте, VladiCh, Вы писали:

VC>Когда у тебя один и тот же код крутится на десятках-сотнях тысяч машин, подобная оптимизация имеет смысл потому как может сильно сократить затраты.

VC>Если же такого нет (где-то у 99% компаний), то можно и что-то помедленнее использовать.
Тут такая тема — если можно серьезную нагрузку выдерживать на паре-тройке серверов, то оптимизация имеет смысл даже для небольшой компании/стартапов.

Я вот в свое время слышал предостаточно таких историй, когда известные компании масштабировались поначалу исключительно вертикально. На node.js или там Python повторить такую успешную историию (вертикального масштабирования) как например stackoverflow просто не получится.

На современных версиях C# или Java (а тем более чем-то вроде Scala или Kotlin) писать код обычно получается не сильно медленнее. А производительность заметно лучше. И код в итоге поддерживать и рефакторить будет проще.

Это я говорю как адепт Python в прошлом. Спустя годы осознал, что это далеко не лучший инструмент именно для Web/REST API итп. Node.js в этом плане тоже не выглядит как радикальное улучшение.
Re[6]: Поругайте TypeScript/node.js
От: VladiCh  
Дата: 24.06.22 01:33
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>Здравствуйте, VladiCh, Вы писали:


VC>>Когда у тебя один и тот же код крутится на десятках-сотнях тысяч машин, подобная оптимизация имеет смысл потому как может сильно сократить затраты.

VC>>Если же такого нет (где-то у 99% компаний), то можно и что-то помедленнее использовать.
VK>Тут такая тема — если можно серьезную нагрузку выдерживать на паре-тройке серверов, то оптимизация имеет смысл даже для небольшой компании/стартапов.

VK>Я вот в свое время слышал предостаточно таких историй, когда известные компании масштабировались поначалу исключительно вертикально. На node.js или там Python повторить такую успешную историию (вертикального масштабирования) как например stackoverflow просто не получится.


VK>На современных версиях C# или Java (а тем более чем-то вроде Scala или Kotlin) писать код обычно получается не сильно медленнее. А производительность заметно лучше. И код в итоге поддерживать и рефакторить будет проще.


VK>Это я говорю как адепт Python в прошлом. Спустя годы осознал, что это далеко не лучший инструмент именно для Web/REST API итп. Node.js в этом плане тоже не выглядит как радикальное улучшение.


Для пары-тройки серверов можно купить еще пару-тройку-десять, это не проблема (серьезная оптимизация может обойтись гораздо дороже).
Если же у тебя их пара-тройка сотен тысяч, то это уже имеет куда больше смысла.
Re: Поругайте TypeScript/node.js
От: vaa  
Дата: 24.06.22 01:35
Оценка:
Здравствуйте, vsb, Вы писали:


vsb>6. Совместимость с браузером. Какие-то куски кода можно держать общими между бэком и фронтом. В целом скорей мелочь, но где-то может быть полезно. А также возможность естественно пререндерить страницу на сервере, это уже не мелочь.


это главное преимущество любого ЯП для прикладного программирования.
кол-во багов в разы уменьшается, если можно держать между беком и фронтом общие типы, интерфейсы.
10 наблюдаю движение в эту сторону.
сам typescript приятно удивил при работе со svelte. начинал на js но быстро понял, что следить за изменениями
по мере увеличения LOC становится невозможно.
ts видимо только для этого и нужен мостик в js с меньшим кол-вом опечаток и прочего.
один русский лиспер както сравнил js c лиспом для браузера в плане гибкости. но слабая типизация это конечно зло.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Поругайте TypeScript/node.js
От: Vermicious Knid  
Дата: 24.06.22 02:06
Оценка: +1
Здравствуйте, VladiCh, Вы писали:

VC>Для пары-тройки серверов можно купить еще пару-тройку-десять, это не проблема (серьезная оптимизация может обойтись гораздо дороже).

VC>Если же у тебя их пара-тройка сотен тысяч, то это уже имеет куда больше смысла.
Речь не идет о серьезной оптимизации, достаточно просто изначально разрабатывать на адекватных инструментах разработки, а не сомнительных поделиях вроде того же Node.js.

Это уже хороший задел на будущее. Не только с точки зрения оптимизации, но как я и писал — поддержки и рефакторинга. Node.js и Typescript в этом плане и рядом не стоял с JVM/.NET.
Re: Поругайте TypeScript/node.js
От: scf  
Дата: 24.06.22 03:57
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>Недавно рефлексировал и понял, что TypeScript мне кажется самым лучшим подходом для бэкэнда. В нём есть всё, чего мне не хватает в других языках/платформах.


Тоже думал об этом, тоже игрался с нодочкой.

Почему я всё еще скалист:
— низкое качество, высокое количество и маленькое время жизни библиотек. Что ни возьми, везде полно изъянов и недоработок, которые никто фиксить не будет — скорее новую библиотеку напишут
— не такая уж и легковесная — большие проекты на JVM языках с инкрементальной компиляцией собираются и стартуют быстрее.
— nodejs в 2-5 раз медленнее jvm: https://benchmarksgame-team.pages.debian.net/benchmarksgame/
— слишком часто мутирует. Через 5 лет весь твой код на ноде будет устаревшим УГ, который только на выброс.

Современная JVM — легковесна:
$ time node hello.js
hello, world!

real 0m0,023s
user 0m0,019s
sys 0m0,004s
$ time java Main
Hello, world!

real 0m0,041s
user 0m0,007s
sys 0m0,014s
Re[8]: Поругайте TypeScript/node.js
От: VladiCh  
Дата: 24.06.22 04:40
Оценка: :)
Здравствуйте, Vermicious Knid, Вы писали:

VK>Здравствуйте, VladiCh, Вы писали:


VC>>Для пары-тройки серверов можно купить еще пару-тройку-десять, это не проблема (серьезная оптимизация может обойтись гораздо дороже).

VC>>Если же у тебя их пара-тройка сотен тысяч, то это уже имеет куда больше смысла.
VK>Речь не идет о серьезной оптимизации, достаточно просто изначально разрабатывать на адекватных инструментах разработки, а не сомнительных поделиях вроде того же Node.js.

VK>Это уже хороший задел на будущее. Не только с точки зрения оптимизации, но как я и писал — поддержки и рефакторинга. Node.js и Typescript в этом плане и рядом не стоял с JVM/.NET.


Я просто пояснил почему то что имеет смысл в Яндексе будет довольно глупо в большинстве других компаний.
Писать сервисы на C++ это такое... Node.js и Typescript (а также Python и Ruby например) будут попроще .NET/JVM сервисов с точки зрения скорости написания (до какого-то объема кода во всяком случае),
что для стартапов куда важнее чем производительность.
Re[2]: Поругайте TypeScript/node.js
От: sambl74 Россия  
Дата: 24.06.22 05:17
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Думаю, что подобный опыт мало у кого есть, т.к. на бэке nodejs практически никогда не используется — это все же фронтовый стек (хотя понятно, что при специфических вкусах фронт можно хоть на C++ писать, за примерами далеко ходить не надо).


Nest.js.
Re: Поругайте TypeScript/node.js
От: sambl74 Россия  
Дата: 24.06.22 05:20
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>1. Легковесность. Стартует быстро, потребляет мало памяти. Если сравнивать с Java — небо и земля.


Ну смотря как писать, да. У меня в проекте nest.js и там как-то так всё накручено, что собирается прям ну очень долго. Бек на java собирается быстрее

vsb>4. Очень богатый выбор библиотек и инструментов. В какой-то момент это даже становится минусом, легко слепить франкенштейна. Но, думаю, с должным уровнем консервативности и велосипедостроительства от этой беды можно уберечься.


Nest.js посмотри. Там что-то, пока отдалённо, похожее на Spring.

vsb>5. Свободная IDE VS Code. Я очень люблю и уважаю идею, но она по сути проприетарна. VS Code мне идеологически нравится больше. Ну пункт субъективный, не буду на нём заостряться.


VSCodium свободная, но там уже и не все плагины взлетают, говорят.

vsb>6. Совместимость с браузером. Какие-то куски кода можно держать общими между бэком и фронтом. В целом скорей мелочь, но где-то может быть полезно. А также возможность естественно пререндерить страницу на сервере, это уже не мелочь.


Это да.

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


Ну вот на nest.js вполне приятно писать — декларативно пишешь своей API и оно даже в сваггере сразу всё адекватно показывается. Но можно легко написать что-то очень трудно поддерживаемое
Re[2]: Поругайте TypeScript/node.js
От: vaa  
Дата: 24.06.22 05:33
Оценка:
Здравствуйте, scf, Вы писали:

scf>Современная JVM — легковесна:

scf>$ time node hello.js
scf>hello, world!

scf>real 0m0,023s

scf>user 0m0,019s
scf>sys 0m0,004s
scf>$ time java Main
scf>Hello, world!

scf>real 0m0,041s

scf>user 0m0,007s
scf>sys 0m0,014s

а вместе с компиляцией?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.