Students may complete a major or minor in Computer Science or a minor in computational methods.
Douglas S. Blank, Associate Professor and Director
John Dougherty, Assistant Professor and Coordinator at Haverford College
Deepak Kumar, Professor
Steven Lindell, Associate Professor
David G. Wonnacott, Associate Professor at Haverford College
Dianna Xu, Assistant Professor (on leave 2007-08)
Computer Science is the science of algorithms — their theory, analysis, design and implementation. As such it is an interdisciplinary field with roots in mathematics and engineering and applications in many other academic disciplines. The program at Bryn Mawr is founded on the belief that computer science should transcend from being a subfield of mathematics and engineering and play a broader role in all forms of human inquiry.
The Computer Science Program is supported jointly by faculty at both Bryn Mawr and Haverford Colleges . The program welcomes students who wish to pursue a major in computer science. Additionally, the program also offers a minor in computer science, a concentration in computer science (at Haverford College ) and a minor in computational methods (at Bryn Mawr College ). The program also strives to facilitate evolving interdisciplinary majors. For example, students can propose a major in cognitive science by combining coursework from computer science and disciplines such as psychology and philosophy.
All majors, minors and concentrations offered by the program emphasize foundations and basic principles of information science, rather than engineering or data-processing applications. The aim is to provide students with skills that transcend short-term trends in computer hardware and software.
Major in Computer Science
Students are encouraged to prepare a major course plan in consultation with their academic adviser in computer science. The requirements for a major in computer science are three introductory courses (CMSC 110 or 205, 206 and 231), three core courses (CMSC 240, 245 and one of 330, 340 or 345), six electives of a student's choosing and a senior thesis. Students should ensure that they have completed at least three courses in computer science by the end of their sophomore year (we highly recommend CMSC 110, 206 and 231).
Minor in Computer Science
Students in any major are encouraged to complete a minor in computer science. Completing a minor in computer science enables students to pursue graduate studies in computer science, in addition to their own major. The requirements for a minor in computer science at Bryn Mawr are CMSC 110 or 205, 206, 231, any two of CMSC 240, 245, 246, 330, 340 or 345, and two electives chosen from any course in computer science, approved by the student's adviser in computer science. As mentioned above, these requirements can be combined with any major, depending on the student's interest and preparation.
Minor in Computational Methods
This minor is designed to enable students majoring in any discipline to learn computational methods and applications in their major area of study. The requirements for a minor in computational methods are CMSC 110 or 205, 206, 231; one of CMSC 212, 225, 245, 246, 330, 340 or 361; any two computational courses depending on a student's major and interests (there are over 35 such courses to choose from in various departments).
Students can declare a minor at the end of their sophomore year or soon after. Students should prepare a course plan and have it approved by at least two faculty advisers. Students minoring in computational methods are encouraged to propose senior projects/theses that involve the application of computational modeling in their major field of study.
CMSC H100 The World of Computing
An introductory survey of fundamental ideas in computer science, with a special emphasis on student participation in a more informal class setting. Algorithms, problem-solving strategies, hardware, software, limits of computation, and interface design are a few of the many topics to be explored. The required laboratory/discussion sections will reinforce concepts in lecture with the help of an interactive computing environment. No previous experience with computers or computing will be assumed, and programming will not be emphasized. (Dougherty)
CMSC H101 Fluency with Information Technology
A study of the skills, concepts and capabilities involve in the design, implementation and effective use of information technology. Using a variety of quantitative techniques, we will explore a range of uses of information technology in various fields. (Lindell)
CMSC H105 Introduction to Computer Science
Introduction to the intellectual and software tools used to create and study algorithms: formal and informal problem specification; problem solving and algorithm design techniques; reliability, proofs, and testing techniques; program clarity, complexity and efficiency; functional and imperative paradigms; associated programming skills. Weekly programming laboratory section. (Dougherty, Wonnacott)
CMSC B110 Introduction to Computing
An introduction to the nature, subject matter and branches of computer science as an academic discipline, and the nature, development, coding, testing, documenting and analysis of the efficiency and limitations of algorithms. Also includes the social context of computing (risks, liabilities, intellectual property and infringement). (Blank, Kumar, Division II and Quantitative Skills)
CMSC B120 Visualizing Information
An introduction to visualization of complex data through computer manipulation. Explores the tools necessary to allow the human mind to make sense of vast amounts of data collected in many fields of study. Topics: 2D/3D representations, programming techniques, data conversion principles, color representation and introduction to virtual reality. (Xu, Quantitative Skills) Not offered in 2007-08.
CMSC B/H206 Introduction to Data Structures
Introduction to the fundamental algorithms and data structures of computer science: sorting, searching, recursion, backtrack search, lists, stacks, queues, trees, graphs, dictionaries. Introduction to the analysis of algorithms. Prerequisite: CMSC 205 or 110, or permission of instructor. (Blank, Division II)
CMSC H210 Linear Optimization and Game Theory
Covers in depth the mathematics of optimization problems with a finite number of variables subject to constraints. Applications of linear programming to the theory of matrix games and network flows are covered, as well as an introduction to nonlinear programming. Emphasis is on the structure of optimal solutions, algorithms to find them, and the underlying theory that explains both. This course is designed for students interested in computer science, economics, or mathematics. (Butler)
CMSC B212 Computer Graphics
Presents the fundamental principles of computer graphics: data structures for representing objects to be viewed, and algorithms for generating images from representations. Prerequisite: MATH 203 or 215, or permission of instructor. (Xu) Not offered in 2007-08.
CMSC B231 Discrete Mathematics
(Weaver, Division II and Quantitative Skills; cross-listed as MATH B231 and PHIL B230)
CMSC H235 Information and Coding Theory
This course covers the mathematical theory of the transmission (sending or storing) of information. Included will be encoding and decoding techniques, both for the purposes of data compression and for the detection and correction of errors. (Lindell)
CMSC B240 Principles of Computer Organization
A lecture/laboratory course studying the hierarchical design of modern digital computers. Combinatorial and sequential logic elements; construction of microprocessors; instruction sets; assembly language programming. Lectures cover the theoretical aspects of machine architecture. In the laboratory, designs discussed in lecture are constructed in software. Prerequisite: CMSC 206 or permission of instructor. (Kumar, Division II)
CMSC B/H245 Principles of Programming Languages
An introduction to a wide range of topics relating to programming languages with an emphasis on abstraction and design. Design issues relevant to the implementation of programming languages are discussed, including a review and in-depth treatment of mechanisms for sequence control, the run-time structure of programming languages and programming in the large. The course has a strong lab component where students get to construct large programs in at least three different imperative programming languages. (Kumar, Division II and Quantitative Skills) Not offered in 2007-08.
CMSC B246 Programming Paradigms: Unix and C Programming
Topics course; course content varies. Topic for 2007-08 is Programming in UNIX and C. Provides an in-depth introduction to C and C++, as well as programming principles such as abstraction, encapsulation and modularization. Another focus of the class is to gain proficiency in the UNIX operating system. Assumes familiarity with conditionals, loops, functions and arrays and will focus on C-specific topics such as pointer manipulations, dynamic memory allocation and abstract data types. An excellent preparation for classes such as operating systems and software engineering principles and programming techniques to facilitate medium-scaled development projects. Prerequisite: CMSC 110 or 205. (Blank, Division II and Quantitative Skills)
CMSC B250 Computational Methods in the Sciences
This course is for students of all disciplines interested in learning the foundations of computational methods and modeling. Topics include the theory and role of computational methods in data analysis, an introduction to fundamental computation (combinatorics, probability and related statistics), and an introduction to statistical simulation and probability models, with a specific focus on Monte Carlo simulation. Examples will be drawn from numerous disciplines across the natural sciences. Two lectures and one two-hour problem session a week. (Allen, Division II and Quantitative Skills; cross-listed as BIOL B250 and GEOL B250) Not offered in 2007-08.
CMSC H304 Computational Physics
An introduction to the methods and problems of computational physics. The course explores areas of physics which require computation for their study including; effects of air resistance and rotation in Newtonian mechanics; fields and potentials in electromagnetism; simulation of nonlinear systems and chaos; stochastic algorithms and statistical mechanics. (Love)
CMSC B325 Computational Linguistics
Introduction to computational models of understanding and processing human languages. How elements of linguistics, computer science, and artificial intelligence can be combined to help computers process human language and to help linguists understand language through computer models. Topics covered: syntax, semantics, pragmatics, generation and knowledge representation techniques. Prerequisite: some background in linguistics or computer science. (Kumar)
CMSC B330 Algorithms: Design and Practice
This course examines the applications of algorithms to the accomplishments of various programming tasks. The focus will be on understanding of problem-solving methods, along with the construction of algorithms, rather than emphasizing formal proving methodologies. Topics include divide and conquer, approximations for NP-Complete problems, data mining and parallel algorithms. Prerequisites: CMSC 206 and 231. (Kumar, Division II and Quantitative Skills)
CMSC H345 Theory of Computation
Introduction to the mathematical foundations of computer science: finite state automata, formal languages and grammars, Turing machines, computability, unsolvability, and computational complexity. (Lindell)
CMSC H350 Compiler Design
A practical introduction to modern compiler and interpreter design with a substantial laboratory component using compiler-writing tools. (Wonnacott)
CMSC B355 Operating Systems
A practical introduction to modern operating systems, using case studies from UNIX, VMS, MSDOS and the Macintosh. Lab sessions will explore the implementation of abstract concepts, such as resource allocation and deadlock. Topics include file systems, memory allocation schemes, semaphores and critical sections, device drivers, multiprocessing and resource sharing. (Xu) Not offered in 2007-08.
CMSC B361 Emergence
A multidisciplinary exploration of the interactions underlying both real and simulated systems, such as ant colonies, economies, brains, earthquakes, biological evolution, artificial evolution, computers and life. These emergent systems are often characterized by simple, local interactions that collectively produce global phenomena not apparent in the local interactions. (Blank, Grobstein; cross-listed as BIOL B361) Not offered in 2007-08.
CMSC B372 Artificial Intelligence
Survey of Artificial Intelligence (AI), the study of how to program computers to behave in ways normally attributed to “intelligence” when observed in humans. Topics include heuristic versus algorithmic programming; cognitive simulation versus machine intelligence; problem-solving; inference; natural language understanding; scene analysis; learning; decision-making. Topics are illustrated by programs from literature, programming projects in appropriate languages and building small robots. (Kumar, Division II and Quantitative Skills; cross-listed as PHIL B372) Not offered in 2007-08.
CMSC B380 Recent Advances in Computer Science
A topical course facilitating an in-depth study on a current topic in computer science. Prerequisite: permission of instructor. (Xu, Division II) Not offered in 2007-08.
CMSC H392 Advanced Topics: High Performance Scientific Computing
Introduction to parallel computing with particular attention to applications in the natural sciences and economics: architectures, shared vs. distributed memory, SPMD, pipelining, granularity and locality, interprocess communication, performance issues, dependability; lab work using MPI or PVM. (Dougherty)
CMSC H394 Cryptology
Modern cryptography (making secret codes) and cryptanalysis (breaking secret codes) make use of number theory and the structure of finite fields. For example, the security of RSA (the public key cryptosystem at the heart of electronic credit card payment systems) relies on the difficulty of factoring a product of two large carefully chosen prime numbers. The course will explore both RSA and AES, Advanced Encryption Standard, a private key cryptosystem approved by NIST. (Butler)
CMSC B403 Supervised Work/Independent Study