An Angular application is a reactive system. And that's why we need to understand reactive programming to be productive with Angular.
Reactive programming works with event streams and the state. And it can be divided into transparent and reified.
Since the very beginning the framework has had excellent support for transparent reactive programming. It was used both to propagate the state and to handle events. It is simple and fast. And the new versions of the framework still support it.
But it can also be limiting at times and make solving certain problems difficult. That's why Angular now comes with support for reified reactive programming, using observables.
The Angular ecosystem embraced these ideas as well. The reactive forms module, the router, and other libraries like NgRx, all provide observable-based APIs.