Modern computer science presents immense challenges to which both experimental and theoretical computer scientists respond. Researchers in both communities explore the frontiers of the field. Experimental computer science is devoted primarily to harnessing the power of computation whereas theoretical computer science seeks largely to understand the limits on computation and the power of computational paradigms. Theoreticians also develop general approaches to problem solving. The boundary between experimental and theoretical computer science is not firmly marked; theoreticians invent ways of harnessing computation and experimentalists apply analysis in their work. Both communities share a common vision, however, which is to make computation useful.
Experimental computer science is most effective on problems that require complex software solutions such as the creation of software development environments, the organization of data that is not tabular, or the construction of tools to solve constrained optimization problems. The approach is largely to identify concepts that facilitate solutions to a problem and then evaluate the solutions through construction of prototype systems.
Theoretical computer science is most effective on problems that are susceptible to precise formulation such as the characterization of hard computational problems, the encryption messages for large scale use, the use of large degrees of parallelism, the coordination of activity on distributed systems, and the determination of limits on the performance of computers. The approach is to develop computational models and methods of analysis and then apply the analysis to problems that would be executed on these models.
One of theoretical computer science's most important functions is the distillation of knowledge acquired through conceptualization, modeling and analysis. Knowledge is accumulating so rapidly that it must be collected and prepared for transmission to the next generation. While this task is not limited to theoretical computer science, it is one of its principle functions.