This is from an episode I happened to catch when flipping channels tonight. I usually linger on PBS for a few seconds, and caught this exchange about something called “emergent complexity”. Immediately I thought of why software often behaves “irrationally”…
From Nova ScienceNow, http://www.pbs.org/wgbh/nova/transcripts/3410_sciencen.html#h03
JOHN HOLLAND: Anything I know that exhibits emergence, involves, a lot of, we might call them agents, a lot of individuals or parts. We could call them parts.
CARLA WOHL: John Holland’s first experience with emergence came from some fairly unsophisticated electronic parts that came together to create something almost intelligent. And he saw it a half century ago with a game of checkers. You used to look at this as child’s play, right?
JOHN HOLLAND: Yes, I did.
CARLA WOHL: I believe it’s your move, too, by the way.
JOHN HOLLAND: Oh, all right.
CARLA WOHL: What changed your mind?
JOHN HOLLAND: What changed my mind was my encounter at IBM – this was in the early ’50s I was busy at that time simulating neural networks.
CARLA WOHL: Meanwhile, a coworker, Arthur Samuel, was doing something else.
JOHN HOLLAND: He programmed the machine to play checkers. And I thought, “Well, what he’s doing is interesting, but that isn’t anywhere near as deep as simulating neurons.”
CARLA WOHL: It’s checkers, right?
JOHN HOLLAND: Yeah, it’s checkers.
CARLA WOHL: As it turned out Samuel had achieved something far deeper than anyone at IBM expected.
JOHN HOLLAND: He programmed the rules, and the machine would move according to the rules.
CARLA WOHL: Not only was the computer following the basic rules of checkers, it had another set of rules as well, a strategy to favor moves that might lead to victory.
JOHN HOLLAND: Simply by its experience with him and other players, it favored better moves than he did. That machine learned well enough that it could actually beat Samuel himself. With this learning I have emergence.
CARLA WOHL: It was emergent because when the computer followed simple rules, something as unpredictable and complex as learning emerged, something until then only living things could do.
This may explain why testing is so complex — that even when you get all your tests planned, exploratory testing is so useful because it tends to find issues that emergent complexity creates.