What is computer science? Ask 100 computer scientists and you will likely receive 100 different answers. One possible, fairly succinct, answer is:
Computer science is the study of algorithms with a goal towards their efficient execution. This includes the design, analysis, hardware realizations, and software realizations of algorithms.(This working definition is based on a definition originally proposed in: Gibbs, N.E. and Tucker, A.R. "A Model Curriculum for a Liberal Arts Degree in Computer Science", Communications of the ACM March, 1986 and related in: Schneider, M. and Gersting, J. An Invitation to Computer Science, p. 4.)
An algorithm, in this context, is a step-by-step procedure for accomplishing some task that can be formalized into very precise, atomic (indivisible) instructions. The idea is that an algorithm should even allow for the task to be accomplished by someone or something who does not understand the task - in other words, it is a recipe for an automated solution to a problem. What we call computers (not that long ago, a "computer" was a person who computed) are tools for executing algorithms.
Much of the study of algorithms ponders two basic questions involving computers and computation:
Computer science is NEITHER the study of computers NOR the study of different kinds of computers.Just a guess, but if you polled physicists, chemists, and computer scientists, computer scientists would probably be the least effected by not having constant access to a computer.
Computer science has its origins in mathematics, specifically in formal logic. In fact, some of the fundamental ideas in computer science had already been developed a decade or more before any electronic computers had been built.
It is instructive to consider some background: Mathematics progressed in the nineteenth century at such an impressive pace, that at the outset of the twentieth century, several leading mathematicians predicted that soon a mechanism would be in place by which any mathematical problem could be solved simply by "turning a crank." Thus, it came as a great surprise in the 1930's when it was formally proven that there exists an unlimited supply of math problems that fundamentally cannot be solved, whether by human or machine. Furthermore, it was shown that the very problem of determining if a math problem can be solved is undecidable. This revelation came about just as the first formal notions of computers were being invented. It turns out that comprehension of what we can compute is intimately related with how we can compute.
One of the most practical and important consequences of these developments is the guarantee that in a deep sense, writing computer programs is a difficult process: there can be no one mechanism by which programs can be automatically checked for errors. This is one of the reasons why it is so difficult to separate the process of learning to effectively write computer programs from learning computer science.
After computers began being widely used and accepted, computer scientists began to get a better feel for the kinds of problems that not only can be solved by computer, but can be solved practically. For example, consider the Traveling Salesperson Problem: Given a map showing the distances between each pair of cities, what route should a traveling salesperson take so as to visit each city once and travel the shortest possible distance? This problem can be solved on a computer by a simple computer program. However, the only known solutions guaranteed to succeed require the computer to run for a very, very long time. For example, to solve the problem for 25 cities, the world's fastest computers would take thousands of years. Thus, it is not enough to know if a problem is decidable, it is also important to know if it is tractable.
Determining which problems have tractable solutions and which do not is the purview of the computer science subfield computational complexity. The study of this field requires a firm grounding in the theory of automata (also known as the theory of computation). Informally, automata and complexity theory tell us that computers are not necessarily helpful for solving all problems. This debunks another common misconception about computers and computer science. So, to reiterate:
Computers CANNOT solve all problems.An important part of computer science is determining where computers can be applied most effectively. So, from the working definition of computer science atop this page, it is apparent that computer science can include applications, such as the theory of databases, which investigates the efficient storage and retrieval of information. However, this meaning of application differs from the more common use in the phrase "software application." This is perhaps the biggest misconception of all about computer science. To make it plain:
Computer science is NOT about word processing and spreadsheets.
| home | science@slc | slc |