Yesterday evening I finally wrapped up Code School's JavaScript Best Practices course and I thought my readers might like to know what I think. In general, this is a great course marred by poor challenges, surprisingly poor challenges, but still worth your time.

First and foremost, the content of this course is incredible. For a while now I've been thinking about what it means for a developer to improve their JavaScript skills. To go from a "user", someone who knows basic syntax and can copy and paste code to a "developer", someone who is comfortable with the language and understands performance and organizational principles. I'm not talking about Ninja level skills here. Just good, intermediate level skill levels. I think there is a dearth of material aimed at developers who want to achieve this level and it is something I'm personally trying to help with as well. With that context in mind, this course is exactly what I think developers should be taking. Let's look at the material.

Section one, "The Sword of Syntax", covers ternary conditionals, logical assignments (OR and AND), and Switch blocks. In general, this was the section that was probably least useful to me, but I still found the material useful. Just the presentation of the topics themselves were a bit different and I felt like I got something from it. I do think this section will be the one most folks will skip over, but I recommend going through it anyway. Don't forget you can watch the videos at 1.5X speed to move things along a bit quicker.

Section two is "The Pendant of Performance". Topics cover loop optimization, script execution, general performance tips, and measuring. Performance topics can be very confusing, and sometimes a bit difficult to relate to your own development, but the course does a great job at keeping this material practical, which is an important thing for me.

Section three is "The Crystal of Caution". This one covers comparisons, error handling, and some oddities of the language itself. This section in particular serves as a great warning to the types of mistakes developers may make in their code and not realize until later.

The final section, "The Mail of Modularity", discusses namespacing and modularity. It does a good job of introducing the basics of encapsulation in JavaScript. If you are currently writing JavaScript and discovering that you need help with organization, this will be a great lesson for you.

The speaker, Jason Millhouse, is great. He has a good pace, a clear voice, and a sense of humor. I think he may be my favorite speaker at Code School so far and I'm hoping he has done other courses that I can take.

So, that's the good. What's the bad? In general, I've been very impressed with how Code School handles challenges for its material. I find the questions targeted well, interesting, and just enough of a challenge to motivate you to pay attention well and think before you answer. My experience with the challenges with this course though were very poor. It got to the point where I was dreading the challenges and even considering just skipping them. Let me give you an example of one of the first questions:

Given foo is true, what is the result of name = foo ? "ray" : "beer".

If you had said, ray, you would have been wrong. Nope, the answer is "ray". And... ok... I get it. Including the quotes is a bit more precise, but given the nature of the challenge (type your answer in this box), it seems overly specific and unnecessary. And yes, that's a minor quibble, but it was only the beginning.

Next, I ran into a question where the answer didn't make sense. It discussed an aspect of performance that was not covered in the video. While it was possible I had missed it, I discovered other people had the same issue as well. There is a post on their forums, but what concerns me is that there is no official response yet. Remember, Code School is a paid course, so I'd expect some kind of response on this thread.

How about another example? One of the things Code School does well in their code challenges is to provide an editor where you can only edit in certain parts. So they may show a function and ask you to fix one part of it. Only that part will be editable. It is a nice way to focus your efforts and ensure you don't spend too much time writing code that isn't relevant to the challenge. In general - I dig this. But then I encountered the challenge where I was asked to move a script tag from the head block to right before the body. There were - literally - two places in the file you could edit. So the challenge was - move the line of code to the other place - the only other place. I guess an "easy win" is nice every now and then but that was just ridiculous.

Speaking of ridiculous, towards the end of the course there were a few questions that looked like this:

My ____ is ____ and I ____ about ____ a day when I ___ to the ____ and do ____ after I ____ so and _____. Then I ____ while ____ the ____.

After this were four answers that looked like this: Moo, Zoo, Something, AnotherWord, More, Less, Foo, Etc, OMG, Etc. So the intent is - take each word from the list and see if it makes sense in the paragraph. Speaking just for myself - that made my brain explode and it felt like a horrible challenge. After trying one of these, I simply skipped the rest of them.

I had more examples, but honestly, I can't remember them. Most likely I got so frustrated towards the end that I was probably getting annoyed by things I wouldn't have normally. It was a big disappointment.

However...

Despite all of this, I cannot stress enough how much I enjoyed the video content, and how much I felt that this was exactly the course that a lot of people need. Honestly, screw what I said about the challenges. I really hope Code School takes a look at them, but I wouldn't hesitate at all to pay for the course. I mean, we're talking 20 bucks or so for about 4 hours of material (and that's just one course), so this is a no-brainer.