Addressing this specific example, historically, running a linter all the time wasn't always practical, and `if(a = b)` was used intentionally a lot, e.g. to inline a check for a null pointer with an assignment.
Pardon my french, but that is some straight-up horseshit.
Even if you were the best programmer in the world, I would be skeptical at you saying that you make that kind of typo less than two or three times a year or per project, much less over the course of fifteen whole years.
I would agree that having equals-assignments as valid expressions is bad, I just don't think it's such a big deal. If you are using such a language, you should be using a linter anyway.
Using := would be very annoying for me, even though I can see the argument and would favor it in theory.
Or going back and forth between languages that use '==' and JavaScript?
Let's say over all of history there have been a million C/C++ programmers, and each of them has made that mistake ~5 times, in total.
And let's be generous and say that 95% of the time it was found before it got anywhere near production.
That is still 250,000 bugs introduced.
Not to mention how much time is spent tracking down the bug once it has been in the code base for awhile. If it goes unnoticed for a couple of weeks debugging becomes non-linearly harder.
That's a mistake I make often, but it's exactly because Javascript is different here from all other languages that I use.
Let's say I had to use a language with ':=' as assignment, I would still accidently type '=' all the time.
> Let's say over all of history there have been a million C/C++ programmers, and each of them has made that mistake ~5 times, in total.
> And let's be generous and say that 95% of the time it was found before it got anywhere near production.
> That is still 250,000 bugs introduced.
Well, so what? That's 250,000 out of maybe a hundred million bugs. I'm not saying it's good language design to have this behavior, quite the opposite. I'm saying it's not a big deal, especially considering all the other footguns in these languages. It's also not like these languages are going change it.
> A language cannot prevent someone from making stupid mistakes.
A very expressive language may have that ”:=” overhead while also providing many robust and useful operators too.
Yes, the product may look like line noise, but it was Uber efficient to create in basic cost terms
In my 15 years of programming experience of programming every single day, I have made this kind of typo maybe 2 or 3 times in total and it took me less than a minute to identify and fix the problem each time.
On the other hand, the amount of time that it would have taken me to type out that extra ':' a few million times would have been much more costly.