- History of Bard
- Learning at Bard
- Academic Calendar
- Division of the Arts
- Division of Languages and Literature
- Division of Science, Mathematics, and Computing
- Division of Social Studies
- Interdivisional Programs and Concentrations
- The Bard College Conservatory of Music
- Bard Abroad
- Additional Study Opportunities and Affiliated Institutes
- Civic Engagement
- Campus Life and Facilities
- Graduate Programs
- Educational Outreach
- Levy Economics Institute of Bard College
- The Bard Center
- Scholarships, Awards, and Prizes
- Honorary Degrees and Bard College Awards
- Boards and Administration of Bard College
- Bard Campus Map and Travel Directions
- Bard College Contact Information
Bard College Catalogue 2020-21
Keith O’Hara (director), Sven Anderson, Robert W. McGrail, Kerri-Ann Norton
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, modeling, 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 that students can learn by building, and by participating in research projects in laboratories devoted to cognition, computational biology, 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, among other programs and concentrations, Mind, Brain, and Behavior, Experimental Humanities, Mathematics, Film and Electronic Arts, and Music, 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 141, 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 college-wide distribution and First-Year Seminar requirements. To graduate, a student in the program must take Computer Science 301, 305, a statistics course such as 275; one systems course such as 226, 326, 327; 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
- “Agent-Based Model of Cavitation in Spinal Cord Injury”
- “Credit-Risk Analysis in Peer-to-Peer Lending Dataset: Lending Club”
- “Geometric Correction for a Spherical Mirror Projection on a Nonplanar Surface”
- “Self-Driving Cars: Exploring the Potential of Using Convolutional Neural Network to Overcome Road Variation”
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: Computer Science 141/143, Object-Oriented Programming; Computer Science 145, Discrete Mathematics; Computer Science 201, Data Structures; Computer Science 275, Statistics for Computing; Computer Science 301, Algorithms; Computer Science 305, Design of Programming Languages; 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, Bioinformatics, and Machine Learning.
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. 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.
Foundations of Mind, Brain, and Behavior
Computer Science 131
CROSS-LISTED: MBB, PHILOSOPHY, PSYCHOLOGY
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.
Computer Science 141
CROSS-LISTED: EXPERIMENTAL HUMANITIES, MBB
This course, intended for students with prior programming experience, introduces the methodology of object-oriented design and development via guided student work, solving interesting problems drawn from arenas such as graphics and animation, simulation, and/or internet applications. Good programming and documentation habits are emphasized.
Object-Oriented Programming with Robots
Computer Science 143
Students learn how to move from an informal problem statement to the design and implementation of a solution. Good programming habits are emphasized.
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.
Computer Science 201
This course covers 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, students focus on the construction of more sophisticated 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.
Programming Nature: Modeling Biological and Physical Systems
Computer Science 210
Students in the course, who should have prior programming experience, develop the necessary tools for modeling biological and physical objects that can move, interact, divide, and evolve, with a specific application of simulating biological cells. They learn how to pose a question about a natural system, develop a set of rules, and implement simulations to formulate predictions about the dynamics of that system. Prerequisite: Computer Science 143 or permission of the instructor.
Bioinformatics and Beyond: Programming for Biology
Computer Science 220
In this course, students are introduced to the basics of bioinformatics and biological statistical analysis; develop the necessary tools for analyzing and aligning biological sequences, building phylogenetic trees, and using statistical tests; and learn how to develop a hypothesis, test their hypothesis, and statistically analyze their data. Prerequisite: Computer Science 141 or 143, or Biology 244.
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.
Principles of Computing Systems
Computer Science 226
CROSS-LISTED: EXPERIMENTAL HUMANITIES
As programs scale up from a single author, user, and computer to those designed, written, maintained, and used by multiple people that run on many computers, considerations beyond algorithms alone are magnified. This course takes a systems perspective to the study of computers. Students explore computers from the ground up, using a variety of programming languages and tools, such as the command line, debuggers, and version control. Prerequisite: Computer Science 141 or permission of the instructor.
Introduction to Automated Deduction
Computer Science 230
Topics covered include propositional, first-order, and second-order logic; satisfiability and term unification; logical resolution; and Horn clause programming. Term rewriting systems, lambda calculus and type theory, and general automated theorem proving may also be addressed. Prerequisite: Computer Science 145 or the equivalent.
Introduction to Artificial Intelligence
Computer Science 251
The course emphasizes elements of artificial intelligence that are compatible with biologically based intelligence (e.g., neural computation). Techniques explored include automated reasoning, machine learning, evolutionary learning, heuristic search, and behavior-based robot control. Application examples are drawn from robotics, game play, logic, visual perception, and natural language processing.
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.
Theory of Computation
Computer Science 312
This course introduces several computational models developed to formalize the notion of an algorithm. 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. Prerequisite: Computer Science 145 or Mathematics 261.
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 theory, design, and implementation of databases and data modeling. Key topics include database methodologies, data modeling design, three-tier architectures, database querying, implementation of database applications, and related topics in information systems. Students design a project that sorts through real data involving actual subjects and genuine problems by constructing a data model and building their own database.
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.
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.
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.
Biologically Inspired Machine Learning
Computer Science 352
Machine learning is a field in which algorithms learn to improve themselves based on their interactions with an environment. This course investigates a broad array of techniques from machine learning and statistical pattern recognition. Topics addressed include unsupervised learning, clustering, dimensionality reduction, supervised learning, neural networks, reinforcement learning, and learning theory. Applications are drawn from computer vision, speech recognition, autonomous navigation, natural language processing, and data mining. Prerequisites: Mathematics 142 and Computer Science 201.
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.