# Course Descriptions

## Courses in Computer Science

### CSCI 10000. SCIENTIFIC COMPUTING

The purpose of this course is to show some of the connections between computer science and other disciplines such as mathematics and the natural sciences. We will study the fundamental computer science concepts for the design and implementation of solutions to problems that can be solved through approximations, simulations, interpolations, and recursive formulas. Prerequisite: Departmental approval, as determined by performance on mathematics placement exam. Annually. Fall and Spring. [MNS]

### CSCI 10200. MULTIMEDIA COMPUTING

The purpose of this course is to show some of the connections between the humanities, social science and computer science. We will study the fundamental computer science concepts for the design and implementation of animations, simulations, simple computer games and three-dimensional virtual worlds. Prerequisite: Departmental approval, as determined by performance on mathematics placement exam. Annually. Fall. [MNS]

### CSCI 11000. IMPERATIVE PROBLEM SOLVING

This course emphasizes the imperative view of problem solving, supported by problem solutions implemented in the C programming language. Some topics include: top-down and procedural design; algorithm development for interesting problems such as the Sieve of Eratosthenes, a Magic Square, displaying the Mandelbrot Set; introduction to recursion; C language constructs such as variables, sequential statements, control structures, functions, parameters, pointers, arrays; and introduction to the C standard library. Prerequisite: CSCI 10000 or CSCI 10200. Annually. Fall and Spring. [MNS]

### CSCI 12000. DATA STRUCTURES AND ALGORITHMS

Building on the basic problem solving skills developed in CS 11000, this course adds tools 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 solutions for complex problems. Prerequisite: CSCI 11000. Annually. Fall and Spring. [MNS]

### CSCI 20000. ALGORITHM ANALYSIS

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. Time-space 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 12000 and MATH 21500 or 22300 or 21100. Annually. Spring.

### CSCI 21000. 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 12000. Alternate years.

### CSCI 21200. OPERATING SYSTEMS

Beginning with a brief historical perspective of the evolution of operating systems over the last fifty years, students are introduced to the important problems in operating system design and implementation. This discussion will cover the tradeoffs that can be made between performance and functionality during the design and implementation of an operating system. Particular emphasis will be given to three major OS subsystems: process management (processes, threads, CPU scheduling, synchronization, and deadlock), memory management (segmentation, paging, swapping), and file systems. Prerequisite: CSCI 12000. Alternate years

### CSCI 22000. 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 12000 and MATH 21500 or 22300. Alternate years. Fall 2013.

### CSCI 22200. PROGRAMMING LANGUAGES

Beginning with a study of the historical development of programming languages, students are introduced to the decisions involved in the design and implementation of such programming language features as elementary, structured, and user-defined data types, sub-programs, sequence control, data control and storage management. Selected features of several existing languages are examined in the context of these issues. Prerequisite: CSCI 12000. Alternate years.

### CSCI 23000. SOFTWARE ENGINEERING – MOBILE COMPUTING

Software engineering is the discipline concerned with the application of theory, knowledge, and practice to effectively and efficiently build reliable software systems that satisfy the requirements of customers and users. Students are introduced to the field of software engineering in the context of the design and implementation of software for mobile devices. Prerequisite: CSCI 12000. Alternate years.

### CSCI 23200. SOFTWARE ENGINEERING – DATABASES

Software engineering is the discipline concerned with the application of theory, knowledge, and practice to effectively and efficiently build reliable software systems that satisfy the requirements of customers and users. Students are introduced to the field of software engineering in the context of the design and implementation of database-driven software applications. Prerequisite: CSCI 12000. Alternate years.

### CSCI 27900. 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 11000. Annually.

### CSCI 30000. COMPUTER GRAPHICS

This course explores the theory and application of computer graphics through the evolution of graphics algorithms and rendering hardware. Topics include 2-D and 3-D transformations and projections, illumination models, texture mapping, animation techniques, user interfaces, and rendering algorithms. Group projects, lab assignments and in class activities expose students to the practical problems inherent in computer graphics problem solving. Prerequisite: CSCI 20000 or CSCI 23000 or CSCI 23200 and MATH 21100. Alternate years.

### CSCI 30900. 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.

### CSCI 31000. 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 20000 or CSCI 23000 or CSCI 23200. Alternate years.

### CSCI 32000. USER INTERFACE DESIGN

This course explores human computer interaction theory within the framework of user interface (GUI) design. The material includes user centered design principles, prototyping and evaluation techniques and implementation of interfaces. Human capabilities (including the human information processor model, perception, motor skills, color, attention, and errors) are discussed. Small and medium scale user interfaces are developed during the semester along with several team projects. Prerequisite: CSCI 20000 or CSCI 23000 or CSCI 23200 and MATH 21100. Alternate years.

### CSCI 33000. COMPUTER NETWORKING AND COMMUNICATION

This course provides a broad introduction to fundamental concepts in the design and implementation of computer communication networks, their protocols, and applications. Topics to be covered include: network design principles, protocol layering, naming and addressing, TCP/IP protocol, unicast and multicast routing, flow control, routing algorithms, network security. Prerequisites: CSCI 20000 or CSCI 23000 or CSCI 23200. Alternate years.

### CSCI 40000. TUTORIAL

This course is given for topics not normally covered in regular courses. Prerequisite: the approval of both the supervising faculty member and the chairperson is required prior to registration.

### CSCI 45100. SENIOR INDEPENDENT STUDY – SEMESTER ONE

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 20000.

### CSCI 45200. SENIOR INDEPENDENT STUDY – SEMESTER TWO

The second semester of the Senior Independent Study project, which culminates in the thesis and an oral examination. Prerequisite: CSCI 45100.