Humans build models to understand the behaviour of the world around them.
Humans are uniquely well adapted to building models - they do it unconsciously and continuously and quickly. They learn to drive a car or fly a helicopter, using a model of its behaviour to extend their nervous systems. Mental models are added to, revised, merged, split as new information about the world and the things in it arrives - the models are being extended dynamically, and can be profoundly changed by experience, or by descriptions of new connections received verbally.
Human model buiding isn't perfect. Parts of one model can carry into another with disastrous results. We can revert to old ways of doing things that have been overlaid. The model may have been built on a complete misunderstanding, which we can't eradicate no matter how much we try to rebuild it. But we know of no better way to understand our surroundings.
If we are to build systems that mimic or predict human behaviour, then those systems will need to build models dynamically too. The model building will need to respond both to new firsthand experiences, the experience of others, and instructions - analytic statements.
A model is an assembly of pieces which, when combined, displays behaviour in some way similar to the object or process being modelled. A spreadsheet is an analytic model, a toy car is a physical model.
A poor model will not be useful in identifying the properties or behaviour of the object being modelled.
A statistical model of the weather that could tell you what happened on the particular day of the year for a hundred years back, but paid no heed to whether there were now clouds in the sky, would be a poor predictor of rain today.
A good model identifies the important elements of the thing being modelled and sloughs the unimportant, making it parsimonious. This can be a circular definition - how do you know you have the important aspects without testing the model against reality. How will you know when the model is used outside its proper area, and what will you do when the model is not applicable. Humans have the same problem - their highly developed model of car behaviour doesn't include what happens when a wheel falls off.
Models need to be Extensible
A simple model may be adequate initially, but it will need to be extended at some time. Its method of construction should allow this, and for models to merge together as connections become obvious. This says that there can be no hierarchy in the operation of the model - model A may become part of model B, and then B and C merge, and then D becomes a submodel of A. If we are adding to a model, we should not have to rebuild from scratch the model being extended.
Models should have maximum utility
Models are expensive to build. When we have built them, we should be able to make as much use of them as possible. A model that joins A, B and C should tell us something about C if we know A and B, or something about B if we know A and C. This is really the same as extensibility - we don't know where we may need to extend the model.
Models need a Purpose
We can't build a model of all of the behaviour of a complex object, without ending up with using the complete object as a model of itself. The purpose of the model helps to clarify what are the important elements, or more importantly, what are the elements whose behaviour is irrelevant to the model's purpose.
Models need to be Identifiable
If we have a model building system that builds models we don't understand and can't explain, we have probably failed on the extensibility criterion. If a new point for observation in the real system becomes available, we would like some way of identifying the corresponding point in the model. The model may not be using this part of the real system behaviour, so we need to extend it, but we should avoid the situation where the model is using a process with no point of correspondence with the system being modelled except for input and output - most statistical models are of this type.
The Choice between Algorithm and Structure
Algorithms aren't divorced from structure, rather it is a combination of activity in an algorithm and data in a structure that provides the model for a spreadsheet or a payroll program. An algorithm isn't usually very extensible, so the limits of the model need to be known well in advance. A model built from active structure - that is, no separation of activity and data - can be extensible.
What about OO?
Isn't this combining activity and data into an object? The usual take on object oriented programming is that objects inherit behaviour, and new and more complex behaviour is overlaid on the ancestral behaviour. As models extend and merge, it becomes necessary to link points which were internal, and now become external to the object. The process of "inside-outing" as models grow more complex, of turning objects inside out to gain access to the interior, works against the OO model of objects.