&gt; The #1 selling JS book is (was) literally called &quot;JavaScript: The Good Parts&quot;. It teaches &quot;methodological guidance&quot; for writing JavaScript programs. Just as modern C++ books teach the &quot;good parts&quot; of C++.<p>I&#x27;m talking about guidance from the language itself, not external parties. For instance, C++ templates don&#x27;t provide such guidance - it&#x27;s very difficult for C++ compilers to tell you where and how exactly you&#x27;re using templates wrong. On the other hand, C++ destructors <i>do</i> provide such guidance - just put all your finalization logic in destructors and you&#x27;re done.<p>&gt; That&#x27;s (a) not true, with the static resolution semantics in modules<p>Even with strict mode and statically resolved imports, JavaScript requires extremely defensive programming to get  useful diagnostics when anything goes wrong beyond using identifiers not in scope.<p>&gt; (b) to the extent that it is true is mostly a criticism of dynamic typing<p>Python (not to mention Scheme, which JavaScript is allegedly inspired by) is dynamically typed, but does a much better job of treating nonsensical code as an error.<p>&gt; Memory safety? GC?<p>It&#x27;s true that garbage collection makes memory management a non-problem in the vast majority of situations, but it doesn&#x27;t even begin to address managing other resources. Unfortunately, a program whose only avilable resource is memory (and perhaps the standard streams) is nothing but a fancy calculator.<p>RAII is a comprehensive solution to a wide class of problems that includes memory management as a special case, so I think C++ wins this one.<p>&gt; A module system (as compared to #include)?<p>Of course, you&#x27;re completely right about this.<p>&gt; Dynamic typing?<p>I can get exactly as much dynamic typing as I need in C++ programs, without affecting the parts that are meant to be statically typed.