I too used to think that computer science was just about theory. When I was an undergrad, I was subjected to insults from 'real' scientists who thought that computer science was just about programming. I countered, "No it's not! Look at all this theory we have! See, our field is just as rigorous as theoretical physics!" And eventually I convinced myself that computer science was in fact, just theory, and all that programming and computer systems (i.e. hardware and software) crap was just 'implementation detail.'

I then went to graduate school, and took a heck of a lot of CS courses. I realized that limiting computer science to just theory would be doing a disservice to the field. What make computer science alive and relevant are the applications, the computers, and the programs. Furthermore, it's very hard to separate the study of applications from the study of systems from the study of theories. Think about artificial intelligence or computer graphics. Do those subfields have applications? You bet. Software and hardware? Tons. Theories? Oh yes. You can only separate the subfields into theories, systems, and applications after all those things are developed. The development process itself deeply intermingles the three.

To set the record straight:



Computer science is a field of study with the following objectives:
  1. Development of mathematical theories of computation.
  2. Construction of physical systems that perform computations.
  3. Applications of computational theory and systems to real-world problems.
All three objectives are equally important. In fact, the three objectives are deeply interdependent.

The first objective gives structure to the field -- a road map if you will. Without a formal foundation to guide us, computer science will be nothing more than the application of trial and error, heuristics, folklore, and voodoo. These theories help us understand why certain approaches work, gives us guarantees they will, and helps us predict new approaches. Fields like algorithm design, numerical analysis, computability theory, and logic are examples of these theories.

The second objective gives the means for computer science to be useful. Computer hardware and software, in their physically realized form, make the theory useful and the applications possible. Abstractions and simplifying assumptions inherent in theory give way to concrete detail and complexity of reality. 'Implementation details,' often brushed over by theorists, are carefully considered and fleshed out. Studies of computer architecture, programming language design, operating system design, and software engineering concentrate on this objective.

The third objective gives purpose to computer science. This is the why of computer science. This is what allows computer science to have an impact in the real world. Additionally, applications often drive the development of systems and theories. Computer animation, electronic commerce, and computational physics are examples of these applications.

Remember: computer science = { computation } × { theories, systems, applications }