JavaScript is my passion, and I want to be encouraging (rather than discouraging), and want to make everyone realize that JavaScript is not a “kid language“.
This article is not meant to be condescending.
And I, by no means, claim that I fully know JavaScript.
I just wanted to point out that… there is more to it, than initially meets the eye:
JavaScript is robust,
JavaScript is powerful,
and JavaScript can create miracles.…at least, when used properly
![]()
So You “Think” That You Know JavaScript, Huh?
No you don’t ![]()
You have no idea of JavaScript.
You don’t know it, and you don’t know that you don’t know it.
Here is my reasoning:
Almost every developer, in some phase of her professional life, was required to use JavaScript. Due to her lack of time, or lack of interest, our beloved developer finds out that the most common way to learning how to do something with JavaScript, is to search for code snippets (most of which are outdated rubbish that use really bad JavaScript code).
With the pressure of time, the most common approach to using JavaScript is to cut the code snippet from the monitor on the right, to the production code in the monitor on the left. That’s what dual monitors are designed for, in the first place, ain’t they
![]()
The main issue with this kind of, so called, “learning” is that
- You don’t actually learn anything;
- and worse, you gain a false sense that you “get it”.
You don’t know that you don’t know, until you actually know that you don’t know
![]()
“Me Know Frameworks”
Yes, frameworks make your life easier, as they help you take off the cross-browser burden over your shoulders. It’s excellent to have the wisdom of frameworks such as jQuery or DoJo. But it’s virtually impossible to be a master in these libraries without fully understanding the JavaScript behind them.
Don’t think so? Then show me your kung-fu
JavaScript Kung-Fu Quiz
Let us make a quick quiz. Here are the rules:
Give yourself +1 points for each of the JavaScript concepts in the following list you know,
and -1 points for each you don’t know.
Then sum all the plus and minus point to get your final score.
Be honest
- Basic Programming Syntax, Loops, if/then/else Statements,
- Error Handling (try/catch),
- Various Ways to Define a function,
- Closures,
- Circular References,
- Memory Leak Patterns,
- Prototype-Based Inheritance,
- The Module Pattern,
- Lazy Loading,
- Lazy Initialization,
- Event Handling,
- Event Bubbling, Event Capturing, Event Propagation (W3C DOM Event Model),
- Basic Cross-Browser DOM Manipulation (appendChild, createElement etc.),
- Anonymous Functions,
- Variable Coercing,
- Basic Variable Scoping Principles,
- The Role of Context and How “this” Variable Works,
- How to Instantiate and Declare an Object,
- How Comparison Operators Like “>”, “!=” and “!==” Work,
- Bitwise Operators and How They Work ( “&”, “|”, “>>>” … and the like),
- How to Index Objects ({}) Attribues, and Array ([]) elements,
- Why the arguments Object is not an Array,
- Timers, How They Work, Where They Can be Used,
- Asynchronous Method Execution (pseudo-threading),
- Web Workers (real threading),
- Persistence Patterns (including HTML5 LocalStorage),
- Why JavaScript is Single-Threaded,
- Reflection (using “call”, and “apply”),
- Why Messing with Function.prototype, and Object.protoype is Considered a Bad Thing,
- Why eval is “evil“,
- AJAX,
- Object (form) serialization,
- Comet,
- JSON,
- JSON with Padding,
- Why Using arguments.callee is Considered Dangerous (but jQuery and DoJo still use it reluctantly),
- The effect of DOM Size and DOM Depth in Web Application Performance,
- How the JavaScript Garbage Collector Works,
- How to Load Resources Asynchronously to Decraese Page Load Times,
- Using Chunking to Avoid “script timed out” Error Messages,
- History (back button) Management in AJAX Applications,
- Memoization,
- Expando properties on DOM Nodes,
- Object detection, and Why it Matters,
- Progressive Enhancement,
- Graceful Degredation,
- Refactoring Patterns, and How to Refactor a JavaScript Code,
- Currying,
- Partial Functions,
- Document Fragments and How to Minimize Reflows,
- String Concatenation using an Array Buffer, and the Reason Behind It,
- Using Native Methods of Base JavaScript objects, Such as Array, to Speed up and Minimize coding,
- Object Types, the prototype chain, using instanceof, and typeof Operators
- Regular Expressions, How They Work, How They are Compiled,
- How to Use with Statements, and Why Not to Use Them,
- Best Practises in POJO (plain old javascript) coding,
- Best Practices of Coding in the Library of Your Choice,
- How to Combine all These Know-How Into a Clean, Robust, Reusable, Maintainable, Cross-Browser, Memory-Efficient, Effective, Lightweight, Modular bit of code.
No worries, we will be covering all (and more) of them in this blog
Given the sloppy nature of the language itself, the last item is especially harder to achieve. If you don’t take good your JavaScript code, your application will quickly turn into a pile of unmaintainable… ermmm… spaghetti code
Don’t jump straight into a JavaScript framework — it’s dangerous
![]()
Once you master JavaScript, you learn that you’ve learned nothing. The real mastery is to be able to structure your code and combine it in the context of a large, fat-client web application. This final matter of fact, requires many years of ongoing practice.
You can’t learn “getting it wrong” from a book.
I, myself, have been using JavaScript several hours daily, for several years. And I still discover better ways of doing things. That’s why I’ve decided to start this blog.
quick tip:
If you plan to decorate your resumé with “advanced JavaScript knowledge”, don’t dare to include it unless you get 40 points or higher in the quiz above.
What is your score in the above quiz?
Do you have any additions to the (50+)-item list above?
Please feel free to share your comments, and suggestions


This is a real samurai checklist!
Thanks for the heads up Halil
I will try to go over this checklist and more as the time goes by.
Cheers.
Small typo at 50th item (Also you can delete this comment)
Hi Emre,
fixed it
thanks for informing.
Don’t forget to make the list items clickable to the pages you covered them. And don’t underestimate the power of books. They save time
Thanks
I’ll update the list items as I cover them.
I also plan to add a reference section where I list books and useful links.
Cheers.
The JavaScript is not difficult itself, it’s a very easy langage to learn. Where it is difficult to master is the high flexibility level of the langage.
After that, it’s almost about patterns and concepts … and the checklist is almost a good start for any programers out there.
Hi Nicolas,
That’s right. JavaScript is not a language with a steep learning curve. In addition to that, there are many libraries out there to make the developers’ life easier by taking cross-browser compatibility, performance, and memory issues into consideration.
Though, this “layer of abstraction” is also a problem in an of itself:
I also think that, without an adequate knowledge of a set of strong-typed functional and object oriented languages (like Java, F#, C#, ruby…); and without a firm grasp on patterns of software architecture in general, and its implications to the JavaScript domain in particular; it’s virtually impossible to confidently know what you are doing.
To put things more straight:
If you can RTFM, “API”s can be learned in an heartbeat.
The hard thing to develop is the mindset: It steadily grows over the course of years.
Amazing! That’s exactly what I need.
Hi Palulo,
I’m glad that it was useful to you.
Cheers!