Academic Affairs

Computer Science Course Descriptions

Computer Science Courses


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 will include vectors and forces, Newton's Laws, gears, motors, rotational motion, friction, and the design process. Computer science topics will 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 I (QS, NS)
Introduction to computer programming, the process of designing and constructing software. It emphasizes techniques for object oriented design and software development by means of an introduction to the features of the programming language Java, including the notion of classes, and computation due to the interaction between classes. The course also covers some of the most fundamental data structures and algorithms that are useful in Computer Science.

CSCI 151 Foundations of Computer Science II (NS)
Builds on the skills acquired in Foundations of Computer Science I, 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, and simulations. Programming assignments focus on the design and implementation of algorithms and data structures. Prerequisite: CSCI 150 and either completion of or enrollment in MATH 130.

CSCI 250 Programming Practicum (NS)
Introduction to the C++ programming language in the context of building the tools and Other computer science concepts necessary for the development of large software systems. These range from an introduction to UML and design patterns to the learning of make files and sockets. Prerequisite: CSCI 151.

CSCI 280 Algorithms & Problem Solving Paradigms (W2)
Introduction to several algorithm design strategies that build on data structures and programming techniques introduced in the first three computer science courses. These include: divide-and-conquer, dynamic programming, and greedy algorithms. Particular topics to be considered will include shortest path and other network problems; problems in computational geometry; searching, sorting and some advanced data structures such as balanced binary search trees, heaps, hash-tables, and union-find structures. In addition, an introduction to complexity theory and the complexity classes P and NP will be provided. Prerequisites: CSCI 151 and MATH 240.

CSCI 330 Computer Architecture and Organization
A study of the design concepts of major importance in modern computers. Topics will include microprogramming, language-directed computers, parallel processors, and pipeline computers. Emphasis will be placed on the relationship of architecture to programming issues. Prerequisite: CSCI 250.

CSCI 335 Artificial Intelligence
An introduction to the design, analysis, implementation, and application of classical and contemporary algorithms in artificial intelligence, with an emphasis on the development of complete, embodied intelligent agents. Topics will include symbolic planning, robot programming under both subsumption and hybrid paradigms, automated theorem proving, intelligent game-playing programs, rule-based systems, genetic algorithms, neural networks, and machine learning.

CSCI 340 Database Systems
Introduction to the theoretical and practical aspects of database management systems. Emphasis is on the relational data model. Topics covered include query languages, relational design theory, file structures, and query optimization. Students will implement a database application using Oracle or MySQL, Java Applets, and Servlets. Prerequisite: CSCI 280.

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 in which a software development project is carried through all of the stages of the software lifecycle. Topics in this course include requirements analysis, specification, design, abstraction, testing, and maintenance. Particular emphasis is placed on designing and developing maintainable software and on the use of object-oriented techniques throughout the software lifecycle. Prerequisite: CSCI 250.

CSCI 360 Survey of Programming Languages (W2)
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. Programming language paradigms including procedural, functional programming, object-oriented programming, logic programming, polymorphism, and concurrency will be covered. Prerequisite: CSCI 280.

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

CSCI 480 Parallel and Distributed Systems
An introduction to the fundamentals of parallel and distributed processing. Investigations into parallel programming issues and models: control parallel, data parallel, and data flow. Programming projects in this course will include the use of departmental cluster of computers. Prerequisite: CSCI 420.

CSCI 490 Advanced Topics in Computer Science
Faculty-student seminar. Content will vary according to the interests of the participants and instructor. Prerequisite: consent of instructor.

CSCI 497 Senior Seminar
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.