You are here: Campus >Registrar's Office > Academic Catalog 2011-2012 > Courses > Computer Science

Computer Science (CS)

Chair: Associate Professor David R. Musicant

Professors: Jack Goldfeather, Jeffrey R. Ondich

Associate Professors: Amy Csizmar Dalal, David Liben-Nowell, David R. Musicant

Assistant Professor: Sherri Goings

Computer Science studies the computational structures and processes that appear throughout the natural and human worlds. The study of those processes (known as algorithms) can lend insight into the functioning of our brains, the structure of our genes, the mechanisms by which people form communities, and many other questions in a wide range of disciplines. At the same time, an understanding of algorithms and the structure of data can help us create a tremendous variety of useful software tools. Carleton’s computer science curriculum is designed to provide students with a balance between theoretical study and the practical application of theory to the design and construction of software.

Since computer science plays a key role in our world, we recommend Introduction to Computer Science (CS 111) for all Carleton students. We also offer introductory-level courses on specific topics, such as Life in the Age of Networks (CS 108).

Those who choose to major in computer science find many opportunities following graduation. Carleton Computer Science graduates who pursue employment in the computing industry find jobs in a many different roles and at a wide variety of companies. In addition to graduate programs in computer science, Carleton CS majors seeking further education have pursued graduate study in areas such as bioinformatics, linguistics, cognitive science, and law.

Requirements for a Major

The course requirements are Mathematics 111; Computer Science 111, 201, 202 (or Mathematics 236), 204, 208, 251, 252, and 254; and two additional courses from among: Computer Science courses numbered 200 or above, Mathematics 311, and Physics 247. Although they are not required for the CS major, we recommend that our students take as many mathematics and statistics courses as possible. Majors must complete a capstone experience (CS 399 and 400): during fall and winter terms of the senior year, the student will participate on a team of four to seven students working on a faculty-specified project. Potential majors should take Computer Science 111, Mathematics 111, and at least one of Computer Science 201, 202, 204, and 208 by the end of the sophomore year.

Students contemplating graduate study in computer science should consider taking additional courses in both mathematics (ideally the full Calculus sequence plus Mathematics 215 and 232) and computer science. Those interested in computer engineering should consider taking physics courses through Electricity and Magnetism and Electronics.

A guide for majors is available on the Computer Science Web site.

Computer Science Courses

CS 108. Life in the Age of Networks This course investigates how the social, technological, and natural worlds are connected, and how the study of networks sheds light on these connections. A network is a collection of entities linked by some relationship: people connected by friendships (e.g., Facebook); web pages connected by hyperlinks; species connected by the who-preys-on-whom relationship. We will explore mathematical properties of networks while emphasizing the efficient processing and analysis of network data drawn from a variety of fields. Topics include: how Google works; "six degrees of separation;" the spread of fads through society. No background in computer science or programming is required or expected. Students who have received credit for Computer Science 111 or above are not eligible to enroll in Computer Science 108. 6 cr., MS; FSR, QRE, Offered in alternate years. FallD. Liben-Nowell

CS 111. Introduction to Computer Science This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111. No prerequisites. 6 cr., MS; FSR, QRE, Fall,Winter,SpringStaff

CS 201. Data Structures Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that "there has to be a better/smarter way to do this problem?" The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs and hash tables. Students who have received credit for a course for which Computer Science 201 is a prerequisite are not eligible to enroll in Computer Science 201. Prerequisite: Computer Science 111 or consent of the instructor. 6 cr., MS; FSR, QRE, Fall,Winter,SpringStaff

CS 202. Mathematics of Computer Science This course introduces some of the formal tools of computer science, using a variety of applications as a vehicle. You'll learn how to encode data so that when you scratch the back of a DVD, it still plays just fine; how to distribute "shares" of your floor's PIN so that any five of you can withdraw money from the floor bank account (but no four of you can); how to play chess; and more. Topics that we'll explore along the way include: logic and proofs, number theory, elementary complexity theory and recurrence relations, basic probability, counting techniques, and graphs. Prerequisite: Computer Science 111 and Mathematics 111; or permission of instructor. 6 cr., MS; FSR, WinterD. Liben-Nowell

CS 204. Software Design It’s easy to write a mediocre computer program, and lots of people do it. Good programs are quite a bit harder to write, and are correspondingly less common. In this course, we will study techniques, tools, and habits that will improve your chances of writing good software. While working on several medium-sized programming projects, we will investigate code construction techniques, debugging and profiling tools, testing methodologies, UML, principles of object-oriented design, design patterns, and user interface design. Prerequisite: Computer Science 111 or consent of the instructor. 6 cr., MS; FSR, SpringJ. Ondich

CS 208. Computer Organization and Architecture Computer processors are extraordinarily complex systems. The fact that they work at all, let alone as reliably as they do, is a monumental achievement of human collaboration. In this course, we will study the structure of computer processors, with attention to digital logic, assembly language, performance evaluation, computer arithmetic, data paths and control, pipelining, and memory hierarchies. Prerequisites: Computer Science 111 or consent of the instructor. 6 cr., MS; FSR, FallJ. Ondich

CS 231. Computer and Network Security Hackers, phishers, and spammers---at best they annoy us, at worst they disrupt communication systems, steal identities, bring down corporations, and compromise sensitive systems. In this course, we'll study various aspects of computer and network security, focusing mainly on the technical aspects as well as the social and cultural costs of providing (or not providing) security. Topics include cryptography, authentication and identification schemes, intrusion detection, viruses and worms, spam prevention, firewalls, denial of service, electronic commerce, privacy, and usability. Prerequisite: Computer Science 201, 202 or 204 or 208. 6 cr., MS, Not offered in 2011-2012.

CS 251. Programming Languages What makes a programming language like "Python" or like "Java?" This course will look past superficial properties (like indentation) and into the soul of programming languages. We will explore a variety of topics in programming language construction and design: syntax and semantics, mechanisms for parameter passing, typing, scoping, and control structures. Students will expand their programming experience to include other programming paradigms, including functional languages like Scheme and ML. Prerequisite: Computer Science 201 or permission of instructor. 6 cr., MS; FSR, FallD. Musicant

CS 252. Algorithms A course on techniques used in the design and analysis of efficient algorithms. We will cover several major algorithmic design paradigms (greedy algorithms, dynamic programming, divide and conquer, and network flow). Along the way, we will explore the application of these techniques to a variety of domains (natural language processing, economics, computational biology, and data mining, for example). As time permits, we will include supplementary topics like randomized algorithms, advanced data structures, and amortized analysis. Prerequisite: Computer Science 201 and either Computer Science 202 or Mathematics 236. 6 cr., MS; FSR, WinterD. Liben-Nowell

CS 254. Computability and Complexity An introduction to the theory of computation. What problems can and cannot be solved efficiently by computers? What problems cannot be solved by computers, period? Topics include formal models of computation, including finite-state automata, pushdown automata, and Turing machines; formal languages, including regular expressions and context-free grammars; computability and uncomputability; and computational complexity, particularly NP-completeness. Prerequisite: Computer Science 201 and either Computer Science 202 or Mathematics 236. 6 cr., MS; FSR, SpringD. Liben-Nowell

CS 311. Computer Graphics The raster graphics representation of 2- and 3- dimensional images. Topics include frame buffers, data structures for image storage, geometric transformations, hidden surface algorithms, raytracing, splines, and lighting models. Prerequisites: Computer Science 201, Mathematics 232 or consent of the instructor. 6 cr., MS; FSR, Offered in alternate years. Not offered in 2011-2012.

CS 321. Artificial Intelligence How can we design computer systems with behavior that seems "intelligent?" This course will examine a number of different approaches to this question, including intelligent agents (simulated with a robot), machine learning (including neural networks and genetic algorithms), and reasoning with uncertainty. We will also examine search methods, with an interest in computer game playing. The coursework is a mix of problem solving and computer programming based on the ideas that we discuss. Prerequisite: Computer Science 201 or consent of the instructor. 6 cr., MS; FSR, Offered in alternate years. SpringD. Musicant

CS 322. Natural Language Processing Computers are poor conversationalists, despite decades of attempts to change that fact. This course will provide an overview of the computational techniques developed in the attempt to enable computers to interpret and respond appropriately to ideas expressed using natural languages (such as English or French) as opposed to formal languages (such as C++ or Lisp). Topics in this course will include parsing, semantic analysis, machine translation, dialogue systems, and statistical methods in speech recognition. Prerequisites: Computer Science 201 and 202 or permission of the instructor. 6 cr., MS; FSR, Offered in alternate years. Not offered in 2011-2012.

CS 324. Data Mining How does Google understand what it is you're looking for? How does figure out what items you might want to buy? These questions and others are part of machine learning and data mining, two highly related fields at the crossroads of artificial intelligence, database systems, and statistics. Machine learning concerns itself with getting a computer to learn or discover patterns, whereas data mining focuses this task on large databases. Much of the material will be presented through primary source research papers, and the content will include techniques such as classification, clustering, association rules, web mining, collaborative filtering, and others. Prerequisite: Computer Science 201 or consent of the instructor. 6 cr., MS; FSR, QRE, Offered in alternate years. Not offered in 2011-2012.

CS 331. Computer Networks The Internet is composed of a large number of heterogeneous, independently-operating computer networks that work together to transport all sorts of data to points all over the world. The fact that it does this so well given its complexity is a minor miracle. In this class, we'll study the structure of these individual networks and of the Internet, and figure out how this "magic" takes place. Topics include TCP/IP, protocols and their implementations, routing, security, network architecture, DNS, and emerging applications and technologies such as peer-to-peer networking, WiFi, and WiMax. Prerequisite: CS 201 or consent of instructor. 6 cr., MS; FSR, Offered in alternate years. FallA. Csizmar Dalal

CS 332. Operating Systems The thing that we call a computer is actually a complex collection of interacting devices. To ensure that these devices work together effectively without excessive human intervention, people have developed operating systems software that coordinates the behavior of the devices and gives programmers ways to control those devices. This course will address the fundamental problems that operating systems need to solve, including those concerned with process management, file organization, memory management, and input/output control. We will also study the structure of the Linux operating system. Prerequisites: Computer Science 208 or consent of the instructor. 6 cr., MS; FSR, Offered in alternate years. SpringS. Goings

CS 334. Database Systems Database systems are used in almost every aspect of computing, from storing data for websites to maintaining financial information for large corporations. Intrinsically, what is a database system and how does it work? This course takes a two-pronged approach to studying database systems. From a systems perspective, we will look at the low-level details of how a database system works internally, studying such topics as file organization, indexing, sorting techniques, and query optimization. From a theory perspective, we will examine the fundamental ideas behind database systems, such as normal forms and relational algebra. Prerequisite: Computer Science 201 or consent of the instructor. 6 cr., MS; FSR, Offered in alternate years. WinterD. Musicant

CS 341. Cryptography If you want to send information that only your intended recipient can understand, you need cryptography, the art of securing messages. Cryptography is at the heart of applications like on-line commerce, password-protected computer accounts, secure wireless networks, and cash withdrawal from automatic teller machines. This course will focus on these and other applications to motivate our study of the mathematics, protocols, and history of cryptography and cryptanalysis. Prerequisite: Computer Science 201 and either Computer Science 202 or Mathematics 236, or permission of the instructor. 6 cr., MS; FSR, QRE, Offered in alternate years. Not offered in 2011-2012.

CS 352. Advanced Algorithms A second course on designing and analyzing efficient algorithms to solve computational problems. We will survey some algorithmic design techniques that apply broadly throughout computer science, including discussion of wide-ranging applications. A sampling of potential topics: approximation algorithms (can we efficiently compute near-optimal solutions even when finding exact solutions is computationally intractable?); randomized algorithms (does flipping coins help in designing faster/simpler algorithms?); online algorithms (how do we analyze an algorithm that needs to make decisions before the entire input arrives?); advanced data structures; complexity theory. As time and interest permit, we will mix recently published algorithmic papers with classical results. Prerequisite: Computer Science 252 or permission of instructor. 6 cr., MS; FSR, Offered in alternate years. Not offered in 2011-2012.

CS 361. Evolutionary Computing and Artificial Life An introduction to evolutionary computation and artificial life, with a special emphasis on the two way flow of ideas between evolutionary biology and computer science. Topics will include the basic principles of biological evolution, experimental evolution techniques, and the application of evolutionary computation principles to solve real problems. All students will be expected to complete and present a term project exploring an open question in evolutionary computation. Prerequisite: Computer Science 111; 201 or 204 or Biology 125. 6 cr., MS; FSR, Offered in alternate years. Not offered in 2011-2012.

CS 399. Senior Seminar As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors. Prerequisite: Senior standing, Mathematics 121, Computer Science 111, 201, 202 (or Mathematics 236); one course from among Computer Science 204 or 208; two courses from among Computer Science 251, 252 and 254; one course from among Computer Science courses numbered 260. 3 cr., S/CR/NC, ND; NE, FallStaff

CS 400. Integrative Exercise Beginning with the prototypes developed in the Senior Seminar, project teams will complete their project and present it to the department. Required of all senior majors. Prerequisite: Computer Science 399. 3 cr., S/NC, ND; NE, WinterStaff

Other Courses Pertinent to Computer Science:

Physics 247 Digital Electronics

Physics 343 Electronics