Course Information
 2013–2014 Courses:
 Browse by Course Number
 Browse by Term

CS 099: Summer Computer Science Institute
Computer science is a rich academic field that seeks to systematically study the processes for solving problems and untangle the complexities in the concrete physical world and the abstract mathematical world. The Summer Computer Science Institute (SCSI) at Carleton focuses on understanding how to think about these processes, how to program computers to implement them, and how to apply computer science ideas to real problems of interest. Students at SCSI will learn how to systematically approach problems like a computer scientist as they engage in classroom learning, handson lab activities, and collaborative guided research.
6 credit; S/CR/NC; offered · Staff 
CS 100: Human Centered Computing
Technology permeates every aspect of our lives: how we work, play, and communicate; our finances and health; etc. Technology can facilitate these, or make it difficult to perform simple tasks or express what we want to accomplish. We'll take a critical look at the interfaces between technology and people, examining what makes these user interfaces effective, practicing key design principles through case studies and design projects, and discussing legal, ethical, and social issues in interface design, particularly the accessibility, privacy, and environmental impacts. No computer science experience is necessary.
6 credit; Argument and Inquiry Seminar, Writing Requirement, Quantitative Reasoning Encounter; offered Fall 2013 · A. Csizmar Dalal 
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 whopreysonwhom 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.
Prerequisites: No prerequisites. Students may not simultaneously enroll in Computer Science 108 and Computer Science 111 in the same term, and students who have received credit for Computer Science 111 or above are not eligible to enroll in Computer Science 108. 6 credit; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2013 · D. LibenNowell 
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 objectoriented 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. Students may not simultaneously enroll for CS 108 and CS 111 in the same term.
6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2013, Winter 2014, Spring 2014 · Staff 
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.
Prerequisites: Computer Science 111 or consent of the instructor. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2013, Winter 2014, Spring 2014 · Staff 
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.
Prerequisites: Computer Science 111 and Mathematics 111; or permission of instructor. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013, Winter 2014 · D. Musicant, D. Liben Nowell 
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 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013, Spring 2014 · S. Goings, J. Ondich 
CS 231: Computer Security
Hackers, phishers, and spammersat 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.
Prerequisites: Computer Science 201 or 202 or 208 6 credit; Formal or Statistical Reasoning; not offered 2013–2014 
CS 251: Programming Languages: Design and Implementation
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
Prerequisites: Computer Science 201 or permission of instructor. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Winter 2014 · D. Musicant
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. 
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.
Prerequisites: Computer Science 201 and either Computer Science 202 or Mathematics 236. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013, Winter 2014 · J. Miles 
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 finitestate automata, pushdown automata, and Turing machines; formal languages, including regular expressions and contextfree grammars; computability and uncomputability; and computational complexity, particularly NPcompleteness.
Prerequisites: Computer Science 111 and either Computer Science 202 or Mathematics 236. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013, Spring 2014 · J. Davis 
CS 257: 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 mediumsized programming projects, we will investigate code construction techniques, debugging and profiling tools, testing methodologies, UML, principles of objectoriented design, design patterns, and user interface design.
Prerequisites: Computer Science 201 or consent of the instructor. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013, Spring 2014 · J. Ondich, A. Csizmar Dalal 
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 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; not offered 2013–2014 
CS 318: Medical Image Analysis
A survey of current techniques in brainstructure modeling from a type of imaging scan called "diffusion MRI." The course covers a computational pipeline that translates MRI images into neuroscience insights. In addition to brief introductions to MRI physics and neuroscience applications of this technology, we will read current papers on diffusion MRI analysis and implement selected algorithms from them. Various computerscience topics will be discussed as they apply to MRI analysis, potentially including: mathematical modeling; linear, nonlinear, and combinatorial optimization; statistical inference; numerical integration; graph clustering; simple parallel and distributed computational techniques; and scientific visualization.
Prerequisites: Mathematics 211, or consent of the instructor, as well as Computer Science 201. A statistics course (Mathematics 115 or 215) and Mathematics 232 are highly recommended, as is a willingness to learn new mathematical concepts at a fairly rapid pace. 6 credit; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Winter 2014 · J. MilesExtended departmental description for CS 318
The Math 211 requirement may be waived by consent of the instructor. The coursebased requirements are imprecise approximations of more fundamental conceptbased requirements. For this course, you'll need to be comfortable doing the following: basic arithmetic and algebra with vectors; thinking about vectors geometrically; relating calculus concepts to geometrical and physical examples (thinking of a volume in 3space as an integral, for example); and developing relatively large software projects. We will also use matrix algebra to work with systems of linear equations, so a passing familiarity with this process will help.

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 search computer game playing, automated logic, machine learning (including neural networks), and reasoning with uncertainty. The coursework is a mix of problem solving and computer programming based on the ideas that we discuss.
Prerequisites: Computer Science 201, additionally Computer Science 202 or Mathematics 236 are strongly recommended. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Spring 2014 · A. Exley 
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 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013 · A. Exley 
CS 324: Data Mining
How does Google always understand what it is you're looking for? How does Amazon.com figure out what items you might be interested in buying? How can categories of similar politicians be identified, based on their voting patterns? These questions can be answered via data mining, a field of study at the crossroads of artificial intelligence, database systems, and statistics. Data mining concerns itself with the goal of getting a computer to learn or discover patterns, especially those found within large datasets. We'll focus on techniques such as classification, clustering, association rules, web mining, collaborative filtering, and others.
Prerequisites: Computer Science 201. Additionally, Computer Science 202 or Mathematics 236 strongly recommended. 6 credit; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; not offered 2013–2014 
CS 331: Computer Networks
The Internet is composed of a large number of heterogeneous, independentlyoperating 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 peertopeer networking, WiFi, and WiMax.
Prerequisites: Computer Science 201 or consent of instructor 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Fall 2013 · A. 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 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; offered Winter 2014 · S. GoingsExtended departmental description for CS 332
If you're working in the lab, you might be editing a file while waiting for a program to compile. Meanwhile, the onscreen clock ticks, a program keeps watch for incoming email, and other users can log onto your machine from elsewhere in the network. Not only that, but if you write a program that reads from a file on the hard drive, you are not expected to concern yourself with turning on the drive's motor or moving the read/write arms to the proper location over the disk's surface. Coordinating all this hardware and software is the job of the operating system.
In this course we will study the fundamental problems faced by operating system designers. We will look at interprocess communication, memory management, file systems, and input/output in general and in the context of particular operating systems. We will also study some parts of the Linux source code.

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 twopronged approach to studying database systems. From a systems perspective, we will look at the lowlevel 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.
Prerequisites: Computer Science 201 or consent of the instructor. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; not offered 2013–2014 
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 online commerce, passwordprotected 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.
Prerequisites: Computer Science 201 and either Computer Science 202 or Mathematics 236, or permission of the instructor. 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning, Quantitative Reasoning Encounter; not offered 2013–2014 
CS 342: Mobile Application Development
Software used to stay on the desktop where you put it. Now, we carry multipurpose computational devices in our pockets. Mobile computers raise a host of software design challenges, with constrained visual spaces, touch screens, GPS sensors, accelerometers, cellular access, and cameras all in one device. More challenges come from the idea of an "app store," a fiveyearold experiment that has changed the way developers and computer users think about software. In the context of a few app development projects, this course will focus on mobile computing's design patterns, user interface principles, software development methodologies, development tools, and cultural impact.
Prerequisites: Computer Science 204 or 257. 6 credit; Formal or Statistical Reasoning; offered Spring 2014 · J. Ondich 
CS 348: Parallel and Distributed Computing
As multicore machines become more prevalent, different programming paradigms have emerged for harnessing extra processors for better performance. This course explores parallel computation (programs that run on more than one core) as well as the related problem of distributed computation (programs that run on more than one machine). In particular, we will explore the two major paradigms for parallel programming, sharedmemory multithreading and messagepassing, and the advantages and disadvantages of each. Other possible topics include synchronization mechanisms, debugging concurrent programs, fork/join parallelism, the theory of parallelism and concurrency, parallel algorithms, cloud computing, Map/Reduce, GPU programming, transactional memory, and memory models.
Prerequisites: Computer Science 201 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; not offered 2013–2014 
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 wideranging applications. A sampling of potential topics: approximation algorithms (can we efficiently compute nearoptimal 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.
Prerequisites: Computer Science 252 or permission of instructor. 6 credit; Formal or Statistical Reasoning; offered Winter 2014 · D. LibenNowell 
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.
Prerequisites: Computer Science 201 6 credit; Mathematics and Natural Sciences, Formal or Statistical Reasoning; not offered 2013–2014Extended departmental description for CS 361
Have you ever wished that instead of spending 2 hours writing a program to solve a difficult problem you could instead just tell the computer to do the work and go play Ultimate Frisbee for 2 hours knowing the solution will be waiting for you when you return? One of the goals of artificial intelligence is to be able to view the computer as a “black box”, you simply give it the problem you want to solve, and it gives you the answer, without you needed to understand all of the internal workings. Evolutionary computation seeks to create this black box by harnessing the power of Darwinian evolution to solve computational problems. Instead of programming a solution, the user simply initializes a population of very simple (and probably very bad) solutions, and then sits back while the population evolves until a good solution appears. Evolutionary Computation (EC) has shown promise in evolving novel solutions to realworld problems, such as antennas actually deployed on Nasa satellites, neural controllers for legged robots, and programs that choose sound investments, however EC is a current active field of research with many open questions to be answered. In this course students will develop a broad understanding of developing and analyzing current evolutionary computation systems, and develop a deeper understanding of at least one specific evolutionary computation topic through a research project.

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 facultyspecified topics to design and implement the first stage of a project. Required of all senior majors.
Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and either Computer Science 204 or 257 before starting Computer Science 399. 3 credit; S/CR/NC; Does not fulfill a distribution requirement, Does not fulfill a curricular exploration requirement; offered Fall 2013 · Staff 
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.
Prerequisites: Computer Science 399. 3 credit; S/NC; Does not fulfill a distribution requirement, Does not fulfill a curricular exploration requirement; offered Winter 2014 · Staff