2017-18 Catalog

Computer Science

Students may complete a major or minor in Computer Science or a minor in Computational Methods.

Faculty

Douglas Blank, Associate Professor of Computer Science (on leave semester II)
Richard Eisenberg, Assistant Professor of Computer Science
Deepak Kumar, Professor of Computer Science
Dianna Xu, Chair and Professor of Computer Science

Computer Science consists of the science of computer algorithms (theory, analysis, design, and implementation) as well as the design and implementation of computer systems. As such it is an interdisciplinary field with roots in mathematics and engineering and applications in many other academic disciplines. The department 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 Department is supported jointly by faculty at both Bryn Mawr and Haverford Colleges. The department welcomes students who wish to pursue a major in Computer Science. Additionally, the department 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 department also strives to facilitate double majors and evolving interdisciplinary majors. Students can further specialize their majors by selecting elective courses that focus on specific disciplinary tracks or pathways within the discipline.
All majors, minors and concentrations offered by the department emphasize foundations and basic principles of information science with the goal of providing 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 B110 (or H105): Introduction to Computing, or CMSC B113: Computer Science I, or BIOL B115: Computing through Biology
  • CMSC B206 (or H106 or H107): Data Structures
  • CMSC/MATH B/H231: Discrete Mathematics

Three core courses:

  • Any two of
    CMSC B/H240: Principles of Computer Organization
    CMSC B/H245: Principles of Programming Languages
    CMSC B246: Systems Programming
  • Any one of
    CMSC B330: Algorithms: Design & Practice
    CMSC B/H340: Analysis of Algorithms
    CMSC H345: Theory of Computation
  • Six electives in Computer Science and a senior thesis.
  • Additionally, all Computer Science majors must take CMSC B330 or B340, a writing intensive course, to fulfill the writing requirement.

Students can specialize in specific disciplinary tracks or pathways by carefully choosing their elective courses. Such pathways can enable specialization in areas such as: computational theory, computer systems, computer graphics, computational geometry, artificial intelligence, information visualization, computational linguistics, cognitive science, etc. 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/113, 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 (Haverford equivalents are not listed, please see above): CMSC 110/113 or BIOL 115, CMSC 206 and CMSC 231, any two of CMSC 240, 245, 246, 330, 340 or 345, and one elective 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 (Haverford equivalents are not listed, please see above): CMSC 110/113 or BIOL 115, CMSC 206 anc CMSC 231; one of CMSC 245, 246, 330, 340 or 345; any two additional computational courses depending on a student’s major and interests (there are many 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.

COURSES

CMSC B110 Introduction to Computing
The course is an introduction to computing: how we can describe and solve problems using a computer. Students will learn how to write algorithms, manipulate data, and design programs to make computers useful tools as well as mediums of creativity. Contemporary, diverse examples of computing in a modern context will be used, with particular focus on graphics and visual media. The Processing/Java programming language will be used in lectures, class examples and weekly programming projects, where students will learn and master fundamental computer programming principals.
Approach: Quantitative Methods (QM); Quantitative Readiness Required (QR); Scientific Investigation (SI)
Units: 1.0
Instructor(s): Eisenberg,R., Blank,D.
(Fall 2017, Spring 2018)

CMSC B113 Computer Science I
This is an introduction to the discipline of computer science, suitable for those students with a mature quantitative ability. This fast-paced course covers the basics of computer programming, with an emphasis on program design and problem decomposition. Graduates of this course will be able to write small computer programs independently; examples include data processing for a data-based science course, small games, or basic communications programs (such as a chat client). No computer programming experience is necessary or expected. Prerequisite: Must pass either the Quantitative Readiness Assessment or the Quantitative Seminar (QUAN B001)
Approach: Course does not meet an Approach; Quantitative Methods (QM); Quantitative Readiness Required (QR)
Units: 1.0
Instructor(s): Eisenberg,R.
(Fall 2017)

CMSC B115 Computing Through Biology: An Introduction
This course is an introduction to biology through computer science, or an introduction to computer science through biology. The course will examine biological systems through the use of computer science, exploring concepts and solving problems from bioinformatics, evolution, ecology, and molecular biology through the practice of writing and modifying code in the Python programming language. The course will introduce students to the 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. Additional Meeting Time: (Lab) 2 hours.
Approach: Quantitative Methods (QM); Scientific Investigation (SI)
Units: 1.0
(Not Offered 2017-2018)

CMSC B206 Introduction to Data Structures
Introduction to the fundamental algorithms and data structures using Java. Topics include: Object-Oriented programming, program design, fundamental data structures and complexity analysis. In particular, searching, sorting, the design and implementation of linked lists, stacks, queues, trees and hash maps and all corresponding complexity analysis. In addition, students will also become familiar with Java’s built-in data structures and how to use them, and acquire competency using the shell, commandline scripting and a debugger without any IDE. Required: 2 hour lab. Prerequisites: CMSC B110 or H105, or permission of instructor.
Approach: Quantitative Methods (QM); Scientific Investigation (SI)
Units: 1.0
Instructor(s): Eisenberg,R., Kumar,D.
(Fall 2017, Spring 2018)

CMSC B231 Discrete Mathematics
An introduction to discrete mathematics with strong applications to computer science. Topics include propositional logic, proof techniques, recursion, set theory, counting, probability theory and graph theory. Co-requisites: CMSC B110 or H105 or H107.
Approach: Quantitative Methods (QM)
Units: 1.0
Instructor(s): Eisenberg,R.
(Fall 2017)

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 B206 or H106 and CMSC B231
Units: 1.0
Instructor(s): Blank,D.
(Fall 2017)

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 explore a variety of programming languages and concepts. Prerequisite: CMSC B206 or H106 and CMSC B231
Approach: Course does not meet an Approach
Units: 1.0
(Not Offered 2017-2018)

CMSC B246 Systems Programming
A more advanced programming course using C/C++. Topics include memory management, design and implementation of additional data structures and algorithms, including priority queues, graphs and advanced trees. In addition, students will be introduced to C++’s STL. There will be emphasis on more significant programming assignments, program design, and other fundamental software engineering principles. Makefiles, interactive debugging, version control, and command-line shell interaction round out the technical skills developed in this course. Prerequisites: CMSC B206 or H106 or H107, and MATH/CMSC 231.
Approach: Course does not meet an Approach
Units: 1.0
Instructor(s): Kumar,D.
(Spring 2018)

CMSC B310 Computational Geometry
A study of algorithms and mathematical theories that focus on solving geometric problems in computing, which arise naturally from a variety of disciplines such as Computer Graphics, Computer Aided Geometric Design, Computer Vision, Robotics and Visualization. The materials covered sit at the intersection of pure Mathematics and application-driven Computer Science and efforts will be made to accommodate Math majors and Computer Science majors of varying math/computational backgrounds. Topics include: graph theory, triangulation, convex hulls, geometric structures such as Voronoi diagrams and Delaunay triangulations, as well as curves and polyhedra surface topology. Prerequisite: CMSC B231/ MATH B231.
Approach: Quantitative Readiness Required (QR)
Units: 1.0
(Not Offered 2017-2018)

CMSC B312 Computer Graphics
An introduction to the fundamental principles of computer graphics: including 3D modeling, rendering, and animation. Topics cover: 2D and 3D transformations; rendering techniques; geometric algorithms; 3D object models (surface and volume); visible surface algorithms; shading and mapping; ray tracing; and select others. Prerequisites: CMSC/MATH B231, CMSC B246 and MATH B203 or H215, or permission of instructor.
Units: 1.0
(Not Offered 2017-2018)

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 B206 or H106 and B231.
Major Writing Requirement: Writing Intensive
Units: 1.0
Instructor(s): Kumar,D.
(Spring 2018)

CMSC B340 Analysis of Algorithms
This course will cover qualitative and quantitative analysis of algorithms and their corresponding data structures from a precise mathematical point of view. Topics include: performance bounds, asymptotic and probabilistic analysis, worst case and average case behavior and correctness and complexity. Particular classes of algorithms will be studied in detail.
Prerequisite: CMSC B206 or H106 or H107, and B231 or H231 or permission from instructor.
Approach: Quantitative Readiness Required (QR)
Major Writing Requirement: Writing Intensive
Units: 1.0
Instructor(s): Xu,D.
(Fall 2017)

CMSC B355 Operating Systems
A practical introduction to modern operating systems, using case studies from UNIX, MSDOS and the Macintosh. Topics include computer and OS structures, process and thread management, process synchronization and communication, resource allocations, memory management, file systems, and select examples in protection and security. Prerequisite: CMSC B246 or permission of instructor.
Units: 1.0
Instructor(s): Xu,D.
(Spring 2018)

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: CMSC B206 or H106 and CMSC B231 or permission of instructor.
Counts towards: Neuroscience
Units: 1.0
(Not Offered 2017-2018)

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. Prerequisites: CMSC B206 or H106 and CMSC B231.
Counts towards: Neuroscience
Units: 1.0
Instructor(s): Kumar,D.
(Fall 2017)

CMSC B380 Recent Advances in Computer Science
Simplify your language and free your mind. This course will cover an alternative style of programming: typed functional programming. Typed functional programming languages are quickly gaining currency in industry, including at Google, Facebook, a variety of financial services companies, and across a range of startups. They are particularly good at maintaining security guarantees and for writing concurrent programs. This course will explore the ease and wonder of typed functional programming through one such language: Haskell. We will cover higher-order functions, purity, generalized algebraic datatypes, type inference, laziness, monads, and more. Once you have used these techniques, programming will never feel the same again. Prerequisites: CMSC B206 or H106 or H107, and MATH/CMSC 231.
Units: 1.0
(Not Offered 2017-2018)

CMSC B399 Senior Conference
An independent project in computer science culminating in a written report/thesis and oral presentation. Class discussions of work in progress and oral and written presentations of research results will be emphasized. Required for all computer science majors in the spring semester of their senior year.
Prerequisite: BM undergraduate Computer Science major.
Units: 1.0
Instructor(s): Xu,D.
(Spring 2018)

CMSC B403 Supervised Work/Independent Study
Units: 1.0
(Fall 2017)

BIOL B115 Computing Through Biology: An Introduction
This course is an introduction to biology through computer science, or an introduction to computer science through biology. The course will examine biological systems through the use of computer science, exploring concepts and solving problems from bioinformatics, evolution, ecology, and molecular biology through the practice of writing and modifying code in the Python programming language. The course will introduce students to the 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. Additional Meeting Time: (Lab) 2 hours.
Approach: Quantitative Methods (QM); Scientific Investigation (SI)
Units: 1.0
Instructor(s): Shapiro,J.
(Spring 2018)