Giving up power makes it easier to write good tools. That&#x27;s one reason that IDE support for Java is amazing, but IDE support for JavaScript isn&#x27;t nearly as good - JavaScript allows and encourages <i>way</i> more freeform do-it-however runtime unverified stuff. Java locks everything down with a lot more &quot;must be compile time&quot; and static type system conventions.<p>You can permit the dynamic stuff as an alternative (as Java more or less does.) But if people actually use it, it screws up the tools&#x27; ability to introspect into your code.<p>As a result, less-dynamic formats like HTML and CSS get better tooling, as a rule, because the tools have an easier job to do. And highly-dynamic languages like JavaScript and Ruby have terrible tools support, because they make the tools&#x27; lives quite difficult because of their language and library design.