Computer Science
Courses
CS 110: Introduction To Computer Science
This course examines the fundamental differences between problem solving in computer science and problem
solving in other disciplines. How has computing evolved since its inception? How do computers store information?
How do computers communicate? What is artificial intelligence? How do computing and society interact?
This course also introduces problem solving with computer programming.
CS 151: Computer Programming I
The Java programming language is introduced in this course. Java language constructs such as variables,
sequential statements, if-else, loops, classes/objects and methods are examined in relation to general problem
solving strategies. Algorithmic techniques such as searching and sorting are covered. Upon completion of the
course, students should be able to design, code, test, and debug at a beginning level.
CS 152: Computer Programming II
Building on the basic programming skills developed in CS 151, this course adds tools to the programmer’s
repertoire to solve more complex problems using the C++ programming language. It introduces classic data
structures used to store collections of data efficiently. It further develops software-engineering practices—
including testing, documentation, and object-oriented programming—that aid in the construction of large programs.
Prerequisite: CSCI 151.
CS 199: Connecting Art and Computer Science - Animations, Gaming and 3-D Virtual Worlds
This course explores some of the connections between two quite different disciplines, art and computer science, in the context of animation, computer games, and three-dimensional virtual worlds. In the process the student will gain insights into the basics of computing and software design, the importance of being able to communicate ideas clearly, and how to work collaboratively.
(CSCI 19900 is designed specifically for students wanting a course in Computer Science to partially fulfill the College’s Learning Across the Disciplines requirements. CSCI 15100 is not recommended for these requirements.)
CS 251: Principles of Computer Organization
This course provides an overview of computer systems design and architecture, and machine language. Topics
include: instruction set design, register transfers, data-path design, pipelining, controller design, memory
systems, addressing techniques, microprogramming, computer arithmetic. A survey of popular computer systems
and microprocessors reinforce how real computer systems are designed. Prerequisite: CSCI 152.
CS 252: Algorithms
This course covers standard and advanced algorithms for problem solving in computer science. Brute force,
recursion, greedy strategies and dynamic programming techniques are applied to real world problems. Timespace
analysis is performed for various algorithm and data structure pairings. The limitations of algorithms are
also studied in the context of NP-completeness. Prerequisite: CSCI 152 and MATH 123, 211, or 223.
CS 253: Theory of Computation
The theory of abstract machines and formal languages is introduced in this course. Computability by finite
automata, pushdown automata and Turing machines is examined and related to pattern matching, lexical
analysis, compilation and programming for digital computer systems. Proofs by induction, construction, contradiction
and reduction are used to formalize computability theory and the limitations of computing.
Prerequisite: CSCI 152 and MATH 123 or 223.
CS 279: Problem Seminar
This course provides the opportunity for students to practice solving challenging computer science problems.
Typically, this is for those students intending to prepare for the ACM programming contest in which the College
participates. The ACM contest is the culmination of this course. (.25 course credit) S/NC course. May be taken more
than once. Prerequisite: CSCI 151.
CS 309: Special Topics
The content and prerequisites of this course vary according to the topic chosen. The course is available at irregular
intervals when there is a need for a special topic. Past topics include Software Quality, Parallel and
Distributed Computing, and Web Programming. (Variable course credit) Prerequisite: Permission of the instructor.
CS 351: Programming Language Theory and Compiler
Construction
This course examines programming languages and the use of compilers to translate from high-level languages
to machine languages. We use formalisms to describe the syntax and semantics of imperative languages. We
explore alternative language paradigms. We examine the algorithms and data structures used in compiler
implementation. CSCI 252 is recommended. Prerequisite: CSCI 251.
CS 353: Operating Systems
An Operating System acts as an interface between the application and hardware layer of a computer system. In
this course we examine how operating systems manage computing resources such as the memory hierarchy, file
system, program runtime environment and peripheral devices. Several popular operating systems are examined
as case studies. Prerequisite: CSCI 251.
CS 354: File and Database Systems
This course provides an overview of general database topics that are relevant to any database management
system. These topics include: database design (data modeling, entity-relationship modeling, relational data
models, normal forms), the use of database management systems for application development (SQL query language
and relational algebra), transaction processing and storage, and indexing principles. The students practice
on modern database systems such as Oracle, MySQL or SQL Server. In addition, students develop a web
database application. At the end of this course students will be able to design and implement a database, to
query a database using SQL, and to write stored procedures to access and interact with databases. Prerequisite:
CSCI 252.
CS 356: Computer Graphics
This course explores the theory and application of computer graphics
through the evolution of graphics algorithms and hardware. Topics include
2-D, 3-D transformations and projections, illumination models, texture mapping,
animation, user interfaces and rendering algorithms. Prerequisites: CS 152
and Math 211.
CS 357: Machine Intelligence
This course is a hands-on introduction to machine learning and artificial intelligence. The main question
addressed is: How can we design good computer algorithms that improve automatically through experience
(e.g. similar to the way humans learn)? Multiple machine learning models are examined. The goal of the course
is that students begin to understand some of the issues and challenges facing machine learning while being
exposed to the pragmatics of implementing machine learning systems in Matlab. Prerequisites: CSCI 152 and
MATH 211.
CS 400: Tutorial
This course is given for topics not normally covered in regular courses. Prerequisite: CSCI 252; the approval of both
the supervising faculty member and the chairperson is required prior to registration.
CS 451: Independent Study Thesis
The first semester of the Senior Independent Study project, in which each student engages in creative and
independent research guided by a faculty mentor and which culminates in a thesis and an oral examination in
the second semester. Prerequisite: CSCI 252.
CS 452: Independent Study Thesis
The second semester of the Senior Independent Study project, which culminates in the thesis and an oral examination.
Prerequisite: CSCI 451.