What's a JavaScript Closure? Ever wonder about some of JavaScript's more advanced and esoteric features? Nathan Whitehead's interactive tutorial explains and walks through each of these concepts one step at a time. At the end of each lesson, you are encouraged to write short snippets of code demonstrating the concepts that you just learned, which are then automatically checked for errors and verified.

Perhaps you're new to JavaScript, or programming in general; CodeAcademy offers similar interactive tutorials that will teach you the basics, and hold your hand along the way. Perhaps you'd rather learn at a more even pace; CodeAcademy's CodeYear will introduce you to one new concept every week throughout 2012.

Want some more detail? Don't love the tutorial style? Marijn Haverbeke's online book, Eloquent JavaScript provides an introduction to the language that is both readable and thorough. Although readers are not quizzed at the end of each chapter, each code sample quoted in the book can be examined, edited, and run directly within your browser. The Mozilla Developer Network also provides its own JavaScript Guide, along with a more concise "Re"introduction to JavaScript. Mozilla's Javascript Reference also provides an encyclopedic reference of the language (previously).

Once you're moving along, and building websites with JavaScript, you'll probably want to learn JQuery. If you were paying attention to the JavaScript lessons, the official documentation should be all you need. If not, though, JQuery Fundamentals will walk you through the basics of both JavaScript and JQuery, one step at a time.

Once you've tackled JavaScript, learned closures, and mastered JQuery, it's time to move on to the really heavy stuff. JQuery author and JavaScript savant John Resig has 15 more tutorials that teach some of the language's most difficult and advanced concepts in the same interactive style as CodeAcademy and the Nathan's closure tutorial. Many of these advanced/quirky/confusing features of the language are also documented and explained in-depth at the JavaScript Garden. John also recently posted some thoughts tutorial-style learning, and the notion of teaching JavaScript as a first language.

Once you've gotten comfortable with JavaScript and/or HTML5, your knowledge is already becoming outdated. Congratulations! Keep on top of the current developments by subscribing to (MeFi's Own™) JavaScript and HTML5 Weekly.

Would you rather start off at a lower level? Did you accidentally sleep through Comp Sci 101? Carl Herold's Higher Computing For Everyone introduces novices to C, and various low-level programming and Computer Science concepts such as binary numbers, pointers, and memory allocation.

Did you like Carl's book, but are you more of a visual learner? AcademicEarth has a compilation of recorded CS 101 lectures and syllabi from some of the top professors and universities in the US.

Starting sometime this spring, through its MITx initiative, (previously) MIT will be offering several CS courses online, in a format and structure that more closely resembles a traditional university course. Starting next month, Berkeley will also be offering a series of free follow-along courses including CS 101, Machine Learning, Software as a Service, and others.

Are all of these languages too "Normal" and "Conventional?" How about Ruby? Though still incomplete, Bloc and TryRuby provide interactive Ruby lessons in the style of CodeAcademy. Ruby still a bit too normal for you? Learn Clojure with TryClojure.

Are you a DBA? Did you like those interactive JavaScript tutorials? Have you ever secretly wondered if SQL might not be the answer to all your problems? Mongoly provides an interactive tutorial-based intruduction to the alternative NoSQL database, MongoDB. Standing in the other corner of the NoSQL arena, CouchDB has fantastic documentation, and a free sandbox where you can experiment and learn.

Also, for every language and library there's a freenode IRC channel with helpful, patient experts in it in addition to the usual channels.posted by michaelh at 9:59 AM on January 20, 2012 [4 favorites]

This is a timely and informative post, thank you.

I'm learning Javascript in anger these days, after ignoring this major hole in my language portfolio for too long, and I must admit I'm hating it. After ten years of mostly Python and C++ this language feels like an utter mess - and even though better versions have existed for seven years, there is only one browser that actually seems to support them. Just a miserable experience. It's hardly surprising that people are choosing to generate Javascript from other languages rather than write it by hand.posted by vanar sena at 9:59 AM on January 20, 2012

I just started Codecademy (no initial "a"), so thanks for all these!posted by ChurchHatesTucker at 9:59 AM on January 20, 2012

I will absolutely be looking through a lot of these links, but first thing's first:

Does that CodeAcademy link look through your autocomplete entries for your name or is that just an unsettling coincidence?posted by GooseOnTheLoose at 10:00 AM on January 20, 2012

Does that CodeAcademy link look through your autocomplete entries for your name or is that just an unsettling coincidence?

i got Ryan as well, er Ryan... so it's just a coincidenceposted by h0p3y at 10:02 AM on January 20, 2012

Wow.

Thanks for the post, I've been passing some of these links around on my work IRC.

Reading through the ones I haven't seen before, it's funny to me how each introduction to a language or, more generally, to programming concepts has an implicit perspective. I'm not saying 'bias', I don't mean to imply anything is wrong with it — actually it is more that now I begin to wonder, is it impossible to teach programming without teaching an implicit perspective on what programming is and what it means to do it well? Possibly there is no programming without such a perspective? That unlike some other disciplines or practices, which may be more clearly defined, programming is an exercise in perspective with no objective definition?

Sorry. Anyway I've been using JS as my primary language for a while now, having never thought I could make the jump from Python or strongly-typed languages, and I'm enjoying it. I like JS a lot, even though writing code in it feels like an exercise in self-denial. Thanks for the links!posted by doteatop at 10:02 AM on January 20, 2012 [2 favorites]

GooseOnTheLoose: "Does that CodeAcademy link look through your autocomplete entries for your name or is that just an unsettling coincidence?"

This is a good way to put it. I hope I can eventually take a philosophical view to the thing and start to enjoy it like you are.posted by vanar sena at 10:07 AM on January 20, 2012

For the javascript haters, JavaScript Breaks Math uses a rather hyperbolic title to launch into a discussion about just what 'n = a.b(c)' means, and why it's quite unlike the situation in other languages.posted by jepler at 10:09 AM on January 20, 2012

Is there something like this for visual design / CSS ? As in "you already know enough javascript and programming to do really neat things, but they look terrible -- here's an online step-by-step course to learn how to make a website that people might actually want to use?"posted by rouftop at 10:24 AM on January 20, 2012 [2 favorites]

I also somehow totally missed this one (but the MeFi related links picked it up), but:

Repl.it is an in-browser sandbox that supports a huge number of languages, including QBasic (why?), Forth, Ruby, Pyton, Lua, Scheme, JS, CoffeeScript, and others. [Previously]

CoffeeScript and other "compiled" web languages just feel.... wrong to me. I still haven't even found a templating language that doesn't feel like a complete kludge, especially since I often need to use two separate templates for my back and frontends (I know, I know, I should be using node, but bear with me here), and that any ones that offer substantive advantages also add a ton of heft to the code.

I learned/coded some C, C++ and Pascal in high school, more C++, scheme and Java in college, and PHP and Ruby on my own

Ruby's currently my goto language of choice, but for people newly entering the world of CS - absolutely, Javascript is the wave you want to hop on. jQuery, node.js, ember.js, coffeescript, REST+JSON - understand these technologies and why people are migrating to them and technologies like them, and there's your meal ticket for the next 10 years

It'll be interesting to see if browsers adopt some sort of common language-agnostic bytecode/VM standard, but that's going to be a few years down the road to widespread adoption, at the least. Right now Javascript has a huge advantage on the web, and that advantage is spilling over into many other domains (e.g. v8/node)posted by crayz at 10:30 AM on January 20, 2012

Codecademy is distinctly underwhelming at present. I did all 8 of their tutorials and was like...that's it? es, there is the quick start series (also only 8 sessions long) but I'm not a programmer in another language, so I'm not sure how much it applies to me.posted by adamdschneider at 11:07 AM on January 20, 2012

Yeah, I have to say that it's pretty disappointing right now. There are some major bugs and it seems like the lessons have been put up without any user testing at all. There's assumed knowledge of concepts that a non-programmer wouldn't likely know anything about. It's a good idea but not very useful right now.posted by The Lamplighter at 11:10 AM on January 20, 2012

Codecademy got my 10 year old interested in programming. Not in Javascript, though. He did a few of their tutorials and was like "I want to do some GRAPHICS!" Now he's on Scratch.posted by DU at 11:22 AM on January 20, 2012

vanar sena: "I've had some success with HTML5 Boilerplate and 960 Grid, though they're both fairly low-level and won't make design choices for you."

Want someone to make design choices for you? Try Bootstrap. It's a really, really nice CSS framework that works and looks great out of the box.

At 40kb, it's kind of hefty, but provides TONS of incredibly useful styles.

Initially, I would have been opposed to such things. I generally don't like monolithic UI toolkits for their large size and general inflexibility (ahem JQuery UI), but I'm falling in love with Bootstrap. It's pretty nice to be able to build an app, and then worry about the nitty gritty styling bits.

Sadly, CSS is very much a trial-and-error kind of thing, and I've never really seen a good comprehensive guide to the language (although Mozilla's reference is very good; dochub is a better interface for browsing it). Once you understand the basics, and how selectors work, it's pretty incremental from there on out, and unfortunately, you need to deal with lots of browserquirks.

From there on out, it's mostly trial and error, and picking apart various tutorials and pretty things you find on the web. NetTuts isn't a bad place to start, and you definitely should be reading HTML5 Weekly.

From my folder of CSS bookmarks:

A List Apart's CSS section. The final word in anything web development-related. Read all of it. The writers here are the best of the best.

a big favorite on schmod's post. I recently styled my homegrown blog with bootstrap, and for the first time ever people said things like "it looks good". Of course, the content is still mind-numbing for almost everyone, but at least it doesn't look like something out of 1996 anymore.posted by jepler at 11:27 AM on January 20, 2012

I've been doing some JavaScript (with dojo) for work, and I miss all my Java features. Especially strict typing!posted by smackfu at 11:53 AM on January 20, 2012

This is perfect. Like others here, I've been on the Code Year/Codecademy and I have to agree, there's not much there just yet, and I say this as someone who has exactly one semester of C++. I need something to sink my teeth into, and it looks like this post provides it.posted by lekvar at 12:01 PM on January 20, 2012

It'll be interesting to see if browsers adopt some sort of common language-agnostic bytecode/VM standard

Not with JS being as good as it is. Javascript *is* the new bytecode. Good Javascript engines mean that it's now possible to render 3D raytraced images in your browser, you can boot Linux or a gameboy in a JS virtual machine and they've got as far as Quake in terms of Id games converted to JS.

Atwood's law says that any application that can be written in JavaScript, will eventually be written in JavaScript. This is becoming more and apparently true.posted by seanyboy at 12:17 PM on January 20, 2012

Do get any points for using Mojolicious's embedded perl templating to programmatically generate the included javascript code?

Atwood's law says that any application that can be written in JavaScript, will eventually be written in JavaScript.

This only works if you include "compiled into JavaScript". People will still write javascript by hand from time to time, just as people used to write inline assembly code well into the '90s, but most people will spend their time working in nicer languages that simply compile down to the new bytecode.posted by Mars Saxman at 2:24 PM on January 20, 2012

Starting next month, Berkeley will also be offering a series of free follow-along courses including CS 101, Machine Learning, Software as a Service, and others.

Those classes are actually offered by Stanford, not Berkeley. And they did a few last semester already, that you can still get into just by giving your email address and setting up a password. I don't know if the assignments get graded, however, for the classes that have already finished.posted by marble at 5:42 PM on January 20, 2012

Thanks for this! I've been meaning to *actually* learn javascript for a while now.

I just gotta finish haskell and scheme and erlang first... posted by wayland at 9:15 PM on January 20, 2012

Javascript is friggin' awesome... HTML5... all those buzzwords... that's just another term for "javascript." It's a little weird, certainly... but once you get a feel for javascript, the possibilities are remarkable. There's a whole ecosystem out there of little snippets you can use, but let me tell you this: if you haven't sent JSON objects to a frontend javascript renderer / basic template engine, man you've really missed out. It's such a pleasant, natural way to work.

So my Dilettante's Review of JS so far: The syntactical verbosity of Java, the semantics quirkiness of Perl, the runtime safety of Python and the standardization of late-90s C++. I feel old.posted by vanar sena at 7:26 AM on January 22, 2012 [4 favorites]

Since I mentioned it upthread, I should mention that Bootstrap (Twitter's open-source CSS framework) has been significantly updated, and is beginning to resemble a lightweight UI toolkit.

Although I continue to have reservations about monolithic UI toolkits, Bootstrap's light weight and new customization features definitely make it stand out as a toolkit-done-right. It's easy to learn, the documentation is great, it makes site/app prototyping a *far* less laborious process, and doesn't make too many design decisions for you. The base styles imposed by the framework are elegant and fairly conservative, and the optional JavaScript bits have been rewritten with JQuery.

Highly recommended. Bootstrap feels like what JQuery UI should have been.posted by schmod at 7:25 AM on February 1, 2012 [1 favorite]

« Older Freud: the last great Enlightenment thinker | Ugandan Little League woes and a win: “If we can... Newer »

Tags

Share

About MetaFilter

MetaFilter is a weblog that anyone can contribute a link or a comment to. A typical weblog is one person posting their thoughts on the unique things they find on the web. This website exists to break down the barriers between people, to extend a weblog beyond just one person, and to foster discussion among its members.