The Department of Mathematics and Computer Science reserves the right to deny enrollment to students taking courses out of sequence as determined by prerequisites.

**151 Information Technology (1) **

Intended for the liberal arts student who wants to understand and better use information technology. Topics include how computers work, the Internet and World Wide Web, new trends in computing such as mobile computing and peer-to-peer networks, how software development differs from traditional manufacturing, how computing is changing our culture and laws, current trends in computer crime, security, and privacy. Additional topics are drawn from current events and issues. Laboratory. Does not count toward the computer science major or minor. *Connamacher.*

**171 Introduction to Computer Science I (1) **

Prerequisite: Mathematics 125 (or equivalent) or permission of instructor.

Designed to be the first computer science course taken by students in mathematics and science, as well as those wishing to major in computer science. Topics include fundamentals of computation and algorithmic problem-solving, data types, control structures, the object-oriented programming paradigm and applications. Introduces a high-level programming language such as Java or Python. *Connamacher, Reimann. *

**172 Accelerated Introduction to Computer Programming (1)**Prerequisite: Permission of instructor. Intended for students receiving AP or transfer credit for CS 171. It is recommended that such students take this course prior to enrolling in additional computer science courses.

An overview of programming in the same high-level language used in CS 171.

**173 Introduction to Computer Science II (1) **

Prerequisite: Computer Science 171.

A continuation of Computer Science 171. Emphasizes advanced object-oriented programming (interfaces, multiple inheritance, reflections), abstract data types (stacks, queues, lists, strings, trees, graphics, etc.) and analysis of algorithms. Other topics include recursion, searching and sorting, simulation and an introduction to some of the advanced areas of computer science, e.g., computer organization, artificial intelligence and user interfaces. Students refine their programming skills in a high-level programming language such as Java or Python. *Connamacher, Reimann. *

**256** **Practicum in Programming Languages** **(1/4)**

Prerequisite: Computer Science 171 or permission of instructor.

Designed to teach an additional computer language beyond those currently used in the computer science courses. Emphasizes writing and debugging programs that use the special features of the language. FORTRAN and C are the languages that have been taught most recently. Special sections of this course have been offered that are devoted to developing problem-solving skills in computer programming. *Staff.*

**261 Computers, the User and Society (1) **

Prerequisite: Computer Science 171.

An examination of how computers are used and how computers fit into society. Topics include user interface design, human-centered software development and evaluation, software reliability, social context of computers, professional and ethical responsibilities for technology professionals, intellectual property rights, privacy and civil liberties, computer crime. Offered every third year. *Connamacher, Reimann. *

**263 Operating Systems and Networks (1) **

Prerequisite: Computer Science 173.

The role of operating systems, concurrency and deadlock avoidance, memory management, client-server models, device management, networking, LANs and WANs, TCP/IP, network architectures, security, trends in networks such as wireless networks and the Internet. Offered every third year. *Reimann. *

**265 Database Programming (1) **

Prerequisites: Computer Science 173 and Mathematics 239.

Fundamental concepts of database management systems: the relational data model, relational algebra, and normal forms, file organization and index structures, and the query language SQL and embedded SQL. Offered every third year. *Connamacher, Reimann.*

**271 Artificial Intelligence (1) **

Prerequisites: Mathematics 239 and Computer Science 173.

Basic techniques of artificial intelligence including knowledge representation and reasoning, problem-solving and planning, game playing, and learning. Covers AI programming and languages. Offered every third year. *Connamacher.*

**273 Computer Graphics and Image Processing (1) **

Prerequisites: Computer Science 173 and Mathematics 236 or 247.

A unified introduction to image synthesis and image analysis aimed at students with an interest in computer graphics, computer vision or the visual arts. Covers the basics of image generation, image manipulation and digital special effects. Includes a significant programming project using the OpenGL programming interface. Offered every third year. *Connamacher, Reimann. *

**275 Software Development (1) **

Prerequisite: Computer Science 173.

An introduction to the techniques of developing large software projects including unit testing, version control and build management. Covers the popular industrial languages C and C++ and includes a large-group programming project. Offered every third year. *Connamacher, Reimann.*

**299 Colloquium in Mathematics and Computer Science (1/4) **

Prerequisite: Mathematics 143 or Computer Science 173.

Selected topics in mathematics and computer science as presented by students, departmental faculty and visiting speakers. Requirements include written summaries of each presentation and a paper on a mathematics/computer science topic of personal interest. Same as Mathematics 299. *Staff. *

**316 Numerical Analysis (1) **

Prerequisites: Mathematics 236 or 247, and Computer Science 171.

Methods of obtaining numerical solutions to mathematical problems. Stresses the implementation and error analysis of algorithms. Topics include solution of non-linear equations, systems of equations, interpolating polynomials, numerical integration and differentiation, numerical solutions to ordinary differential equations, and curve fitting. Offered in alternate years. Same as Mathematics 316. *Mason. *

**326 Operations Research (1) **

Prerequisites: Mathematics 236 or 247, and Mathematics 245.

An introduction to computational methods in mathematical modeling including linear programming and Markov chains. Applications in business, economics and systems engineering. Knowledge of probability will be helpful. Offered in alternate years. Same as Mathematics 326. *Mason. *

**352 Algorithms (1) **

Prerequisites: Mathematics 239 and Computer Science 171.

Focuses on the design and efficiency of algorithms. Covers the basic algorithm paradigms including graph traversals, greedy algorithms, divide and conquer, dynamic programming and flow algorithms. Introduces complexity theory, NP-completeness and polynomial-time reductions. Additional topics may include approximation algorithms, randomized algorithms and linear programming. Offered in alternate years. *Connamacher. *

**354 Computer Organization (1) **

Prerequisite: Computer Science 173.

Organization of digital computers: digital logic, arithmetic, assembly language, data paths, memory, input-output, secondary storage devices, multiprocessors and computer performance. Programming tools and techniques are also discussed with emphasis on their application in assembly language. Offered in alternate years. *Reimann. *

**356 Programming Languages (1) **

Prerequisite: Computer Science 173.

A survey of the structure of programming languages and programming as an abstract concept. Topics include syntax and semantics, scope rules, environments, types, procedures, parameters, overloading, parametric polymorphism and inheritance. Projects include programming in the functional paradigm using the Scheme programming language and development of a language interpreter. Offered in alternate years. *Connamacher. *

**358 Foundations of Computing (1) **

Prerequisites: Mathematics 239 and Computer Science 171.

The theoretical underpinnings of computer science: models of computation including automata, Turing machines, circuits, the Chomsky language hierarchy, Churchâ€™s thesis, computable and noncomputable functions, recursive and recursively enumerable sets, reducibility and introduction to complexity theory. *Connamacher. *

**360 Mathematical Modeling (1) **

Prerequisites: Mathematics 247 and Computer Science 171.

An introduction to analytical methods in mathematical modeling including nonlinear optimization, dynamical systems and random processes. Applications in physics, biology, economics and systems engineering. Knowledge of probability and statistics will be helpful. Same as Mathematics 360. *Mason. *

**388, 389** **Selected Topics** **(1/2, 1)**

Prerequisite: Permission of instructor.

Topics in computer science such as recursive function theory, computational complexity, formal languages, automata and algorithms. *Staff.*

**391, 392** **Internship** **(1/2, 1)**

Offered on a credit/no credit basis. *Staff.*

**399 Colloquium in Mathematics and Computer Science (1/4) **

Prerequisites: Mathematics 299 and senior standing.

Selected topics in mathematics and computer science as presented by students, departmental faculty and visiting speakers. Requirements include written summaries of each presentation, a departmental major assessment examination, and an oral presentation on a mathematics/computer science topic of personal interest. Offered only on a credit/no credit basis. Same as Mathematics 399. *Staff.*

**411, 412** **Directed Study** **(1/2, 1)**

Staff.