Bill Mill, a programmer, writes tutorials and experiments on Python, HTML canvas games, D3, and data structures like Bloom filters.
HN commenters link his canvas tutorial as a way to learn JavaScript through graphics and games.
Actually you could say that functions in C# have been first-class since version 2.0.
We of course need to define what first-class is ... if it's the ability to have higher-order functions, than 2.0 fits.
C# 3.0 only adds a light-weight syntax for anonymous delegates plus the really kick-ass ability to get a syntax tree of that method instead of the method's reference (on which Linq is based) ... and I really wish other languages add this capability (it was possible in Ruby 1.8.x, but it's not anymore in Ruby 2.0).
Python kicks ass in regard to first-class functions ... and it leverages that ability with decorators. People using other languages go through great pain to have AOP capabilities (for example), but in Python it only takes like 10 minutes to add a couple of utilities to do whatever you want.
The only frustration I have with it is the lack of multi-line anonymous blocks, but Python is so flexible you can add that using "with" block hacks, like described here ... http://billmill.org/multi_line_lambdas.html
Also, once you understand dynamic-scoping ... it's really not that big of a deal to deal with the situation described above. It's just different.
I like the lexical-scoping in Perl as it prevents all kinds of errors ... but in Python I have real exception-handling, and a kick-ass debugger console just by adding "import ipdb; ipdb.set_trace()" anywhere I want.
I don't know of any good Javascript learning platforms off the top of my head, but I think you'll want to aim for some form of immediate gratification.
One thing you could do is whip up a sandbox page, like what w3schools does with its examples. Basically, create a page with three primary elements: a text box containing the Javascript, an Update button, and a section containing the actual content being messed with. You could come up with multiple "tutorials" or "activities" using this concept, and the Canvas tutorial below [1] is a neat example.
[1] http://billmill.org/static/canvastutorial/
Only tangential. I usually enjoy reading public notes of other people, so that's what I did here too.
On https://notes.billmill.org/programming/json/jq.html the author says that
> jq appears to be largely unmaintained at this point, which is sad
They might be happy to learn that after several years of halted development and unreleased improvements & bugfixes, jq ownership got transferred from the original author to a new organization, which allowed to resume operations:
https://github.com/jqlang/jq/releases/tag/jq-1.7
Might be easier to use Javascript for this purpose since it is available practically everywhere. And HTML Canvas support makes writing graphics/games very easy.
See http://billmill.org/static/canvastutorial/index.html for example.
Obsidian, and I export it to https://notes.billmill.org via https://github.com/llimllib/obsidian_notes