What is Computer Science?

I am a computer scientist. It is probably fair to say that most people know what computers are, but not many are aware of what computer science is all about. (Including some instructors of computer science!) This is partly due to the fact that computer science is a very young discipline. On this page, I will attempt to explain my own view of computer science. You'll see lots of links; these hook you up to the on-line encyclopedia Wikipedia.

Let me begin by explaining what computer science is not. It is not knowing which personal computer to buy. It is not knowing five different programming languages or how to write macros in a spreadsheet program. It is not about how to design cool, dynamic web pages. Some computer scientists know some or all of these things, but at best they are only side effects of their training.

Computer science is the study of algorithms. An algorithm is a finite sequence of steps, which, when followed exactly, leads to the solution of a specific problem. An exact analogy is that of a recipe. The problem is that you need a particular type of food. If you follow the recipe exactly, then you should end up with something edible. The ingredients for the recipe are like the data used by an algorithm, the cook is like the computer, and the author of the recipe is like a computer programmer. We computer scientists are interested in computers because they are capable of carrying out algorithms. (Perhaps we should be called Algorithmologists instead.)

Core Subject Areas of Computer Science

What do we need to be able to run algorithms on a computer? Well, we need to be able to formulate the algorithms, we need to write down these algorithms in a way the computer can understand them (a program), we need a way to run the program on the computer (an operating system), and we need the computer itself. This leads us to the core subject areas of computer science:

  1. Theory of Computation
    In this subject, problems are categorized according to the nature of algorithms to solve them. Some problems have fast algorithms, some have only very slow algorithms (such problems are considered hard or sometimes intractable), some have no algorithms (like the halting problem).
  2. Algorithms and Data Structures
    This subject studies the design of algorithms. and associated data structures for solving specific problems. Part of this involves mathematical analysis to rate algorithm efficiency in the use of time and memory.
  3. Programming Languages
    The computer understands instructions only on a very primitive level, called machine code (normally in binary). Humans do not work with machine code easily. In the 1960's, the first programming language, Fortran, was designed and a special program, called a compiler, was written for the purpose of translating Fortran programs into binary machine code. Humans can now express their algorithms in a programming language, like Fortran or C++ or Java, and use a compiler (or an interpreter) to translate it to machine code in order for it to run. The goal of the subject area of programming languages is to design better and more natural programming languages and faster and more efficient compilers and supporting programming environments.
  4. Operating Systems
    An operating system provides an environment for developing and running programs. Examples include Windows, MacOS, and Unix. This subject area involves the design and implementation of new and better operating systems.
  5. Computer Architecture
    The goal of this subject area is to design and build better and faster computers. This includes the CPU, memory, I/O systems, the bus, and alternative architectures such as multiprocessors.
All of these areas have aspects that are mathematical. Here are a few examples: we prove theorems in Theory of Computation; we perform mathematical analysis in the Algorithms area; we use automata theory in programming language and compiler design; we use statistics and mathematical analysis in fine-tuning an operating system; and we also use logic in the construction of computer hardware. Also, the construction of large software systems like compilers and operating systems is an engineering problem (that is, software engineering). As a result, computer science may find itself as part of a mathematics department or as part of an electrical or computer engineering department. It may also stand as its own department in an arts and sciences college (like at Butler) or in an engineering college.

Additional Subject Areas of Computer Science

In addition to the core subject areas I mentioned above, there are a number of additional application subject areas that have traditionally been considered part of computer science:

  1. Artificial Intelligence
  2. Computer Graphics
  3. Database Management Systems
  4. Ethics and Social Concerns
  5. Networks
  6. Numerical Methods
  7. Robotics
  8. Software Engineering
  9. Symbolic Computing

Disciplines That are Not Computer Science (But Close!)

There are three disciplines that are outside of, but closely related to, computer science.

  1. Management Information Systems
    This discipline applies knowledge from database systems and software engineering to business-related problems.
  2. Computer Engineering
    This discipline focuses more on building special-purpose computer hardware for solving problems. It overlaps with computer science in the area of computer architecture.
  3. Scientific Computing
    This discipline uses computer modeling (simulation) and numerical and symbolic computing to solve problems in the sciences or engineering.
The College of Business Administration offers a major in management information systems (MIS).

Butler has a joint dual-degree engineering program with IUPUI. If you are interested in computer engineering, we suggest you follow the 5-year dual-degree program with an IUPUI major in computer or electrical engineering and a Butler major in computer science.

If you are interested in scientific computing, you should probably major in the scientific application area (say, chemistry) and take a computer science minor that includes some algorithms and numerical methods courses.

Computer Science at Butler

Our computer science program has a very logical structure in light of my description above.

The program begins in the Freshman year with a foundation in problem-solving and logical thinking (CS151), followed by an introduction to object-oriented programming and data structures in Java in CS248. You need a solid foundation in problem-solving, logical thinking, programming, and basic algorithms before studying any further.

In the Sophomore year, the program continues with three required courses: CS321, an introduction to computer architecture, CS351, an introduction to the analysis and design of algorithms, and SE361, an introduction to object-oriented design and software engineering.

The rest of the core areas are covered in our Junior/Senior requirements of Operating Systems, Programming Languages, or Theory of Computation. Students interested in working immediately after graduation are encouraged to take our Database, Networks, and Software Engineering courses, or get the Software Engineering major.

We require three semesters of mathematics and two semesters of foundations (CS151, CS252). These courses are particularly important, as they are prerequisites for a number of upper-division courses. Many students are surprised to discover how mathematical some of these upper division courses are. (But, you cannot learn the workings of relational database systems if you don't know what a relation is! Relations are covered in CS151.)

I hope this has given you a better picture of computer science, and with it, a better understanding of why our major is the way it is. If something in this page needs clarification, or if you have an idea for how to improve it, please drop me a note at sorenson@butler.edu. Thanks!

Jonathan P. Sorenson
Computer Science & Software Engineering, Butler University, 4600 Sunset Avenue, Indianapolis, IN 46208, USA
sorenson@butler.edu, www.butler.edu/~sorenson
Fairbanks 158, Phone: 317-940-9765, Fax: 317-940-9014