I wrote this as part of a text to Andrew, and I thought it was reasonably articulated though I’ve struggled to articulate it in the past. Here is why I see value in reactive programming and why I myself use it.
Reactive programming gives us better tooling to deal with mutable state.
Rather than exposing variables in our interfaces (and even inside private implementations) we expose signals, and then we have a consistent, formal interface for processing and propagating changes in state.
This — not even necessarily asynchronous programming — is where a big part of its value lies. It provides consistent tooling for dealing with mutable state, and it ensures that anyone who uses that state will also deal with changes to it. That alone helps us eliminate classes of bugs and write clearer code.
There are many other ways that reactive programming helps us, but this is one that has resonated with me lately, and one that I think isn’t broadly discussed.