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 careers in the computer industry. 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.
Thirteen (13) courses are required, all nine (9) core courses and four (4) electives, including at least one from each of group 1 and group 2. A first-year student majoring in computer science will typically take CMS 167/167L and one of MAT 111, MAT 109, MAT 110, or MAT 108 in the fall, and CMS 170 and MAT 140 in the spring.
GROUP 1: At least one is required.
GROUP 2: At least one is required. A student who is considering graduate studies should take CMS 460.
For students considering graduate school in computer science, a minor in Mathematics is recommended.
Seven (7) courses are required: the following five (5) courses and two (2) additional courses chosen from the requirements for the major.
CMS 167 Problem Solving I with Selected Topics: Introduction to fundamental aspects of programming using high-level language, focusing on problem solving, software design concepts, and their realization as computer programs. Topics include: variables, using existing classes, selection and iteration, and arrays. Classroom activities are used to gain mastery of these principles. Corequisite: CMS 167L.
CMS 167L Problem Solving I Lab: Develops proficiency in using the programming principles introduced in CMS 167 and experience in incorporating those principles into working computer programs.
CMS 170 Problem Solving II with Selected Topics: 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.
CMS 270 Object-Oriented Design and Development: 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 340 Mobile App Development: Covers the development of mobile apps using an emulation system. Topics covered include application architectures, user interface design, graphics, location services, data persistence, web and network services and sensors. Prerequisites: CMS 270.
CMS 375 Database Design and Development: Introduces design and implementation of database systems. Using a relational database as a backdrop, this course addresses design issues, structured query language (SQL), data integrity, normalization, transaction processing, writing triggers and stored procedures, and developing applications using a custom database language and with Java and JDBC. This course also explores NoSQL data models. Students will need access to a PC or Mac on which to load the database software that will be used in the course. Note: System requirements may vary from year to year. Prerequisite: CMS 270.
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. Prerequisite: 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 Advanced Systems: Further topics in computer systems, including computer architecture, virtual memory, storage, and distributed systems. Substantial programming projects in the C language are required. Prerequisite: CMS 330.
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 460 Algorithm Analysis: Detailed study of algorithm design and analysis, including greedy algorithms, divide and conquer, dynamic programming, backtracking, and brance and bound. Emphasis on verification and analysis of time space complexity. NP theory is introduced. Prerequisites: CMS 270 and MAT 140.
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 495 Topics in Computer Science: An intensive exploration of a specialized area of computer science.
CMS 499 Independent Study: Covers selected topics in computer science. May be repeated for credit.