Steven Lindell, at Haverford College
David G. Wonnacott, at Haverford College
Douglas S. Blank
John Dougherty, at Haverford College
George E. Weaver Jr.
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 sub-field of mathematics and engineering and play a broader role in all forms of human inquiry.
Computer Science is a bi-college program, 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. Both colleges believe this approach to be the most consistent with the principles of scientific education in the liberal arts. The aim is to provide students with skills that transcend short-term trends in computer hardware and software.
Independent Major in Computer Science
Students who wish to major in computer science do so by declaring an independent major. Students are encouraged to prepare a major course plan in consultation with their academic adviser in computer science. A typical course plan includes three introductory courses (110 or 205, 206 and 231), three core courses (240, 245 and one of 330, 340 or 345), six electives of a student’s choosing and a senior thesis. Students declare an independent major in the spring semester of their sophomore year. Such students should ensure that they have completed at least three courses in computer science by the end of their sophomore year (we highly recommend 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 110 or 205, 206, 231, any two of 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 of the sciences (biology, chemistry, geology, physics, psychology), mathematics, economics, sociology, philosophy, archaeology and growth and structure of cities to learn computational methods and applications in their major area of study. The requirements for a minor in computational methods at Bryn Mawr are 110 or 205, 206, 231; one of 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 biology, chemistry, computer science, economics, geology, mathematics, physics, psychology and sociology).
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.
100b. The World of Computing
An introduction to the use of the computer for problem solving in any discipline, including an introduction to programming in a structured language (currently Pascal) with emphasis on the development of general problem-solving skills and logical analysis. Applications are chosen from a variety of areas, emphasizing the nontechnical. (Dougherty, Lindell, Division II or Quantitative Skills)
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). (Towell, Xu, Division II or Quantitative Skills)
130a. Foundations of Rigorous
Develops rigorous thinking skills through the linguistic foundations of mathematics: logic and sets. Emphasis on using symbology to represent abstract objects and the application of formal reasoning to situations in computer science. (Lindell)
205a. Introduction to Computer
A rigorous year-long introduction to the fundamental concepts of computer science intended for students interested in doing more advanced work in technical and scientific fields. Includes the fundamental data structures of computer science and their algorithms. Examples and exercises will stress the mathematical aspects of the discipline, with a strong emphasis on programming and analytical problem-solving skills. Students without a strong (secondary school) mathematics or programming experience should take Computer Science 100 instead. (Wonnacott, Division II or Quantitative Skills)
CMSC B206. 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: Computer Science 205 or 110, or permission of instructor. (Xu, Dougherty, Wonnacott, Division II or Quantitative Skills)
207b. Computing Across the Sciences
This course presents an integrated interdisciplinary survey of computational techniques for investigating natural phenomena such as genomics, galactic dynamics, image analysis and molecular dynamics. It will include discussion of the applications of each technique in different scientific disciplines. Prerequisite: Mathematics 114 (or 120 or 121) and two semesters of an introductory course in any of the sciences. (Xu, Towell, Division II)
210a. 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. (Greene, Division II or Quantitative Skills) Not offered in 2004-05.
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: Mathematics 203 or 215, or permission of instructor. (Xu)
225a. Fundamentals of Database Systems
An introduction to the principles of relational database design and use, including the entity/relationship data model and the logical algebra/calculus model behind query languages. An integrated laboratory component covers declarative programming using the international standard SQL. Prerequisites: Computer Science 206 and 231. (Lindell, Division II) Not offered in 2004-05.
CMSC B231. Discrete Mathematics
An introduction to discrete mathematics with strong applications to computer science. Topics include set theory, functions and relations, prepositional logic, proof techniques, recursion, counting techniques, difference equations, graphs and trees. (Weaver, Division II or Quantitative Skills; cross-listed as Mathematics 231 and Philosophy 230)
235a. Information and Coding Theory
Covers the mathematical theory of the transmission (sending or storing) of information. Included are encoding and decoding techniques, both for the purposes of data compression and for the detection and correction of errors. (Lindell)
240a. Principles of Computer
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: Computer Science 206 or permission of instructor. (Wonnacott, Division II)
CMSC B245. 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. (Towell, Division II or Quantitative Skills)
CMSC B246. Programming Paradigms
An introduction to the nonprocedural programming paradigms. The shortfalls of procedural programming derived from the von Neumann model of computer architectures are discussed. An in-depth study of the principles underlying functional programming, logic programming and object-oriented programming. This course has a strong lab component where students construct programs in several programming languages representative of the paradigms. Prerequisite: Computer Science 205a or 110. (staff, Division II or Quantitative Skills)
CMSC B250. Computational Models in the Sciences
(Wong, Division II or Quantitative Skills; cross-listed as Biology 250 and Geology 250)
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: Computer Science 206 and 231. (Kumar, Division II or Quantitative Skills) Not offered in 2004-05.
340b. Analysis of Algorithms
Qualitative and quantitative analysis of algorithms and their corresponding data structures from a precise mathematical point of view. Performance bounds, asymptotic and probabilistic analysis, worst-case and average-case behavior. Correctness and complexity. Particular classes of algorithms such as sorting and searching are studied in detail. Prerequisites: Computer Science 206 and some additional mathematics at the 200 level, or permission of instructor. (Lindell)
345b. Theory of Computation
Introduction to automata theory, formal languages and complexity. Introduction to the mathematical foundations of computer science: finite state automata, formal languages and grammars, Turing machines, computability, unsolvability and computational complexity. Prerequisites: Computer Science 206, and some additional mathematics at the 200 level, or permission of instructor. (Lindell) Not offered in 2004-05.
CMSC B350. Compiler Design: Theory and Practice
An introduction to compiler and interpreter design, with emphasis on practical solutions, using compiler-writing tools in UNIX and the C programming language. Topics covered include lexical scanners, context-free languages and pushdown automata, symbol table design, run-time memory allocation, machine language and optimization. (Wonnacott) Not offered in 2004-05.
355b. Operating Systems: Theory and Practice
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. (Wonnacott)
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) Not offered in 2004-05.
CMSC B371. Cognitive Science
Cognitive science is the interdisciplinary study of intelligence in mechanical and organic systems. In this introductory course, we examine many topics from computer science, linguistics, neuroscience, mathematics, philosophy and psychology. Can a computer be intelligent? How do neurons give rise to thinking? What is consciousness? These are some of the questions we will examine. No prior knowledge or experience with any of the subfields is assumed or necessary. Prerequisite: permission of instructor. (Blank; cross-listed as Psychology 371) Not offered in 2004-05.
CMSC B372. Introduction to 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; cross-listed as Philosophy 372)
CMSC B376. Androids: Design and Practice
This course examines the possibility of human-scale artificial mind and body. It discusses artificial-intelligence methods for allowing computers to interact with humans on their own turf: the real world. It examines the science of robotics (including vision, speech recognition and navigation) and their intelligent control (including planning, creativity and analogy-making). Prerequisite: permission of instructor. (staff) Not offered in 2004-05.
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. (staff, Division II)
392a. Advanced Topics: Parallel
This course provides an introduction to parallel architecture, languages and algorithms. Topics include SIMD and MIMD systems, private memory and shared memory designs; interconnection networks; issues in parallel language design including process creation and management, message passing, synchronization and deadlock; parallel algorithms to solve problems in sorting, search, numerical methods and graph theory. Prerequisite: Computer Science 240; 246 and 355 are also recommended. (Dougherty, Division II) Not offered in 2004-05.
394b. Advanced Topics in Discrete Mathematics and Computer Science
(Lindell) Not offered in 2004-05.
CMSC B399. Senior Project
CMSC B403. Supervised Work/Independent Study
In addition to the courses listed above, the following courses are also of interest (see descriptions under individual departments).
213. Introduction to Mathematical Logic
303. Advanced Mathematical Logic
Mathematics (at Haverford)
222a. Scientific Computing
237a. Logic and the Mathematical Method
306. Mathematical Methods in the Physical Sciences
322. Solid-State Physics