**COMP 121 - Computing in the Arts and Sciences****4 credits****Herzog, John**

**Prerequisite: Math Placement Level 22 or higher**

This introductory course is intended for non-majors, and assumes little computer experience beyond using word processing software. COMP 121 is designed to help students become familiar with microcomputers and their use in problem-solving and their impact on society. Students will create spreadsheets, databases, and will also learn a subset of an object-oriented programming language.

The course meets for four hours each week, and includes extensive time for hands-on practice. The final grade will be based on labs, homework, and exams. Mathematical-reasoning intensive.

**COMP 150 - Computer Programming I****5 credits****Shelburne, Brian**

**Prerequisite: Math Placement Level 22 or higher **

Introduction to computer science through the use of programming in the Python language. Designed primarily for the student who expects to take further courses in computer science. Also very valuable for any student who expects to do programming that is related to another discipline (e.g., in the sciences). This course is required for the Computer Science major and minor, the Mathematics major and minor, and the Computational Science minor. It is also recommended or required by certain science programs. The course stresses the development of algorithms and data abstraction to solve problems. It begins with basic algorithm design, progresses through imperative programming and finishes with most of the features of object-oriented programming. Students write 10-15 programs. The class has three 60-minute lecture/demonstrations plus a 90-minute lab per week. Much of the work for the course is done outside of class using the laboratory computers to write, debug and run programs.

The course grade is based on programming assignments, lab exercises, in‑class tests, and a final. Mathematical-reasoning intensive.

**COMP 151 - Lab for Computer Programming I****0 credits****Shelburne, Brian**

Students in COMP 150 are required to sign up for one section of COMP 151. Graded on S/NC basis. Every year.

**COMP 250 - Computer Programming II****5 credits****Jackson, Brian**

**Prerequisite: COMP 150**

This course is an intensive study of program design, abstract data types and object-oriented programming in Java using data structures common in computer science. The course begins with the concept of abstract data types and how they may be implemented using object-oriented mechanisms. We then examine common data structures such as linked lists, stacks, queues, priority queues, trees and graphs, along with operations appropriate to each structure (e.g., insertions and deletions, backtracking, tree traversals). Applications are drawn from the fields of operating systems, compilers, and simulations, among others. Students will be expected to design and implement moderately sized programming projects on their own, but there may be an opportunity for some small group projects.

The course will meet three times a week for lecture, and once each week for a structured lab. Students are expected to do significant work outside of class. Course grades will be based on programming assignments and in-class tests. Great emphasis will be placed on good programming style. Writing intensive. Mathematical-reasoning intensive.

**COMP 265 - Principles of Programming Languages****4 credits****Jackson, Brian**

**Prerequisites: COMP 250**

This course emphasizes the principles and programming paradigms (functional, logical, object-oriented, event-driven, high-performance) that govern the design and implementation of contemporary programming languages. Topics include language syntax and translation, data types and operations, sequence control, data control, subprograms, and environments. Languages to be studied include those taken from the following: Ada, APL, C, C++, Chapel, FORTRAN, Java, Modula 2, Pascal, Prolog, Scheme and Smalltalk. Grades are based upon assignments, reports, presentations, and exams. Mathematical-reasoning intensive.

**COMP 285 - Theory of Computation****4 credits****Shelburne, Brian J. **

**Prerequisites: Mathematics 171 and Computer Science 250.**

This course deals with the problem of what it means to "compute". We will look at languages (regular, context-free, recursive, recursively enumerable), grammars (regular, context free, context sensitive, unrestricted), automata (finite state, push-down, Turing machines) and the relations between the three. Theory of Computation is the oldest "area" in computer science (many results were established before the first stored program computers become operational) and provides the theoretical underpinning for the discipline. It has many applications to other areas of computer science like programming techniques, programming languages, compiler design, algorithms, and defining computational complexity (i.e. defining what a "hard" problem is). Course grade will be based on homework assignments (daily and graded), two programming projects, three in-class tests, and a comprehensive final exam. Mathematical-reasoning intensive

**COMP 320 - Numerical Analysis****(4 credits)****Sancier-Barbosa, Flavia**

**Prerequisites: MATH 202, MATH 205, and COMP 150**

An introduction to the numerical solution of mathematical problems. Primary emphasis is upon the development and use of computational algorithms to obtain accurate numerical solutions, and on methods for establishing error bounds for these solutions. Algorithms will be implemented on computers and/or programmable scientific calculators. This course should be of special interest to students in the Applied Mathematics track and to other students in the physical sciences.

Grades will be based on assignments, quizzes, and exams. This course is cross-listed as COMP 320. Students may enroll in either MATH 320 or COMP 320, but not both. Mathematical-reasoning intensive.

**COMP 460 – Senior Seminar: Topic – Software Engineering****(2 Credits)****Jackson, Brian**

This course will address the area of software engineering through the presentation, discussion and use of recognized software engineering principles. The primary emphasis is on the design, development, and documentation of a group project, but outside readings, presentations, and discussions may be required. This course is required of a senior majoring in computer science. The grade is based upon a combination of independent and group activities. WRITING INTENSIVE. Mathematical-reasoning intensive.