In the coming semester, I get to teach “Computational Modeling” again. This new course is part of our interdisciplinary graduate training program in perceptual science. The aim of “Computational Modeling” and its quasi-prerequisite “Computational Thinking” is to get first-year graduate students in fields such as psychology, linguistics, anthropology, biomedical engineering, and philosophy and their peers in computer science to collaborate using computational tools, concepts, and ways of thinking.
a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.
Call me a computer scientist, but I think to really understand something is to be able to write a program to simulate it. My notion of programs is pretty broad, so this claim is not as outlandish as it might first seem, and maybe I’m just a funny mathematician. Nevertheless, the claim emphasizes the practical value of executable specifications: explanations that are formal enough to run yet grounded enough to share, concrete enough to see yet abstract enough to generalize, controlled enough to replicate yet flexible enough to change. You can’t be right if you can’t be wrong.
The goal of this class is for scientists to talk across disciplines. The premise is that computational models can help us talk. The theme of perception and cognition makes the models recursive.
Leaving the slogans aside, what am I actually going to teach? The relevant skills come down simply to reading, writing, and arithmetic, if in a generalized sense: they are to identify essences, separate components, deduce consequences, and communicate arguments. But how to teach these skills for executable specifications? For instance, how well do design recipes for algebraic data types apply to models of perception? I don’t know of a computer-science textbook that is tailored for cognitive science; please tell me if I should.
Here are some questions whose variants I hope will be asked.
- What to explain? What do people say that irks you, and why?
- What doesn’t make sense? What can I ask about?
- How does a game illustrate, with interaction and inspection?
- What are the types of the props, the behaviors, the right or wrong explanations?
- Where are the parts? Which should we refine? Which can we hide?
- How to not repeat ourselves?
Here are some examples whose like I hope will come up; I don’t have enough.
- SimCity, Monopoly, Settlers of Catan, Dungeons and Dragons.
- Optical perspective and graphics to model vision.
- Constraint search to model interpreting sentences and line drawings.
- Probabilities and utilities to model beliefs and desires.
- Processing rule languages for computational chemistry and systems biology.
In the end, of course, the students themselves must originate the questions and the examples, the writings (for sure) and the readings (I hope). Each domain is a great opportunity for the collaborators themselves to develop a toolbox and a vocabulary, be it a set of of MATLAB scripts or program transformations. My job is to coordinate the activities and the space. To this community of learning, I bring executability and polymorphism. And apprehension.