From Wikipedia, the free encyclopedia
Computer science deals with the theoretical
foundations of information and computation, together with practical
techniques for the implementation and application of these foundations.
Computer science is the study of the theory, experimentation, and engineering that form the basis for the design and use of
computers. It is the scientific and practical approach to
computation and its applications and the systematic study of the feasibility, structure, expression, and mechanization of the methodical
procedures (or
algorithms)
that underlie the acquisition, representation, processing, storage,
communication of, and access to, information. An alternate, more
succinct definition of computer science is the study of automating
algorithmic processes that scale. A
computer scientist specializes in the theory of computation and the design of computational systems.
Its fields can be divided into a variety of theoretical and
practical disciplines. Some fields, such as
computational complexity theory (which explores the fundamental properties of
computational and intractable problems), are highly abstract, while fields such as
computer graphics emphasize real-world visual applications. Other fields still focus on challenges in implementing computation. For example,
programming language theory considers various approaches to the description of computation, while the study of
computer programming itself investigates various aspects of the use of
programming language and
complex systems.
Human–computer interaction considers the challenges in making computers and computations useful, usable, and
universally accessible to humans.
History
The earliest foundations of what would become computer science predate the invention of the modern
digital computer. Machines for calculating fixed numerical tasks such as the
abacus have existed since antiquity, aiding in computations such as multiplication and division. Further,
algorithms for performing computations have existed since antiquity, even before the development of sophisticated computing equipment.
Wilhelm Schickard designed and constructed the first working
mechanical calculator in 1623.
[4] In 1673,
Gottfried Leibniz demonstrated a digital mechanical calculator, called the
Stepped Reckoner.
[5] He may be considered the first computer scientist and information
theorist, for, among other reasons, documenting the binary number
system. In 1820,
Thomas de Colmar launched the
mechanical calculator industry
[note 1] when he released his simplified
arithmometer, which was the first calculating machine strong enough and reliable enough to be used daily in an office environment.
Charles Babbage started the design of the first
automatic mechanical calculator, his
Difference Engine, in 1822, which eventually gave him the idea of the first
programmable mechanical calculator, his
Analytical Engine.
[6] He started developing this machine in 1834, and "in less than two years, he had sketched out many of the
salient features of the modern computer".
[7] "A crucial step was the adoption of a punched card system derived from the
Jacquard loom"
[7] making it infinitely programmable.
[note 2] In 1843, during the translation of a French article on the Analytical Engine,
Ada Lovelace wrote, in one of the many notes she included, an algorithm to compute the
Bernoulli numbers, which is considered to be the first computer program.
[8] Around 1885,
Herman Hollerith invented the
tabulator, which used
punched cards to process statistical information; eventually his company became part of
IBM. In 1937, one hundred years after Babbage's impossible dream,
Howard Aiken convinced IBM, which was making all kinds of punched card equipment and was also in the calculator business
[9] to develop his giant programmable calculator, the
ASCC/Harvard Mark I,
based on Babbage's Analytical Engine, which itself used cards and a
central computing unit. When the machine was finished, some hailed it as
"Babbage's dream come true".
[10]
During the 1940s, as new and more powerful
computing machines were developed, the term
computer came to refer to the machines rather than their human predecessors.
[11]
As it became clear that computers could be used for more than just
mathematical calculations, the field of computer science broadened to
study
computation in general. Computer science began to be established as a distinct academic discipline in the 1950s and early 1960s.
[12][13] The world's first computer science degree program, the
Cambridge Diploma in Computer Science, began at the
University of Cambridge Computer Laboratory in 1953. The first computer science degree program in the United States was formed at
Purdue University in 1962.
[14]
Since practical computers became available, many applications of
computing have become distinct areas of study in their own rights.
Although many initially believed it was impossible that computers
themselves could actually be a scientific field of study, in the late
fifties it gradually became accepted among the greater academic
population.
[15][16] It is the now well-known
IBM
brand that formed part of the computer science revolution during this
time. IBM (short for International Business Machines) released the IBM
704
[17] and later the IBM 709
[18]
computers, which were widely used during the exploration period of such
devices. "Still, working with the IBM [computer] was frustrating […] if
you had misplaced as much as one letter in one instruction, the program
would crash, and you would have to start the whole process over again".
[15]
During the late 1950s, the computer science discipline was very much in
its developmental stages, and such issues were commonplace.
[16]
Time has seen significant improvements in the usability and effectiveness of
computing technology.
[19]
Modern society has seen a significant shift in the users of computer
technology, from usage only by experts and professionals, to a near-
ubiquitous
user base. Initially, computers were quite costly, and some degree of
human aid was needed for efficient use—in part from professional
computer operators. As computer adoption became more widespread and
affordable, less human assistance was needed for common usage.
Contributions
The German military used the
Enigma machine (shown here) during
World War II for communications they wanted kept secret. The large-scale decryption of Enigma traffic at
Bletchley Park was an important factor that contributed to Allied victory in WWII.
[20]
Despite its short history as a formal academic discipline, computer
science has made a number of fundamental contributions to science and
society—in fact, along with
electronics, it is a founding science of the current epoch of human history called the
Information Age and a driver of the
information revolution, seen as the third major leap in human technological progress after the
Industrial Revolution (1750–1850 CE) and the
Agricultural Revolution (8000–5000 BC).
These contributions include:
- The start of the "Digital Revolution", which includes the current Information Age and the Internet.[21]
- A formal definition of computation and computability, and proof that there are computationally unsolvable and intractable problems.[22]
- The concept of a programming language, a tool for the precise expression of methodological information at various levels of abstraction.[23]
- In cryptography, breaking the Enigma code was an important factor contributing to the Allied victory in World War II.[20]
- Scientific computing
enabled practical evaluation of processes and situations of great
complexity, as well as experimentation entirely by software. It also
enabled advanced study of the mind, and mapping of the human genome
became possible with the Human Genome Project.[21] Distributed computing projects such as Folding@home explore protein folding.
- Algorithmic trading has increased the efficiency and liquidity of financial markets by using artificial intelligence, machine learning, and other statistical and numerical techniques on a large scale.[24] High frequency algorithmic trading can also exacerbate volatility.[25]
- Computer graphics and computer-generated imagery have become ubiquitous in modern entertainment, particularly in television, cinema, advertising, animation and video games. Even films that feature no explicit CGI are usually "filmed" now on digital cameras, or edited or post-processed using a digital video editor.[26][27]
- Simulation of various processes, including computational fluid dynamics,
physical, electrical, and electronic systems and circuits, as well as
societies and social situations (notably war games) along with their
habitats, among many others. Modern computers enable optimization of
such designs as complete aircraft. Notable in electrical and electronic
circuit design are SPICE, as well as software for physical realization
of new (or modified) designs. The latter includes essential design
software for integrated circuits.[citation needed]
- Artificial intelligence
is becoming increasingly important as it gets more efficient and
complex. There are many applications of AI, some of which can be seen at
home, such as robotic vacuum cleaners. It is also present in video games and on the modern battlefield in drones, anti-missile systems, and squad support robots.
- Human–computer interaction
combines novel algorithms with design strategies that enable rapid
human performance, low error rates, ease in learning, and high
satisfaction. Researchers use ethnographic observation and automated
data collection to understand user needs, then conduct usability tests
to refine designs. Key innovations include the direct manipulation, selectable web links, touchscreen designs, mobile applications, and virtual reality.
Etymology
Although first proposed in 1956,
[16] the term "computer science" appears in a 1959 article in
Communications of the ACM,
[28]
in which Louis Fein argues for the creation of a
Graduate School in Computer Sciences analogous to the creation of
Harvard Business School in 1921,
[29] justifying the name by arguing that, like
management science, the subject is applied and interdisciplinary in nature, while having the characteristics typical of an academic discipline.
[28]
His efforts, and those of others such as
numerical analyst George Forsythe, were rewarded: universities went on to create such programs, starting with Purdue in 1962.
[30]
Despite its name, a significant amount of computer science does not
involve the study of computers themselves. Because of this, several
alternative names have been proposed.
[31] Certain departments of major universities prefer the term
computing science, to emphasize precisely that difference. Danish scientist
Peter Naur suggested the term
datalogy,
[32]
to reflect the fact that the scientific discipline revolves around data
and data treatment, while not necessarily involving computers. The
first scientific institution to use the term was the Department of
Datalogy at the University of Copenhagen, founded in 1969, with Peter
Naur being the first professor in datalogy. The term is used mainly in
the Scandinavian countries. An alternative term, also proposed by Naur,
is
data science; this is now used for a distinct field of data analysis, including statistics and databases.
Also, in the early days of computing, a number of terms for the practitioners of the field of computing were suggested in the
Communications of the ACM—
turingineer,
turologist,
flow-charts-man,
applied meta-mathematician, and
applied epistemologist.
[33] Three months later in the same journal,
comptologist was suggested, followed next year by
hypologist.
[34] The term
computics has also been suggested.
[35] In
Europe, terms derived from contracted translations of the expression
"automatic information" (e.g. "informazione automatica" in Italian) or
"information and mathematics" are often used, e.g.
informatique (French),
Informatik (German),
informatica (Italian, Dutch),
informática (Spanish, Portuguese),
informatika (
Slavic languages and
Hungarian) or
pliroforiki (
πληροφορική, which means informatics) in
Greek. Similar words have also been adopted in the UK (as in
the School of Informatics of the University of Edinburgh).
[36]
"In the U.S., however,
informatics is linked with applied computing, or computing in the context of another domain."
[37]
A folkloric quotation, often attributed to—but almost certainly not first formulated by—
Edsger Dijkstra, states that "computer science is no more about computers than astronomy is about telescopes."
[note 3]
The design and deployment of computers and computer systems is
generally considered the province of disciplines other than computer
science. For example, the study of computer hardware is usually
considered part of
computer engineering, while the study of commercial
computer systems and their deployment is often called information technology or
information systems.
However, there has been much cross-fertilization of ideas between the
various computer-related disciplines. Computer science research also
often intersects other disciplines, such as philosophy,
cognitive science,
linguistics,
mathematics,
physics,
biology,
statistics, and
logic.
Computer science is considered by some to have a much closer
relationship with mathematics than many scientific disciplines, with
some observers saying that computing is a mathematical science.
[12] Early computer science was strongly influenced by the work of mathematicians such as
Kurt Gödel,
Alan Turing,
Rózsa Péter and
Alonzo Church and there continues to be a useful interchange of ideas between the two fields in areas such as
mathematical logic,
category theory,
domain theory, and
algebra.
[16]
The relationship between computer science and software engineering is a contentious issue, which is further muddied by
disputes over what the term "software engineering" means, and how computer science is defined.
[38] David Parnas,
taking a cue from the relationship between other engineering and
science disciplines, has claimed that the principal focus of computer
science is studying the properties of computation in general, while the
principal focus of software engineering is the design of specific
computations to achieve practical goals, making the two separate but
complementary disciplines.
[39]
The academic, political, and funding aspects of computer science
tend to depend on whether a department formed with a mathematical
emphasis or with an engineering emphasis. Computer science departments
with a mathematics emphasis and with a numerical orientation consider
alignment with
computational science. Both types of departments tend to make efforts to bridge the field educationally if not across all research.
Philosophy
A number of computer scientists have argued for the distinction of three separate paradigms in computer science.
Peter Wegner argued that those paradigms are science, technology, and mathematics.
[40] Peter Denning's working group argued that they are theory, abstraction (modeling), and design.
[41]
Amnon H. Eden described them as the "rationalist paradigm" (which
treats computer science as a branch of mathematics, which is prevalent
in theoretical computer science, and mainly employs
deductive reasoning),
the "technocratic paradigm" (which might be found in engineering
approaches, most prominently in software engineering), and the
"scientific paradigm" (which approaches computer-related artifacts from
the empirical perspective of
natural sciences, identifiable in some branches of
artificial intelligence).
[42]
Areas of computer science
As a discipline, computer science spans a range of topics from
theoretical studies of algorithms and the limits of computation to the
practical issues of implementing computing systems in hardware and
software.
[43][44]
CSAB, formerly called Computing Sciences Accreditation Board—which is made up of representatives of the
Association for Computing Machinery (ACM), and the
IEEE Computer Society (IEEE CS)
[45]—identifies four areas that it considers crucial to the discipline of computer science:
theory of computation,
algorithms and data structures,
programming methodology and languages, and
computer elements and architecture.
In addition to these four areas, CSAB also identifies fields such as
software engineering, artificial intelligence, computer networking and
communication, database systems, parallel computation, distributed
computation, human–computer interaction, computer graphics, operating
systems, and numerical and symbolic computation as being important areas
of computer science.
[43]
Theoretical computer science
Theoretical Computer Science is mathematical and abstract in
spirit, but it derives its motivation from practical and everyday
computation. Its aim is to understand the nature of
computation
and, as a consequence of this understanding, provide more efficient
methodologies. All studies related to mathematical, logic and formal
concepts and methods could be considered as theoretical computer
science, provided that the motivation is clearly drawn from the field of
computing.
Data structures and algorithms
Data structures and algorithms is the study of commonly used computational methods and their computational efficiency.
Theory of computation
According to
Peter Denning, the fundamental question underlying computer science is, "What can be (efficiently) automated?"
[12]
Theory of computation is focused on answering fundamental questions
about what can be computed and what amount of resources are required to
perform those computations. In an effort to answer the first question,
computability theory examines which computational problems are solvable on various theoretical
models of computation. The second question is addressed by
computational complexity theory, which studies the time and space costs associated with different approaches to solving a multitude of computational problems.
The famous
P = NP? problem, one of the
Millennium Prize Problems,
[46] is an open problem in the theory of computation.
Information and coding theory
Information theory is related to the quantification of information. This was developed by
Claude Shannon to find fundamental limits on
signal processing operations such as compressing data and on reliably storing and communicating data.
[47]
Coding theory is the study of the properties of
codes (systems for converting information from one form to another) and their fitness for a specific application. Codes are used for
data compression,
cryptography,
error detection and correction, and more recently also for
network coding. Codes are studied for the purpose of designing efficient and reliable
data transmission methods.
Programming language theory
Programming language theory is a branch of computer science that
deals with the design, implementation, analysis, characterization, and
classification of
programming languages and their individual
features. It falls within the discipline of computer science, both depending on and affecting
mathematics, software engineering, and
linguistics. It is an active research area, with numerous dedicated academic journals.
Formal methods
Formal methods are a particular kind of
mathematically based technique for the
specification, development and
verification of software and
hardware
systems. The use of formal methods for software and hardware design is
motivated by the expectation that, as in other engineering disciplines,
performing appropriate mathematical analysis can contribute to the
reliability and robustness of a design. They form an important
theoretical underpinning for software engineering, especially where
safety or security is involved. Formal methods are a useful adjunct to
software testing since they help avoid errors and can also give a
framework for testing. For industrial use, tool support is required.
However, the high cost of using formal methods means that they are
usually only used in the development of high-integrity and
life-critical systems, where safety or
security is of utmost importance. Formal methods are best described as the application of a fairly broad variety of
theoretical computer science fundamentals, in particular
logic calculi,
formal languages,
automata theory, and
program semantics, but also
type systems and
algebraic data types to problems in software and hardware specification and verification.
Computer systems
Computer architecture and computer engineering
Computer architecture, or digital computer organization, is the
conceptual design and fundamental operational structure of a computer
system. It focuses largely on the way by which the central processing
unit performs internally and accesses addresses in memory.
[48]
The field often involves disciplines of computer engineering and
electrical engineering, selecting and interconnecting hardware
components to create computers that meet functional, performance, and
cost goals.
Computer performance analysis
Computer performance analysis is the study of work flowing through computers with the general goals of improving
throughput, controlling
response time, using resources efficiently, eliminating
bottlenecks, and predicting performance under anticipated peak loads.
[49]
Concurrent, parallel and distributed systems
Concurrency is a property of systems in which several computations
are executing simultaneously, and potentially interacting with each
other. A number of mathematical models have been developed for general
concurrent computation including
Petri nets,
process calculi and the
Parallel Random Access Machine
model. A distributed system extends the idea of concurrency onto
multiple computers connected through a network. Computers within the
same distributed system have their own private memory, and information
is often exchanged among themselves to achieve a common goal.
Computer networks
This branch of computer science aims to manage networks between computers worldwide.
Computer security and cryptography
Computer security is a branch of computer technology, whose objective
includes protection of information from unauthorized access,
disruption, or modification while maintaining the accessibility and
usability of the system for its intended users. Cryptography is the
practice and study of hiding (encryption) and therefore deciphering
(decryption) information. Modern cryptography is largely related to
computer science, for many encryption and decryption algorithms are
based on their computational complexity.
Databases
A database is intended to organize, store, and retrieve large amounts
of data easily. Digital databases are managed using database management
systems to store, create, maintain, and search data, through
database models and
query languages.
Computer applications
Computer graphics and visualization
Computer graphics is the study of digital visual contents, and
involves synthesis and manipulation of image data. The study is
connected to many other fields in computer science, including
computer vision,
image processing, and
computational geometry, and is heavily applied in the fields of special effects and
video games.
Human–computer interaction
Research that develops theories, principles, and guidelines for user
interface designers, so they can create satisfactory user experiences
with desktop, laptop, and mobile devices.
Scientific computing
Scientific computing (or
computational science) is the field of study concerned with constructing
mathematical models and
quantitative analysis techniques and using computers to analyze and solve
scientific problems. In practical use, it is typically the application of
computer simulation and other forms of
computation to problems in various scientific disciplines.
Artificial intelligence
Artificial intelligence (AI) aims to or is required to synthesize
goal-orientated processes such as problem-solving, decision-making,
environmental adaptation, learning and communication found in humans and
animals. From its origins in
cybernetics and in the
Dartmouth Conference (1956), artificial intelligence research has been necessarily cross-disciplinary, drawing on areas of expertise such as
applied mathematics,
symbolic logic,
semiotics,
electrical engineering,
philosophy of mind,
neurophysiology, and
social intelligence. AI is associated in the popular mind with
robotic development, but the main field of practical application has been as an embedded component in areas of
software development, which require computational understanding. The starting-point in the late 1940s was
Alan Turing's question "Can computers think?", and the question remains effectively unanswered although the
Turing test
is still used to assess computer output on the scale of human
intelligence. But the automation of evaluative and predictive tasks has
been increasingly successful as a substitute for human monitoring and
intervention in domains of computer application involving complex
real-world data.
Software engineering
Software engineering is the study of designing, implementing, and
modifying software in order to ensure it is of high quality, affordable,
maintainable, and fast to build. It is a systematic approach to
software design, involving the application of engineering practices to
software. Software engineering deals with the organizing and analyzing
of software—it doesn't just deal with the creation or manufacture of new
software, but its internal maintenance and arrangement. Both computer
applications software engineers and computer systems software engineers
are projected to be among the fastest growing occupations from 2008 to
2018.
The great insights of computer science
The philosopher of computing
Bill Rapaport noted three
Great Insights of Computer Science:
[50]
-
- All the information about any computable problem can be
represented using only 0 and 1 (or any other bistable pair that can
flip-flop between two easily distinguishable states, such as "on/off",
"magnetized/de-magnetized", "high-voltage/low-voltage", etc.).
- Alan Turing's insight: there are only five actions that a computer has to perform in order to do "anything".
-
- Every algorithm can be expressed in a language for a computer consisting of only five basic instructions:
- move left one location;
- move right one location;
- read symbol at current location;
- print 0 at current location;
- print 1 at current location.
- Corrado Böhm and Giuseppe Jacopini's insight: there are only three ways of combining these actions (into more complex ones) that are needed in order for a computer to do "anything".
-
- Only three rules are needed to combine any set of basic instructions into more complex ones:
- sequence: first do this, then do that;
- selection: IF such-and-such is the case, THEN do this, ELSE do that;
- repetition: WHILE such-and-such is the case DO this.
- Note that the three rules of Boehm's and Jacopini's insight can be further simplified with the use of goto (which means it is more elementary than structured programming).
Academia
Conferences are important events for computer science research.
During these conferences, researchers from the public and private
sectors present their recent work and meet. Unlike in most other
academic fields, in computer science, the prestige of
conference papers is greater than that of journal publications.
[51][52]
One proposed explanation for this is the quick development of this
relatively new field requires rapid review and distribution of results, a
task better handled by conferences than by journals.
[53]
Education
Since
computer science is a relatively new field, it is not as widely taught
in schools and universities as other academic subjects. For example, in
2014,
Code.org estimated that only 10 percent of high schools in the United States offered computer science education.
[54]
A 2010 report by Association for Computing Machinery (ACM) and Computer
Science Teachers Association (CSTA) revealed that only 14 out of 50
states have adopted significant education standards for high school
computer science.
[55] However, computer science education is growing.
[56]
Some countries, such as Israel, New Zealand and South Korea, have
already included computer science in their respective national secondary
education curriculum.
[57][58] Several countries are following suit.
[59]
In most countries, there is a significant gender gap in computer
science education. For example, in the US about 20% of computer science
degrees in 2012 were conferred to women.
[60] This gender gap also exists in other Western countries.
[61]
However, in some parts of the world, the gap is small or nonexistent.
In 2011, approximately half of all computer science degrees in
Malaysia were conferred to women.
[62] In 2001, women made up 54.5% of computer science graduates in
Guyana.