2013-2014 Undergraduate Catalog

Computer Science

Students may complete a major or minor in Computer Science or a minor in computational methods.

Faculty

Douglas Blank, Associate Professor
Deepak Kumar, Professor
Dianna Xu, Chair and Associate Professor

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 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 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. 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 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 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, software development, computer graphics, artificial intelligence, robotics, computational media, 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, 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.

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 information, 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 and through lectures, class examples and weekly programming projects, students will learn about abstraction, how to divide and organize a process into appropriate components, how to describe such processes in a computer language, and how to analyze and understand the behavior of their programs.
Requirement(s): Division II and Quantitive
Approach: Quantitative Methods (QM); Quantitative Readiness Required (QR); Scientific Investigation (SI)
Units: 1.0
Instructor(s): Kumar,D.
(Spring 2014)

CMSC B201 Physical Computing
Physical Computing is the study of the integration of computing (software and hardware) into the traditionally non-digital world. This often includes the use of an embedded, low-cost microcomputer with sensors and actuators (such as motors) to build an interface between the physical, analog world with the digital world. This course explores all levels of computing, from the low-level software and electronics, to the higher-level to application development and use of computing in society. Of special interest is that DIY technology that empowers individuals via creative physical computing devices and uses. Prerequisite or Corequisite: CS110 Introduction to Computing (or equivalent); or approval from instructor.
Requirement(s): Division II: Natural Science
Approach: Quantitative Methods (QM)
Units: 0.5
(Not Offered 2013-14)

CMSC B202 Mobile Computing
Mobile Computing is the study of the human-computer interaction between non-expert computer users and low-cost, richly-connected mobile devices controlled by software “apps.” Because the user is considered to be non-expert, mobile computing has driven the development of intuitive interfaces (such as touch-based screens). Because the the device is small, relatively inexpensive, and richly connected (with computer servers and other mobile users), mobile computing has driven the development of novel apps, especially those involving non-centralized, distributed use (such as geo-tagging, microblogging, and interactive games). This course will explore these apps (including user interface design), networks (including security), and devices (including smart phones, PDAs, tablet computers, wearable computers, and “carputers”). We will also explore the interaction of software development, networking, and the mobile device especially in those areas of “disruptive technologies.” Prerequisite or Corequisite: CS110 Introduction to Computing (or equivalent); or approval from instructor.
Requirement(s): Division II: Natural Science
Approach: Quantitative Methods (QM)
Units: 0.5
(Not Offered 2013-14)

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. Prerequisite: CMSC 110 or 205, or permission of instructor.
Requirement(s): Division II: Natural Science
Approach: Quantitative Methods (QM); Scientific Investigation (SI)
Units: 1.0
Instructor(s): Kumar,D.
(Spring 2014)

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. Students are strongly encouraged to have taken CMSC B110 or B205 prior to registering for this course, or at least take CMSC B110 or B205 concurrently.
Requirement(s): Division II and Quantitive
Approach: Quantitative Methods (QM)
Crosslisting(s): MATH-B231
Units: 1.0
Instructor(s): Xu,D.
(Fall 2013)

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 and CMSC B231
Requirement(s): Division II: Natural Science
Units: 1.0
Instructor(s): Blank,D.
(Fall 2013)

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.
Requirement(s): Division II and Quantitive
Units: 1.0
(Not Offered 2013-14)

CMSC B246 Programming Paradigms
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 (space-partitioning and application-specific trees). In addition, students will be introduced to C++’s STL. There will be emphasis on more significant programming assignments, and in connection to that, program design and other fundamental software engineering principals. Make file and GDB will be used at least in the first half. Prerequisite: CMSC 206 and 231.
Requirement(s): Division II and Quantitive
Units: 1.0
(Spring 2014)

CMSC B250 Computational Methods in the Sciences
A study of how and why modern computation methods are used in scientific inquiry. Students will learn basic principles of simulation-based programming through hands-on exercises. Content will focus on the development of population models, beginning with simple exponential growth and ending with spatially-explicit individual-based simulations. Students will design and implement a final project from their own disciplines. Six hours of combined lecture/lab per week.
Requirement(s): Division II and Quantitive
Approach: Quantitative Methods (QM); Quantitative Readiness Required (QR); Scientific Investigation (SI)
Counts towards: Environmental Studies
Crosslisting(s): BIOL-B250; GEOL-B250
Units: 1.0
(Not Offered 2013-14)

CMSC B257 Gender and Technology
Explores the historical role technology has played in the production of gender; the historical role gender has played in the evolution of various technologies; how the co-construction of gender and technology has been represented in a range of on-line, filmic, fictional, and critical media; and what all of the above suggest for the technological engagement of everyone in today’s world.
Requirement(s): Division III: Humanities
Approach: Critical Interpretation (CI)
Counts towards: Gender and Sexuality Studies
Crosslisting(s): ENGL-B257
Units: 1.0
(Not Offered 2013-14)

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 B110, CMSC B206, CMSC/MATH B231, and CMSC B246 or permission of instructor.
Units: 1.0
(Not Offered 2013-14)

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. Prerequisite: CMSC 206 and CMSC 231 or permission of instructor.
Crosslisting(s): PHIL-B324; LING-B325
Units: 1.0
Instructor(s): Kumar,D.
(Fall 2013)

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.
Requirement(s): Division II and Quantitive
Units: 1.0
Instructor(s): Kumar,D.
(Spring 2014)

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.
Units: 1.0
Instructor(s): Xu,D.
(Spring 2014)

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. Prerequisite: CMSC 206 and CMSC 231 or permission of instructor.
Crosslisting(s): BIOL-B361
Units: 1.0
Instructor(s): Blank,D.
(Fall 2013)

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.
Units: 1.0
(Not Offered 2013-14)

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.
Requirement(s): Division II and Quantitive
Crosslisting(s): PHIL-B372
Units: 1.0
(Not Offered 2013-14)

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.
Requirement(s): Division II: Natural Science
Units: 1.0
(Not Offered 2013-14)

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.
Units: 1.0
(Spring 2014)

CMSC B403 Supervised Work/Independent Study
Units: 1.0
Instructor(s): Dept. staff, TBA
(Fall 2013)

CMSC B403 Supervised Work/Independent Study
Units: 1.0
Instructor(s): Dept. staff, TBA
(Spring 2014)

CMSC B425 Praxis III: Independent Study
Praxis III courses are Independent Study courses and are developed by individual students, in collaboration with faculty and field supervisors. A Praxis courses is distinguished by genuine collaboration with fieldsite organizations and by a dynamic process of reflection that incorporates lessons learned in the field into the classroom setting and applies theoretical understanding gained through classroom study to work done in the broader community.
Counts towards: Praxis Program
Units: 1.0
(Not Offered 2013-14)