Computer science

Computer science deals with the theoretical foundations of computation and practical techniques for their application.

**Computer science** is the science of information. Computer scientists study different ways of reading, using, and encoding information.

There are many different areas within computer science. In some areas, scientists only work with ideas "on paper". In other areas, they use those ideas to make things like computers and computer programs.

A person who works in computer science will often need to understand logic and mathematics.

## Common tasks for a computer scientist 
### Asking questions 
This is so people can find new and easier ways to do things, and to use information to approach problems. 

While computers can do some things easily (like simple math, or sorting out a list of names from A-to-Z), computers cannot answer questions when there is not enough information, or when there is no real answer. Also, computers may take too much time to finish long . For example, it may take too long to find the shortest way through all of the towns in the USA — so instead a computer will try to make a close guess. A computer will answer these simpler questions much faster.

### Answering the question 
Algorithms are a specific set of instructions or steps on how to complete a task. For example, a computer scientist wants to sort playing cards. There are many ways to sort them — by suits (diamonds, clubs, hearts, and spades) or by numbers (2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, and Ace).  By deciding on a set of steps to sort the cards, the scientist has created an algorithm. The scientist then needs to test whether this algorithm works. This shows how well and how fast the algorithm sorts cards.

A simple but slow algorithm is: from one end of the deck, take the first and second cards and check whether they are sorted in the correct order. If they are not, switch them so they are sorted. Do this again with the second and third cards. Repeat these steps with the third and fourth cards, and continue until you get to the end of the deck. Then, starting from the beginning of the deck again, repeat the same steps going though the deck over and over until the deck is sorted. This is called a bubble sort. This method will work, but it will take a very long time.
 
A better algorithm is: find the first card with the smallest suit and smallest number (ace of spades, according to New Deck Order), and place it at the start. After this, look for the second card, and so on. This algorithm is much faster than bubble sort. This algorithm is called a "selection sort".

Ada Lovelace wrote the first computer algorithm in 1843, for a computer that was never finished.  Computer software began during World War II.  Computer science separated from the other sciences during the 1960s and 1970s.  Now, computer science has its own methods and technical terms.  It is related to electrical engineering, mathematics, and language science.

Computer science has two areas of study. They are known as theoretical computer science and applied computer science. Theoretical computer science looks at how computers do things so that computers can be faster. It also tries to figure out what the limits of computers are. Applied computer science looks at what computers can do to help people solve problems. 

Computer engineering looks at the physical parts of computers (hardware). Software engineering looks at the use of computer programs and how to make them.

## Parts of computer science 
### Central math 
* Boolean algebra (when something can only be true or false)
* Computer numbering formats (how computers count)
* Discrete mathematics (math with numbers a person can count)
* Symbolic logic (clear ways of talking about math)
*Order of operations (which math operations are performed first)

### How an ideal computer works 
* Algorithmic information theory (how easily can a computer answer a question?)
* Complexity theory (how much time and memory does a computer need to answer a question?)
* Computability theory (can a computer do something?)
* Information theory (math that looks at data and how to process data)
* Theory of computation (how to answer questions on a computer using algorithms)
* Graph theory (math that looks for directions from one point to another)
* Type theory (what kinds of data should computers work with?)
* Denotational semantics (math for computer languages)
* Algorithms (looking at how to answer a question)
* Compilers (turning words into computer programs)
* Lexical analysis (how to turn words into data)
* Microprogramming (how to control the most important part of a computer)
* Operating systems (big computer programs, e.g. Linux, Microsoft Windows, Mac OS to control the computer hardware and software)
* Cryptography (hiding data)
* Parallel computing (doing many instructions at the same time)
* Theoretical computer science (how information can be processed)

### Computer science at work 
* Artificial intelligence (making computers learn and talk, similar to people)
* Computer architecture (designing a computer)
* Computer graphics (making pictures with computers)
* Computer networks (joining computers to other computers)
* Computer program (how to tell a computer to do something)
* Computer programming (writing, or making, computer programs)
* Computer security (making computers and their data safe)
* Databases (a way to sort and keep data)
* Data structure (how to build or group data)
* Distributed computing (using more than one computer to solve a difficult problem)
* Information retrieval (getting data back from a computer)
* Programming languages (languages that a programmer uses to make computer programs)
* Program specification (what a program is supposed to do)
* Program verification (making sure a computer program does what it should do, see debugging)
* Robotics (using computers to control robots and machines)
* Software engineering (how programmers write programs)
* Blockchain (use blockchain technology for security, and privacy)

### What computer science does 
* Benchmark (testing a computer's power or speed)
* Computer vision (how computers can see and understand images)
* Collision detection (how computers help robots move without hitting something)
* Data compression (making data smaller)
* Data structures (how computers group and sort data)
* Data acquisition (putting data into computers)
* Design patterns (answers to common software engineering problems)
* Digital signal processing (cleaning and "looking" at data)
* File formats (how a file is arranged)
* Human-computer interaction (how humans use computers)
* Information security (keeping data safe from other people)
* Internet (a large network that joins almost all computers)
* Web applications (computer programs on the Internet)
* Optimization (making computer programs work better)
* Software metrics (ways to measure computer programs, such as counting lines of code or number of operations)
* VLSI design (the making of a very large and complex computer system)

## Related pages
* Computing
* Formal language
* Turing Award
* Computer jargon
* Encyclopedia of Computer Terms

## References