Bard College at Simon's Rock: the Early College
  1. Home
  2. Academics
  3. Program Overview
  4. Computer Science Courses

Computer Science Courses

Explore the various computer science courses that Simon’s Rock has to offer.

Harold Hastings with Students

Dr. Harold Hastings with Students 

Introduction to Computer Programming

Computer Science 100 | Barsky | 3 credits

This course provides an introduction to fundamental concepts of computer science, both as a prelude to further study in the discipline and to serve broader educational goals. The course uses Python, a high-level, portable, and well-constructed computer programming language to demonstrate those concepts. The focus is on data types and control structures, functions, recursion, and iteration - all this by solving real-life problems the 'Pythonian' way.

No prerequisite. This course is offered every semester.

History of Video Games

Computer Science 120 CP | Staff | 4 credits

This course is focused on the history of video games, the video game industry, and video game culture. We concentrate on the period ranging from the mid-1970s to the early-1990s, which coincides with the first four generations of home consoles. Students will learn about important historical events, the people behind these events, and the differences between the American and Japanese markets. Students also have the rare opportunity to play games on authentic original hardware in the retro video game lab. The lab component cannot be used to satisfy the Science Lab requirement.

This course is offered occasionally, based on the availability of the instructor.

Java Projects

Computer Science 200 | Liscombe | 3 credits

The course introduces the student to software design and development concepts and to professional tools such as a fully-featured IDE and a version control system. We also learn Java, a statically-typed programming language. We compare salient features of Python and Java, and we will investigate Java’s memory model, scoping facilities, and object-oriented structures in depth.

Prerequisite: Computer Science 100. This course is offered once a year (in the spring).

Programming Languages

Computer Science 212 | Staff | 3 credits

An examination of the design and implementation of modern programming languages, covering such paradigms as imperative languages, object-oriented languages, functional languages, and logic-oriented languages. Topics will include syntax, semantics, pragmatics, grammars, parse trees, types, bindings, scope, parameter passing, and control structures. 

Prerequisite: Computer Science 100. This course is generally offered once every two years.

Robotics

Computer Science 240 | Bergman | 3 credits

This course gives an introduction to the background and theory of robotics, as well as to the practical electronic, mechanical, and programming aspects of building and controlling robots. Topics include sensors, feedback, control, and mechanical construction. For ease of prototyping we use an off the shelf robot controller, the Handy Board, an 8-bit microprocessor that can run Interactive C, and the LEGO Technic system. Along with a variety of sensors, these materials will allow the class to work through a series of projects that introduces robotics. In a broader sense, this course serves as an introduction to solving engineering problems.

Prerequisite: Permission of the instructor. No previous programming or robotics experience is required. This course is offered every other year.

System Programming

Computer Science 242 | Barsky | 3 credits

This course introduces the 'software tools' model and the Unix philosophy. Topics include I/O redirection, shell programming, the Unix file system, the machine-oriented C programming language, Unix processes, the operating system interface, interprocess, and network communication. By the end of the course students will be able to use existing and create new software tools, implement forks and pipes, signals and sockets, and feel comfortable with shell scripting.

This is a required course for CMPT 243 (Algorithms and Data Structures). Prerequisites: CMPT 100 or equivalent knowledge of programming basics. This course is offered once every two years.

Algorithms and Data Structures

Computer Science 243 | Barsky | 3 credits

This course introduces students to the theory and application of algorithms and data structures. Students learn the fundamental paradigms of algorithm design including greedy, divide-and-conquer, and dynamic programming, and the benefits of using data structures such as stacks, queues, lists, heaps and hash tables. Common application areas are considered including sorting, algorithms on graphs, and string searching algorithms. Students analyze algorithms using big-Oh notation and write implementations for solving real-life problems.

Prerequisite: Computer Science 100 and Computer Science 252. This course is offered once a year (in the spring).

Discrete Mathematics

Computer Science 252 | PutzSusse | 3 credits

The mathematical foundations of computer science, including propositional and predicate logic; sets; mathematical induction and recursion; permutations and combinations; discrete probability; solving recurrences; order relations; graphs; trees; algorithm types and asymptotic analysis.

Prerequisite: Mathematics 210. This course is offered once a year (in the fall).

Scientific Computing

Computer Science 260/360 | Hastings, Kramer | 3/4 credits

The course covers computer algorithms commonly used in the physical and biological sciences: minimizing a function, special functions, Fast Fourier Transforms, numerical solution to differential equations, etc. The end of the semester is devoted to an independent project, with a topic chosen by the student and subject to approval of the instructor. In recent years these projects have ranged from bioinfomatics to quantum mechanics.

Requirements: The student should have a laptop with compiler installed (one may be available as a loan from ITS, though the student is responsible for this arrangement). The student should already be fluent in a programming language (a prior programming course is not required). The student should be taking or have completed vector calculus (Mathematics 221). This course is generally offered once a year.

Theory of Computation

Computer Science 320 | Staff | 4 credits

The first half of this course studies models of computation and their associated formal languages, including regular and context-free languages, as well as finite automata and pushdown automata. The second half will focus on computational complexity classes including P, NP, PSPACE, and NPSPACE as well as reductions and the notions of hardness and completeness. This classic material will be applied to puzzles and games and the newer models involving constraint logic will be introduced. The course finishes with limitations to computability including the Church-Turing thesis and undecidable problems.

Prerequisite: Computer Science 243. This course is generally offered every other year.

Introduction to Databases

Computer Science 321 | Barsky | 4 credits

The course presents an introduction to database management systems (DBMS), with an emphasis on using the system for modeling and querying information. The main focus is on data models and database design, relational algebra and SQL, and data analytics, with a short introduction to the internals of relational database engines. The course includes a project, which involves developing an embedded database application using Python.

Prerequisite: Computer Science 100 and at least one additional programming course.

Topics in Advanced Algorithms

Computer Science 353 | Barksy, Staff | 4 credits

This advanced topics course concentrates on algorithmic solutions for various problem domains. It may be taken more than once for credit in different topics with permission of the instructor.  In recent years the topics included Combinatorics, Algorithms on Graphs, and Algorithms for Bioinformatics.  

Prerequisites: Computer Science 252 Discrete Math; Computer Science 243 Data Structures and Algorithms. This course is generally offered once every two years.

Artificial Intelligence

Computer Science 364 | Staff | 4 credits

This course begins by modeling problems using graph search by considering uninformed and informed graph search algorithms including A* search. Then we model problems as constraint satisfaction problems and consider backtracking with forward checking, the generalized arc consistency algorithm, local search, genetic programming, and optimization. We also consider problems that can be modeled using knowledge bases, and 2-players games that can be solved using minmax strategies. Throughout the course students will model problems and implement programs to solve them.

Prerequisites: Computer Science 243 and Computer Science 252. This course is offered every two years.

Topics in Machine Learning

Computer Science 370 | Barksy, Hastings, Landi | 4 credits

This course explores selected topics in machine learning, an area of broad application of mathematics and computer science to technology, health sciences, internet, and science, engineering and business in general. Different topics may be covered every time, and the course can be taken more than once. Students will learn approaches to both supervised and unsupervised learning, as well as how to apply their knowledge to develop a solution to a problem amenable to machine learning techniques. Students will also make written and oral presentations of their final project. 

Prerequisites: Students are expected to have some mathematical and programming maturity. Therefore, at least one of the following classes will be required for admission into the class: Computer Science 252 Discrete Math; Computer Science 243 Data Structures and Algorithms; Mathematics 220 Linear Algebra; Mathematics 330 Statistics 1; and permission of the instructor. This course is generally offered once a year.