It is not always easy to figure out what a psychological model can or cannot explain, just based on a list of its assumptions. For example, for a long time psychologists took for granted that any model assuming the dimensional overlap hypothesis *could not* explain the S-S consistency effects found in 2-to-1 mapping tasks. However, it turns out that this was based on the *implicit assumption* of a static stimulus identification process. If a dimensional overlap model instead assumes flexible stimulus identification, it can account for these data. Because the response selection and dimensional overlap models were evaluated with the *implicit* assumption of static stimulus identification, it was difficult to evaluate and compare them clearly and accurately.

Moreover, when a model contains a large number of assumptions, trying to account for effects that interact with one another, reading through arguments about the model’s explanations and predictions can also be confusing. A good example of this might be the argument that dimensional overlap models can account for the electrophysiological data in S-S consistency tasks. This argument introduces a number of ideas about processing, such as the notion that stimulus identification can make a “mistake” that can later be corrected, that are not intrinsic to dimensional overlap models. It would not be surprising or unexpected for the reader to want to take a step back, and wonder: Does this model really fulfill the requirements of a dimensional overlap model? Can it actually account for the data that it is purported to account for? Or, is there a slip in the logic somewhere that is being glossed over through vague words and convoluted argumentation?

One way of addressing these problems in to develop psychological models that can be implemented as computational algorithms. This approach is very natural, in fact, for anyone taking the information processing approach to understanding how the mind works. If mental life is all about how information is represented by mental codes and transformed by mental processes, then it has a natural analog in a computer program, which represents information with variables and data structures and transforms that information with functions and procedures. By taking assumptions about mental codes and mental processes, and implementing them as a program with variables and functions, we create a very concrete and unambiguous form of psychological model.

The first and most obvious advantage to doing this is that a computer program *cannot* be vague, and must be completely explicit about all of its assumptions. This not only keeps things honest, but also allows for a more concrete *direct* comparison of different models: for example, if two computational models are *completely identical* except for one parameter, and there is a difference in the predictions of the two models, then it is clear that the difference in performance must be due to that one parameter.

Moreover, just in case slick words and convoluted logical arguments can leave you wondering, “Can this model *really* explain that result?”, a computational model can provide a compelling existence proof. That is, a computer program is one of the most compelling demonstrations that a system with a certain set of assumptions about the representation and processing of information *can* explain a certain pattern of results. Computer programs do not engage in fast-talking or hand-waving.

Finally, computer programs provide actual numerical predictions about people’s reaction times, rather than vague predictions like “people are faster when X than when Y.” If the particular set of assumptions that are implemented in a computer program accurately reflects how our minds work, then the (simulated) time it takes the program to go from stimulus information to the formation of a motor code should be proportional to the time it takes people to do the same thing (i.e. their reaction time).

Unfortunately, there is also a cost to implementing models as computer programs. In order to run, a computer program *must be* more specific than the psychological hypotheses that it is designed to implement. For example, the generic dimensional overlap and generic response selection models are characterized by a list of critical defining assumptions (i.e. the assumptions in the coding model framework, plus either the dimensional overlap hypothesis or the response selection hypothesis). A number of details about cognitive processing are left unspecified: for example, how mental codes actually form over time, how information is transferred from stimulus codes to response codes, and how the formation of one mental code influences the formation of other alternative codes of the same type (i.e. stimulus or response). These details are deliberately left unspecified, in order to allow the models to focus on the critical assumptions about cognitive processing to be examined.

However, these other details *have* to be specified in order to get a computer program to run. As a result, implementing computational versions of these models involves making arbitrary decisions – decisions about information processing *not inherent in* the models that they are based on. In contrast with the critical assumptions of the models, these are auxiliary assumptions, or implementation details, associated with the computational models. They have to be there for the computational implementation to run, but they do not represent crucial psychological hypotheses.

Because of this, the “existence proof” mentioned above does not work in reverse: if a particular computational model *cannot *explain a particular result, this does *not* mean that the psychological model it is based on *cannot* predict that result. If a computational model were implemented with the same set of critical assumptions, but a different set of auxiliary assumptions, it could very well make different predictions. This means that whenever a computational model can or cannot explain some finding, a great deal of care must be taken to ascertain *why*: what aspect of the model leads to its success or failure? A critical assumption, an auxiliary assumption, or an interaction between the two?