Computer Science Courses

Three years of high school mathematics, including two years of algebra and one year of geometry, or equivalent preparation, are necessary for all courses offered in the Department. Trigonometry/Precalculus is strongly recommended.

Advanced placement: A student who scores a 4 or higher on the Computer Science exam will receive course credit for CSCI 150 Foundations of Computer Science.

Introductory computer science
(Select a course title to view its description.)
CSCI 135 Robotics Exploration Studio (NS-L)
Introduction to mechanical design and computer programming in the context of building and programming mobile robots. Mechanical design topics include vectors and forces, Newton's Laws, gears, motors, rotational motion, friction, and the design process. Computer science topics include an introduction to programming, the programming of sensors and motors, and an introduction to artificial intelligence. Other topics include application of scientific method, teamwork skills, technical writing, and the relationship between the science fiction portrayal of robots and current technological reality. Cross-listed as PHYS 135.
CSCI 150 Foundations of Computer Science (QS, NS)
Introduction to solving computational problems, including the fundamentals of computer programming. Topics include imperative programming constructs (variables, loops, conditionals, functions, recursion), basic object-oriented constructs (classes, objects), and some fundamental algorithms and data structures (dictionaries, arrays, linked lists, basic sorting). Students learn these concepts through studying the Python programming language.
Intermediate computer science
CSCI 151 Data Structures and Object-Oriented Development (NS)
Builds on the skills acquired in CSCI 150 Foundations of Computer Science, placing special emphasis on object oriented software design and data abstraction. Students are introduced to some of the most important and frequently used data structures: lists, stacks, queues, trees, graphs, and programming techniques such as recursion. Other topics covered include analysis of algorithm complexity, program verification, multithreading, and inheritance. Programming assignments focus on the design and implementation of algorithms and data structures using the Java language. Prerequisite: CSCI 150 and either completion of or enrollment in MATH 130.
CSCI 230 Computing Systems Organization
A study of the layers of abstraction composing the design of modern computing systems. Topics include numeric representation, digital logic, the memory hierarchy, machine language and assembly language, the program stack, the system call concept, and the compilation process. Students are introduced to the C programming language. Prerequisite: CSCI 150.
CSCI 235 Intelligent Robotics
A study of the application of artificial intelligence to solving problems in robotics. Topics include subsumption, planning, machine learning, vision, neural networks, localization, and mapping. Students configure provided implementations of algorithms to control physical robots. Prerequisite: CSCI/PHYS 135 OR CSCI 150.
CSCI 250 Scalable Software Design and Development (NS)
Introduction to the computer science concepts necessary for the development of large software systems. Topics include user interface design, multithreading, network programming, parsing, grammars, testing, and an introduction to databases and software engineering. Programming assignments emphasize the integration of multiple concepts in the context of realistic software applications. Students receive experience with completing projects in teams of four of more developers. Prerequisite: CSCI 151.
CSCI 280 Algorithms and Problem-Solving Paradigms
Introduction to algorithm design strategies that build upon data structures and programming techniques introduced in the first two computer science courses. Strategies discussed include brute-force, divide-and-conquer, dynamic programming, problem reduction, and greedy algorithms. Particular topics to be covered include graph traversal and shortest paths, string matching, searching, sorting, and advanced data structures such as balanced search trees, heaps, hash tables, state machines and union-find structures. In addition, the course includes an introduction to complexity theory and the complexity classes P and NP. Prerequisites: CSCI 151 and MATH 240.
Advanced computer science
CSCI 330 Computer Architecture
A study of the design concepts of major importance in modern computers. Topics include microprogramming, language-directed computers, parallel processors, and pipeline computers. Emphasis is placed on the relationship of architecture to programming issues. Prerequisite: CSCI 230.
CSCI 335 Artificial Intelligence
An introduction to the design, analysis, implementation, and application of classical and contemporary algorithms in artificial intelligence. Topics include intelligent robot behavior, theorem-proving systems, heuristic search, alpha-beta search, metaheuristic optimization, neural networks, and machine learning. Prerequisite: CSCI 151.

CSCI 340 Database and Web Systems
A study of designing and using a database management system (DBMS) and of developing Web applications. Topics include HTML, CSS, the JavaScript language, relational database theory, techniques for supporting ACID properties, and frontiers in database research. As part of a large team, students design and develop a system with a Web front end that interacts with a DBMS using SQL. Prerequisite: CSCI 151.
CSCI 350 Software Engineering (W2)
In this course, students learn and gain practical experience with software engineering principles and techniques. The practical experience centers on a semester-long team project which is carried through all of the stages of the software lifecycle. Topics include requirements analysis, specification, design, and verification. Emphasis is placed on writing precise requirements, employing formal and semiformal methods to assist in design and verification of software, and using incremental software development. Prerequisite: CSCI 250.
CSCI 360 Survey of Programming Languages
Concepts and structures governing the design and implementation of modern programming languages. Introduction to concepts of compilers and run-time representations of programming languages. Features of programming languages supporting abstraction. Languages studied include examples of the procedural, functional, and object-oriented paradigms. Prerequisite: CSCI 230.
CSCI 380 Theory of Computation
Covers basic topics in automata, computability, and complexity theory, including: models of computation (finite automata, Turing machines and RAMs); regular sets and expressions; recursive, r.e., and non-r.e. sets and their basic closure properties; complexity classes; determinism vs. non-determinism, with and without resource bounds; reductions and completeness; practice with NP- and P-completeness proofs; and the complexity of optimization and approximation problems. Prerequisite: MATH 240.
CSCI 385 Scientific Computing
Students study problems arising from the physical, biological, and/or social sciences and the algorithms and theory used to solve them computationally. Included among the problems are numerical methods for maximizing a function and solving a differential equation. Prerequisite: MATH 130 and CSCI 150.
CSCI 397 Cross-Disciplinary Project [SP]
In this course intended for computer science minors, the student completes a semester-long project investigating the relationship of the student's major with computing. Typically, this involves developing software to solve a computational problem in the major discipline. This course must be taken as an independent study, supervised by a computer science faculty member in consultation with a faculty member in the student's major discipline. Prerequisite: CSCI 151.
CSCI 410 Technical Communication and Analysis (W2)
Focuses on written and oral communication concerning computing, with a secondary emphasis on quantitative performance analysis and reading and research skills. Among the written assignments are design documents and user documentation; a research paper and presentation are the culminating assignments. Fundamental communication skills receive special attention. Prerequisite: Senior standing.
CSCI 420 Operating Systems and Concurrent Computing
Basic principles of modern operating systems design: emphasis on concurrency including problems (nondeterminism), goals (synchronization, exclusion) and methods (semaphores, monitors); resource management including memory management and processor scheduling; file systems; interrupt processing; multithreaded programming. Prerequisite: CSCI 230.
CSCI 490 Advanced Topics in Computer Science
Faculty-student seminar. Content varies according to the interests of the participants and instructor. Prerequisite: consent of instructor.
CSCI 497 Senior Seminar [UR]
A required seminar for all senior computer science majors which meets throughout the academic year. Each student will develop an individual research project under the direction of a faculty member and present the results both orally and in written form. Students also majoring in mathematics should enroll in CSCI 497 for one semester and MATH 497 in the other.