Problem-solving strategies exhibited by humans are diverse and vary along a number of dimensions. In this paper, we attempt to address the problem of understanding and reproducing the great variety of problem-solving strategies observed in humans and existing artificial intelligence systems. To accomplish this task we propose a generative theory of problem solving, which defines the orthogonal dimensions over which problem-solving strategies can differ. Once the dimensions are defined, we suggest a number of possible values that each dimension can take, creating a space of strategies. This space covers problem-solving systems from multiple paradigms and provides a framework for combining these strategies in novel ways.