Desi in multe cazuri e adevarat, generalizarea e falsa:
Hai să nu uităm contextul. În aplicațiile web mutăm niște date de ici-colea, le mai trecem printr-un filtru,le mai masăm puțin și le trimitem la client.
In teorie da, in practica sunt o groaza de probleme
Plus intrebarea cum faci cat mai eficient toata treaba aia ca sa nu te plictisesti dupa aplicatie.
Am niste dubii ca toate aplicatiile web fac doar asta.
Insa chiar si daca ar fi asa, cuvantul ‘programming’ e ales prea general.
Eu nu inteleg ce e asa complicat la async await, nu e asa oribil node precum multi fac sa para.
Fiecare limbaj care promite ceva safety il face cu un tradeoff major. Un exemplu: hai sa zicem ca cel mai tare si fain limbaj e Rust. Rust vine cu conceptele de ownership si borrowing, respectiv slice-uri. Practic te obliga sa ai o singura variabila mutabila (pe care o poti imprumuta in anumite cazuri in functii imutabile) in fiecare scope si restul trebuie sa fie imutabile. Asta inseamna ca daca nu te gandesti exact cum trebuie facuta fiecare structura o sa iti faca viata un calvar. La fel si cu Haskell/Elixir/etc. E foarte greu sa te pui jos la calculator si sa scrii un server care serveste un fisier json fara sa deschizi google. O alta chestie e ca nu sunt fail fast, la rust iti compileaza o ora orice codebase mai major.
Asta conteaza cand estimezi si livrezi ceva. In node ai libertatea de a scrie cod de cacao, dar poti face ceva si foarte fain, dar poate nu ai oameni care inteleg pattern-urile mai complexe.
Un limbaj precum rust/elixir/haskell practic te obliga sa gandesti foarte bine totul si e aproape imposibil de livrat daca nu stii exact ce sa faci.
Sau iei go ca si exemplu, care e un limbaj super fain din pricina faptului ca poti scrie cod imperativ si livreaza ceva si o maimuta. O sa fie rapid, o sa mearga, il poti paraleliza prin error and trial, se compileaza instant, adica fail fast.
Cu celelalte limbaje care iti ofera memory/concurrency safety te obliga la pattern-uri de te doare capul cateva zile inainte sa te apuci sa scrii cod. Practic trebuie sa intelegi problemele inainte sa scrii codul altfel o sa te lovesti de un zid cum crezi ca deja ai terminat o solutie…
Cu node/go/php/python/kotlin/java/c# mai inveti din mers.
Tot ce ai scris aici pentru mine suna a avantaje. Dupa ani de lucru cu php in care am vazut ce pot face dev-ii slabi(pentru ca limbajul le permite), imi doresc ceva care te obliga sa gandesti inainte, mai ales ca asta inseamna si o bariera de intrare.
Dar ce este asa de rau cu NodeJs?
In fond, scrii in Javascript.
async/await
chiar este fain in js.
Sa sti ca asta e o mare problema pe care am observat-o si eu interactionand oarecum tangential cu node. Pe de alta parte nici Go nu e chiar asa simplu cum pare…