This list is a sampling of the kinds of courses offered through the Computer Science department curriculum. Not all courses shown here will be offered every semester. For a complete list of currently available courses, students may log into their account on Student Center.

Liberal arts introduction to the discipline of computer science and the use of computers in a variety of fields. Topics include a historical survey of technology and the use of computers, computer application, software systems design, programming with scripts, computer hardware and digital logic design, and implications of computing. Course is laboratoryoriented and includes several handson laboratory projects. Tailored for nonmajors interested in learning about the field of Computer Science. Concurrent registration with CS 107 or CS 111 is not allowed; credit cannot be received for CS 103 after credit received for CS 107 or CS 111. Prerequisite: none.

Introduction to computer science with a scientific computation language (e.g., MATLAB or Python). Emphasis is on fundamental programming constructs, algorithmic thinking and problemsolving, fundamental data structures, and recursion. Course projects include common scientific computing challenges and data visualization. Tailored for nonmajors interested in mathematics or the sciences. Concurrent registration with CS 103 or CS 111 is not allowed; credit cannot be received for CS 107 after credit received for CS 111. Prerequisite: none..

Introduction to computer science with an emphasis on fundamental programming constructs, algorithmic thinking and problemsolving, fundamental data structures, and recursion. Students implement projects using the Java programming language. This course is the usual beginning course for students planning to pursue a major or minor in computer science. Prerequisite: none.

Second course in the introductory sequence for computer science majors and students interested in the principles of programming. Special attention is given to objectoriented program design methods, algorithms, and elementary data structures. Prerequisite: Computer Science 111.

Study of the mathematics needed for an understanding of the theoretical foundations of computation. Topics include mathematical logic, set theory, mathematical induction, mathematical definitions and proofs, graph theory, and an introduction to finitestate automata. Applications and illustrative examples are drawn from computer science topics such as digital circuits, analysis and correctness of algorithms, automata, decidable problems, and efficient searching. Prerequisites: Computer Science 107/111 and Mathematics 111.

Introduction to major data structures and some of their applications. Topics include sets, queues, stacks, linked lists, string processing, trees, graphs, arrays, tables, files, and an introduction to the analysis of algorithms. Prerequisite: Computer Science 112.

Programming at the machine level, with emphasis on the logical connection of the basic components of the computer and systems programs. Topics include machine and assembly language programming, basic computer operations, data representation, hardware organization, systems software, and compilers. Prerequisite: Computer Science 112.

Study of the basic theoretical principles of the computational model. Topics include finite automata, regular expressions, contextfree grammars, Turing Machines, Church’s Thesis, P and NP classes, the halting problem, unsolvability, computational complexity, and program verification. Prerequisite: Computer Science 201.

Introduction to principles used to analyze and build a network of computers. Course covers concepts and issues relating to lowlevel communications and protocols of computer networking. Students study formal methods for integrating communication events into normal process cycles of the computer, then concentrate on a study of practices for defining and specifying a formal communications protocol. Throughout the course, students apply principles that they study to existing networks within the department. Prerequisite: Computer Science 216. Offered alternate years.

Study of fundamental concepts of operating systems. Topics include sequential processes, concurrent processes, processor management, memory management, scheduling algorithms, and computer security. Projects include writing of a program to simulate major components of an operating system. Prerequisite: Computer Science 216. Offered alternate years.

Introduction to techniques used to implement multiple processor problemsolving environments. Investigation includes several different environments for parallel computing, including SIMD (Single Instruction Multiple Data stream), MIMD (Multiple Instructions Multiple Data stream), and computing in a distributed workstation environment. Students work with actual implementations of each of these environments and explore their advantages and design algorithms appropriate for these environments. Prerequisite: Computer Science 216. Offered alternate years.

Study of fundamental concepts in the design of programming languages. Concepts include BNF grammar specification, abstract syntax trees, variables, expressions typing, scope, lexical address, procedures, data types, static/dynamic binding, and environmentpassing interpreters. Special emphasis is placed on the development of an interpreter using a functional programming language. Other languages are introduced to further illustrate these concepts. Prerequisite: Computer Science 216. Offered alternate years.

Study of fundamental concepts of database systems. Topics include physical organization of databases, indexing techniques, and query processing. Particular models studied include the EntityRelationship and Relational. Class projects stress design and implementation of a database. Prerequisite: Computer Science 216. Offered alternate years.

Study of modern techniques for creating software that behaves intelligently. Topics include uninformed and heuristic search, constraint satisfaction, stochastic optimization, gametree search, propositional reasoning, probabilistic reasoning, Bayesian networks with Markov chain Monte Carlo techniques, and robotics. Course concludes with a class robotics project. Prerequisite: Computer Science 216. Offered alternate years.

Study of methods and issues surrounding the construction of graphical images on the computer. Topics include windowing systems and user input, twodimensional graphics packages, curve drawing techniques, modeling in three dimensions, use of lighting and shading techniques, and the process of rendering images. Student work consists both of using existing packages to create images and of implementing algorithms used in graphical systems. Prerequisite: Computer Science 216. Offered alternate years.

Introduction to techniques used to translate highlevel computer languages into machine code. Course covers current implementation techniques and relevant theory. Topics include lexical scanning, parsing, abstract syntax trees, semantic analysis, intermediate code generation, and code generation. Students complete a major project involving the compilation of a particular computer language. Prerequisite: Computer Science 216. Offered alternate years.



Senior capstone course teaching a formal approach to techniques of computer project development. Integral part of course is the involvement of students, working as a team, in the development of a large project. Topics include formal requirement and specification, software testing techniques, written and spoken communication skills in technology, and user interfaces. Research option is available by permission of the instructor with a faculty research sponsor and recommendation from a previous research supervisor. Prerequisites: Computer Science 216, two 300level computer science course (other than CS 301; one may be taken concurrently), and senior status or permission of department.

Individualized tutorial not counting in the minimum requirements in a major or minor, graded S/U

Individualized research not counting in the minimum requirements in a major or minor, graded S/U. In consultation with faculty advisor students prepare course proposal that includes description of topic of study, readings list, and course schedule. Prerequisite: Computer Science 216 and permission of department.

Half credit internship, graded S/U.