Skip to main content area Skip to institutional navigation Skip to sub-navigation

Computer Science Major

For further information on the computer science program, contact either Steven Janke or Matthew Whitehead in the department.
 

The Department of Mathematics and Computer Science offers a BA degree in Computer Science. At the lower division level, the curriculum includes standard courses in algorithm design, data structures, computer organization, and operating systems. We teach JAVA as the main programming language, and use both Windows and Linux operating systems. Most computer science majors will take advantage of opportunities to learn other languages (especially C and C++). To guarantee solid mathematical background, some calculus and a number theory course are required for the major.

The upper division courses span a wide range from distributed computing and database systems to artificial intelligence and graphics. We have topics courses taught to satisfy student interest and we round out the major with courses in analysis of algorithms and theory of computation. A little outside the standard curriculum is our developing semester long course in robotics.

Although many students have their own computer, the department has two computer labs - one for general use and one for more specialized use in computer science. There is a Linux server in the department and a variety of PC's in the lounge area.

Typically, a course in computer science meets for two or more hours in the morning followed in the afternoon with formal or informal labs. The block plan allows students to focus without interruption on their reading, programming, debugging, and writing. It also allows for more independent study opportunities including internships.

In addition to the BA degree, there is a minor in computer science and a distinction program allowing students to go beyond the basic curriculum.

 


Computer Science at a Liberal Arts College

A liberal arts education helps students appreciate complexities of the real world and understand the interdisciplinary nature of problems. Computer Science is at the heart of this enterprise; it leads to new ways of thinking, new ways of exploring multidisciplinary terrain, and new ways of understanding facets of the natural world. It is much more than a training ground for hackers.

Computer Science is the study of algorithms and information. Engaging the field brings fundamental insights about problem solving and develops the crucial power of abstraction. Algorithms are recipes for solving problems and as such seem closely tied with computation, but they are far more widely applicable. Algorithms may explain how flocks of birds fly, how patterns on butterflies and leopards form, how our vision system works, and how ants explore. In fact, an algorithmic theory of the human brain serves as a worthy foil in gaining a deeper understanding of how we classify the world and interact with it.

Tied to the idea of an algorithm is the idea of information. There is a structure to information and computer science investigates how to uncover that structure in existing knowledge banks and how to design the structure to most effectively turn primitive information into more useful information. Information processing has become a mantra in modern society. Computer Science in part studies what the mantra means and how it colors the syntax and semantics of information.

The study of algorithms has a long history. It begins at least with Euclid who in his Elements (book 7 proposition 2) formally presented what may be the first carefully designed algorithm, one for finding the greatest common divisor of two numbers. A ninth century Persian scholar, Muhammed ibn Musa al-Khwarizmi added significantly to the literature with his work on arithmetic and algebra. (The word "algorithm" comes from his name.) Charles Babbage in the late 19th century glimpsed the modern study of algorithms with his paradigm-breaking designs for a "differential engine" and an "analytical engine." Together with Ada Lovelace, they developed the fundamentals of programming and hinted at the notion of a universal algorithm, a recipe of recipes.

At the turn of the century, the renowned mathematician David Hilbert listed 23 outstanding problems that were key to making further progress in the mathematical sciences. Two of those problems directly involve what is now called computer science. The first asked whether the axioms of logic are consistent and the second asked if there exists an algorithm for solving all Diophantine equations. Goedel settled the first problem early in the 1930's, and his result has reverberated throughout much of human thought ever since. (The second question was also settled by Matiyasevich in 1970; there is no such algorithm.) Goedel showed that there were limits to logical thought; a logical system cannot be both consistent and adequate at the same time. Alan Turing a few years later changed the framework to abstract computing machines and showed both that there is a correspondence between machines and algorithms, and that there are logical problems in the world that no machine can solve. Together, Goedel and Turing changed the course of mathematical and philosophical thought leading to the current debates about whether the human brain is a machine or not. They also arguably gave birth to the ideas of modern computer science.

In the course of his landmark investigations in 1935, Turing showed that there are universal machines (or algorithms). These are computing machines that can simulate the action of any other algorithm. Von Neumann developed the idea further in the early 1940's in the process of designing one of the first modern computers. Among many theoretical breakthroughs, Von Neumann introduced the idea that machine instructions and data could be considered and handled in the same way. This was the birth of modern computers and turned the theory of information into a major part of computer science.

In the 1950's, the algorithmic paradigm had attracted researchers in many fields including economics (Simon and Newell) and psychology (McCulloch and Pitts). Experiments uncovered the algorithmic facets of human problem-solving and mathematical models began to probe the function of neurons. Philosophers jumped in the fray and never left; the algorithmic paradigm was too ripe to overlook. Later in the late seventies, Douglas Hofstadter published a Pulitzer Prize winning exposition titledGoedel, Escher, and Bach: An Eternal Golden Braid. In this book, Hofstadter, a computer scientist, carefully shows how recursive algorithms (a subclass based on their design) may well be at the heart of music, art, and mathematics. Aesthetics and human thought are really the core of the matter, and Hofstadter explores patterns that may well explain facets of creativity and inspiration. His book is a testament to the liberal art of computer science.

Of course there is a practical side to the field as well. The actual design and production of machines to implement algorithms is a natural side effect of such deep ideas. The engineering course of study delves into the details of making electrons move in critical ways, but the liberal arts course focuses on the design. Abstraction may well be one of the keys to design, and in computer science the student continually embraces abstraction both in examining the limits of algorithms and in discovering ways to structure actual machines capable of innovative information processing.

Computer Science stands apart from mathematics, and its liberal arts incarnation stands apart from engineering. It is the study of discrete structures rather than continuous ones that begins to separate the study from classical mathematics. Add to that the study of design through abstraction and computer science emerges as significantly different from mathematics.

Computer Science at Colorado College includes the following courses:

Computer Science 1 and 2 : This is the course sequence that introduces most of the fundamental ideas in computer science including key data structures as well as the design and analysis of basic algorithms. Students learn a language, a computer language (JAVA) complete with syntax and semantics. It is more abstract than a human language, and carries an impressive power of expression.

Number Theory: This mathematics course focuses on constructing proofs using a topic (integers) that is universal in the sciences. Computer Science students begin learning how to investigate discrete structures and what it means to actually prove a result.

Operating Systems and Computer Organization: These two courses take the basics of Computer Science I and II to new levels. Computers can be nearly universal machines in their ability to simulate any algorithm. The organization of a computer and the operating system reinforce the design strategies necessary to achieve the abstract notion of a universal Turing machine, a universal algorithm. The details can be practical, but they form building blocks for later abstractions.

Distributed Systems: The real world is connected in myriad ways and the study of such networks both in the natural and social sciences is key to understanding many behaviors. This course introduces students to the algorithms of connection utilizing the principles of economics and the theory of games. Networks are also highly mathematical structures and the tools of graph theory, probability, and discrete structures are indispensable in uncovering the fundamentals.

Database Systems: Information comes to center stage in this course where the study focuses on structure, encoding, design, and search. The Registrar's office keeps a list of student records, but the connections, encodings, and classifications make it a database. Studying the limits of such design and analyzing the search algorithms makes it computer science. Perhaps one of the most challenging problems in modern culture is how to search vast collections of information (the web being the largest) to answer specific questions. The problem remains untouchable without understanding how to classify, how to cope with fuzzy information, and how to reduce enormous matrices of bits to a reasonable size.

Artificial Intelligence: Finding collections of algorithms to mimic human thought can be useful, intriguing, and sometimes insulting (witness the response to computer chess champions). The real point, however, is the interdisciplinary study of thought. Whether we achieve a successful algorithm or not, the search for the keys to problem-solving can only uncover some of the deep behaviors that the human brain displays.

Computer Graphics: Putting algorithmic images on the screen involves the mathematics of three dimensional space and retraces, in a modern setting, the principles of perspective that classical artists knew. But creating scenes with a computer is not the only point of computer graphics. Visualization is an emerging multidisciplinary science that centers on presenting data in useful ways. From CAT scans to simulated thunderstorms, the fundamentals of computer graphics play a key role in understanding how to represent all the information in a data set in ways that clarify rather than obscure.

Theory of Computation and Analysis of Algorithms: These are the two culminating courses in the proposed major. The Theory of Computation course leads up to a thorough understanding of Turing's work and begins the modern investigation of complexity. Analysis of Algorithms takes a different approach to complexity through the careful mathematical analysis of algorithm behavior. Both courses address the most famous unsolved problem in both mathematics and computer science. Referred to as the "P=NP" problem, it stems from a conceptually simple classification of algorithms into two groups, fast ones and slow ones. Of course, the implications are deeper. In 1970, Cook proved that some algorithms are special in that if you can improve their behavior, then you can improve the behavior of every slow algorithm. No one yet can improve the behavior of any of these special algorithms (a group of at least 1000 algorithms currently), and no one can prove that you cannot. The resolution of the problem awaits some key insight, but the science of complexity that it spawned resonates throughout computer science.

At one extreme of the complexity landscape is Stephen Wolfram (a McArthur grant recipient) who published A New Kind of Science in 2002. This magnum opus claims that algorithms effectively explain everything in the world. Immediately, sides have formed and extreme stances of this type almost never last, but the point is that the study of computer science permeates human thought and indeed offers a newer perspective on both the natural and social worlds. This makes Computer Science a "suitable and desirable" major for any liberal arts college.