We present a direction of research on principles and methods that can enable general problem solving via human computation systems. A key challenge in human computation is the effective and efficient coordination of problem solving. While simple tasks may be easy to partition across individuals, more complex tasks highlight challenges and opportunities for more sophisticated coordination and optimization, leveraging such core notions as problem decomposition, subproblem routing and solution, and the recomposition of solved subproblems into solutions. We discuss the interplay between algorithmic paradigms and human abilities, and illustrate through examples how members of a crowd can play diverse roles in an organized problem-solving process, serving not only as ‘data oracles’ at the endpoints of computation, but also as modules for decomposing problems, controlling the algorithmic progression, and performing human program synthesis.