Computer Science is a field of study that has something, but necessarily everything, to do with the machines we now call computers.
Definitions
Wikipedia’s Definition, as of 2015-01-01:
Computer science is the scientific and practical approach to computation and its applications.
My definition:
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:
Philosophy
The search for fundamental truths of the universe using logic (reasoning).
Mathematics
Reasoning on a formal basis (symbol manipulation).
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)
Here’s a more poetic answer to what computer scientists do:
I am a computer scientist; I approach the cosmos though a very different path: I take the simplest of principles - information theory, logic, design - and from them create new worlds that are bound only by my imagination.
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:
Algorithms
Artificial Intelligence
Compilers and Interpreters
Computation Theory
Computer Architecture
Computational Complexity
Computational Geometry
Data Mining
Data Structures
Databases
Decision Support Systems (Knowledge-Based Systems)
Distributed, Parallel, and Cluster Computing
Digital Libraries
Graphics
Human Computer Interaction
Information Theory
Machine Learning
Modeling in Science, Engineering, and Finance
Multiagent Systems
Multimedia
Natural Language Processing
Networks and Internets
Neural and Evolutionary Computing
Numerical Analysis
Operating Systems
Programming Languages
Real-time Systems
Robotics
Scientific (Numeric, Symbolic) Computation
Search and Information Retrieval
Security (including Cryptography and Cryptanalysis)
Software Engineering
Virtual Reality (and Virtual Worlds)
Vision and Pattern Recognition
Visualization
Recurring Concepts
Computer scientists need to understand the following concepts. Note that these are not specific to computers that have keyboards and monitors.
Automation
Binding
Communication
Complexity
Consistency and Completeness
Efficiency
Evolution
Formal Models
Levels of Abstraction
Ordering in Space
Ordering in Time
Reuse
Security
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.
Speaking of software, it’s useful to point out that software runs on many different kinds of devices, and computer scientists need to take into account how people use these devices when writing software for them. Devices include:
Wikipedia has a list of famous computer scientists. If you want to read about some of these people, don’t skip Alan Turing, Grace Hopper, and Alan Kay.
Two Big Ideas
You’ve undoubtably noticed, when using your phone, tablet, or laptop, all your programs are running on the same device. You don’t need a separate machine for each of those different things!. You don’t need one machine for adding numbers, one for communicating by voice to other people, one for telling the current time, one for telling you how far away your destination is, one for finding the number of days between two dates, one for maintaining your TO-DO list, one for telling you your current direction, one for timers and alarms, one for translating Irish poems into Swahili; you get the idea.
You just need one machine.
But this was not always obvious. It was not obvious until the 1930s or later. People had to ask the deep question “What even is computation?” and get it onto a formal footing, for the field of Computer Science to arise. Alan Turing answered that question by representing computation as a “machine” described as a mathematical object. Then he showed every machine could be simulated by a single machine (since named the Universal Turing Machine in his honor).
That was stunning. Brilliant. The first big idea is universality.
Exercise: What does that supercomputer in your pocket do that separate “single-function” devices used to (or still) do? Come up with a list of 20 things. Here are some things to get you started: set and activate alarms, make phone calls, tell the time, count your steps, navigate, manage your appointments). What things do they not currently do that you think they should do?
But there’s one more big idea: Turing was able to show (others discoverd this independently by the way) that there were some problems that could not be solved (a.k.a. functions that could not be computed, a.k.a. questions that could not be answered) by any machine. The second big idea is called undecidability.