The discipline called Computer Science emphasizes problem solving based upon mathematical logic, the analysis of alternative solutions, the use of the scientific method of hypothesis development and testing, and the link between principles, creativity and implementation techniques. The experiences, challenges and discipline of computer science translate well into other areas and interests. The discipline is constantly changing; the student must become a person who is able to communicate well and learn new concepts throughout life. Elon’s computer science program is a rigorous one emphasizing the application and theory of computation. Students study programming languages, operating systems, compilers, algorithm analysis, artificial intelligence, game programming, web programming, mobile computing and parallel and distributed problem solving using computer technology.
What is Computer Science?
“Computer science is as much about computers as astronomy is about telescopes.” -Edsgar Dijkstra
This quote by one of the most famous modern computer scientists draws an interesting analogy. While telescopes certainly aid astronomers in their study of various phenomena, an educated citizen would be unlikely to say that astronomy is the study of telescopes. It is ironic that despite the ubiquity of computers in today’s society, the typical citizen is likely to say that computer scientists study “computers.” This is not quite true, although it seems more reasonable than the notion of astronomers studying telescopes. The computer is a powerful and essential tool for exploration, but it is not necessarily the object of exploration. Working computer scientists are often most interested in applying their skills to real-world problems that range from the fight against AIDS to the routing of messages on the Internet to the more efficient use of machines on automobile production lines.
Some of the most important questions in computer science do not concern computers at all. They concern what can and cannot be done by any well-defined process (algorithm), and what can and cannot be done efficiently. It doesn’t matter whether the process is performed by a human brain, a desk calculator, or a supercomputer. Amazingly, for example, it is not known whether there exists an efficient algorithm to derive a yes/no answer to the following problem: given a set of numbers and one other number, is there any subset of the set whose numbers add up to the other number? Nobody has been able to give an efficient method, but nobody has been able to prove that such a method doesn’t exist! Furthermore, an efficient solution would be front-page international news, because that solution could also be used to solve untold other important problems efficiently – problems that might help scientists attempting to understand protein folding and many other important topics. The remarkable fact that this is an open problem is indicative of the excitement and challenge open to current computer scientists in this young discipline. There are many such fundamental open problems.
“Scientists build to learn; engineers learn to build.” -Fred Brooks
This 1977 quote by Fred Brooks is still an important determinant of the nature of computer science programs. In its modern form, computer science is both a scientific and an engineering discipline. The name of our discipline implies that our primary goal should be more to learn than to build. However, it is still necessary to be able to “build” well. Much of computer science is like natural science: the scientific method is used to make and test hypotheses experimentally, and the experiments typically rely heavily on computations. However, many computer scientists work like mathematicians, rigorously proving their conjectures when possible. Other computer scientists study the processes of building computers and software. Obviously, these processes need to be improved, but it is not easy. Computer scientists are using concepts from mathematics, symbolic logic, and various engineering fields to help make computer applications more reliable.
Elon computer science students study the fundamentals of computer science, but learn to apply these fundamentals through strong emphasis on programming skills. Many prospective students ask whether our program is “more theory or more programming.” It is both. We require solid grounding in mathematical fundamentals, and we teach a strong conceptual understanding of the design and use of computer languages for problem solving. Our graduates are well prepared for both the job market and graduate school.
So what is it that computer scientists study? Rather than using telescopes to study planets, stars, nebulae, etc., computer scientists use computers and other tools to study algorithms, logic, architectures, automata, formal languages, etc. – the things that make computation, computers, and software applications possible. These are also the things that make them potentially useful to other scientists involved in global problems such as discovering genes in DNA strands or better understanding viruses.
Computer science sits at a more fundamental level than the study of computer information systems, which concerns the application, rather than the foundation of computer technology. The computer science graduate will have the background necessary to learn computer information systems on the job or in professional school, and will be able to adapt to and understand changing technologies over a career of many decades.