Computer Science
Computer Science is a field of study that has something,
but not a whole lot, to do with the things we
know of as "computers."
Definitions
Let's see how Computer Science fits in...
- 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.
What is automation / programming / scripting?
- 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.
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 so that
it can be efficiently processed
- 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 identified these
14
subject areas in Computer Science way back in 2001.
- Discrete Structures (DS)
- Programming Fundamentals (PF)
- Algorithms and Complexity (AL)
- Architecture and Organization (AR)
- Operating Systems (OS)
- Net-Centric Computing (NC)
- Programming Languages (PL)
- Human-Computer Interaction (HC)
- Graphics and Visual Computing (GV)
- Intelligent Systems (IS)
- Information Management (IM)
- Social and Professional Issues (SP)
- Software Engineering (SE)
- Computational Science and Numerical Methods (CN)
Exercise: Has anything changed? Can you think of recent trends in computing that might warrant another category?
More Subject Areas
Here's a more expanded list of things one can study 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 "get" the following concepts. Note that not
many of these are specific to desktop or laptop or mainframe 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 Systems
The term software system is often used in place of the term
"program" to emphasize the fact that
most programs do not have a single set of inputs fed in at the
beginning and a single set of outputs on termination.
Instead many programs are built up from many relatively
independent components and interact with users.
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 run in cars, aircraft, mobile phones,
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.
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)