I get it. We’ve all heard the hype. JavaScript is the future! The in-demand developers of tomorrow are JavaScript first! Look at this fancy graph about percentages of Google searches, or the amount of growth in the community! Just because an idea is trendy doesn’t mean it’s a good one. The thought that JavaScript is the “one language to rule them all” – that learning other programming languages is a waste of time – is nothing more than a myth, and it’s doing serious damage to the community of people who are learning to program today.
The fact of the matter is, while JavaScript is practical in some scenarios, it shouldn’t be the only programming language you’re capable of using.
Most programmers will agree! Polyglot programmers are the ones who are actually in-demand.
The term polyglot programmer refers to someone who is capable of programming in multiple languages. Programmers who know multiple programming languages generally pick the right programming language for the job, rather than just using the single one that they know.
When polyglot programmers face problems for which their current programming language isn’t a good fit, they’ll choose and learn how to use a new one. And no programmer can argue that “using the right tool for the job” isn’t a good idea.
In reality, there are some scenarios where ruby can be the right tool for the job. There are other scenarios where the right language is C or C++. And there are plenty of times when JavaScript is the right tool for the job, too.
Programming languages themselves are actually remarkably easy to learn. What’s more difficult is achieving the mindset of a programmer: understanding how to deconstruct problems into sequences of steps that can be done by a computer.
The first programming language you pick up will be the most challenging. Next languages will be a lot easier – and most programming languages share concepts. Nearly all programming languages have support for:
- Functions
- If statements
- Variables
and a ton of other concepts. Although the specific letters and symbols are different, the ideas and concepts remain the same.
This is why it’s incredibly common to hire a programmer with zero experience programming in the language the company uses. This means the potential job market for polyglot programmers = all programming jobs, regardless of the language or framework.
Programmers who refuse to learn anything besides one language have a much narrower segment of the job market to work with.
So learn, dabble, and work with many different programming languages. Zed Shaw, an important open-source programmer and experienced code educator suggests everyone work with at least 4. Going in with the mindset, “I’m only going to learn one and I refuse to try anything else,” will only set you up for failure.
“[JavaScript] contains some of the best ideas ever put into a programming language and it contains some of the worst ideas ever put into a programming language.”
The fact that JavaScript is one of the most misunderstood programming languages is what makes it a hard language to pick up before other programming languages.
All programming languages contain a lot of mechanisms that work together to break down and solve complex problems. Each language has certain strengths and certain weaknesses that lend themselves to being useful for tackling certain types of problems.
In general, once you understand all the components of a programming language and master each nuance, you’ll have a rich toolbox and elegant solution at your disposal.
With most programming languages, the more of the language you learn, the better the code you’ll be able to write.
Unfortunately, the JavaScript language contains many features, which are generally a very bad idea to use. Douglas Crockford calls these idioms and expressions the Bad Parts. The Bad Parts are the parts of the programming language that are generally misunderstood by most JavaScript programmers out there, so they’re best avoided.
Even good developers who appreciate the nuances of the language will avoid them, because when other people read their code, it will be pretty unclear whether they chose these nuances out of appreciation, or out of ignorance of the actual implications of their code.
Starting out as a JavaScript programmer, it can be completely unclear whether someone else’s program:
- Was written by a super good developer writing code in the best and concise way, or
- Has major problems that are not obvious.
This makes it an incredibly hard language to master the craft of programming with. If you’re a good developer with a different programming language, you’ll be able to wrap your head around the nuances a lot better, because you’ll already understand the big picture concepts.
Why does a programming language with so many flaws exist?
The fact of the matter is that the JavaScript programming language was built and designed in 10 days. Really! 10 days isn’t enough time to build a programming language, experiment with it, and really understand what issues programmers using it will face.
Let’s take a look at how long it took to ship the first versions of different programming languages:
- Ruby: 3 years
- Java (a different language than JavaScript): 4 years
- Python: 2 years
- Lisp: 2 years
- JavaScript: 10 days
Here’s a graph showing how many days programming language creators put into crafting a good programming language before launching it to the world:
It’s remarkable how well JavaScript has stood up given the quick nature with which it was built.
Since the programming language initially only ran inside web browsers, different browsers (think: Internet Explorer, Netscape, Firefox, Safari) initially all had slightly different implementations of the language and quirks to them.
This means that JavaScript code that ran in one place would do something different than JavaScript code that ran someplace else. Obviously, it was a bit of a problem that the meaning of lines of code was inconsistent, so organizations formed to make the language consistent, and that problem no longer exists. But I’d like to think that this legacy is why even today, it can feel like:
“This is the only programming language people feel like they don’t need to learn before they start using it.”
Despite all of JavaScript’s problems, Douglas Crockford points out quite a surprising fact: “You can actually write good programs in it.”
We can say without a doubt, JavaScript is DEFINITELY NOT the language of the future.
Rather, it’s an artifact of the past. And it’s stuck its nose in a lot of surprising places. The fact is, despite all of JavaScript’s shortcomings, oddities, and problems, it has a lot of positive aspects.
ECMA, the standardization organization responsible for JavaScript, announced a new version of JavaScript which is its future. It’s called ECMAScript 6, or ES6 for short (or ECMAScript 2015).
The language took everything that was learned over the past 20 years of use of the old version, kept the good parts of the language, and removed the bad parts.
ES6 is a brilliant programming language – it takes the ideas of JavaScript that are good and abandons the baggage that it traditionally carried around. They’ve even created ways to allow programmers to write in this new version without the problems of traditional JavaScript, and run it in places where the old version is the only version supported.
It strikes me as odd that people seem to be offended by the idea of learning more than one programming language. You certainly should learn JavaScript! But you should definitely learn multiple programming languages! And given JavaScript’s unusual quirks, you’ll find it easier to learn JavaScript as a second language, rather than your first.
Did this article make you think of someone who refuses to learn more than one language? Share this with them!
What would be a good choice for a first language to learn and why?
Hi,
Thanks – this is very insightful.. What would you consider a good first language for someone learning on their own?
Regards,
Ajay
Hi Ajay –
Some good languages to start with are any of these:
* Ruby
* Java
* C# (.NET)
Good luck on the coding journey!
This is a really great blog! Its use of pictures makes it a lot more entertaining and easier to read.
JavaScript was actually the first language I started using. I enjoy it, but I mainly learned the basics with it: functions, variables, if statements, loops, etc. Nothing confusing. Now, I’m learning Ruby and Ruby on Rails and loving it.
Thank you for the delightful article. My first program was in wires for an IBM 402 in 76. I have never stopped learning new languages.
You have listed Ruby of which I’m a huge fan. I’d love to see your chart expanded by the entire Babel tower .
I’m a longtime fan of Smalltalk and would suggest that it be counted as the 8 years from Smalltalk-72 to release as Smalltalk-80 it lived 10 years in Apple with Allen and Dan and emerged as Squeak so perhaps 18 years and still evolving.
Objective-C I do not know the history — gotta study.
C++ was Bjorne’s poor man Smalltalk cause ATT refused to pay the $ to Xerox.
I never heard that about the origin of C++ as a “poor man’s Smalltalk”. Crazy how sometimes the most unexpected things become a major part of programming culture!
I have been writing computer programs for a living for over 50 years, and I have used a lot of programming languages.
Most programming languages evolved to solve some programming specific problems, like Fortran (good for floating point calculations and matrix operations, but little else). In the early days, that was expected: Scientific programmers used Fortran, business programmers used Cobol, students used Basic, and non-programmers used AutoCoder or RPG. There was a certain Tower-of-Babel aspect, and groups like the ACM employed algorithmic languages like Algol to have a common language in which to document algorithms, which then got hand translated into Fortran or Cobol.
With the advent of PL/I, IBM tried to fuse these disparate subsets together, and failed spectacularly. Later, ADA, developed by DOD, was the Next Big Thing, and it had success similar to PL./I.
While the idea of having One Universal Programming Language is a nice thing to chat about, it isn’t very realistic.
Any up-and-coming programmer should be ready to learn and develop apps in a suite of languages. At this point in time, I use Ruby (on Rails) for server code, CoffeeScript for browser-based JS (with jQuery and Backbone frameworks), Haml for html markup, SASS for CSS style-sheets, and any number of data representation languages, like XML, JSON, SQL, …
My point to all of this is that you have to use the tools at hand. Like they say in NASCAR, “You run what you brung”.
Thanks for the awesome perspective, Ken. It’s appreciated!
I disagree, I think that people should learn to code to scratch an itch.
If that itch is web based they should start by learning JavaScript. If it’s a mobile based itch then maybe Java so they can target Android or iOS so they can target the iPhone. HOWEVER with progressive apps, this itch could be scratched with web HTML, CSS and JavaScript as well!
I would say that programming languages are a means to an end, and just like world languages, if you have something great to say then you should say it. If what you’ve said is significant it will warrant being translated into many other languages.
Learning many languages doesn’t give you the depth you need to do most of them any justice. It’s like recommending people to learn lots of real world languages in that respect also.
The reason that I WOULD recommend javaScript IS because of the richness of the language. It offers both functional style and and Object Oriented style paradigms. It also has a lot of meta-programming characteristics on top and is easy to begin with. You can code from sloppy to pro and JavaScript will support you.
Most of all the future is about connectivity! The internet is the biggest connectivity system we have going so JavaScript is the most relevant programming language we have right now.
You used the fact that it took 10days to create JavaScript as a case to strengthen your article, however Brandon Eich creating it in this time is just like this artist (Kim Jung Gi) creating an artistic piece in a few hours: https://www.youtube.com/watch?v=RI-jnllfPXs.
You fail to see that just because the piece that you can see was created in time x it took years of research and years of trial and error, years of practice before both are able to create their art in the short time that they do.
If you watch the interview with Eich you will see that although he MADE it in 10 days it was years in the making!
I’m not saying that you should ONLY learn JavaScript, however if you did and are damn good at it, that’s not a bad thing! I believe learning should be itch based because that way you stick around long enough to become good enough to make your point.
Awesome, perspective Daron. JavaScript really does have a lot of brilliant parts to it – and I do think learning it makes sense. I do like your Brandon Eich analogy. Your point that programming languages are a means to an end is a good one too. Thanks for taking the time to write up a counterpoints to the article.
Very interesting and refreshing read! 🙂
Thank you, Francis!