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.

*The download on this page requires Adobe Reader for viewing and printing.

Bard College Catalogue 2013-14

Bard College Catalogue 2013-14

Computer Science


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


Computer science is integral to current technological and cultural changes and to all fields of study. The Computer Science Program at Bard offers courses of interest to computer science, science, and nonscience majors. The program focuses on the fundamental ideas of computer science and introduces students to multiple programming languages that emphasize different programming paradigms. It offers broad coverage of theoretical, applied, and systems-oriented topics. Students have numerous opportunities to participate in hands-on courses and research projects in new laboratories devoted to cognition, robotics, and symbolic computation.

The curriculum is designed to offer many opportunities for students whose interest in computer science arises from its intersection with another discipline. Computer science has many linkages with cognitive science, electronic arts, mathematics, and physics. Students from these fields often begin with an introductory course and later return to take a more advanced computer science course that enhances skills and knowledge they will use in their Senior Project.


Before Moderation a student in the Computer Science Program should complete or be enrolled in an introductory computer science course (e.g., Computer Science 115 or 116); 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. By graduation, a student in the program must take Computer Science 301, 305, 312, and either 326 or 327, at least two other computer science courses numbered 300 or above, and complete a Senior Project.

Recent Senior Projects

  • “Analyzing and Visualizing Malware Collected in Honeypots”
  • “Computing the Typeset of Quandles,” a construction of computational classification for the allowable types of minimal algebras in the variety of quandles
  • “Delaunay Diagram Representations for Use in Image Near-Duplicate Detection"
  • “The Effect of Tangible and Multitouch Interfaces on Game Performance”


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 251, Introduction to Artificial Intelligence; 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 Computational Image, and 3D Character Design.

Introduction to Computing: Robotics
Computer Science 113
Teams design and build shoe box–size robots, with guidance from the instructor. These rather minimalist robots are mobile and have multiple sensors. Teams use a simple programming ­language to program their robots to carry out simple tasks, then move to a more robust programming language and more complex tasks by the end of the semester. Prerequisite: eligibility for Q courses.

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 eligibility for Q courses.

Introduction to Computing: Semantic Web
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
In this course, students program graphics, perception, and robotics systems, and learn how computers can manipulate the physical world as well as calculate in the virtual world. Programming projects include creating 2-D and 3-D pieces of art, automatically analyzing photos and video from digital cameras, and making machines walk and talk. No prior knowledge of computer programming is required. Prerequisite: eligibility for Q courses.

Hapax Legomena and the Words We Use: Computing for the Digital Humanitiess
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.

Foundations of Mind, Brain, and Behavior
Computer Science 131
cross-listed: mbb, philosophy, psychology
If an android can be programmed to behave just like me, does the android have a mind just like mine? If “the mind” is simply “what the brain does,” can my mind be active while my brain is asleep? This course provides a variety of empirical approaches to the study of mind, brain, and behavior, and together the class tests answers to questions like these. Labs provide hands-on experience, emphasizing data collection and data analysis. Prerequisite: Mathematics 110 or the equivalent.

Object-Oriented Programming with Robots
Computer Science 143
cross-listed: mbb
This course introduces students with prior programming experience to object-oriented design and programming 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 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. The topics covered 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
An introduction to the basic ideas underlying data storage and retrieval. Several standard data structures are covered, including stacks, queues, lists, hash tables, and balanced binary trees. The course balances implementation of structures and formal analysis of their properties.

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 concepts. Corequisite: Computer Science 201; Physics 210 is recommended.

Mobile Applications and Interfaces
Computer Science 231-233
An introduction to the design of applications on handheld mobile devices characterized by limited computational and interface resources. Particular emphasis is placed on developing software interface designs that incorporate the specialized input-output capabilities of these devices, such as wireless communication, spoken interfaces, and image capture. Students are assigned to small teams that work together to develop applications for this platform. Prerequisite: Computer Science 201.

Introduction to Artificial Intelligence
Computer Science 251
cross-listed: mbb
An introduction to artificial intelligence principles and techniques, primarily intended for students interested in cognitive science and neuroscience. The course emphasizes elements of artificial intelligence that are compatible with the current understanding of biologically based intelligence (e.g., neural computation), and explores the application of such artificial intelligence techniques as automated reasoning, machine learning, evolutionary learning, heuristic search, and behavior-based robot control. Application examples are drawn from artificial life, robotics, game play, logic, visual perception, and natural language processing. 


Computer Science 301
This course covers the design and analysis of correct and efficient computer algorithms. Topics include sorting, greedy algorithms, divide-and-conquer 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
This course covers a selection of 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.

Cognitive Science Research
Computer Science 308
This seminar explores the primary literature relevant to a particular question about cognition. Students are responsible for selecting papers, presenting material, and leading discussions. 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: Com­puter Science 145 and 201.

The Computational Image
Computer Science 317
This course covers computational techniques for the analysis and synthesis of digital images. 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.

Advanced Hardware: Multiprocessor Computer Architecture
Computer Science 325
Modern desktop computers typically contain multiple microprocessors. In order to take full advantage of these new machines, one must understand a number of interlocking hardware and software issues, including instruction 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 extant multicore architectures. Prerequisite: Computer Science 201.

Operating Systems
Computer Science 326
The class covers traditional topics of operating systems, including interprocess communication, semaphores, monitors, scheduling algorithms, deadlocks, virtual memory, and file system design. In addition, discussion may include issues in distributed systems such as the client-server model, remote procedure call, distributed synchronization, transactions, threads, and file servers. 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.

3D Character Design and Animation
Computer Science 340
The process of designing and animating 3D characters begins with traditional 2D animation and then, through the use of software, moves firmly into three-space. In this course, students are introduced to animation fundamentals, both conceptually and algorithmically, before they explore how various software implementations can allow for the creation of 3D characters. Finally, each student considers a specific aspect of 3D character computer animation and how it relates to their major, and presents their findings to the class.

Biologically Inspired Machine Learning
Computer Science 352
This course examines computation as a metaphor for understanding adaptive systems. 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. Prerequisite: Computer Science 201 or permission of the instructor.