Location: Bowdoin / The College Catalogue / Courses / Computer Science / Courses

The College Catalogue

Computer Science – Courses

Introductory, Intermediate, and Advanced Courses

[50 {1050} a - MCSR. The Digital World.]

101 {1101} a - MCSR. Introduction to Computer Science. Every semester. Daniela A. S. de Oliveira.

What is computer science, what are its applications in other disciplines, and what is its impact in society? A step-by-step introduction to the art of problem solving using the computer and the Java language. Provides a broad introduction to computer science and programming through real-life applications. Weekly labs provide experiments with the concepts presented in class. Assumes no prior knowledge of computers or programming.

210 {2101} a - MCSR. Data Structures. Every semester. Eric Chown.

Solving complex algorithmic problems requires the use of appropriate data structures such as stacks, priority queues, search trees, dictionaries, hash tables, and graphs. It also requires the ability to measure the efficiency of operations such as sorting and searching in order to make effective choices among alternative solutions. Offers a study of data structures, their efficiency, and their use in solving computational problems. Laboratory exercises provide an opportunity to design and implement these structures. Students interested in taking Computer Science 210 are required to pass the computer science placement examination before class starts.

Prerequisite: Computer Science 101, or permission of the instructor.

[220 {2300} a. Computer Organization.]

231 {2200} a - MCSR. Algorithms. Fall 2012. Stephen Majercik.

An introductory course on the design and analysis of algorithms. Introduces a number of basic algorithms for a variety of problems such as searching, sorting, selection, and graph problems (e.g., spanning trees and shortest paths). Discusses analysis techniques, such as recurrences and amortization, as well as algorithm design paradigms such as divide-and-conquer, dynamic programming, and greedy algorithms.

240 {2310} a - MCSR. Operating Systems. Fall 2013. Daniela A. S. de Oliveira.

An introduction to operating systems concepts, design, and implementation. Operating systems (OS) are essential to any computer system and, although we have witnessed rapid changes in applications and in the use of computers, the fundamental concepts that underlie an OS remain the same. Students get hands-on experience experimenting with Linux, a real, widely used, open source OS. However, the core concepts are applicable to most operating systems: Windows, OS X, FreeBSD, Solaris. Compares differences in design choices among these other systems. Topics include process management (scheduling, threads, interprocess synchronization, and deadlocks), main memory and virtual memory, file and I/O subsystems, and the basics of OS protection and security.

Prerequisite: Computer Science 210, or permission of the instructor.

[250 {2325} a - MCSR. Principles of Programming Languages.]

[270 {2400} a - MCSR. Artificial Intelligence.]

[280 {3005} a. Projects in Computer Science.]

281 {2505} a. Mobile Computing. Spring 2013. Eric Chown.

As computer science enters the “post-PC” era basic computing paradigms are shifting to take advantage of mobile platforms such as phones and tablets. Covers all aspects of programming for mobile devices including development environments, programming languages, the use of touch screens for input, and associated sensors such as accelerometers and GPS. Students engage in a series of introductory projects before taking on a large self-designed term project that highlights the differences between mobile applications and more traditional applications designed for the desktop.

Prerequisite: Computer Science 210.

[289 {2210} a - MCSR. Theory of Computation.]

291–294 {2970–2973} a. Intermediate Independent Study in Computer Science. The Department.

299 {2999} a. Intermediate Collaborative Study in Computer Science. The Department.

320 {3415} a. Robotics. Fall 2013. Eric Chown.

Robotics is a challenging discipline that encourages students to apply theoretical ideas from a number of different areas—artificial intelligence, cognitive science, operations research—in pursuit of an exciting, practical application: programming robots to do useful tasks. Two of the biggest challenges are building effective models of the world using inaccurate and limited sensors, and using such models for efficient robotic planning and control. Addresses these problems from both a theoretical perspective (computational complexity and algorithm development) and a practical perspective (systems and human/robot interaction) through multiple programming projects involving simulated and actual robots.

Prerequisite: Computer Science 210, or permission of the instructor.

[345 {3235} a. When RAM Is Not Enough: Computing with Massive Data Sets.]

355 {3400} a. Cognitive Architecture. Fall 2012. Eric Chown.

Advances in computer science, psychology, and neuroscience have shown that humans process information in ways that are very different from those used by computers. Explores the architecture and mechanisms that the human brain uses to process information. In many cases, these mechanisms are contrasted with their counterparts in traditional computer design. A central focus is to discern when the human cognitive architecture works well, when it performs poorly, and why. Conceptually oriented, drawing ideas from computer science, psychology, and neuroscience. No programming experience necessary.

Prerequisite: One of the following: Computer Science 210, Biology 213, Psychology 216 or 270, or permission of the instructor.

360 {3310} a. Computer Security. Fall 2012. Daniela A. S. de Oliveira.

Millions of people use the Internet in many important activities of their lives, but many of them are using software/hardware that is not secure. Students learn the principles, mechanisms, and implementation of computer security and data protection, attackers’ motivations, how real attacks work and how to defend against them, and how to design more secure systems. Opportunities to perform and analyze real attacks in a controlled environment. Topics include computer security and principles, malicious software (e.g., worms, rootkits, botnets, Trojans, viruses), intrusion detection, network security, Web security, access control matrices, confidentiality and integrity policies, design principles, access control mechanisms, information flow, and cryptography as a security tool.

Prerequisite: Computer Science 210, or permission of the instructor.

[370 {3300} a. Computer Networks.]

375 {3425} a. Optimization and Uncertainty. Fall 2012. Stephen Majercik.

Optimization problems and the need to cope with uncertainty arise frequently in the real world. A numeric framework, rather than the symbolic one of traditional artificial intelligence, is useful for expressing such problems. In addition to providing a way of dealing with uncertainty, this approach sometimes permits performance guarantees for algorithms. Topics include constraint satisfaction, systematic and non-systematic search techniques, probabilistic inference and planning, and population-based optimization techniques (e.g., genetic algorithms and ant colony optimization).

Prerequisite: Computer Science 210, or permission of the instructor.

401–404 {4000–4003} a. Advanced Independent Study and Honors in Computer Science. The Department.

405 {4029} a. Advanced Collaborative Study in Computer Science. The Department.

Online Catalogue content is current as of August 1, 2012. For most current course information, use the online course finder. Also see Addenda.