Some of us value our time and would like to improve our discipline. In other fields it's called being professional. It's a shame we care so little about it.
I understand that I need to use === instead of == to check if two things are actually equal, but I don't like that either.
It's not that you can't understand how the language works, it's that the language does some things that feel stupid when you're coming to it from any other programming language. Even if I can work around all of them it doesn't feel like I should have to when we have a lot of better planned programming systems, and that makes trying to get into js feel frustrating.
However, better tools and languages reduce your cognitive burden. The less mental context you have to work with the more you can focus on the problem at hand. If you have to constantly worry about language edge cases and odd behavior, it really detracts from being able to focus on the problem you are trying to solve.
There is a reason languages like TypeScript and Flow exist, they are helping to reduce this large burden JavaScript carries with it.
JavaScript is really great for small scripts (which is the use case it was designed for).
Anything beyond a few hundred lines starts to carry a lot more cognitive load. Not to mention that we are now building full fledged applications with tens of thousands of lines in this language.
Depends really on how much care was put into the application structure, mostly from the outset.
I've followed opinionated styleguides closely on some projects, and have also walked into other swamp projects that snowballed into something massive from a few snippets of jQuery. The difference between working on something that was intended to be maintainable from the start and something that evolved haphazardly is of course like night and day.
I still think it's more the people and approach than the tools.
Agree completely.
These were problems in various stages of JS's history, but not necessarily now:
Browser differences in javascript by not having a good specification or strong governing body.
Not having block-level scope despite convention in other C-like languages.
Optional semi-colons.
typeof inconsistencies.
Another problem with JS changing so much is developers picking up the language at various points in that development.
Its the browser implementation that was at fault. The ambiguity in specs was and is minimal to negligible for the past 8 years (since I started following). But like you said, not relevant today.
> Not having block-level scope despite convention in other C-like languages. > Optional semi-colons.
Its a feature, not a bug!
> typeof inconsistencies.
Maybe. Never faced it.
> Another problem with JS changing so much is developers picking up the language at various points in that development.
What I see constantly changing is JS frameworks and preprocessors, not the language itself. Newer folks tend to learn some JS framework first before the language itself (just like I did) and the constant change can hurt and impede progress and confidence. The language itself has been well documented and forgiving in my experience.
So yeah, point taken. You do not like JS. I do. Let's make peace with that.