Bard College Catalogue

The Bard College Catalogue contains detailed descriptions of the College's undergraduate programs and courses, curriculum, admission and financial aid procedures, student activities and services, history, campus facilities, affiliated institutions including graduate programs, and faculty and administration.

Bard College Catalogue 2016-17

Bard College Catalogue 2016-17

Computer Science


Keith O’Hara (director), Sven Anderson, Robert W. McGrail, Khondaker Salehin, S. Rebecca Thomas


Computing is an integral part of contemporary life. Computer science encompasses the study of computing technology, theory, and applications in all contexts, including mobile ­computing, desktop computing, robotics and autonomous vehicles, and the Internet. The Computer Science Program at Bard offers courses tailored to the interests of students from across the College. The program focuses on the fundamental ideas of computer science and introduces students to multiple programming languages and paradigms. It offers broad coverage of theoretical, applied, and systems-oriented topics. Most courses include hands-on projects so students can learn by building and participate in research projects in laboratories devoted to cognition, robotics, and symbolic computation.

The curriculum is designed to offer many opportunities for students whose interest in computing arises from their own disciplinary context. Computer science has links with cognitive science, experimental humanities, mathematics, film and electronic arts, and many other fields, and students from these fields often use their computing skills and knowledge in carrying out Senior Projects.


Before Moderation, a student in the Computer Science Program should complete or be enrolled in Computer Science 143, 145, and 201, as well as Mathematics 141 (or the equivalents). Students are expected to follow standard divisional procedures for Moderation and to fulfill the collegewide distribution and First-Year Seminar requirements. To graduate, a ­student in the program must take Computer Science 301, 305, and 312; one systems course such as 326, 327, or 360; at least two other ­computer science courses, one numbered above 201 and the other numbered 300 or above; and complete a Senior Project.

Recent Senior Projects

  • “Browsing Data as a Predictor of Web Page Relevancy”
  • “Implementation of the Solution to the Conjugacy Problem in Thompson’s Groups”
  • “Texture Analysis in Painting Classification"
  • “Using Multi-Agent Reinforcement Learning to Structure the Behavior of Virtual Dinosaurs”


Program facilities at the Gabrielle H. Reem and Herbert J. Kayden Center for Science and Computation include computer and hardware teaching labs, a cognitive systems lab, robotics lab, dedicated computer server room, and study space with wireless networking.


The following core courses are offered every year or every other year: Computer Science 143, Object-Oriented Programming with Robots; Computer Science 145, Discrete Mathematics; Computer Science 201, Data Structures; Computer Science 301, Algorithms; Computer Science 305, Design of Programming Languages; Computer Science 312, Theory of Computation; and Computer Science 326, Operating Systems. Elective courses are offered at least once every three years or by tutorial; recent examples include Databases, Mobile Applications and Interfaces, The Computa­tional Image, and Embedded Operating Systems.

The Craft of Computing
Computer Science 101
This course explores the past, present, and future of computing through the work of pioneers like Simon, Papert, Kay, and Knuth. It also features a practical introduction to the craft of computing: editing, scripting, and version control.

Introduction to Computing: Simulating Reality
Computer Science 115
How do rumors and fashions spread in society? Does a small change in environmental temperature disrupt an ecosystem? Questions like these are explored, using computers to create virtual worlds. This introduction to modeling and simulation is for students who are interested in creating computer models of objects, processes, and complex systems using computer software. No prior knowledge of computer programming is required. Prerequisites: a strong background in precalculus mathematics or the equivalent, and a passing score on Part I of the Mathematics Diagnostic.

Introduction to Computing:Web Informatics
Computer Science 116
An introduction to content deployment for the World Wide Web. Participants construct social networking software, similar in scope to blogs or Facebook, using a dynamic web programming system. Strong emphasis is placed on the development of flexible applications that efficiently store and process data and metadata. In addition to basic computer programming, various XML technologies are employed. Prerequisite: passing score on Part I of the Mathematics Diagnostic.

Introduction to Computing: Interactive Systems
Computer Science 117
This course introduces students to computing through the construction of interactive systems that explore the interface between the physical and virtual worlds. Programming projects involve 2D and 3D graphics, animation, interactivity, and the visualization of data. Prerequisite: passing score on Part I of the Mathematics Diagnostics.

Introduction to Computing: Digital Humanities
Computer Science 118
cross-listed: experimental humanities
What, if anything, can we learn by applying basic computing to works of literature? In this course, students apply techniques from natural language processing (the subdiscipline of computer science that deals with information in text form) to all kinds of texts. They identify hapax legomena (words that appear only once in a given text) and think about whether and when they are significant. How scholars try to use statistical techniques to approach disputes over authorship is also addressed.

(De-)Coding the Drone
Computer Science 119
cross-listed: experimental humanities, human rights, stsThis introduction to computing through the coding and decoding of drones—or, more generally, robotic computing systems—engages with the public debate on unmanned aerial vehicles, both military and domestic. Students learn how computers can observe and manipulate the physical world as well as calculate in the virtual world, while reflecting on the social and political implications of drone technology. Guest lectures by distinguished practitioners in human rights, international law, media studies, ­literature, robotics, and history.

Introduction to Mind, Brain, and Behavior
Computer Science 131 / Psychology 131
cross-listed: mbb, philosophy
How do brains make minds? Can computers think? Is my dog conscious? Cognitive science assumes that the brain is some sort of computational engine, and, beginning with that premise, attempts to find answers to such questions. This course is taught by faculty from biology, computer science, linguistics, philosophy, and psychology, who combine their different approaches to explore how humans and other intelligent systems feel, perceive, reason, plan, and act. Prerequisite: Precalculus or its equivalent.

Object-Oriented Programming with Robots
Computer Science 143
cross-listed: mbb
An exploration of object-oriented design through the design and implementation of mobile robot programs. Students learn how to move from an informal problem statement, through increasingly precise problem specifications, to the design and implementation of a solution. Good programming habits are emphasized.

Discrete Mathematics
Computer Science 145
This course emphasizes creative problem solving, linking language to logic, and learning  to read and write proofs. Topics include propositional logic, predicate logic, inductive proof, sets, relations, functions, introductory combinatorics, and discrete probability. Prerequisite: Mathematics 141 or programming experience.

Data Structures
Computer Science 201
cross-listed: mbb
This course introduces the essential principles of program design and analysis that underlie applications of computation to Internet communication, digital media, and artificial intelligence. Building on basic programming skills, the class focuses on the construction of more sophisticated and reliable computer programs that employ the most important and useful data structures, including files, lists, stacks, trees, and graphs. Prerequisite: Computer Science 143 or permission of the instructor.

Computer Architecture
Computer Science 225
An introduction to the structure and operation of modern computer architecture. Topics include instruction sets, pipelining, instruction-level parallelism, caches, memory hierarchies, storage systems, and multiprocessors. Assembly language programming is used to demonstrate the concepts. Prerequisite: Computer Science 143.

Introduction to Big Data
Computer Science 271
Students are introduced to the MapReduce programming paradigm and its utility to the management of data sets that are too unwieldy for classical approaches to data management. Concepts surveyed include data sampling, organization, storage, reinterpretation, sharing, search, and visualization. Moreover, big data analytics and the underlying theory of statistical inference play a vital role in the course.

Computer Science 301
The focus of this course is on the design and analysis of correct and efficient computer algorithms. Topics include sorting, divide-and-conquer algorithms, greedy algorithms, dynamic programming algorithms, and graph algorithms. Advanced topics in algorithms may be selected from specialized areas of the mathematical and empirical sciences. Prerequisites: Computer Science 145 and 201 or Mathematics 261.

Design of Programming Languages
Computer Science 305
Students explore important issues in the design of programming languages, including type systems, ­procedure activation, parameter passing, data encapsulation, dynamic memory allocation, and concurrency. In addition, the functional, logical, and object-oriented programming paradigms are presented. Prerequisite: Computer Science 201.

Mind, Brain, and Behavior Seminar
Computer Science 308
cross-listed: mbb
Juniors and seniors concentrating in computer science or mathematics are strongly urged to take this two-credit course. Each senior presents personal research in progress or significant material from the literature. Each junior presents an interesting paper of personal choice from the literature. The purpose of the seminar is to enhance communication among seniors about their research and to encourage juniors to become familiar with both the academic literature and research undertaken in the program. Prerequisite: moderated status or permission of the instructor.

Theory of Computation
Computer Science 312
This course introduces several computational models developed to formalize the notion of an algo­rithm. It also offers detailed discussion of primary topics in the theory of computation, including the theory of recursive functions, Turing machines, and several undecidable problems, such as the halting problem. Prerequisites: Computer Science 145 and 201.

The Computational Image
Computer Science 317
Using algorithms and approaches from computational geometry, computer graphics, image processing, computer vision, and augmented reality, students build computer systems that are visually interactive. Topics include image formation, feature extraction, object segmentation, recognition and tracking, rendering, and multiview geometry.

Databases: Theory and Practice
Computer Science 321
An introduction to the design, implementation, and uses of databases. Topics include database design, models, integrity, concurrency, security, and query languages. Prerequisite: Computer Science 201.

Multicore Architecture
Computer Science 325
Modern desktop computers typically contain multiple microprocessors. In order to take full advantage of these machines, one must understand a number of interlocking hardware and software issues, including instruction-level and thread-level parallelism, architectures for shared memory, and dynamic scheduling. This course combines principles of computer organization as applied to multiprocessor systems with case studies of several multicore architectures. Prerequisite: Computer Science 201.

Operating Systems
Computer Science 326
The operating system provides the interface that makes it possible for users and their programs to interact with computer hardware. Whether on a mainframe or mobile phone, the operating system makes it possible for a computer to be shared by many users and processes in a secure manner. This course examines the major components of modern operating systems, with an emphasis on how processes and memory are managed for efficiency and security. Prerequisite: Computer Science 201.

Distributed Systems
Computer Science 327
Computing systems are increasingly built in a networked, distributed manner. These systems, often spanning the globe, coordinate to solve problems involving massive amounts of data in a highly fault-tolerant fashion. Students examine the challenges of extending traditional computing systems concepts (e.g. shared state, hardware abstraction, scheduling, file systems, timing, authentication) to a networked setting as well as the architectures, algorithms, and technologies used to design, build, and evaluate distributed computer systems. Prerequisite: Computer Science 201 or permission of the instructor.

Embedded Operating Systems
Computer Science 328
From dishwashers to drones, digital computers act as the brains of most modern devices. Embedded computing systems lack the memory, processing, energy, and user-interface resources available in traditional computers (e.g., personal computers). Topics covered include device drivers, concurrency, interprocess communication, scheduling, memory management, and virtualization. In addition, discussion may include issues in mobile, distributed, and real-time systems. Prerequisite: Computer Science 201 or permission of the instructor.

Computer Networks
Computer Science 345
This course takes a bottom-up approach to computer networking, covering in detail the physical, data link, MAC, network, transport, and application layers. TCP/IP and OSI reference models are introduced with examples taken from the Internet, ATM networks, and wireless networks.

Artificial Intelligence
Computer Science 351
cross-listed: mbb
This course provides a broad introduction to topics in artificial intelligence, including knowledge representation and reasoning, planning and ­problem solving, and machine learning. Advanced topics may include natural language processing, multiagent systems, and image processing.

Biologically Inspired Machine Learning
Computer Science 352
Participants study several biological systems and relate them to abstract models that incorporate elements of their data structures, information processing, and learning. Neuron models, neural networks, and evolutionary learning are studied using mathematics and computer simulation. The course emphasizes information processing, pattern recognition, and associated computational abilities of artificial models, but takes an ethological approach to understanding how natural and artificial intelligence systems adapt to their environment.

Intelligent Robotics and Perception
Computer Science 360
An overview of topics in computational perception, machine learning, and robotics. Students learn the underlying principles and methods of intelligent robotic systems, including techniques from sensor processing; robot software architecture; and supervised, unsupervised, and reinforcement learning. Throughout the semester, students collaborate to build an intelligent robotic system.

Mobile Application Development
Computer Science 374
A hands-on introduction to the design of applications on hand-held mobile devices such as mobile phones and tablets that are characterized by limited computational resources. Particular emphasis is placed on developing application architectures and interface designs that incorporate the specialized input-output capabilities of these devices, including wireless communication, touch input, spoken interfaces, location sensors, and video capture. Students work in small teams to develop a complete application for this platform.