## Courses2016-2017

For the college’s course catalog, please visit the Courses section. For courses currently offered, please visit the Schedule of Classes.

CS-109 Discovering Computer Science

This course is an introduction to computational problem solving. In each instance of the course, students will develop their abilities to abstract and model problems drawn from a particular application domain, and generate elegant and efficient solutions. Students will practice these skills by developing computer programs to solve these applied problems. The course will cover programming fundamentals, as well as the development of algorithms and data manipulation techniques related to the chosen application area. Students may earn credit for at most one of CS 109, 110, 111 and 112. Absolutely no prior experience is necessary.

CS-110 Discovering Computer Science: Digital Media and Games

This course is an introduction to computational problem solving. Students will develop their abilities to abstract otherwise complex problems and generate elegant and efficient solutions. Students will practice these skills by developing computer programs that manipulate digital images and sounds. These skills will prove applicable not only in subsequent computer science courses but in numerous other fields. Students may earn credit for at most one of CS 109, 110, 111 and 112. Absolutely no prior experience is necessary.

CS-111 Discovering Computer Science: Scientific Data and Dynamics

This course is an introduction to computational problem solving. Students will develop their abilities to abstract (or model) otherwise complex problems and generate elegant and efficient solutions. Students will practice these skills by developing computer programs that solve problems motivated by research in the sciences. Additional topics may include Monte Carlo methods, data analysis, population dynamics, computational biology, genetic algorithms, cellular automata, networks, data mining, and fractals. Students may earn credit for at most one of CS 109, 110, 111 and 112. Absolutely no prior experience is necessary.

CS-112 Discovering Computer Science: Markets, Polls, and Social Networks

This course is an introduction to computational problem solving. Students will develop their abilities to abstract otherwise complex problems and generate elegant and efficient solutions. Students will practice these skills by developing computer programs that solve problems that arise in the social sciences. Topics such as social networks, population modeling in economics, data collection via polling, voting systems, game theory, and Congressional polarization will be discussed in the context of computational problem-solving. Absolutely no prior experience is necessary. Students may earn credit for at most one of CS 109, 110, 111, and 112.

CS-119 Seminar: Programming Problems

Students meet weekly to solve a challenging programming problem. Strategies for solving problems will be discussed. Used as a preparation for programming contests. Prerequisite: CS 173. Offered fall semester.

CS-173 Intermediate Computer Science

A study of intermediate level computer science principles and programming techniques with an emphasis on abstract data types and software engineering. Topics include recursion, sorting, dynamic memory allocation, basic data structures, software engineering principles, and modularization. Prerequisite: CS 109, 110, or 111 or 112.

CS-181 Data Systems

This course provides a broad perspective on the access, structure, storage, and representation of data. It encompasses traditional database systems, but extends to other structured and unstructured repositories of data and their access/acquisition in a client-server model of Internet computing. Also developed are an understanding of data representations amenable to structured analysis, and the algorithms and techniques for transforming and restructuring data to allow such analysis.
Prerequisite: CS 109, 110, 111, or 112.

CS-199 Introductory Topics in Computer Science

A general category used only in the evaluation of transfer credit.

CS-200 Topics in Computer Science

Each semester, the department offers a mini-seminar devoted to a particular application or programming language. Topics have included: relational database and SQL, software engineering, Advanced C++, cryptography, and parallel programming. Prerequisite: CS 173.

CS-215 Technical Communication I

This course aims to enhance mathematics and computer science students' proficiency and comfort in orally communicating content in their disciplines. Students will present three talks during the semester on substantive, well-researched themes appropriate to their status in their major. Corequisite a 200-level mathematics or computer science course.

CS-234 Mathematical Foundations of Computer Science

The goal of this course is to provide an understanding of the mathematical techniques that underlie the discipline of computer science. In this course, students learn mathematical proof techniques, such as induction and proof by contradiction, and how to write rigorous proofs. It also serves as an introduction to the fundamentals of the theory of computation. Models of computation, namely finite automata and Turing machines, are studied with the goal of understanding what tasks computers are and are not capable of performing. Prerequisites: MATH 123 or 124 and CS 109, 110, 111, or 112.

CS-271 Data Structures

In this course, students study a variety of data organization methods, and implement and analyze the efficiency of basic algorithms that use these data structures. Course topics include lists, stacks, queues, binary search trees, heaps, priority queues, hash tables, and balanced trees. Students will also be introduced to basic functional programming in LISP. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Intermediate Computer Science (CS 173) and a grade of C or higher in Mathematical Foundations of Computer Science (CS 234). Prerequisites: CS 173 and 234.

CS-281 Introduction to Computer Systems

The Introduction to Computer Systems course provides a perspective into how computer systems execute programs, store information, and communicate. It enables students to become better problem solvers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on operating systems, networks, and parallel computing, where a deeper understanding of systems-level issues is required. Topics covered include: basic digital logic design and computer organization, machine-level code and its generation by compilers, performance evaluation and optimization, representation and computer arithmetic, and memory organization and management. Prerequisite: CS 173.

CS-299 Intermediate Topics in Computer Science

A general category used only in the evaluation of transfer credit.

CS-309 Computational Biology

Computation has gained a strong foothold in modern biology. For example, DNA and peptide sequences are now routinely analyzed using computational methods to determine both function and phylogenetic relationships. In addition, computational molecular dynamics simulations are used to study protein folding and why proteins sometimes misfold, leading to disease. And ecological simulations are used to better understand the effects of environmental damage. This interdisciplinary course will explore this broad area, examining the biology and the computational methods behind problems like these. The laboratory portion of the course will involve students working together in multidisciplinary groups to design algorithms to investigate these problems, as well as undertaking a self-designed capstone project at the end of the term. This course is classified as an applied elective. Prerequisites: CS 173 and either CS 271 or MATH 231. Students are also encouraged to take one or more courses in the Biology core (BIOL 210, 220, 230). Course is cross-listed with BIOL 309.

CS-314 Game Design

This course is about the computer science and theory of game design as well as practical game development. It covers computer science concepts such as 3D projection and transformation, rasterization, texture-mapping, shading, path-finding, and game theory, as well as game design topics such as mechanics, elements, theme, iteration, balance, documentation, and interest curves. A significant component of the course consists of prototyping computer games. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective. Prerequisites: CS 271.

CS-315 Technical Communication II

This course is a capstone experience in oral and written communication for mathematics and computer science majors. Students will research a substantive topic, write a rigorous expository article, and make a presentation to the department. Prerequisite: Math/CS 215. Corequisite: a 300-400 level mathematics or computer science course.

CS-334 Theory of Computation

This course will continue from where CS 234 left off in studying computers as mathematical abstractions in order to understand the limits of computation. In this course, students will learn about topics in computability theory and complexity theory. Topics in computability theory include Turing machines and its variations, the Universal Turing machine, undecidability of the halting problem, reductions, and proving undecidability of other problems. Topics in complexity theory include the classes P and NP, NP-completeness, and other fundamental complexity classes. This course is classified as a theory elective. Prerequisites: CS 234 and 271.

CS-335 Probability Computing and Graph Theory

This course is about the design and analysis of randomized algorithms, (i.e. algorithms that compute probabilistically). Such algorithms are often robust and fast, though there is a small probability that they return the wrong answer. Examples include Google's PageRank algorithm, load balancing in computer networks, coping with Big Data via random sampling, navigation of unknown terrains by autonomous mobile entities, and matching medical students to residencies. The analysis of such algorithms requires tools from probability theory, which will be introduced as needed. This course also covers the basics of graph theory, and several randomized algorithms on graphs. Graphs are often used to mathematically model phenomena of interest to computer scientists, including the internet, social networks graphs, and computer networks. Lastly, this course demonstrates the powerful Probabilistic Method to non-constructively prove the existence of certain prescribed graph structures, how to turn such proofs into randomized algorithms, and how to derandomize such algorithms into deterministic algorithms. This course is classified as a theory elective. Prerequisite: CS 271 or Math 232, Math 210, and one of CS 109, 110, 111, or 112.

CS-337 Operations Research

This course involves mathematical modeling of real-world problems and the development of approaches to find optimal (or nearly optimal) solutions to these problems. Topics include: Modeling, Linear Programming and the Simplex Method, the Karush-Kuhn Tucker conditions for optimality, Duality, Network Optimization, and Nonlinear Programming. This course is classified as an applied elective. Prerequisites: CS 271 and Math 231.

CS-339 Artificial Intelligence

A survey course of topics in Artificial Intelligence including search, formal systems, learning, connectionism, evolutionary computation and computability. A major emphasis is given to the philosophy of Artificial Intelligence. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective. Prerequisite: CS 271 or Math 231 or consent of instructor.

CS-345 Parallel Systems and Programming

This course examines the fundamental programming and principles involved in parallel computing systems. Issues of concurrency, synchronization, and communication involved in many such systems will be explored, from multicore desktop systems to using high-threaded general purpose graphics processors to large scale clusters involving hundreds of computing elements. Multiple programming paradigms will likewise be explored, including shared memory systems, message passing systems, and data parallel systems like those used in the processing of "big data." This course is classified as a systems elective. Prerequisite: CS 181, 271 and 281.

CS-349 Software Engineering

Students will apply their theoretic background, together with current research ideas to solve real problems. They will study principles of requirements analysis, methods of designing solutions to problems, and testing techniques, with special emphasis on documentation. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective. Prerequisites: CS 271 and 281.

CS-361 Directed Study

CS-362 Directed Study

CS-363 Independent Study

CS-364 Independent Study

CS-371 Algorithm Design and Analysis

In this course, students study in depth the design, analysis, and implementation of efficient algorithms to solve a variety of fundamental problems. The limits of tractable computation and techniques that can be used to deal with intractability are also covered. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). Prerequisites: CS 234, 271 and junior/senior status.

CS-372 Operating Systems

A study of the principles of operating systems and the conceptual view of an operating system as a collection of concurrent processes. Topics include process synchronization and scheduling, resource management, memory management and virtual memory, and file systems. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective. Prerequisites: CS 181, 271 and 281.

CS-373 Programming Languages

A systematic examination of programming language features independent of a particular language. Topics include syntax, semantics, typing, scope, parameter modes, blocking, encapsulation, translation issues, control, inheritance, language design. A variety of languages from different classes are introduced. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective. Prerequisites: CS 181, 271 and 281.

CS-374 Compilers

A study of regular and context-free languages with the purpose of developing theory to build scanners and parsers. The class will develop its own structured language and construct a working compiler. An examination of compiler construction tools. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective. Prerequisites: CS 181, 271, 281 and 334.

CS-375 Computer Networks

A study of computer network architecture and protocols. Topics include packet and circuit switching, datalink, network and transport layer protocols, reliability, routing, internetworking, and congestion control. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective. Prerequisites: CS 181, 271 and 281.

CS-377 Database Systems

A study of the design, implementation and application of database management systems. Topics include the relational data model, physical implementation issues, database design and normalization, query processing and concurrency. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as a systems elective. Prerequisites: CS 181, 271 and 281.

CS-391 Robotics

An introductory course in both hardware and software aspects of robotics. Students will learn the basics of manipulators, sensors, locomotion, and micro-controllers. Students will also construct a small mobile robot and then program the robot to perform various tasks. The department strongly recommends that students enrolling in this course have earned a grade of C or higher in Data Structures (CS 271). This course is classified as an applied elective. Prerequisites: CS 271 and 281.

CS-399 Advanced Topics in Computer Science

A general category used only in the evaluation of transfer credit.

CS-401 Advanced Topics in Computer Science

Topics may include Computer Graphics, Neutral Networks, Advanced Algorithms, Network Security or other subjects of current interest.

CS-402 Advanced Topics in Computer Science

CS-403 Advanced Topics in Computer Science

CS-451 Senior Research

CS-452 Senior Research