Concepts to help developers master JavaScript
One intuition I’ve had while learning Elm is that it’s a fundamentally simpler language with a smaller number of concepts to learn than JavaScript.<p>In this list of 33 JavaScript concepts, I count 11 that either do not exist in Elm or, like Object.assign, do not have an alternative to worry about:<p>No reference types<p>No type coercion<p>No == vs ===, although typeof has a simpler equivalent<p>Basically all expressions and no statements<p>No hoisting as such<p>No prototypical inheritance or prototype chain<p>No Object.create, no destructive alternative to Object.assign<p>No factories or classes as such<p>No inheritance or polymorphism<p>No design patterns as such, though you could argue that abstract algebra or category theory are the replacements<p>No this, call, bind, or apply<p>The finer points of these are somewhat debatable, but overall my contention is that removing mutation and local state makes a lot of related concepts just fall away. A takeaway is that when someone tells you that they’ve learned Elm, you needn’t assume that this was as huge of an undertaking as learning JavaScript.