Computer Science

Computer Science is a field of study that has something, but not a whole lot, to do with the things 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).
Computer Science
The science of automating the reasoning process.

More buzzwords:

Computational Procedure
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.
Algorithm
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!)

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)

Subject Areas

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:

• 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

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.

Related Fields

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)
• Animation

People

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.