Bard College Catalogue 2012-13
Keith O’Hara (director)**, Sven Anderson, William J. Joel, Robert McGrail*, S. Rebecca Thomas
* in residence, AUCA-Bard, fall 2012
** on sabbatical, spring 2013
OverviewComputer 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 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 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 335, 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.
CoursesThe following core courses are offered every year or every other year: Computer Science 141, Introduction to Object-Oriented Programming; 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; Computer Science 326, Operating Systems; and Computer Science 335, Computer Networks. Elective courses are offered at least once every three years or by tutorial; recent examples include Computer Science 321, Databases, and Computer Science 322, Computer Graphics.
Introduction to Computer Science: Graphics and Animation
Computer Science 112
Students learn to use a programming language and graphics interface to write algorithms that represent and render two-dimensional and three-dimensional geometrical objects, beginning with points and lines and extending to three-dimensional solids. Topics include applied geometry, coordinate transformations, projection, perspective, object modeling, and basic animation. Prerequisites: Mathematics 110 and eligibility for Q courses.
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 semantically intelligent content management for the World Wide Web. Participants construct social networking software, similar in scope to weblogs or Facebook, using an advanced content-management system. A 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 introduced and employed. Prerequisite: eligibility for Q courses.
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.
Introduction to Cognitive Science
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 answer such questions. The course is taught by faculty in biology, computer science, linguistics, philosophy, and psychology; their combined approach explores how humans and other intelligent systems feel, perceive, reason, and act. Laboratories provide analysis of neural and behavioral data as well as computational modeling. Prerequisite: Mathematics 110 or the equivalent.
Introduction to Object-Oriented Programming
Computer Science 141
This course introduces students with prior programming experience to the methodologies of object-oriented design. Students learn how to move from an informal problem statement to the design and implementation of a solution. Prerequisite: any Introduction to Computing course or permission of the instructor.
Object-Oriented Programming with Robots
Computer Science 143
For students with prior programming experience. An introduction to object-oriented design and programming through the design and implementation of mobile robot programs. The programs enable the robot to move around the world, reacting to sensors such as obstacle detectors and a color camera. Purchase of a small personal robot (to be specified by the instructor) is recommended. Prerequisite: any Introduction to Computing course or permission of the instructor.
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.
Computer Science 201
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. Prerequisite: Computer Science 141.
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
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.
Computer Science 303 / Mathematics 303
See Mathematics 303 for a course description.
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 discussion. Prerequisite: moderated status or permission of the instructor.
Theory of Computation
Computer Science 312
An introduction to several computational models developed to formalize the notion of an algorithm, the course 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 201 and either Computer Science 145 or Mathematics 235.
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.
Computer Science 322
Students explore the algorithms used to create and manipulate two- and three-dimensional graphic objects. Topics covered include coordinate transformations, projection, hidden surfaces, shading, ray tracing, and texture mapping. Experience in programming and mathematics is necessary. Prerequisites: Computer Science 201, Mathematics 242, and permission of the instructor.
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.
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.
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 335
The 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. Prerequisite: 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. Prerequisite: Computer Science 201 or permission of the instructor.