- things that should have always been there, like array.includes() and multi line strings are there out of the box
- 'class' means you're not having elaborate discussions with newcomers about prototypal vs class based inheritance or asking them to writr elaborate boilerplate
- async and await makes JS feel similar to traditional direct style languages
Atleast you can transpile to it.
The fat arrow notation and destructuring are part of my everyday code lexicon, promises are hawt, im genuinely excited you can cancel a fetch() now, but so many other thing (proxies ffs) feel like they haven't added anything meaningful.
Which isn't to say I dislike the sugar, I have a hella sweet tooth, it's just that ES8 feels like it contains perhaps a little too much abstraction.
As I explained to a friend who was doing a python data science course, the beauty of Ruby and Python are that they get pretty damn close to the semantics of your code. As such even someone who doesn't understand the language could have a reasonable stab at trying to understand what's going on.
The bad side of this is that that syntactic sugar and other magic obscure what is really going on under the hood and can funnel students down false assumptions about how a language works.
Personally, I'd recommend Scheme as a first language, but apparently that's far too arcane for some...
Where JS wins for me, is that you can quickly create something that you can click on and have it do something. From a teaching perspective that kind of interaction and quick feedback is very empowering for students. This experience will quickly inspire students to think "what else can I make this thing do". I appreciate this is not the traditional CS approach, but making things fun for students is key to getting them started coding.
The reason is that both languages mix many programming paradigms.
I think it is better to introduce programming paradigms one at a time. Once you understand the paradigms, you can move from language to language effortlessly.
When I introduce people to programming, I start without code. I start using cooking recipes as an example. The ingredients are the input, and the recipe is a function that produces an output.
Aren't you confusing Ruby with Python?