loading...

Do you hate JavaScript?

reverentgeek profile image David Neal ・5 min read

NAAAAAAAN!

If you follow me on Twitter you know that I poke fun at JavaScript quite a bit. Someone recently asked me,

"Do you hate JavaScript?"

No! I genuinely enjoy using JavaScript to build applications.

But, I like a good laugh.

Every programming language I know has its own challenges and peculiarities. JavaScript has a reputation for being exceptionally quirky. And, at times, a bit frustrating and confusing.

Since I use JavaScript a lot, I'm qualified to poke fun at its warts. It would not be cool for me to poke fun at other languages I don't know.

In reality, the JavaScript language itself has gotten much better since ES2015 (ES6). It's a joy to work with. The struggles we face today have more to do with challenges beyond the language. Things like the explosion of libraries to choose from, complexity of frameworks, packaging and build tools, and supporting older browsers.

There's a JavaScript for that.

There's never been a better time to be a JavaScript developer.

Atwood's Law states:

Any application that can be written in JavaScript, will eventually be written in JavaScript.

This is true now more than ever. You can build web sites with React, AngularJS, Vue.js, or one of [insert very large number] of frameworks. You can build mobile apps with Cordova, Sencha, Ionic, NativeScript, or tabris.js. You can build desktop apps with Electron or NW.js. You can build robots with Johnny Five or Cylon.js.

Want to learn more about JavaScript?

Know nothing about programming? JavaScript is a great place to start!

Use JavaScript every day? There's always more to learn! That's why I love being a programmer!

Get some tools.

Here are a few tools you might want to have nearby.

  1. Open the JavaScript Console in your favorite browser: Chrome, Firefox, Safari. Modern web browsers have excellent developer tools built-in.
  2. Get yourself a good editor. Visual Studio Code is currently my favorite for JavaScript. It's free. It works on Mac, Windows, and Linux. Debugging is top notch. And, it keeps getting better and better.
  3. Install Node.js. Not only is it a great way to play with JavaScript, you get npm, which is an essential tool for installing other JS utilities and frameworks.
  4. Use npm to install live-server. This is a great little web server you can use play with JavaScript, HTML and CSS. It monitors your files, and immediately refreshes your browser with the latest changes.

Next, check out some learning material. This is not an exhaustive list. If you have a favorite, please suggest it in the comments!

Resources, books, and videos

Site Cost Description
JavaScript30 Free! 30-day JavaScript Coding Challenge from Wes Bos
ES6 for Everyone! $ Awesome video-based introduction to the JavaScript language using the latest version of JavaScript, from Wes Bos
Eloquent JavaScript Free! "A Modern Introduction to Programming." Book you can read online for free, or get the paperback version.
You Don't Know JS Free! Excellent series of books from Kyle Simpson. Read online for free, or get the paperback books: Up & Going, Scopes & Closures, Async & Performance, this & Object Prototypes, ES6 & Beyond. By the way, Kyle is working on a new book, Functional-Light JavaScript.
MDN JavaScript Guide Free! Mozilla Developer Network is an excellent guide and reference.
Professor Frisby's Mostly Adequate Guide to Functional Programming Free! Online book for learning functional programming concepts using the JavaScript language
Effective JavaScript $ "68 Specific Ways to Harness the Power of JavaScript." A great book.
WatchMeCode $ Excellent video-based training from Derick Bailey on JavaScript, Node.js, Express, MongoDB, jQuery, Docker, Babel, RabbitMQ, and more
Safari Books Online $$ Thousands of books (and videos), including titles from O'Reilly, Apress, Manning, Microsoft Press, and Packt.
Pluralsight $$ Massive library of training videos on practically every programming topic. High-quality videos on JavaScript and related technologies from great authors such as Cory House, Elijah Manor, Kyle Simpson, Jonathan Mills, and Shawn Wildermuth
EggHead $$ High-quality video training on mostly web-based technologies, including JavaScript, React, Angular, Node.js, and TypeScript

Folks to Follow

I look to other experts to help me stay current with the latest and greatest. Here are a few you might consider following:

In case of emergency...

Discussion

pic
Editor guide
Collapse
dubyabrian profile image
W. Brian Gourlie

Know nothing about programming? JavaScript is a great place to start!

Is it, though?

Besides being a mess of a language that constantly violates the principle of least astonishment, it's also a mess of tools with so many choices that it would completely overwhelm anyone who just wants to learn programming.

IMO, a language that qualifies as a "good place to learn programming" would include as part of its standard distribution:

  • A standard library
  • A package manager
  • A build system (if applicable)
  • Documentation that accurately reflects the features and capabilities of the distributed language

It would also have a standard module system, and wouldn't require transforms to use official language features, problems that are "uniquely javascript."

Collapse
reverentgeek profile image
David Neal Author

I can't argue those are real challenges in the JavaScript ecosystem. I submit Node.js provides an environment with most, if not all, of those important features.

Regardless, I believe the language, itself, is easy to learn. You don't need a compiler or special tools. You can use your own browser, or one of the many online editors, such as JSFiddle.

My 11-year-old son is learning JavaScript/Node.js and PHP. He's having a blast learning core programming concepts, while blissfully unaware of all the complexities that exist.

Yes, I believe JavaScript is a good place to start. And, there are many other languages that are a good place to start, too :)

Collapse
dubyabrian profile image
W. Brian Gourlie

If using javascript in a specific environment and in a procedural manner, then yes, it's as good a place as any to start. But you will hit a ceiling, and once you have a desire to do more, you'll inevitably run into issues that overwhelm even experienced developers.

Also, the intent isn't to evangelize any particular language. I would easily recommend languages that I'm not fond of to beginner programmers—PHP, Python, or Ruby—over javascript. The concepts learned from these languages will apply more generally to others, while also being generally more sane.

With all that being said, the world still needs javascript developers, so learning it is not without merit. It's more a question of whether or not it's a good introduction to programming, which is where I suppose we disagree.

Thread Thread
nicolasnarvaez profile image
Nicolás Narváez

The point was to "introduce programing", not the dificulties of becoming an expert on it: "but you will hit a ceiling".

JS is so easy to use for a beginner, that you can invoke a repl with a hotkey 80% of the time, and test core programing concepts with lots of variations.

Thread Thread
hishamfangs profile image
Hisham El-Fangary

I absolutely hate PHP's syntax and standards, and for a beginner it doesn't just look daunting with all the $ signs, but visually it looks quite ugly.

"But you will hit a ceiling, and once you have a desire to do more, you'll inevitably run into issues that overwhelm even experienced developers."

Used to be true, but it isn't anymore with ES6. I am yet to run into any ceilings or issues and I've been using it to develop extremely complex systems with large code bases.

Bar none, it is my number 1 choice for introduction to programming. Nothing comes close in terms of user-friendliness and ease of use.
Opening a browser console and typing "x=2+3" and getting an immediate response with any complications allows for an easy introduction to programming concepts without showing the student a bunch of class declarations and voids everywhere and asking them to ignore it for now.

Thread Thread
dubyabrian profile image
W. Brian Gourlie

If you could teach someone programming entirely in a browser console window, you may have a point. But you can't. Eventually, you will end up having to explain the many intuitive javascript quirks that have built up over the years. Including with ES6.

New developers will marvel at the simplicity and ease-of-use of javascript while they struggle to understand why this doesn't refer to the thing they expect it to, depending on the syntax they use to declare a function.

Thread Thread
mateiadrielrafael profile image
Matei Adriel

I dont think your "this" example is viable since every language has its parts which seem normal to everyone except begginers (like how a lot of starters i know asked me why 9 / 2 equals 4 when they try to do some random stuff in python).

Also, i think most people start wondering about what "this" means after they learned the basics (at least i did, idk about others)

I think almost any popular language is okay for starters, and just saying one of them isnt because of some quirks doesnt make that much sense since u can sya that about any other:)

Collapse
andrespineros profile image
Andrés Felipe Piñeros

Your son isn't a valid argument. He's doing fine because he has a Javascript programmer showing him the way. Most people, even adults, don't have that.

I feel like Javascript is too quirky to be a learning language, but I do consoder Async a very important concept that other languages such as Java and Python don't have at their core.

So yeha, Javascript is great if you have someone that already understands those quirks to guide you.

Thread Thread
mateiadrielrafael profile image
Matei Adriel

Im just some random 16 yr old guy from the internet, and ive started like 2 and something years ago. Js was a very easy to learn lang (without someone teaching me / paid courses) , just by googling "how to do x in js", i know this doesnt happen for everyone, just sharing my learning story thing:)

Collapse
ar10642 profile image
Andrew Richardson

You can start without any of that and just a text editor and a browser, though. And this low barrier to entry is what makes it so easy to pick up the basics of programming (think loops, if statements etc.), even if later on you'll need to go a bit more "pro" with your tools.

ar10642 profile image
Andrew Richardson

I don't want a big argument about it, but I don't think you're going to get beginners into code by saying "start with category theory"

Collapse
hkrogstie profile image
Håvard Krogstie

My problem with javascript is that Python is better for all use I've ever seen, save for websites where you don't have a choice. Now I don't usually use either, so do tell if you know of a killer feature only in javascript.

Collapse
olekria profile image
Olek Ria

How you write Single Page Applications in Python ?

Collapse
hkrogstie profile image
Håvard Krogstie

Well single page applications in the browser are websites, where you for the time being don't have a choice. However if I want a web service, I'd much rather use django's templating engine and not worry about single page.

Thread Thread
olekria profile image
Olek Ria

A lot of option in java and c# also. Please do not concentrate at Python.

Thread Thread
hkrogstie profile image
Håvard Krogstie

Yes, there are definitely websites I've done in python I wish I'd done in e.g. Java, but the purpose of this post was problems with JavaScript. Java and C# don't have dynamic typing, for instance, meaning JavaScript has something they don't. Personally I prefer static typing, but among the languages that don't have it, I prefer python.

Thread Thread
olekria profile image
Olek Ria

C# HAS dynamic typing.

Thread Thread
hkrogstie profile image
Håvard Krogstie

Ok sorry, I didn't know. I wouldn't want to use it even if it does. You can pass Objects around in java as well, I suppose. C# and Java sort of have functions as first class citizens as well, now. Java streams can almost do all the python list magic as well. Basically, I conclude with preferring Java, C#, and Python, since they all do what JavaScript do, just without undefined

Thread Thread
mateiadrielrafael profile image
Matei Adriel

For me personally: typescript > python > javascript

ar10642 profile image
Andrew Richardson

I'm not going to call you names, but the fun thing about coding is that you can try things out and make your computer do things without any bad consequences, unlike medecine.

I don't know how you started out, but for me it was experimenting in BASIC on an 8-bit machine. I then decided that's what I wanted to do and then got a degree, work experience and a job in that field. I wouldn't dream of using a GO TO now, but we all had to start somewhere.

So what I'm saying is that JS in a browser and just a text editor might well people's entry point to code now, and I don't think there's anything wrong with that. If you want to go pro, you've got to up your game.

Collapse
courier10pt profile image
Bob van Hoove

Thanks for writing. It's good to have an up to date list of go-to resources.
The title is a bit misleading but it worked cause I clicked on it :)

TL;DR I love javascript

.. going back to 2009 ish ..

For me javascript was the language that allowed me to find pleasure in
programming. When I first started working I was maintaining ASP Classic pages,
mostly written in VB script. As I had 'some college' in CS and AI, I found VB
script was holding me back, lacking abstraction features.

Back then Douglas Crockford and YUI started making their lectures available.
Curious to learn a little more about Javascript I started watching the
Crockford lectures. That was amazing, almost like free college on demand
:)

I learned that the language had functions as values, a prototype system and
lazy evaluation. It made up for everything VB script lacked. I
started tinkering with the language a lot. I even made a web crawler in
JScript for fun.

Becoming proficient in javascript allowed me to pick up more interesting tasks
at work as well as help others with javascript (or jQuery) problems. So that
was some time well invested. Also finding myself building stuff just for fun
made me aware that I found the right profession.

That's why I love javascript.

Collapse
reverentgeek profile image
David Neal Author

My love/hate relationship with JavaScript (and JScript!) began when I was building classic ASP apps in the late 90’s and early 2000’s. Thanks for sharing your story :)

Collapse
bgadrian profile image
Adrian B.G.

If anyone is in doubt of the JS supremacy I wrote a comprehensive list of things you can build with JavaScript, from websites to controlling robots.

I agree JS is great for learning Programming (after Scratch), but only if

  • the person just want to learn the basics
  • gets bored fast (kids), after they learn Scratch
  • it is a non technical person with no similar background
  • just want to make a personal side weekend project

PS: JavaScript doesn't mean the entire Web ecosystem (node etc), just things like codecombat.com codewars or drawing in khanacademy or to tweak your blog plugins.

If you want to work in Computer Science for at least 5-10 yrs it would be better to start with a strong type language, go trough the proper learning steps.

Depending on the day I hate JavaScript too, but tomorrow I will sure 💚 it back again.

Collapse
reverentgeek profile image
David Neal Author

That is an awesome list!

Collapse
rmorschel profile image
Robert Morschel

I wish I'd seen this article last month, when I decided I was going to finally get good at Javascript. Nice.

I would say, however, that Javascript is a terrible for learning how to code, unless you use it in a prescriptive framework. It is too permissive for the novice.

Collapse
antonfrattaroli profile image
Anton Frattaroli

The permissivity is a tradeoff for novices. It gives them fewer but less useful errors. Beginners don't read error messages, so fewer errors may be better than useful error messages.

Collapse
nancyd profile image
Nancy Deschenes

What's great about JavaScript, is that it's so easy to get started with it. If you're reading this message, you already have access to enough tools to get started- nothing to install, nothing to read first, just try something, and see what happens. There are so many examples of code that does what you're likely to think of (if you're new to the language and/or programming). The cycle of "I wonder what would happen if..." to "ah! that's what it does" is so short, it's energizing and thrilling. Anyone can do it!

What's horrible about Javascript, is that it's so easy to get started with it. If you're reading this message, you already have access to.... Anyone can do it!

Joking aside, the original JavaScript was pretty shady. It got things done, but without much concern for maintainability or complexity. It has evolved into a very interesting language, and you can code very elegantly using it. Unfortunately since it still supports the original "let's throw something together" of its early days, it cannot enforce clean programming techniques, and the beauty and quality of JavaScript programs has very little to do with the language, and almost all to do with the programmer.

Collapse
ryanwinchester profile image
Ryan Winchester

Javascript makes baby Jesus cry. I can't stand it. Everything about it.

Collapse
gkatsanos profile image
George Katsanos

I am a frontend developer who, university aside, got into programming with JavaScript and if I had to do it all over again I'd start with a language like ruby or Swift. The flexibility of JavaScript leads to learning the wrong way, making assumptions which lead to bad practices. You won't imagine the crimes I've seen by junior Front-end devs who do JavaScript..

Collapse
heroofcanton profile image
Ryan Welling

Javascript makes me sad inside. Yes, it's better with ES6, but it's still an unintelligible mess most of the time. By all means though, keep putting framework lipstick on that pig.

Collapse
yogistraanderson profile image
Yogistra Anderson

In my experience is excellent for use in a particular context: the web client.

I dont see languages as better or worse, it depends on the application of that language. Its a tool, you have to select the right tool for each particular job.

If anyone would look at Perl code, they would recoil in horror. Its terrible to decipher, but for processing text, its probably the topmost option in the languages toolbox.

While it is possible with very disciplined design, to build large modular applications, thats not really Javascript's niche.

However for manipulating the HTML DOM (made super powerful with JQuery selectors) its unparalleled.

It has really improved over the years (I started around 2003 using Javascript) with nice syntax for classes and some really useful stuff for doing asynchronous programming.

A book to have a thorough understanding of Javascript would be David Flanigan Javascript Guide.

That book has grown into a monster as Javascript has evolved. My initial edition of that book was half the size of the current print.

Collapse
golopot profile image
Chiawen Chen

Old javascript I hate:
Jquery DOM manipulation, callback hell, module pattern, function(){...}

New javascript I love:
React, Promise, ES6 module, arrow function

Collapse
eazel7 profile image
Diego

Cloud9 is also very very good as a JS IDE
I run an instance of it in a server so I have my environment ready to use and share with anyone

Collapse
auct profile image
auct

javascript makes me upset every time I need to do smth in it.