# Courses

### CSCI-151 Introduction to Programming

An introductory course in computer science for non-majors. The course teaches computer programming with emphasis on logical thinking, problem solving, and algorithmic development. PROCESSING or a similar programming language is used. Topics include variables, arithmetic and logical operators, graphics, user interface, built-in library calls, I/O operations, conditional statements, loops, functions, and classes.

### CSCI-181 Principles of Computer Science

An introductory course in computer science for majors. Also open to non-majors. Emphasizes computer problem-solving methods and algorithmic development. Topics include programming in C++ or comparable language, techniques of good programming style, data types, file and screen input and output, control structures, subroutines, recursion, arrays, and pointers.

### CSCI-200 Multi-Agent Modeling in the Sciences

This course will explore some of what computer science has to offer to the natural and social sciences. Many phenomena consist of interacting individuals that can be modeled as following a set of behavioral rules. Using a suitable computer language such as NetLogo, Repast or others, we will learn to model these phenomena. Some programming experience is helpful but not required. Prerequisites: Fulfillment of the Analytic Thought requirement, sophomore standing and completion of either the Social Interactions requirement or the Scientific Explanations requirement. Some programming experience would be helpful but is not required.

### CSCI-235 Artificial Life

Science and mathematics describe natural phenomena so well that lines between real- world events and the corresponding theoretical world events have become blurred. Can computer models simulate key characteristics of life, such as behavior, motivation, reproduction, adaptation, perception and even intelligence? Proponents of strong artificial life believe that computers will eventually serve not only to model life processes but will actually think and be alive. These contentions are compared and contrasted with an emphasis on the current status and future implications of strong artificial life. This course is meant to be accessible to both majors and nonmajors. Same as MATH:235. Prerequisites: Sophomore standing and, to facilitate an elevated level of class discourse, completion of at least two of the following Central Curriculum requirements: Analytical Thought, Scientific Explanations, or Ethics.

### CSCI-281 Data Structures

Second course in computer programming. Stresses the interplay between algorithms, data structures and their implementations. Topics include stacks, queues, linked lists, sorting, searching, binary trees and graphs. Prerequisite: CSCI-181 Principles of Computer Science.

### CSCI-282 Computer Organization

Fundamentals of computer organization and machine architecture. Presents an overview of computer system organization and examines in detail the digital logic level, the register level, and the operating system program interface. Uses the assembly language of an available machine for programming assignments. Prerequisite: CSCI-281 Data Structures or instructor's permission.

### CSCI-351 Numerical Computing

An introduction to the computational techniques for solving mathematical problems. Topics include roots of non-linear equations, interpolation, numerical differentiation and integration, and numerical solutions of differential equations. Same as MATH-351. Prerequisite: MATH-111 Calculus I; MATH-112 Calculus II is suggested.

### CSCI-352 Numerical Analysis

A theoretical study of the standard numerical techniques for solving mathematical problems. Topics include roots of non-linear equations, polynomial interpolation, solving systems of equations, numerical integration and numerical solutions of differential equations. Same as MATH-352. Prerequisites: CSCI-351 Numerical Computing, MATH-112 Calculus II, and MATH-201 Linear Algebra.

### CSCI-355 Operations Research

Mathematical models and optimization techniques useful in decision making. Includes linear programming, game theory, integer programming, queuing theory, inventory theory, networks and reliability. Further topics, such as non-linear programming and Markov chains, as time permits. Same as MATH-355. Prerequisites: MATH-112 Calculus II, MATH-201 Linear Algebra, MATH-221 Discrete Structures, and either MATH-108 Introduction to Statisticsor MATH-180 Statistical Methods or instructor's permission.

### CSCI-370 Cryptology & Number Theory

Cryptology is the study of hiding the meaning of messages. Cryptology is an interesting venue for the study of its mathematical underpinnings (number theory, matrix algebra, probability and statistics) and as an opportunity to implement techniques by means of computer programs. We will consider monoalphabetic and polyalphabetic encryptions, public key cryptography, security, and anonymity. Same as MATH-370. Prerequisite: MATH-221 Discrete Structures.

### CSCI-381 Algorithms

Introduces the design and implementation of algorithms using an object-oriented programming language such as C++ or Java. Covers correctness and efficiency of algorithms for sorting, searching, graph problems and mathematical algorithms. Prerequisites: MATH-221 Discrete Structures and CSCI-281 Data Structures.

### CSCI-391 Data Communications & Networks I

An overview of data communications and networks, including channel capacity, Ethernet, Internet protocols, DHCP, DNS, TCP, FTP, SMTP, HTTP, Web servers, and file sharing. Prerequisite: CSCI-181 Principles of Computer Science.

### CSCI-392 Data Communication & Networks II

Further topics in networks, with an emphasis on security. Includes authentication, encryption, verification, certificates, digital signatures, attacks and defenses, privacy, and anonymity. Also covers current developments in networks. Prerequisite: CSCI-391 Data Communications and Networks I.

### CSCI-460 Windows Programming

Programming in an event-driven environment such as the Microsoft Windows operating system. Creation and management of windows, dialog boxes, mouse and keyboard input, message queues, and multithreading. Prerequisite: CSCI-381 Algorithms.

### CSCI-471 Software Engineer: Methodology

The entire software development cycle is explored, from requirements gathering through analysis, design, implementation, testing, and documentation procedures. This course discusses both the theory and the business-world reality of software development, with an emphasis on object-oriented methodologies. Prerequisite: CSCI-381 Algorithms or instructor's permission.

### CSCI-472 Software Engineering: Practicum

This course is designed to provide an experience similar to that of working in the software engineering industry. The methodologies discussed in CSCI-471 Software Engineering: Methodology are put into practice, as students work on project teams throughout one or more software development cycles. Current projects involve designing and developing software to guide a mobile robot. Prerequisites: Junior standing and CSCI-471 Software Engineering:Methodology.

### CSCI-481 Programming Languages

Studies the principles underlying various computer languages. Uses comparisons and evaluations of C,FORTRAN, ALGOL, Pascal, LISP, Smalltalk, PERL, PHP, and Prolog to introduce the broad principles of language design and implementation. Prerequisite: CSCI-281 Data Structures.

### CSCI-482 Theory of Computation

An introduction to the classical and contemporary theory of computation. Topics include the theory of automata and formal languages, computability by Turing machines and recursive functions, computational complexity and possibly quantum computers. Same as MATH-482. Prerequisites: MATH-221 Discrete Structures and CSCI-281 Data Structures.

### CSCI-483 Compiler Theory

Studies the phases of compiler design, such as syntax specification, lexical analysis, parsing, symbol tables, error detection, code optimization and code generation. Term project is to write a complete compiler for a small subset of C. Prerequisites: CSCI-282 Computer Organization and MATH-221 Discrete Structures.

### CSCI-484 Computer Graphics

Basic interactive graphics programming in 2D and 3D using a common graphics library such as OpenGL. Introduces fundamental hardware and software concepts to implement graphics. Covers topics of drawing points, curves, surfaces, lighting, shading, animation, geometrical transformation, representation of 3-D shapes, and removal of hidden edges and surfaces as time permits. Prerequisite: CSCI-281 Data Structures and MATH-201 Linear Algebra or instructor's permission.

### CSCI-485 Artificial Intelligence

A brief summary of the tools, techniques and applications of artificial intelligence. Introduces problem solving and knowledge representation and selects topics from techniques for constructing models, robot design, language processing, computer vision, neural networks and expert systems. Same as INFS-485. Prerequisites: CSCI-281 Data Structures, MATH-111 Calculus I, and either MATH-108 Introduction to Statistics or MATH-180 Statistical Methods.

### CSCI-486 Introduction to Operating Systems

Introduction to the principles of operating systems through detailed discussion of a popular operating system such as UNIX with special attention to the areas of user interface, process management and file systems. Prerequisite: CSCI-281 Data Structures.

### CSCI-487 Operating Systems

A study of general operating systems principles, processes, file systems, memory management, interprocess communication, I/O and concurrent processes. Includes a programming project in which the student writes a part of an operating system. Prerequisite: CSCI-486 Introduction to Operating Systems.

### CSCI-488 Computer Architecture

A study of computer architecture, including logic circuits, CPU design, instruction sets, CISC, RISC, memory architecture, I/O, peripherals, pipelining, superscalar processors, and multiprocessors. Includes hardware and software considerations. Prerequisite: CSCI-282 Computer Organization.

### CSCI-500 Senior Colloquium

Experience in individual research and presentation of computer related topics. Prerequisites: senior standing and computer science department head's permission.

### CSCI-501 Topics in Computer Science

Subjects vary, depending on instructor and student interest. Example topics include software engineering, cryptography, parallel processing, digital video compression, object-oriented technologies, neural networks, and others as approved. Prerequisite: Instructor's permission.

### CSCI-502 Independent Study

Individual work for capable students under the supervision of a faculty member. Prerequisite: Instructor consent and approval of computer science department head. Regularly scheduled courses are approved for independent study only under extraordinary circumstances.

### CSCI-503 Independent Research

A research project culminating in a substantive paper on a selected topic or field in computer science or information systems by arrangement with an instructor. Prerequisite: junior or senior standing and pdepartment head's permission.

### CSCI-599 Internship

Full-time employment in computer science or information systems at an industrial firm or a public service organization. Prerequisites: Senior standing, appropriate background courses in computer science and department internship coordinator's permission. S/U grade.