# Computer science

**Computer science** is the study of various aspects of computers. It is a common course of study and degrees at the college level and beyond.

Studies can range from the very practical, such as learning programming languages, to the highly theoretical.

Students who plan to study computer science should take as many mathematics courses as possible. While not all of computer science is directly mathematical, the mental discipline that comes from studying math is very useful in studying computers. Computer Science was originally (and still by some) viewed as a branch of mathematics, the earliest discoveries in the discipline being made by mathematicians. Some of the earliest pioneers were Alan Turing, Alonzo Church and John von Neumann, all mathematicians.

## Algorithms

An algorithm is the fundamental concept of Computer Science. An algorithm is simply a finite set of instructions to accomplish any task. A computer is simply a machine to carry out algorithms so you don't have to. The MIT book, Introduction to Algorithms, is viewed as the canonical basic reference and would be good for anyone interested. It is however expensive.

## Common programming languages in Computer Science

## Theoretical Computer Science

Theoretical computer science is the mathematical study of what can and cannot in principle be computed under various constraints. For example, Alan Turing proved that it is impossible to write a computer program that can determine whether other computer programs will ever *halt*, or whether they will run forever. Other problems which can be solved in principle seem impossible to solve efficiently. For example, the famous P vs. NP problem asks whether there exists a polynomial time algorithm to solve any NP-complete problem, like the travelling salesman problem. There is a $1,000,000 prize for the solution to the P vs. NP problem.