I’ve started learning this
It reminds me of The Emacs Experience. You start out using Emacs as an editor. Then you learn that there’s a built-in Lisp interpreter, and you think that’s cool: you can use that to set key bindings or automate things for which you used to use M-x define-macro, or add new menu entries. Oh, and you can even start other processes, so if you wanted to, you could run your file through ispell, or run RCS’s ci and co directly from Emacs.
Emacs Lisp is actually a programming language
But as you dig deeper, you realize that Emacs Lisp isn’t just a slightly more complex configuration file syntax, it’s an entire programming language. At that point, you switch mental gears from “how can I pipe the file I’m editing through indent and read it back in?” to “how can I indent C code on the fly?” From “how can I spawn a shell buffer in which to run Lynx?” to “How can I write a web browser in Lisp?” You stop seeing Emacs as an editor that can talk to other utilities to do useful work, and start seeing it as a development platform in its own right (and a way of life, but that’s another story).
It turns out that you can perform some pretty nifty things with this. For instance, let’s say that you have a page with several tabs, each one describing some aspect of whatever it is the page is about (e.g., a general description of a product; its price and availability; and customer reviews). Instead of having the server send out only the currently-selected tab, you can have a page with all of the tabs, all overlapping, but only one of them visible. A script running on the page can reach in and change the visibility of the piece of information you want to display at the moment. The obvious advantage is that once the page is loaded, the user can flip from one tab to another quickly, without having to wait for the server to serve up a whole new page.
Of course, unlike Emacs, this stuff is event-driven (the A in Ajax stands for “Asynchronous”), so naturally you’ve got all of the usual problems when things are happening all at once instead of in sequence: callbacks, interruptions, alarm timers, checking to see whether $FOO has finished loading, and so forth. I’m still struggling with that. But there’s definite hack value in there.