Computer Science Courses

Computer Science Course Descriptions


CS 10000. An Introducation To Computer Science
(Class 1, Cr. 1)
Prerequisite: none.
This course is intended to: integrate freshman computer science majors into the department; help them adjust to university life; assist them in developing their academic and intellectual capabilities; introduce them to contemporary issues in computer science; provide an overview of the careers open to those with degrees in computer science. This course must be taken Pass/No Pass only. Credit by exam is not available for this course.


CS 12300. Programming I: Java
(Class 3, Cr. 3)
Co-requisite: MA 15100 or MA 16300, or equivalent.
This course is an introduction to computer science and computer programming. The primary language for this course is Java. The topics of the course include: identifiers, basic data types, operators, expressions, control statements, methods, recursion, program structure, arrays, objects, classes, inheritance, polymorphism, and the design of simple graphical user interfaces.


CS 12400. Programming II: C++
(Class 3, Cr. 3)
Prerequisite: CS 12300 with C or better, or equivalent.
This course is an extension of CS 12300 that introduces the C++ programming language. The topics of the course include: functions, program structure, pointers, objects, classes and inheritance in C++, files, standard template library, streams and the preprocessor.


CS 20600. Computer Algebra and Programming
(Class 3, Cr. 3)
Prerequisite: MA 16400 with C or better.
Using a computer algebra system to solve mathematics problems, learning how to translate mathematical notation and procedures into the language of the computer algebra system. Learning the basic concepts of programming languages, comparing programming concepts with mathematical concepts.


CS 22300. Computer Architecture and Assembly Language
(Class 3, Cr. 3)
Prerequisite: CS 12400 with C or better, or equivalent.
An introduction to the fundamental concepts of computer architecture progressing from the digital logic level to the microarchitecture level and then to the instruction set level. Assembly language and the assembly process will also be included.


CS 27500. Data Structures
(Class 3, Cr. 3)
Prerequisite: CS 12400 with C or better, or equivalent.
Data structures describe the way that computer programs organize and store information. This course introduces the specification, representation and manipulation of the basic data structures common to much of computer programming, such as: linked lists, arrays, stacks, queues, strings, trees, graphs, search trees, heaps, hash tables, and B-trees.


CS 30200. Operating Systems
(Class 3, Cr. 3)
Prerequisite: CS 22300 and CS 275 with C or better, or consent of instructor.
An operating system manages all of the hardware and software resources of a computer. This course provides an introduction to the basic concepts and terminology of operating systems. Topics will include multiprogramming, CPU scheduling, memory management, file systems, concurrent processes, multiprocessors, security, and network operating systems.


CS 30900. Discrete Mathematical Structures
(Class 3, Cr. 3)
Prerequisite: MA 16400 with C or better.
This course is the study of finite and discrete mathematical structures relating to the theory of computation. Topics will include directed and undirected graphs and their relation to these structures, combinatorial problems inherent in computation, Boolean algebra, and recurrence relations.


CS 31600. Programming Languages
(Class 3, Cr. 3)
Prerequisite: CS 27500 with C or better.
The study of programming language features and their implementation in different types of programming languages. The design goals and motivations for various languages will be discussed. Topics will include a comparison of block-structured, object-oriented, functional, and logic programming languages. The advantages and disadvantages of each type of language will be considered. Specific examples of each type of language will be included.


CS 33200. Algorithms
(Class 3, Cr. 3)
Prerequisite: CS 27500 with C or better.
An algorithm is a procedure for solving a problem in a finite number of steps. Algorithms, along with data structures, form the fundamental building blocks of computer programs. The types of algorithms discussed will include sorting, searching, probabilistic, graph, and geometric algorithms. The following algorithm techniques are covered: backtracking, divide and conquer, branch and bound, greedy method, and dynamic programming.


CS 34200. Introduction to Computer-Based Biomedical Image Analysis
(Class 4, Cr. 4)
Prerequisite: MA 15400.
Introduction to image data acquisition, manipulation, and analysis. Biomedical materials to be analyzed include elcetrophoretic gels, bacterial agar plates, cells and tissues, x-ray films, and CAT scan images. Personal computer systems and the basic programming skill of C language also will be introduced.


CS 40400. Distributed Systems
(Class 3, Cr. 3)
Prerequisite: CS 30200 with C or better, or consent of instructor.
A distributed system is two or more computers working together as a single unit. These systems are essential to the understanding of present and future computer applications. This course will include the following topics: concurrent processing, threads, network programming, distributed file systems, remote procedure calls, sockets, distributed objects, client-server models, and Internet protocols.


CS 41000. Automata and Computability
(Class 3, Cr. 3)
Prerequisite: CS 27500 and CS 30900 with C or better, or MA 45300 and consent of instructor.
A finite automaton is a mathematical model for a computational system. Computer science embodies many examples of finite state systems. This course will cover the basic principles of deterministic and non-deterministic finite automata, Turing machines, formal language theory, regular expressions, context-free grammars, the halting problem, and unsolvability.


CS 41600. Software Engineering
(Class 3, Cr. 3)
Prerequisite: CS 30200 with C or better.
Software engineering is the study of the theory, methods, and tools which are needed to develop large, complex software systems. This course covers the specification, design, documentation, implementation, and testing of software systems. Software life cycle, principles of project management, and case studies are also covered. A group project will be assigned.


CS 42000. Senior Design Project
(Class 3, Cr. 3)
Prerequisite: Senior level standing in Computer Science major.
The objective of this course is to provide students with concrete experience in writing advanced computer programs for practical application in science or industry. The student develops the necessary software using appropriate techniques and prepares documentation for the use and support of the completed system.


CS 44200. Database Systems
(Class 3, Cr. 3)
Prerequisite: CS 27500 with C or better.
A database is a system whose purpose is to organize, retrieve, and maintain large amounts of information. This course introduces the concepts and structures used in designing and implementing database systems. Topics include hierarchical, network, relational, and object-oriented data models, database design principles, normalization, data dictionaries, query languages and processing.


CS 45500. Computer Graphics
(Class 3, Cr. 3)
Prerequisite: MA 26500 and CS 27500 with C or better.
Computer graphics provides a mechanism for creating and manipulating images by means of a computer. This course covers two-dimensional curve drawing, view transformations, geometric modeling, projections, ray tracing, surface patch, three-dimensional object rendering, shading, and animation. Windows programming using OpenGL and MFC will also be introduced.


CS 49000. Topics in Computer Science for Undergraduates
(Class 1 to 5, Cr. 1 to 5)
Supervised reading and reports in various fields. Open to students only with the consent of the department.


CS 50200. Compiling and Programming Systems
(Class 3, Cr. 3)
Basic principles of compilers and compiler design; control of translation, loading, and execution; symbolic coding systems; lexical and syntactic analysis, design and operation of assemblers and macroprocessors; design of interpretive systems. Students are expected to complete a large programming project as part of the course.


CS 50300. Operating Systems
(Class 3, Cr. 3)
Basic principles of operating systems: addressing modes, indexing, relative addressing, indirect addressing, stack maintenance; implementation of multitask systems; control and coordination of tasks, deadlocks, synchronization, mutual exclusion; storage management, segmentation, paging, virtual memory; protection, sharing, access control; file systems; resource management; evaluation and prediction of performance. Students are expected to spend at least three hours per week gaining hands-on experience in using and modifying a small operating system.


CS 50500. Distributed Systems
(Class 3, Cr. 3)
Foundations for building reliable distributed systems, including failure and system models, and basic communication and agreement problems; crash failures, recovery, partition, Byzantine failures; asynchronous systems, failure detectors, communication channels, wireless and sensor networks; software clocks, causality, and cuts. Examples of problems include reliable broadcast consensus, leader election, group communication, and replication.


CS 50700. Object-Oriented Design, Analysis and Programming
(Class 3, Cr. 3)
This course provides a rigorous introduction to the concepts behind object-oriented programming such as encapsulation, information hiding, inheritance, dynamic binding and polymorphism. We also look at object-oriented design patterns and see how they can be implemented in different object-oriented programming languages. Java and/or C++ are used as the vehicle for illustrating and implementing these concepts.


CS 51000. Software Engineering
(Class 3, Cr. 3)
Software life cycles, requirements engineering, software design, design of distributed systems, verification and validation, software architecture, process metrics and models, and research methods in software engineering.


CS 52500. Parallel Computing
(Class 3, Cr. 3)
Parallel computing for science and engineering applications: parallel programming and performance evaluation, parallel libraries and problem-solving environments, models of parallel computing and run-time support systems, and selected applications.


CS 53500. Interactive Computer Graphics
(Class 3, Cr. 3)
The principles of computer graphics and interactive graphical methods for problem solving. Emphasis placed on both development and use of graphical tools for various display devices. Several classes of graphics hardware considered in detail. Topics include pen plotting, storage tubes, refresh, dynamic techniques, three dimensions, color, modeling of geometry, and hidden surface removal. Part of the laboratory involves use of an interactive minicomputer graphics system. Knowledge of programming required.


CS 54100. Database Systems
(Class 3, Cr. 3)
Fundamentals for the logical design of database systems. The entity-relationship model, semantic model, relational model, hierarchical model, network model. Implementations of the models. Design theory for relational databases. Design of query languages and the use of semantics for query optimization. Design and verification of integrity assertions, and security. Introduction to intelligent query processing and database machines.


CS 54300. Introduction to Simulation and Modeling of Computer Systems
(Class 3, Cr. 3)
Simulation: discrete event simulation, process oriented simulation, generating random numbers, simulation languages, simulation examples of complex systems. Nondeterministic models: random variables, Poisson process, moment generating functions, statistical inference and data analysis. Modeling: elementary queuing models, networks of queues, applications to performance evaluation of computer systems.


CS 58000. Algorithm Design, Analysis, and Implementation
(Class 3, Cr. 3)
Basic techniques for designing and analyzing algorithms: dynamic programming, divide and conquer, balancing. Upper and lower bounds on time and space costs, worst case and expected cost measures. A selection of applications such as disjoint set union/find, graph algorithms, search trees, pattern matching. The polynomial complexity classes P, NP, and co-NP; intractable problems.


CS 5xxxx. Computer Architecture
(Class 3, Cr. 3)
This course develops an understanding of modern computer systems for the purpose of writing more reliable and better optimized programs. The system components covered are processor cores, memory hierarchy, multi-core systems, multiprocessors. Topics include instruction set architecture, pipelining, instruction level parallelism, superscalar architecture, branch prediction, out-of-order execution, interconnection networks, shared memory, cache coherence. Emphasis will be placed on how these topics influence program performance and code optimization.

CS 59000. Topics in Computer Science
(Class 1 to 5, Cr. 1 to 5)
Directed study for students who wish to undertake individual reading and study on approved topics.