Let's get back to our journey of performing computations over data in Clojure. We've already discussed how reducers can be used to process collections in Chapter 3, Parallelization Using Reducers. Transducers are, in fact, a generalization of reducers that are independent of the source of data. Also, reducers are more about parallelization, while transducers are more focused on generalizing data transformations without restricting us to any particular source of data. Transducers capture the essence of the standard functions that operate on sequences, such as
filter, for several sources of data. They allow us to define and compose transformations of data regardless of how the data is supplied to us.