Computer Science is a field of study that has something,
but not a whole lot
, to do with the things we now call computers.
Wikipedia’s Definition, as of 2015-01-01:
Computer science is the scientific and practical approach to computation and its applications.
Computer Science is the theory and practice of computation,
algorithms, software systems, data organization, knowledge representation,
language, intelligence, learning, and consciousness.
A shorter definition, relating it to other broad fields of study:
The search for fundamental truths of the universe using logic (reasoning).
Reasoning on a formal basis (symbol manipulation).
The science of automating the reasoning process.
A step-by-step process for solving a problem described by a finite number of steps, where the execution of each step takes a finite amount of time. Steps can be of the form “go to step number n” so the process need not terminate.
A computational procedure which terminates regardless of its input.
Program (or Script)
An expression of a computational procedure in some language.
You might also want to see what
Wikipedia has to say
about Computer Science. (After all, this is one
of the areas in which Wikipedia is “way better” than Britannica!)
Questions Computer Scientists Ask
These are the questions that characterize computer science:
What can and can not be computed?
How fast can a certain computation be carried out?
How much information is needed to carry out a certain computation?
How can information be efficiently (and securely) encoded, stored, retrieved, and transmitted?
How do we design programs?
How do we know a program is correct?
How can computational theories help explain intelligence and consciousness?
None of these requires a computer to answer, right?
Wait—there’s one more question: Does P = NP?
What Computer Scientists Do
In case anyone asks you, computer scientists:
Architect large software systems, i.e., identify the components and their behavior and interaction (this requires skill and enormous experience)
Organize information into data structures for efficient processing
Devise algorithms to carry out the specified behavior of the components (this is a creative, artistic process)
Express algorithms (this is called programming)
Validate algorithms (using formal proof and heavy mathematics)
Analyze algorithms (usually to determine whether they satisfy efficiency constraints)
Test code (to increase confidence that a system meets its specification)
For what it’s worth, the ACM and IEEE identified these
18 knowledge areas in Computer Science way back in 2013.
Algorithms and Complexity (AL)
Architecture and Organization (AR)
Computational Science (CN)
Discrete Structures (DS)
Graphics and Visualization (GV)
Human-Computer Interaction (HCI)
Information Assurance and Security (IAS)
Information Management (IM)
Intelligent Systems (IS)
Networking and Communication (NC)
Operating Systems (OS)
Parallel and Distribute Computing (PD)
Platform-Based Development (PBD)
Programming Languages (PL)
Software Development Fundamentals (SDF)
Software Engineering (SE)
Systems Fundamentals (SF)
Social Issues and Professional Practice (SP)
Exercise: Has anything changed? Can you think of recent trends in computing that might warrant another category?
More Subject Areas
Here’s a finer breakdown of subject areas within computer science:
Compilers and Interpreters
Decision Support Systems (Knowledge-Based Systems)
Distributed, Parallel, and Cluster Computing
Human Computer Interaction
Modeling in Science, Engineering, and Finance
Natural Language Processing
Networks and Internets
Neural and Evolutionary Computing
Scientific (Numeric, Symbolic) Computation
Search and Information Retrieval
Security (including Cryptography and Cryptanalysis)
Virtual Reality (and Virtual Worlds)
Vision and Pattern Recognition
Computer scientists need to understand the following concepts. Note that these are
not specific to computers that have keyboards and monitors.
Consistency and Completeness
Levels of Abstraction
Ordering in Space
Ordering in Time
Tradeoffs and Consequences
Kinds of Software
People use principles form computer science to create lots of
different types of systems.
Here’s a rough list of (overlapping) software system categories:
Information Systems that create, store, retrieve, manipulate, present, and destroy information (such as in databases).
Technical Systems such as control equipment in telecommunication, military or industrial production.
Embedded Real-time Systems which deal with physical sensors and actuators; you see these most often in run in cars, aircraft, appliances, etc.
Distributed Systems which contain many different physical computers connected via some network.
System Software, which is the low level code for operating systems, database systems, and user interfaces.
Application Software like games or word processors, which run on desktops, laptops, and mobile devices.
Computer science borrows from, and touches, a whole lot of other fields, including:
Linguistics (probably the closest relative)
Biology (computational biology, biological databases, etc.)
Psychology (we’d like computers to think like us, and perhaps understand us)
Electrical Engineering (because face it, electronic components make good computing devices!)
Mathematics (especially Discrete Math, Game Theory, etc.)
Education (because both fields are concerned with knowledge representation and learning)
Philosophy (especially Logic, Epistemology)
Economics (think markets!)
Sociology (computers in society, social networking, Second Life and other virtual environments)
Wikipedia has a
list of famous computer scientists. If you want to read about some of these people, don’t skip Alan Turing and Grace Hopper. Also find out about Donald Knuth and Alan Kay.