Proč se cpe JavaScript na backend?

Re:Proč se cpe JavaScript na backend?
« Odpověď #60 kdy: 07. 02. 2025, 15:13:52 »
V TypeScript-e som takéto reflexie nikdy nepotreboval. Veci tam do seba pekne zapadajú už v compile time vďaka vlastnostiam ako discriminated unions alebo type predicates.

Uf brzdi to nekritické nadšenie, všetko má svoje plusy aj mínusy, nechápem ľudí ktorí sa tie mínusy snažia nevidieť. To, že si niečo nepotreboval neznamená, že to nepotrebujú ostatní. Tu ide o to aby som ten typ dal zistiť a checkovať rovnako v compile time ako aj v runtime (tak ako to umožňujú skoro všetky hi level kompilované jazyky). Lebo dajme tomu mame funkciu:

Kód: [Vybrat]
type LedColour = 'red' | 'green' | 'blue';

function lightUpTheLed(color: LedColour) {
    ...
}

lightUpTheLed("yellow"); // tu mi kompilator vyhodi chybu

const ledColour = await (await fetch('/api/get-color')).json<LedColour>(); // vrati "yellow"

lightUpTheLed(ledColour);

v poslednom riadku mi hodnota "yellow" prejde a celé sa mi to zosype až v tele funkcie, nevyskočí mi žiadna exception o nesprávnom type argumentu, runtime nevie kde nastala chyba - IDE mi neoznačí argument funkcie ako chybový. Načo je potom taký deravý typing? Ako pomáha to, ale často tá schýza vedie skôr k pocitu falošného bezpečnia.

Potom keď chcem napísať ORM framework, service kontainer, alebo validovať restové apiny, tak sú mi typescriptové typy na dve veci. A potom vznikajú projekty ako https://github.com/gcanti/io-ts Kde si type checker píšem v novom DSL, nestačí mi na to jeden jazyk (typescript) potrebujem extra DSL s novou syntaxou zápisu typov, ktorý pokrýva len malú podmnožinu typingu TS, aby javascript runtime konečne rozumelo tomu istému čo som už raz vyjadril v TS.

Môj názor je presne opačný - ak potrebujem reflexie, aby som v runtime zistil typ objektu, tak je to nedostatok daného jazyka (prípadne nevhodný návrh kódu). TypeScript je pre mňa dôkaz, že sa to dá urobiť bez reflexií, jednoducho, čitateľne a v compile time.

píšeš to ako keby reflexia bolo niečo desivé:

Kód: [Vybrat]
var text = "ABC";
text.GetType().Name // vrati nazov typu premennej "text" ako "string";

Je na tomto niečo desivé? Nehovoriac o tom, že tú reflexiu / introspekciu najčastejšie používa priamo runtime keď ťa upozorní na chybu. Málokedy narazíš na situácie keď sa musíš na typy dopytovať sám (aj keď občas sa to hodí).


Re:Proč se cpe JavaScript na backend?
« Odpověď #61 kdy: 07. 02. 2025, 15:19:27 »
Dnes se bez IDE programovat neda a popravde netusim jediny duvod, proc IDE nepouzivat.

Aha, takže už víme, že vy bez IDE programovat neumíte. To ovšem svědčí spíš o vás, uvědomujete si to?
A důvodů proč nepoužívát IDE je celá řada. Stejně, jako proč ho používat. Rozepisovat se mi je nechce.

Existuje celá řada důvodů, proč se střelit do nohy, rozepisovat se mi je nechce.
Co jsem viděl lidi, co tvrdí, že "nepotřebujou IDE, stačí jim vim", tak jsou vždycky zoufale neefektivní - buď musí dělat ručně věci, co normálně dělá IDE samo, nebo tam mají 50 pluginů (včetně language serveru, ale vůbec to neni do-it-yourself IDE) a tráví půlku pracovní doby tím, že je udržujou ve funkčním stavu...

Re:Proč se cpe JavaScript na backend?
« Odpověď #62 kdy: 07. 02. 2025, 16:28:44 »
Co jsem viděl lidi, co tvrdí, že "nepotřebujou IDE, stačí jim vim", tak jsou vždycky zoufale neefektivní - buď musí dělat ručně věci, co normálně dělá IDE samo, nebo tam mají 50 pluginů (včetně language serveru, ale vůbec to neni do-it-yourself IDE) a tráví půlku pracovní doby tím, že je udržujou ve funkčním stavu...

A co jsem viděl já, byli to lidé, co normálně fungovali. Ostatně zajímalo by mě, co "IDE dělá samo". Nemluvě o tom, že jste určitě měřil kolik tráví pracovní doby tím, že něco "udržují ve funkčním stavu". Reálně jsou to jen vaše předsudky a dojmologie kombinované se značným nedostatkem představivosti společně případně rovnou s neschopností dělat věci bez IDE.

Pár let jsem takhle používal k vývoji třeba Gedit bez pluginů. To, že něco nemáte v IDE ještě fakt neznamená, že na to nemáte jiný nástroj jinde. Občas ale přijde nějaký věrozvěst a začne vždy vyprávět, jak to nejde... To už je skoro klasika.

Re:Proč se cpe JavaScript na backend?
« Odpověď #63 kdy: 07. 02. 2025, 16:40:35 »
Dnes se bez IDE programovat neda a popravde netusim jediny duvod, proc IDE nepouzivat.

Aha, takže už víme, že vy bez IDE programovat neumíte. To ovšem svědčí spíš o vás, uvědomujete si to?
A důvodů proč nepoužívát IDE je celá řada. Stejně, jako proč ho používat. Rozepisovat se mi je nechce.

Existuje celá řada důvodů, proč se střelit do nohy, rozepisovat se mi je nechce.
Co jsem viděl lidi, co tvrdí, že "nepotřebujou IDE, stačí jim vim", tak jsou vždycky zoufale neefektivní - buď musí dělat ručně věci, co normálně dělá IDE samo, nebo tam mají 50 pluginů (včetně language serveru, ale vůbec to neni do-it-yourself IDE) a tráví půlku pracovní doby tím, že je udržujou ve funkčním stavu...

Možná si jen nedokážeš představit jak vypadá práce, když ten kód máš v hlavě, a nepotřebuješ pomoc IDE, neustálé šahání na myš tě zdržuje, klávesnice je pro tebe hlavní nástroj. 50 pluginů a language server? Tmux, taby, čistý vim a barevná syntaxe je vše co k životu potřebuji.

Za mě je jedno v čem co píšeš, občas také otevřu Kate, Sublime, Eclipse nebo VSCode, spoustu kódu napíšu i přímo v editoru na github/gitlabu. Dává mi to volnost, ale ať si to každý dělá sám, klidně si to piš ve wordu, když ti to tak vyhovuje a jsi schopný tak pracovat, ale nenálepkuj ostatní, když mají raději wordpad.

Re:Proč se cpe JavaScript na backend?
« Odpověď #64 kdy: 07. 02. 2025, 19:05:59 »
Citace
...v poslednom riadku mi hodnota "yellow" prejde a celé sa mi to zosype až v tele funkcie

Prirodzene, že sa to zosype, veď ste to pretypoval "nasilu" na LedColor. Všetko, čo príde z zvonku, treba prehnať cez validátor. Preženiete to napr. cez Ajv a dostanete buď validný LedColour alebo validation error. Žiadne reflexie tam nepotrebujete. Samozrejme, že ak nekontrolujete vstupy, tak sa dostanete do problémov úplne v každom existujúcom jazyku.

Citace
Potom keď chcem napísať ORM framework, service kontainer, alebo validovať restové apiny, tak sú mi typescriptové typy na dve veci.

TypeORM pre mňa funguje dobre, je plne type safe. Validácie robím cez spomínaný Ajv, tiež type safe.

Ak myslíte skôr písanie vlastného ORM alebo kontainera, tak to som neimplementoval, takže sa žiaľ neviem vyjadriť a nejdem tu polemizovať. Každopádne ide o špecifické veci, ktoré si bežný web developer neimplementuje sám.

Citace
Je na tomto niečo desivé?

Nepíšem, že je reflexia desivá. Rád podsúvate "slamených panákov", aj vyššie v príspevku :)

Citace
Nehovoriac o tom, že tú reflexiu / introspekciu najčastejšie používa priamo runtime keď ťa upozorní na chybu.

To je v poriadku, interpreter predsa nevyhnutne potrebuje vedieť čo interpretuje.

Citace
Málokedy narazíš na situácie keď sa musíš na typy dopytovať sám (aj keď občas sa to hodí).

Úplne súhlasím. Občas sa to hodí. Čím lepší jazyk, tým menej je to potrebné. Ako som už písal, v TypeScript-e som to osobne ešte nepotreboval.
« Poslední změna: 07. 02. 2025, 19:07:43 od speculatius »


BoneFlute

  • *****
  • 2 000
    • Zobrazit profil
Re:Proč se cpe JavaScript na backend?
« Odpověď #65 kdy: 07. 02. 2025, 20:36:20 »
Co jsem viděl lidi, co tvrdí, že "nepotřebujou IDE, stačí jim vim", tak jsou vždycky zoufale neefektivní - buď musí dělat ručně věci, co normálně dělá IDE samo, nebo tam mají 50 pluginů (včetně language serveru, ale vůbec to neni do-it-yourself IDE) a tráví půlku pracovní doby tím, že je udržujou ve funkčním stavu...

A platí to i naopak: Ti lidé, kteří užívají IDE jsou velice efektivní, protože pošlou polorozbořený kód, u kterého vůbec netuší, co to dělá, a já to po nich musím učesávat...

Ve skutečnosti IDE/neIDE dobré programátory nedělá.

alex6bbc

  • *****
  • 1 749
    • Zobrazit profil
    • E-mail
Re:Proč se cpe JavaScript na backend?
« Odpověď #66 kdy: 07. 02. 2025, 20:44:11 »
ide je fajn a s msvc debugerem je to lepsi.
ale je dobre vedet aspon neco o gdb v command lajne.
totez editace a prace s editorem nebo ide, bud jsi drsny nebo drsnejsi.

BoneFlute

  • *****
  • 2 000
    • Zobrazit profil
Re:Proč se cpe JavaScript na backend?
« Odpověď #67 kdy: 07. 02. 2025, 20:50:59 »
Citace
...v poslednom riadku mi hodnota "yellow" prejde a celé sa mi to zosype až v tele funkcie

Prirodzene, že sa to zosype, veď ste to pretypoval "nasilu" na LedColor. Všetko, čo príde z zvonku, treba prehnať cez validátor. Preženiete to napr. cez Ajv a dostanete buď validný LedColour alebo validation error. Žiadne reflexie tam nepotrebujete. Samozrejme, že ak nekontrolujete vstupy, tak sa dostanete do problémov úplne v každom existujúcom jazyku.

No v každém existujícím jazyku asi ne. Elm ani Rust by to nedovolil.

Technicky máte pravdu.

Ale když se podívám na ten kód:

Kód: [Vybrat]
const ledColour = await (await fetch('/api/get-color')).json<LedColour>(); // vrati "yellow"

Mě tam nic nevaruje, že tam používám nějakou reflexi, přetypování na sílu, etc. Ten kód vrátit hodnotu typu LedColour, což zřejmě nedělá. Teď je tedy otázka, kdo za tu díru může: Jazyk, nebo knihovna, která je nedokonalá?

Jaká je signatura návratové hodnoty té funkce .json<LedColour>()?

Pokud je to něco jako
Kód: [Vybrat]
: T | string
tak je to sice prasečinka, ale vina je jednoznačně na straně #fortran1986

Pokud je signatura
Kód: [Vybrat]
: T

Tak je to chyba TypeScriptu (a zklamal mě).

Re:Proč se cpe JavaScript na backend?
« Odpověď #68 kdy: 08. 02. 2025, 04:18:21 »
Protože spousta začínajících programátorů není schopna napsat zdroják tak, aby běžel třeba v PHP na serveru a zároveň v JS na klientovi. A tak mylně došli k závěru, že je to potřeba napsat v jednom konkrétní jazyce a buď použijí JS i na serveru (jako node,js nebo třeba v8js), anebo naopak použijí PHP na klientovi (přes WASM), anebo to napíší v něčem jako Haxe a transpilují.

Kit

  • *****
  • 722
    • Zobrazit profil
    • E-mail
Re:Proč se cpe JavaScript na backend?
« Odpověď #69 kdy: 09. 02. 2025, 18:28:06 »
Dnes se bez IDE programovat neda a popravde netusim jediny duvod, proc IDE nepouzivat.
Argument o nepouziti IDE je toho ranku, jakoze kdyz nepouziju klic od zahradni branky, polezu pres plot.

To je pouze tvůj pohled, že potřebuješ IDE. Je na každém v čem dělá, mně prostě stačí vim, IDE mě akorát vyrušuje od práce, příliš moc ikonek, funkcí, příliš pomalá odezva, nepotřebuji, ale je to pouze můj způsob práce, stejně jako je tvůj práce v IDE.

Navíc IDE často podporuje psaní prasáckého kódu s hromadou zbytečných přístupových metod a s nevhodným rozhraním.

Kit

  • *****
  • 722
    • Zobrazit profil
    • E-mail
Re:Proč se cpe JavaScript na backend?
« Odpověď #70 kdy: 09. 02. 2025, 18:51:26 »
ide je fajn a s msvc debugerem je to lepsi.
ale je dobre vedet aspon neco o gdb v command lajne.
totez editace a prace s editorem nebo ide, bud jsi drsny nebo drsnejsi.

K čemu je dobrý debugger? Testy jsou mnohem praktičtější. Když jsou spouštěny přímo z editoru, tak je to velmi produktivní.

Re:Proč se cpe JavaScript na backend?
« Odpověď #71 kdy: 09. 02. 2025, 19:22:57 »
Protože spousta začínajících programátorů není schopna napsat zdroják tak, aby běžel třeba v PHP na serveru a zároveň v JS na klientovi. A tak mylně došli k závěru, že je to potřeba napsat v jednom konkrétní jazyce a buď použijí JS i na serveru (jako node,js nebo třeba v8js), anebo naopak použijí PHP na klientovi (přes WASM), anebo to napíší v něčem jako Haxe a transpilují.

Sorry, ale to je naprostý nesmysl. Realita je prostě taková, že když máte pár programátorů a umí JS, je podstatně snažší v nějakém startupu napsat v JS i backend místo toho, abyste se pracně učil nebo sháněl lidí na něco dalšího jen proto, abyste byl free, cool a in a mohl si říkat, jak jste úžasný. Když to bude potřeba, lze to udělat i později. Toho se totiž fakt nenajíte a faktury z toho nezaplatíte.

Re:Proč se cpe JavaScript na backend?
« Odpověď #72 kdy: 09. 02. 2025, 19:28:46 »
ide je fajn a s msvc debugerem je to lepsi.
ale je dobre vedet aspon neco o gdb v command lajne.
totez editace a prace s editorem nebo ide, bud jsi drsny nebo drsnejsi.

K čemu je dobrý debugger? Testy jsou mnohem praktičtější. Když jsou spouštěny přímo z editoru, tak je to velmi produktivní.

K tomu, že píšete-li testy, je to sice děsně cool i užitečné, ale ve většině případů vám těch padesát procent času co tím navíc strávíte jednoduše nikdo nezaplatí. A můžete třeba chodit po uších. Nemluvě o tom, že je sice hezké, že vám selže test, ale vy často potřebujete zjistit proč selhal. A to v komplexnějších aplikacích může být zatraceně zamotané. Vzájemně se to tedy ani fakt nenahrazuje.

Kit

  • *****
  • 722
    • Zobrazit profil
    • E-mail
Re:Proč se cpe JavaScript na backend?
« Odpověď #73 kdy: 09. 02. 2025, 19:52:14 »
ide je fajn a s msvc debugerem je to lepsi.
ale je dobre vedet aspon neco o gdb v command lajne.
totez editace a prace s editorem nebo ide, bud jsi drsny nebo drsnejsi.

K čemu je dobrý debugger? Testy jsou mnohem praktičtější. Když jsou spouštěny přímo z editoru, tak je to velmi produktivní.

K tomu, že píšete-li testy, je to sice děsně cool i užitečné, ale ve většině případů vám těch padesát procent času co tím navíc strávíte jednoduše nikdo nezaplatí. A můžete třeba chodit po uších. Nemluvě o tom, že je sice hezké, že vám selže test, ale vy často potřebujete zjistit proč selhal. A to v komplexnějších aplikacích může být zatraceně zamotané. Vzájemně se to tedy ani fakt nenahrazuje.

Když selže test, tak vždy přesně vidím, proč selhal. Třídy mívám do 80 řádek a nevidím v tom nic tak komplexního, aby mi testy neukázaly chybu.

Re:Proč se cpe JavaScript na backend?
« Odpověď #74 kdy: 09. 02. 2025, 20:24:11 »
K čemu je dobrý debugger? Testy jsou mnohem praktičtější. Když jsou spouštěny přímo z editoru, tak je to velmi produktivní.
Debugger používám málokdy, ale když už je potřeba, tak se hodí. Většinou při zkoumání, proč se nějaká knihovna chová jinak, než by měla/bych čekal. Pak je celkem užitečné moct si prohlížet všechny lokální proměnné z celého call stacku a proklikávat se strukturou složitějších objektů.

Testy jsou na něco trochu jinýho.

K tomu, že píšete-li testy, je to sice děsně cool i užitečné, ale ve většině případů vám těch padesát procent času co tím navíc strávíte jednoduše nikdo nezaplatí. A můžete třeba chodit po uších.
Zaplatí, protože nemá na výběr. To není něco, do čeho by měl zákazník kecat. Nehledě na to, že u dlouhodobějších projektů to čas nakonec ušetří (ale to i podle vašich ostatních příspěvků asi není ten typ, co byste dělal - spíš rychle splácat kód bez IDE a bez testů, hodit po zákazníkovi a hurá na další)