Rich really beautifully shows here the issues with the reactive/callback/async style which I had never really appreciated before seeing this talk. Great stuff!
In the first two minutes, rich explains: "good programs should be made out of processes and queues". If this statement triggers your gag reflex - that is, if you don't want to work on programs built like this, but rather want first-class API abstractions between components; the remainder of the talk will confirm your intuitions. CSP is really not a good basis for comprehensible concurrency, I understand that the watered down abstractions that javascript inherited from E are not perfect, but they are a lot more tractable in practice than channel use. Yes, Rich says that you "can send reply channels over the request channel" - but why not just use an abstraction that makes this the default, as promises do? That way you can have dynamic structure in your code. I wonder a little if there has been a walking-back of core.async use in the broader clojure community in the last 10 years. I remember it being difficult to find libraries that did not use it.