The Department of Mathematics and Computer Science offers a computer science major that develops students' ability to design and implement computer programs to solve many types of problems. Based on curricula developed by the Association for Computing Machinery (ACM), the major prepares students for graduate study and for many interesting computer-related endeavors. The computer science minor complements any major for which computer applications are important. The minor also gives students excellent preparation for many computer-related occupations.
Fourteen (14) courses are required. A first-year student majoring in computer science will typically take CMS 167/167L and MAT 111 in the fall, and CMS 170 and MAT 140 in the spring. Students who are not prepared to start with calculus should start with MAT 109 instead of MAT 111.
Two (2) of the following are required; one (1) of these must be a 400-level course.
In addition, MAT 112 Calculus II is strongly recommended for students considering graduate education in Computer Science.
Nine (9) courses are required: the following five (5) courses and four (4) additional classes chosen from the requirements for the major.
CMS 151 Fundamentals of Programming: Introduces the central themes of computing with an emphasis on creating machines that solve problems. Focuses on problem-solving techniques coupled with programming robots. Includes use of both a graphical software development system and the writing of simple programs using the Java language. No prior programming skills required. Does not count toward requirements for major or minor.
CMS 167 Introduction to Computer Programming: Introduction to fundamental aspects of programming, focusing on problem solving, software design concepts, and their realization as computer programs. Topics include: variables, procedural abstraction, control structures, iteration, representation of numbers, and data types. Introduction to high-level programming language to gain mastery of these classroom activities in conjunction with the closed laboratory experiences in CMS 167L.
CMS 167L Introduction to Computer Programming Lab: Develops proviciency in using the programming principles introduced in CMS 167 and experience in incorporating those principles into working computer programs.
CMS 170 Computer Science Principles I: Develops discipline in program design, problem solving, debugging, and testing, with an introduction to data structures. Topics include: abstract data types, complexity analysis, and recursion. Basic data structures (queues, stacks, trees, and graphs) and transformations (sorting and searching) are introduced as representative of the fundamental tools that are used to aid in software development. A high-level programming language is used to construct programs of a moderate size. Prerequisite: CMS 167/167L.
CMS 230 Introduction to Computer Systems: Introduction to the study of how software controls the critical hardware components of a computer's architecture, the CPU and RAM. Topics include development of C language programs, comparison of high-order procedural languages to machine language programs, CPU organization and functionality at the register/bus level, instruction formats, and development of machine language and assembly level programs using multiple addressing modes, flow-of-control branching and subroutine calls. Prerequisites: CMS 170 and MAT 140.
CMS 270 Computer Science Principles II: Object-oriented programming, event-driven programming, UML, unit testing, virtual machines, design patterns, exception handling, and user interfaces. Uses Java and assumes knowledge of a procedural or object-oriented language. Prerequisite: CMS 170.
CMS 330: System Software Principles: Short history of programming languages and their construction. Techniques of language translation including lexical analysis, grammars, and parsers. Analysis of the structure and functionality of modern operating system software, with emphasis on concurrent processes. Topics include: process scheduling, communication, and synchronization; API services; and, design and development of concurrent program using OS features. Prerequisite: CMS 230.
CMS 360 Algorithm Analysis: Detailed study of algorithm design and analysis, including greedy algorithm, divide and conquer, dynamic programming, backtracking, and branch and bound. Emphasis on verification and analysis of time space complexity. NP theory is introduced. Prerequisites: CMS 270 and MAT 140.
CMS 375 Database Design: Introduction to design and management of database systems. The course project involves design and implementation of a relational database. Topics include file organization, relational models and their implementations, query language theory, and data normalization. Prerequisites: CMS 330 and MAT 140.
CMS 380 Simulation Analysis and Design: Explores the use of probability theory and statistical methods in the development of computer simulations used to study/model real-world phenomenon. Prerequisites: MAT 111 and CMS 270.
CMS 395 Special Topics: An intensive introduction to a specialized area of computer science. Example topics are: user interface design, parallel and distributed processing, multimedia development, theory of computation, network programming, modeling and simulation, and software development tools. Prerequisites: CMS 270 and consent.
CMS 430 Artificial Intelligence: Selective survey of key concepts and applications of artificial intelligence and an in-depth experience with a language commonly used for building AI systems (e.g., LISP or Prolog). Subtopics include knowledge representation, state space/searching, heuristic search, expert systems, expert system shells, natural language processing, propositional logic, learning and cognitive models, and vision. Prerequisite: MAT 310.
CMS 440 Computer Graphics: Survey of computer graphic hardware, primitive graphic operations and implementations, two-dimensional and three-dimensional transformations, hidden lines and surface removal, illumination and shading models, curves and surface, color modeling, and animation. Prerequisite: CMS 270 and MAT 111.
CMS 450 Networks: Study of the technology, architecture, and software used by systems of network-connected computers. Topics include data transmission, local area network architectures, network protocols, inter-networking, distributed systems, security, and network applications such as email, WWW, and FTP. Students will develop programs that run concurrently on multiple computers. Prerequisite: CMS 330.
CMS 480 Programming Language Translation: An in-depth study of the principles and design aspects of programming language translation. The major components of a compiler are discussed: lexical analysis, syntactic analysis, type checking, code generation, and optimization. Alternate parsing strategies are presented and compared with respect to space and time tradeoffs. A course project consists of the design and construction of a small compiler. Prerequisites: CMS 270 and CMS 330.
CMS 484 Senior Computer Science Capstone: The Senior Capstone course provides a culminating and integrative educational experience. While participating on a team with other students, students will design and implement a large-scale software project. Class meetings will be used for teams to demonstrate the progress of their project as well as for the teams to meet and work. Team meetings outside of class will be required. Prerequisite: one 400-level CMS course.
CMS 499 Independent Study: Covers selected topics in computer science. May be repeated for credit.