• Mia@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    23
    arrow-down
    4
    ·
    edit-2
    5 months ago

    People dislike JS because it’s packed full of moronic footguns and technical debt. The “standard library” is full of baffling decisions and, much like the language, rarely does what you expect. Even its creator agrees it’s a terrible language and should have been replaced by now.

    TypeScript is better, but at the end of the day it’s just an illusion. Add an any anywhere, which will happen, and you’re back to square one. It also still inherits some of the weirdness of JS, because it is just JS with fake types bolted on. Plus, the amount of work one has to do to create a proper library with TypeScript support completely undermines the few advantage of JavaScript. Might as well use a real statically typed language at that point, at least you’d be sure your types are actually enforced.

    Also, the whole web ecosystem is ass. The hoops one has to jump through nowadays to do web development are absolutely batshit crazy. And no, having a create-whatever that sets things up for you is not a real solution.

    • Feathercrown@lemmy.world
      link
      fedilink
      English
      arrow-up
      7
      arrow-down
      2
      ·
      5 months ago

      Also, the whole web ecosystem is ass. The hoops one has to jump through nowadays to do web development are absolutely batshit crazy.

      I don’t recall the experience being even equally pleasant in other languages, let alone better.

      • Mia@lemmy.blahaj.zone
        link
        fedilink
        arrow-up
        12
        ·
        edit-2
        5 months ago

        It definitely isn’t in some circumstances.
        Frankly I’d put C/C++ in a similar category when it comes to compilation.
        Dealing with Make, CMake, linkage and all that can be a nightmare.
        The ecosystem is a little bit better though in my opinion. If nothing else you get a proper standard library and don’t have to rely on thousands of dependencies to get anything done… or you often roll your own if you are in C… which is meh.

        I find Rust, C#, Go and anything slightly more modern to be a great or at least good experience.
        Python as well if you use venv and your runtime and package versions align.

        My point is, there is no perfect platform and ecosystem, but the web is generally regarded as one of the poorest.
        I’m not saying someone can’t enjoy working on web stuff, they most certainly can. But it is objectively overcomplicated.

        • Feathercrown@lemmy.world
          link
          fedilink
          English
          arrow-up
          6
          ·
          5 months ago

          I won’t argue that the web is complicated, but a lot of that complexity comes from the necessity of supporting so many different environments that you can’t control.

          I’d also like to ask when the last time you used JS was-- we use one UI framework (Angular) but no lodash, jquery, etc. to provide library functionality. Everything’s just built into JS now.

          • Mia@lemmy.blahaj.zone
            link
            fedilink
            arrow-up
            5
            arrow-down
            1
            ·
            edit-2
            5 months ago

            I can understand accounting for different environments. That’s unfortunately unavoidable. But I found web framework developers in particular have a weird tendency of piling up ungodly amounts of abstractions just for the sake of it.

            It’s kind of a cultural problem in modern software development in general imo. It’s not limited to web dev by any means, but it’s particularly bad there because JS lends itself to it quite well.

                • Feathercrown@lemmy.world
                  link
                  fedilink
                  English
                  arrow-up
                  4
                  ·
                  5 months ago

                  Day 43. My tech stack has breached the clouds. I can no longer see the ground. I fear that I will not be able to return to the surface.

                  • lad@programming.dev
                    link
                    fedilink
                    English
                    arrow-up
                    3
                    ·
                    5 months ago

                    You will not, indeed, it’s going to be abstractions all the way down from now on

          • Mia@lemmy.blahaj.zone
            link
            fedilink
            arrow-up
            2
            ·
            edit-2
            5 months ago

            I had to go back to working with React just recently. I’m technically using TS, but the standard library is the same anyways. It hardly has everything imo.
            It does have what it needs to interface with the browser, and quite a few -sometimes poorly thought out- facilities, but not much more.

            Don’t get me wrong, for a web scripting language it’s plenty, but if one wants to use JS for stuff that isn’t just putting a simple page on a screen, that’s not enough.

            Maybe you mean Node instead of JS?

              • Mia@lemmy.blahaj.zone
                link
                fedilink
                arrow-up
                2
                arrow-down
                3
                ·
                5 months ago

                Anything that isn’t plain web browser stuff.

                You can’t write files without Node specific APIs.
                You can’t even do proper bitwise operations because everything’s a float.
                Binary serialization is a pain and proper deserialization in general is not enforced, even in TypeScript, because types are an illusion.
                Up until recently there were no synchronization primitives, though now the idea of having them in JS seems terrifying.
                There are no other data structures than arrays and maps, which are often not enough.

                It’s just not a language I’d use for anything more than… well… Scripting. But even though other, better solutions exist for cross platform development, people insist on using JS, so here we are.

                • Feathercrown@lemmy.world
                  link
                  fedilink
                  English
                  arrow-up
                  8
                  arrow-down
                  1
                  ·
                  5 months ago

                  You can’t write files without Node specific APIs.

                  You seem to be confused about what JS is. It’s a high-level interpreted language. It’s not C. Of course it can’t open files. Can you imagine if any webpage could open files on your PC? This is like asking why Rust doesn’t have a certain Blender shader node or Scratch block. The language fundamentally doesn’t include those concepts directly. As an interpreted language, of course JS is going to access OS APIs through its host program. If the concern is that the APIs aren’t standardized-- well, yeah, that’s true. Although the basic stuff (file I/O) is included in runtimes directly.

                  You can’t even do proper bitwise operations because everything’s a float.

                  Is there something I’m missing here? Why would you expect to be able to do bitwise operations on floats and get a sensible value? And if you want to do integer bitwise operations… you still can? Just use integer values and the bitwise operators? If you’re complaining that you can’t be sure if a number is an integer, that’s 1. a separate issue, bitwise operations still work fine, and 2. easily solved.

                  Binary serialization is a pain and proper deserialization in general is not enforced, even in TypeScript, because types are an illusion.

                  Have you looked at the bit arrays JS has now?

                  Up until recently there were no synchronization primitives, though now the idea of having them in JS seems terrifying.

                  Do you require multithreading for a language to be considered “good enough”? Why complain now that JS does have these abilities?

                  There are no other data structures than arrays and maps, which are often not enough.

                  This is patently false. JS has sets, maps (actual ones, not objects like you were referring to), etc. We’re soon getting records and tuples. If you want to build a linked list in JS, you do it the exact same way as you would in any other language. Not that it would be very useful.

                  • Mia@lemmy.blahaj.zone
                    link
                    fedilink
                    arrow-up
                    2
                    arrow-down
                    1
                    ·
                    edit-2
                    5 months ago

                    Is there something I’m missing here? Why would you expect to be able to do bitwise operations on floats and get a sensible value? And if you want to do integer bitwise operations… you still can? Just use integer values and the bitwise operators?

                    No that’s my point. You can’t, because there’s no such thing as an integer value. It’s all floats, always. They get casted to integers, the binary operation is done, then they get converted back to floats. That’s a lossy process, so some binary operations with certain values are simply not possible and you get weird results. The max width of an integer you can store is 53 bits, the maximum addressable width is 32 bits for binary operations. That’s wonky.

                    This is patently false. JS has sets, maps, etc…

                    Ah yes I forgot sets. But I don’t think there’s anything else? Last time I checked there were no binary trees, no proper (ring buffer) queues, no ordered sets, but I may be wrong on that. It’s not enough imo for a proper standard library.

                    For everything else:

                    My point is that JS is an okay scripting language for the web. As I said, for that it’s perfectly fine, though the frameworks are often lacking imo. But there is this tendency to use it to create backends, desktop applications and tooling. That’s where the language falls apart, because it’s not made for that. It needs to be more robust, well defined and fully featured to be used in those contexts, both in terms of JS itself, and its standard library. Same with TS.

                    You seem to be confused about what JS is. It’s a high-level interpreted language. It’s not C.

                    I know and that’s the point. It’s underspecified for things outside the web, so it’s terrible for those use-cases. You can make it work for Node, but not for Bun or any other runtime. And even then, the experience is acceptable at best.

                    I personally would never use it for such use-cases, but people keep touting it and TS as these amazing general purpose languages you can do anything in. You can, but you really shouldn’t.

        • Valmond@lemmy.world
          link
          fedilink
          arrow-up
          6
          arrow-down
          1
          ·
          5 months ago

          C# with the M$ echosystem sucks ass though. It’s like at first wow nice language, now how do you do this or that basic stuff and it’s just crap.

          I want a Map. map map; ? Oh no ; Map map=new(); ???

          Where are the destructors?

          Etc.

          I get the feeling it’s too steered by the corporate and not enough open source.

      • Amju Wolf@pawb.social
        link
        fedilink
        English
        arrow-up
        4
        ·
        5 months ago

        For all the hate PHP gets (or used to get) it’s ecosystem is amazing. And so is the language and standard library itself for the most part. It still inherits some of the original issues, but a lot of work has been done to minimize them.

    • masterspace@lemmy.ca
      link
      fedilink
      English
      arrow-up
      8
      arrow-down
      7
      ·
      edit-2
      5 months ago

      People dislike JS because it’s packed full of moronic footguns and technical debt.

      Lol, no it’s not. The literal only footgun is the truthiness aspect of equality and using ===, and it’s really not hard to figure out and avoid. Especially given that linters will automatically flag it for you.

      TypeScript is better, but at the end of the day it’s just an illusion. Add an any anywhere, which will happen, and you’re back to square one.

      It is extremely easy to not let any slip into your code, you do this little thing called review code before merging. Crazy, I know, but by just following the most basic software development practices it turns out you can also avoid other basic junior mistakes! Wild right?

      And lmao, oh my god the web ecosystem is ass because a framework for producing robust complex applications isn’t just an html and CSS file? Lmao bruh, tell me you’ve never coded in a different language without saying you’ve never coded in a different language. You think a .csproj or a .gradle file is simpler and more intuitive?

      You’re mistaking basic junior programming mistakes for issues with the language.

      • Mia@lemmy.blahaj.zone
        link
        fedilink
        arrow-up
        13
        arrow-down
        3
        ·
        edit-2
        5 months ago

        Lmao bruh, tell me you’ve never coded in a different language without saying you’ve never coded in a different language.

        I’ve been a software developer for over 10 years, on both on the front end and the back end.
        I’ve worked with jQuery, React, plain old DOM manipulation, god damn PHP. I’m not new to web development.

        Outside of web technologies, I’ve worked on nautical charts processing software and microcontroller firmware in C, C++ and Rust.
        I’ve worked on native GUI applications with C++, Java and C# using JavaFX, WPF, GTK, Qt.
        All under strict corporate standards.
        I also work on compilers and rendering engines in my spare time.

        So no, I’m not a “junior programmer” making “basic junior programming mistakes”. Your favourite language is ass.
        You shouldn’t immediately jump to the conclusion that someone has never written a line of code only because they say so.
        Sorry if it hurts your feelings, but even senior developers, web or otherwise, say it. I’m not the one swimming against the current, you are.

        And lmao, oh my god the web ecosystem is ass because a framework for producing robust complex applications isn’t just an html and CSS file?

        Alright, let’s do a little experiment, shall we? Let’s try and create an empty electron app with React and TypeScript.
        A quick create-electron-app and some configuring TS, ESLint and WebPack later we reach a whopping 3_087_725 lines of code. 3 million lines. ~700MB.
        This all requires a linting step, a pre-compilation step though tsc, multiple additional translation steps through webpack for older ES versions.
        All of that for an empty page on a webview.

        This is batshit crazy. And I come from fucking CMake for crying out loud.
        There is nothing robust about this, the slightest misstep and your sourcemaps are fucked.
        Whoops the author of left-pad decided to pull it from npm - half the JS ecosystem on its knees.
        Whoops the author of is-even one day decides it’s a stupid package to need - half the JS ecosystem on its knees.

        Web developers are standing on a crumbling, fermenting pile of shit. Get over it.

        With that said, you can still enjoy JS and all the web stuff, there’s nothing wrong with that…

        • masterspace@lemmy.ca
          link
          fedilink
          English
          arrow-up
          2
          arrow-down
          8
          ·
          5 months ago

          Sorry if it hurts your feelings, but even senior developers, web or otherwise, say it. I’m not the one swimming against the current, you are.

          Lmao bro, I don’t think I’m the one with hurt feelings given your unhinged credential boasting and several paragraphs of unprompted bitching about electron.

          You make basic JavaScript mistakes that should be caught by linters, and certainly by any intermediate to senior level reviewer. Get over it and learn to be better and not make basic mistakes.

          • Mia@lemmy.blahaj.zone
            link
            fedilink
            arrow-up
            7
            arrow-down
            2
            ·
            edit-2
            5 months ago

            You seem to confuse “people making mistakes” with “a language that is designed in such a way that those mistakes are not only common, but integral part of the experience.”

            I’m not saying I make such mistakes, I say the design is crap. It’s not a skill issue, it’s a design issue. People say null pointers were a mistake. I’m inclined to agree. Not because I get a null pointer exception every five minutes, but because there are better ways to handle cases like that.

            You said I was a rookie, I proved you wrong.
            You said there was nothing crazy about web application complexity, I provided you with a common, glaring example. There’s nothing unhinged in saying “look I installed Electron and React and not my project has 3 million lines of crap I have to worry about”.
            Everything else was just emphasis for the sake of it.

            But when you don’t have a valid argument, you resort to personal attacks. Maybe it’s you that should learn to be better.

            • urshanabi [he/they]@lemmygrad.ml
              link
              fedilink
              arrow-up
              1
              ·
              5 months ago

              Hi, I don’t really code besides computation stuff in Python. You seem to be really knowledgeable, could I ask, what does the future of the web look like? Is it Rust and WASM? Or will JS and TS always have a place even a decade from now?

              • BatmanAoD@programming.dev
                link
                fedilink
                arrow-up
                3
                ·
                edit-2
                5 months ago

                The fairly unique thing about the web is that the tech stack is pretty much entirely dependent on what browsers are “winning” at any given time. There are web standards, but Chrome steamrolls them regularly (either by ignoring them or by pressuring the committee to standardize what they want). This is why browser monoculture is bad, and why people recommend Firefox and other non-Chrome (or really, non-WebKit) browsers, as a matter of principle.

                So right now, with Chrome’s dominance, Mozilla’s struggles, and the extremely slow progress of WebAssembly and WASI, it definitely feels like JavaScript will remain dominant for a long while. But since Chrome does support WebAssembly and Google participates in WASI, and since there’s no fundamental reason why WASI can’t eventually provide everything that JS does today, there’s good reason to expect the JS stranglehold not to last forever.

                And the great thing about WASM/WASI is that, since it’s designed as a compilation target rather than a language, there won’t be any remaining reason for a single language (such as Rust) to dominate. Rust got an early lead in WASM because they put the effort into making it a viable target platform for the compiler, and because it’s the kind of language that attracts people who dislike JavaScript (such as myself). But there’s no reason a different language couldn’t rapidly become the most commonly used WASM language if, say, a web framework in a previously-niche language becomes popular. (After all, Rails, a back-end framework, is what popularized Ruby.)

                Edit to add: I say “fairly unique”, but in fact there’s a very analogous situation with C: https://faultlore.com/blah/c-isnt-a-language/

            • masterspace@lemmy.ca
              link
              fedilink
              English
              arrow-up
              2
              arrow-down
              3
              ·
              edit-2
              5 months ago

              I’m not saying I make such mistakes, I say the design is crap. It’s not a skill issue, it’s a design issue.

              That’s what people with skill issues tend to say.

              You learned how to write == in every other language, but you can’t figure out === in typescript?

              You’re bitching and whining about a tiny syntax issue that enables backwards compatibility for literally every web site ever created.

              You said I was a rookie, I proved you wrong.

              You apparently still bitch and whine like a rookie. Maybe work on your emotional maturity if you want to come across as an experienced senior and not just a Reddit-read edge lord.

              You said there was nothing crazy about web application complexity, I provided you with a common, glaring example.

              No, you didn’t.

              There’s nothing unhinged in saying “look I installed Electron and React and not my project has 3 million lines of crap I have to worry about”.

              Yes, there is, given that the vast majority of web applications run in this thing called a web browser, and you decided to instead choose the project example where you install a whole web browser alongside operating system shims into your project.

              • Mia@lemmy.blahaj.zone
                link
                fedilink
                arrow-up
                6
                arrow-down
                2
                ·
                5 months ago

                That’s what people with skill issues tend to say.

                Not that’s what people who can recognize genuine architectural defects and aren’t blind fanboys say.

                You apparently still bitch and whine like a rookie.

                Only to your eyes since apparently pointing out genuine problems is whining. It’s okay for people not to like the stuff you like. And no, using a few swear words for emphasis doesn’t make someone immature, nor does listing what one has worked with for context.

                You learned how to write == in every other language, but you can’t figure out === in typescript?

                …you still haven’t realised that === is not what I have a problem with have you? It’s literally a non issue. In fact, equality in general is a non issue. It’s the wonky standard library, lack of proper support for binary operations, serialization and almost everything being an afterthought that I have a problem with. Does it prevent me from using the language and write proper, stable software? No. But it’s not good.

                you install a whole web browser alongside operating system shims into your project

                Except that amounts to a mere ~180_000 lines of the 3 million. Did a plain create-react-app without Electron, still over 3 million.

                Now, since it’s impossible to have a genuine conversation if the other party’s response is “haha you suck” to any genuine, documented criticism, are you gonna grow up or are you gonna keep acting like an offended 13 year old who can’t find a better retort?

                • masterspace@lemmy.ca
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  edit-2
                  5 months ago

                  Not that’s what people who can recognize genuine architectural defects and aren’t blind fanboys say.

                  That’s what people say to people who don’t raise valid criticisms but just go on unhinged rants about how credentialed they are.

                  …you still haven’t realised that === is not what I have a problem with have you? It’s literally a non issue. In fact, equality in general is a non issue. It’s the wonky standard library, lack of proper support for binary operations,

                  Wonky standard library? Name your issues.

                  Lack of proper support for binary operations? Like Jesus Christ you also frustrated by a lack of direct access to the assembly instruction set? Do you know why those arent properly supported? Because it doesn’t come up for 99.99% of software developers, and for those who do need to do bitwise math and manage memory directly, you have the entirety of Web Assembly available to you.

                  serialization and almost everything being an afterthought that I have a problem with.

                  As opposed to other languages where the entire concept of functional and async programming were implemented after the first version? Name your specific criticism of how JavaScript implements serialization that you don’t like.

                  Except that amounts to a mere ~180_000 lines of the 3 million. Did a plain create-react-app without Electron, still over 3 million.

                  Who the fuck cares? Do you know how much easier it is to parse through and find a problem in 3 million lines of JavaScript code then it is to try and figure out what part of the millions of lines of closed source compiled code that make up Java or C# or whatever other language you like?

                  You’re also using a deprecated project, and you’re checking against the dev version with dev dependencies, not the final minified version. Oh my god look at how big this Java project is before I compile it, what a nightmare!!1!1!1!

                  You’re the one who came into this thread bitching like a Reddit edge lord about the most popular language and the most successful cross platform development platform in the entire history of programming, I’m the one saying it’s no worse than any other major languages and is better than many of them.

                  But no, I’m sure it’s the millions of successful developers and users who are wrong. Everything is shit but you amirite?

                  • Mia@lemmy.blahaj.zone
                    link
                    fedilink
                    arrow-up
                    1
                    arrow-down
                    1
                    ·
                    edit-2
                    5 months ago

                    Oh my god look at how big this Java project is before I compile it, what a nightmare!!1!1!1!

                    When shipping to customers, all code is your responsibility, dependency or otherwise. A bug or a security vulnerability, which aren’t rare in the JS ecosystem, is your responsibility whether you wrote the code or not. Customers don’t care if someone else wrote it, it’s your product, you are to blame. Thus, the less code, the better. Less moving parts also means more stability in general.

                    the most popular language and the most successful cross platform development platform in the entire history of programming

                    But no, I’m sure it’s the millions of successful developers and users who are wrong.

                    People can be successful with things that aren’t perfect. It’s often a matter of being the first, not being the best. Something can be popular and still not be good, momentum is hard to stop. If JS’s own creator saying so in the last few years can’t convince you of that, I don’t know what will. Flash at one point was the most popular. It was still flawed, and a liability, but I bet that doesn’t hurt you as much to hear.

                    Everything is shit but you amirite?

                    Quite the contrary. I have flaws like everybody else, but at least I don’t deflect every single criticism of stuff I like because in can’t fathom it not being perfect. It’s fine, use it. Maybe one day you’ll find a platform that’ll make you realize there’s better stuff out there.

                    But I’m done arguing with you. I should have known by the tone of your first reply that this wasn’t going to be a real discussion, just you being butthurt because someone said something negative about your favourite language. Go get butthurt somewhere else.