To understand a programming language, it is important to have a knowledge of what specific problem the language was designed to address. More generally one should also understand what programming Languages are used for, and the different language paradigms that exist. In essence, Languages are designed to abstract away and allow developers to simply instruct computers to perform a desired task. Given that there are many languages, Languages are analogous to the tools in the toolbox of a tradesman; you would not use a screwdriver for the job of a hammer. Developers tend to play favorites and elect to use their most loved tools for other than their intended purpose. Although languages often fall in and out of favor with developers for full-stack development JavaScript and by extension/ES6 seem to be here to stay.
As mentioned above Languages have a purpose. Thus, it is possible to measure the quality of a language or an entire family of languages on certain metrics. These metrics include Quickness to code, resource efficiency, Support availability, userbase size, library availability, flexibility, customizability, and the list goes on. JavaScript For example would be abysmal for the purposes of low-level systems programming for several reasons. Firstly, it is loosely typed which means that for systems-level operation it cannot optimize storage as efficiently and is practically incapable of fine-grain bit manipulation. JavaScript also does not include pointers in the traditional sense. Its poor performance in this regard is due largely to the fact that this was not what JavaScript was designed for. Even though it is considered a drawback for system-level programming, loose typing and the lack of pointers are great for beginners and for getting things done quickly without Unnecessary complexity. JavaScript was originally Designed for in-browser programming. As far as the fundamental metric, “Does JavaScript allow developers to efficiently add interactivity to browser-based sites?” the answer is an Overwhelming Yes! If one seeks fine-grain memory control, it is likely best to use C or Rust, or Even Assembly. This raises the question; How does JavaScript fare for other applications? The answer to this is Surprisingly good. Frameworks such as node.js and react have done an amazing job with server-side and UI development. To this end, JavaScript does serve as an excellent full-stack website/app platform given that if you know this one language, you can program on all three fronts. This is not to say that better solutions for any given aspect of the stack do not exist.
For the longest time, common practice has been for educators and even those who teach themselves a new skill to teach to the tool instead of the problem. Language learning like any skill should not be the goal in and of itself. Thus, to be able to test your mastery of this or any language you must use it. One very effective approach is the athletic approach. This approach involves developing a set of problems specifically for testing your skills and solving these problems using a programming language in a significantly time-constrained setting. One idea when you first are learning is to pick a standard set of existing problems that can be solved using multiple languages. This way it is possible to compare the new tool to ones you are familiar with. Skill and Knowledge retention are greatly increased when the things you learn are easily related to familiar things. The time constraint also serves as a barometer for your current level of understanding.
It can thus be said that utility is subjective. While you may have a particular affinity for a hammer it is not a great paintbrush. It is great to have favorite tools only when paired with the purpose it is a favorite for. JavaScript is an excellent language, particularly for the purpose it was designed for, namely, adding interactivity to the web. It even fairs well as a server-side language. Learning a language such as JavaScript using an Athletic Approach is a great way to compare languages for yourself. The more tools in your box the easier it is to use each one. It is not only important to know a language but knowing when to use it is the first step on your path to Software development mastery.