This paper traces the evolution of computational steering within visualization dataflow environments. In computational steering we integrate simulation and visualization into a single environment, in which the scientist can control the simulation on the basis of the visualization of the current results. This paper is essentially a review paper, in which we describe a number of projects with which we have been involved over the last twenty years. We begin with a historical look-back to the early development of dataflow visualization systems. These are also known as modular visualization environments. They typically consist of a library of elementary visualization components that can be wired together in a visual editor in order to compose a pipeline forming the visualization application. From an early stage these have been used for computational steering, because it is possible to include user code, for example a simulation, as a component in the pipeline. Moreover modules are able to run on a distributed set of resources, allowing simulation code to run on a remote resource. Indeed, if the simulation is producing large volumes of data, then the visualization modules can be co-located with the simulation thus reducing the amount of data returned to the desktop for visualization. This very useful facility has been surprisingly little used. Our own involvement in computational steering began in 1993 with the GRASPARC project, and interest was re-kindled in 2000 with the emergence of Grid computing and the UK e-science programme. Our first task was to re-work the distributed computing model of IRIS Explorer (the dataflow system we use at Leeds) so as to provide the security that is expected in modern computing environments. This was followed by a re-working of the architecture for computational steering, in the gViz project, where we separated the simulation code from the visualization dataflow, and allowed the simulation to run autonomously. This gives the advantage of disconnecting simulation lifetime from visualization system execution time. In doing this it allows simulations to run over greater time scales than the time period a user may wish to actively interact with them in any one session. Previously, shutting down the visualization would have shut down the simulation component. This was achieved using the gViz computational steering library. Our more recent work in the e-viz project has extended the architecture further, basing the work around an abstract description of the visualization pipeline from which a user interface for steering can be automatically generated. Likewise the pipeline description can be interpreted in terms of different visualization systems, providing an extra level of abstraction. As interest in service-oriented architectures develops, we are seeing a reworking of visualization systems as a pipeline of services, rather than modules. We can expect this trend to carry over to computational steering in future research.