Computer Science

CMS 167 Problem Solving I: with Java
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 principles provided in classroom activities and closed laboratory experiences.
Corequisite: CMS 167L

CMS 167L Problem Solving I with 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: Java & Lab
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 and 167L.

CMS 270 Object-Oriented Design & 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 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 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 484 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 495I Topics: Security
Surveys the technical and practical issues of security in computer systems. Topics include operating system security models, access controls, network security, cryptography, and approaches for writing secure code. The course will also include discussion of common exploits used by hackers, including buffer overflows, SQL injection, and viruses.
Prerequisite: CMS 270.