A subject about ideas
Computer science is sometimes described as being about computers the way astronomy is about telescopes: the machines matter, but the real subject is the ideas. This article follows those ideas, namely what can be computed, how to do it efficiently and how to express it clearly, and leaves the story of the devices themselves to our overview of the history of computing.
Roots in mathematics and logic
The word algorithm traces back to the name of the medieval scholar al-Khwarizmi, whose writings helped spread step-by-step methods for arithmetic. Procedures of this kind, such as Euclid’s method for finding a greatest common divisor, existed long before anyone thought of a formal field around them.
The modern theory began in the 1930s. Mathematicians were asking whether there was a mechanical way to decide every mathematical statement. Kurt Godel’s work on the limits of formal systems, Alonzo Church’s lambda calculus and Alan Turing’s 1936 paper on abstract machines each addressed versions of that question. Turing’s machine gave a clear definition of a computation, and he showed that some problems cannot be solved by any such procedure. This was a landmark result: it established that there are firm limits on what computers can do, no matter how powerful they become.
Claude Shannon’s work in the late 1930s and 1940s added another foundation. He showed how logical operations could be built from electrical switching circuits and later developed a mathematical theory of information. These ideas link the abstract logic of the theorists to the practical design of circuits.
From machine code to programming languages
When electronic computers appeared in the 1940s, programming meant writing numeric instructions by hand. Assembly languages made this a little easier, but the real shift came in the 1950s with languages that resembled mathematical or business notation.
FORTRAN, developed in the 1950s for scientific calculation, was among the first widely used high-level languages. LISP, from the late 1950s, introduced ideas about symbolic processing that influenced later work in artificial intelligence. COBOL, around 1959, aimed at business data processing. ALGOL, around the same time, was influential mainly for its clear structure and the way it was described, and many later languages borrowed from it.
Compilers, the programs that translate high-level code into machine instructions, became a research area of their own. The study of grammar and parsing connected programming to linguistics and formal language theory.
Algorithms and data structures
As machines were used for larger tasks, researchers studied how to organize data and how fast different methods run. Sorting and searching were early topics. In the late 1950s, Edsger Dijkstra devised a well-known method for finding shortest paths in a network, and similar graph algorithms later became essential for routing and mapping.
In the 1960s, Donald Knuth began his multivolume work on the art of computer programming, which helped establish the careful analysis of algorithms as a core activity. Students still learn about arrays, linked lists, trees and hash tables as basic building blocks.
Becoming an academic discipline
Early computing was often housed in mathematics, engineering or physics departments. The Association for Computing Machinery was founded in 1947, and over the 1960s universities began creating separate computer science departments and degree programs. Curricula settled gradually around areas such as programming, data structures, computer architecture, theory and operating systems.
Operating systems and the Unix system from around 1970, along with the C language of the early 1970s, shaped how generations of programmers worked. The relational database model, proposed by Edgar Codd in 1970, gave a clean way to organize stored data and underlies much of the software used by businesses today.
Software becomes hard
By the late 1960s, large software projects were frequently late and unreliable, a situation sometimes called the software crisis. Researchers and practitioners responded with new ideas. Structured programming argued for clear control flow instead of tangled jumps. Object-oriented ideas, with early roots in the Simula language of the 1960s, organized code around objects that bundle data and behavior. Later decades added work on testing, version control and formal verification. Anyone starting out today with coding basics benefits from these lessons even without knowing their origins.
Complexity: how hard is a problem?
Knowing that a problem is solvable is different from knowing it can be solved quickly. In the 1960s and 1970s, computer scientists developed computational complexity theory, which sorts problems by how their required effort grows with size. In 1971, Stephen Cook described the concept of NP-completeness, and the question of whether problems whose answers are easy to check are also easy to solve, known as P versus NP, remains unresolved. Most experts suspect the answer is no, but nobody has proved it.
Security, networks and learning
The same decades saw the invention of public-key cryptography in the 1970s, which let strangers set up secure communication over open channels. The principles behind it are explained in our article on encryption basics. Networking research, covered separately in our piece on internet networking, produced protocols and distributed-systems theory.
Another strand, the study of learning from data, grew out of statistics and artificial intelligence. Today it is widely taught as machine learning, and the field’s early ambitions are traced in our history of AI.
What the discipline looks like now
Modern computer science spans theory, systems, programming languages, security, graphics, databases, human-computer interaction and many more areas. It also overlaps with other fields: data science, biology, linguistics and economics all use its methods. Yet the core questions remain those of the 1930s: what can be computed, how efficiently, and how can people describe computations clearly enough to trust them? Seeing the field as a long conversation about those questions makes its many specialties easier to understand, and helps explain why its effects on computing and society are so far reaching.