Welcome to Hands-On Reactive Programming with Python! This book is a step-by-step journey into event-driven programming and, more specifically, reactive programming. The resources available on this topic are still rather sparse, especially for Python. I hope that this book will help to fill a part of that gap, and that it will give you the knowledge and will to write code in a functional and reactive way.
Magic is rarely something good in computer science. In my career, I have met quite a number of developers who were happy when a development started to work magically or when a bug was fixed magically (usually with some help of a delay). Any programmer can be lazy, but certainly not in this way! Fortunately, I've also had the chance to meet a lot of developers with the good laziness skill: understanding everything you do to ensure that you will not have to do it twice. I firmly believe that to use any framework correctly, you have to understand how it works under the hood. This is why this book is structured this way, with explanations of the principles that make reactive and asynchronous programming work the way they do.
Writing this book has been incredibly rewarding, and worth the effort. As I write this preface, there is no online documentation for the Python implementation of ReactiveX, and it is still difficult to find code examples of the operators for the other programming languages' implementations. This is why I have taken care to provide working examples for all operators that are documented in this book. I have carefully read the implementation of each of them to ensure that they are documented exactly as they behave.
However, documenting the RxPY operators is not the main aim of this book. The practical examples provided chapter after chapter should gradually help you to become confident with ReactiveX and asynchronous programming, including rather advanced topics such as observable multiplexing.
I have worked hard to make this book as didactic as possible and as accurate as possible. However, if you find any mistakes or if you feel that some parts are missing explanations, feel free to tell me about it.