A common misconception is that computer science is equivalent to programming. This has led to several complaints by fellow students that they're not learning anything useful in their cs class.

Computer science deals with algorithms, their implementation, speed, and feasibility, as well as with any other theoretical aspect of computer operation. Programming itself is more of an afterthought. Not that it's not important, but it is not the focus.

Interesting subfields of computer science: Well-known and highly-regarded computer science schools (in no particular order): If I left out your favourite field of study or your alma mater, please /msg me. I am especially looking for non-US CS schools.

Until now, this writeup has never included the word metanode in its text or title :)

Most people think computer science is something to the effect of the study of computers. But it's not. It's really the study of computation: what can be computed. Of course everything that can be computed can be computed via a Turing Machine (a DFA and a tape).

So zooming in a little, we have have to figure out how exactly to go about computing things (the DFA), and how to represent information (the tape). Incidentally, this is why computer geeks go around making CS metaphors about every real-life thing (i.e., the conversation stack, binary search) -- because the majority of real life is dealing with information and solving problems.

How we actually go about implementing our Turing Machines (or close approximations thereof) -- and making them easy to use -- is left as an exercise to the reader. I see it as purely incidental to the science. The fact that we have these things called "transistors" and "keyboards" and "operating systems" that work in whatever way they do might be completely different if we rewound time and started the whole computer-invention process over again. But one thing wouldn't change, which is the essence and true nature of computer science: the computable.

Computer Science is no more about computers than astronomy is about telescopes.

Edsger W. Dijkstra

The purpose of computation is insight, not numbers.

Richard Hamming

"What is Computer Science?" Do not expect a single answer to this question (or to similar ones; "What is Mathematics?", "What is Applied Mathematics?", "What is Physics?", "What is Theatre?", "What is Literature?" have all been answered many times, and differently each time).

It is tempting to view CS "merely" as the theoretical basis of computing: some formal language theory, some logic and mathematical logic, lots of computational complexity, some algorithms, a little discrete mathematics (the author's bias clearly shows in this list!). They're all important parts of what has come to be known as "Theory of Computer Science" (TCS). Computers and their programs, if you will, are merely a few bits taken from Mathematics and (depending on your point of view) either "frozen" or "given life".

But is that "all"?

Probably not; computers are more interesting than that. The choice of these particular fields isn't arbitrary; the fields "in" CS are chosen because of their applicability to real problems, as implemented with real software on real hardware. Of course, not every problem (or solution!) is directly applicable to a current problem. But the same is true in Physics: Physics is not Engineering.

CS is the academic backing to computing. Computing raises many questions: How can I optimize the flow of goods between several centres through given delivery channels? How can I best pack different-sized pallets onto airplanes? How can I build a cheap circuit to add integers quickly? How can I automatically debug programs? The choice of solution "in the field" needn't be the optimal choice; the optimal choice might not be known (or might be known but too expensive to implement). CS tries to answer the theoretical questions, but also to provide tools to choose and implement the practical solution.

So is CS the "techniques of molecular biology" of Mathematics, a servant whose sole task is to free mathematicians by providing the services required by certain branches of engineering? Of course not. The questions of CS stem from real problems, but are of independent interest!

Questions of distributed computing were studied well before modern "P2P" systems were a glimmer in anyone's eye. The practical motivation was always clear, even if one particular application (deployment on a worldwide Internet) was not. And distributed computing is not relegated to serving P2P systems; it is "universal": similar questions arise (and are solved) when distributing databases (across a closed, controlled network), or on a Beowulf cluster running certain tasks. And they will arise in yet other systems.

That's what a theory is: a recognition that certain different problems are similar in some ways, and (hopefully) some techniques for solving them.

And that's what CS does. It starts from interesting problems related to particular engineering disciplines, and provides theories to help attack them. But the source of interest in the problems is not the monetary worth of the solution, or the engineering importance of the solution (that is why there is much more theory of databases than there is of word processors, for instance). Unlike other sciences, the problems of CS stem from human creations, not from Nature. But like other sciences, CS is a "good bits version".

The scope of most CS departments is certainly wide enough to reflect this point of view. Nonetheless, many academic CS departments insist on also being engineering departments. This is probably a mistake. The considerations of engineering are very different from those of science. There is much common ground between the two, of course, but there are many more differences. Software engineering is a related but separate discipline (just like different people build dams and create techniques to solve partial differential equations, even though both are about holding water).

It is instructive to consider some of the field's founders.

Computation is not computer science. Neither is the servant of the other. Both co-exist, and each provides ideas for the other.

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 }

Log in or registerto write something here or to contact authors.