I think most people would need to write some code to really grok it, I would anyway. It's a simple enough idea in context, but there's no royal road to understanding.
The explanations I know of (all from the Haskell community) are either
1) formal, referring to ideas from category theory,
2) metaphorical, conveying the ideas by intuitions you may already have about burritos or whatever, or
3) pragmatic, focused on how and why you use them in code.
I think this last category, pioneered by byorgey's wonderful TypeClassopedia [1], is by far the most useful in teaching people about monads but it depends on observing them yourself. (Ditching the metaphors actually seemed quite radical to me at the time -- I presumed they were necessary because everyone else did.) It builds up from understanding what a Functor is, then the next abstraction up, and so on until Monads seem like an obvious idea. The same approach is used in Learn You a Haskell for Great Good [2] but you need to doing the exercises to follow the book. sigfpe's classic explanation [3] is also by example and goes into a bit more depth. It still contains exercises for the reader though :)
Furthermore, the creator of Elm has a fun explanation too.
Evan Czaplicki - Let's be mainstream! User focused design in Elm - Curry On
https://youtu.be/oYk8CKH7OhE?t=1454
Is there a non-haskell resource on monads you could recommend? Anything that starts with "first, learn haskell" is probably not the easiest way, assertions from people who already know haskell notwithstanding.
Great point! I found this for python: https://www.stephanboyer.com/post/9/monads-part-1-a-design-p..., but it definitely focuses more on explanation than practical use. A list of "how to practice with monads in various languages" would be a neat thing to have.
If you use JS, if you get how Promises work your probably 90% of the way there; abstracting that pattern out to use in other contexts will probably get you the rest of the way.