##
Computer Science Course Descriptions (COMP)

**CMPSC 101 — INTRODUCTION TO C++ PROGRAMMING (3)**
Properties of algorithms, languages, and notations for describing algorithms, applications of a procedure-oriented language to problem solving. A student may receive credit for only one of the following courses: CMPSC 101, 200, 201, 202, 121.

**CMPSC 121 — INTRODUCTION TO PROGRAMMING TECHNIQUES (3)**
Design and implementation of algorithms. Structured programming. Problem solving techniques. Introduction to a high-level language, including arrays, procedures, and recursion.

**Prerequisite:**
MATH 110 as prerequisite or
MATH 140 as concurrent.

**CMPSC 122 — INTERMEDIATE PROGRAMMING (3)**
Object-oriented programming, recursion, fundamental data structures (including stacks, queues, linked lists, hash tables, trees, and graphs), the basics of algorithmic analysis, and an introduction to the principles of language translation.

**Prerequisite:**
CMPSC 121.

**CMPSC 221 — OBJECT ORIENTED PROGRAMMING WITH WEB-BASED APPLICATIONS (3)**
This course will continue with object-oriented programming and will introduce graphics, virtual machines, programming language concepts and web-based programming using Java.

**Prerequisite:**
CMPSC 122 or equivalent.

**CMPSC 312 — COMPUTER ORGANIZATION AND ARCHITECTURE (3)**
Data representation, digital logic, instruction set/control logic,
machine/ assembly languages, advanced architectures, memory hierarchy,
I/O devices, overall system design.

**Prerequisite:**
CMPSC 121 or equivalent.

**CMPSC 313 — ASSEMBLY LANGUAGE PROGRAMMING (3)**
Program design, addressing modes, subroutines, parameter passing, stacks,
bit manipulation, text processing, DOS functions, macros, I/O,
high level language interfaces.

**Prerequisite:**
CMPSC 312

**CMPSC 360 — DISCRETE MATHEMATICS FOR COMPUTER SCIENCE (3)**
Discrete mathematics and foundations for modern computer science. Topics include sets, relations, logic, algorithms, graphs, finite state machines and regular expressions.

**Concurrent:**
CMPSC 122

**CMPSC 412 — DATA STRUCTURES LAB (1.5)**
Programming with common data structures; recursion; stacks, queues, dictionaries, priority queues; string searching and manipulation; sorting; trees; combinatorics.

**Concurrent:**
CMPSC 462 or
CMPSC 465

**CMPSC 413 — ALGORITHMS LAB (1.5)**
Programming with common algorithm design techniques; divide and conquer, greedy method, dynamic programming, and tree and graphy traversals.

**Concurrent:**
CMPSC 463 or
CMPSC 465

**CMPSC 414 — CONTEST PROGRAMMING (1)**
Programming Contest Questions; Common Data Structures; Strings; Sorting; Searching; Combinatorics; Number Theory; Graph Algorithms; Dynamic Programming.

**Concurrent:**
CMPSC 221

**CMPSC 421 — NET-CENTRIC COMPUTING (3)**
This course introduces JavaScript and AJAX for creating Rich Internet Applications, and XML for client-server communication and Web Services.

**Prerequisite:**
CMPSC 221 or
SWENG 311

**CMPSC 426 — OBJECT-ORIENTED DESIGN (3)**
Object-oriented analysis and design; design patterns such as creational,
structural, and behavioral patterns; UML; and unified process.

**Prerequisite:**
CMPSC 221,
CMPSC 462

**CMPSC 428 — PROGRAMMING IN ADA (3)**
Structured program design using Ada; strong typing, data abstraction, packages,
subprograms, separate compilation, visibility, exceptions, generic units.

**Prerequisite:**
CMPSC 121

**CMPSC 430 — DATABASE DESIGN (3)**
Relational database model, query languages, integrity, reliability,
normal forms for design.

**Prerequisite:**
CMPSC 462

**CMPSC 436 — COMMUNICATIONS AND NETWORKING (3)**
Data transmission, basic signaling, data encoding, error control,
communication protocols, security, network topologies, routing, switching,
internetworking, emerging high speed networks.

**Prerequisite:** CMPSC 312

**CMPSC 438 — COMPUTER NETWORK ARCHITECTURE AND PROGRAMMING (3)**
Network architectures, communication protocols, internetworking, network security,
client-server computing, web application development, programming with APIs.

**Prerequisite:**
CMPSC 312,
CMPSC 221;
CMPET 401 cannot be taken for credit after CMPSC 438.

**CMPSC 441 — ARTIFICIAL INTELLIGENCE (3)**
Problem solving, search techniques including local search and genetic algorithms,
knowledge representation, planning, learning, and neural networks.

**Prerequisite:**
CMPSC 122;
CMPSC 360

**CMPSC 444 — SECURE PROGRAMMING (3)**
Secure software design principles/practice, common threats, applied cryptography, trust management, input validation, OS-/programming language- specific issues, software validation.

**Prerequisite:**
CMPSC 221

**Concurrent:**
CMPSC 430 or CMPSC 431 or CMPSC 421W

**CMPSC 455 — INTRODUCTION TO NUMERICAL ANALYSIS I (3)**
Floating point computation, numerical rootfinding, interpolation, numerical quadrature, direct methods for linear systems. Students may take only one course for credit from CMPSC (MATH) 451 and CMPSC (MATH) 455.

**Prerequisite:**
MATH 220,
MATH 230 or
MATH 231,
3 credits of programming

**CMPSC 457 — COMPUTER GRAPHICS ALGORITHMS (3)**
Graphics systems/hardware, color models, transformations, projections,
clipping, hidden line/surface removal, aliasing, parametric curves/surfaces,
3D modeling, animation.

**Prerequisite:**
CMPSC 122;
MATH 220

**CMPSC 460 — PRINCIPLES OF PROGRAMMING LANGUAGES (3)**
Design and implementation of high level programming languages and
survey of language paradigms including imperative, functional,
and object-oriented programming.

**Prerequisites:**
CMPSC 312,
CMPSC 462

**Concurrent:**
CMPSC 469

**CMPSC 462 — DATA STRUCTURES (3)**
In-depth theoretical study of data structures such as balanced trees,
hash tables, priority queues, B-trees, binomial heaps, and Fibonacci heaps.

**Prerequisite:**
CMPSC 360

**CMPSC 463 — DESIGN AND ANALYSIS OF ALGORITHMS (3)**
Recurrences, algorithms design techniques, searching, sorting, selection,
graph algorithms, NP-completeness, approximation algorithms,
local optimization algorithms.

**Prerequisites:**
CMPSC 462,

**Concurrent:**
STAT 301 or
MATH 318 or
STAT 318

**CMPSC 469 — FORMAL LANGUAGES WITH APPLICATIONS (3)**
Regular, context free, recursive, and recursively enumerable languages;
associated machine models; applications.

**Prerequisite:**
CMPSC 360

**CMPSC 470 — COMPILER CONSTRUCTION (3)**
Compiler design and implementation; scanning, parsing, semantic analysis,
optimization (including static analysis), code generation,
garbage collection, and error detection.

**Prerequisite:**
CMPSC 221,
CMPSC 312,
CMPSC 462,
CMPSC 469

**CMPSC 472 — OPERATING SYSTEM CONCEPTS (3)**
Theoretical and practical issues of operating systems design
and implementation, process management, concurrent programming,
memory management, scheduling, I/O, and security.

**Prerequisites:**
CMPSC 312,
CMPSC 462

**CMPSC 475 — MOBILE APPLICATIONS PROGRAMMING (3)**
Development of software for devices including smart phones, tablets, handheld units, and other general purpose computing platforms.

**Prerequisites:**
CMPSC 312,
CMPSC 462

**CMPSC 487W — SOFTWARE ENGINEERING AND DESIGN (3)**
Software development process, life cycle; requirements analysis,
specification, design, prototyping, testing, project management,
and documentation.

**Prerequisite:**
CMPSC 221,
ENGL 202C,
CMPSC 462

**CMPSC 488 — COMPUTER SCIENCE PROJECT (3)**
Project design and implementation with an emphasis on team work, documentation, and the employment and integration of computer science concepts.

**Prerequisite:**
CMPSC 487W

**CMPSC 495 — INTERNSHIP (1-18)**
Supervised off-campus, nongroup instruction including field experiences,
practica, or internships. Written and oral critique of activity required.

**Prerequisite:**
Prior approval of proposed assignment by instructor

**CMPSC 496 — INDEPENDENT STUDIES (1-18)**
Creative projects, including research and design, which are supervised on
an individual basis and which fall outside the scope of formal courses.

**CMPSC 497 — SPECIAL TOPICS (1-9)**
Formal courses given infrequently to explore, in depth, a comparatively
narrow subject which may be topical or of special interest.
Typically offered special topic courses include:

- Natural Language Processing
- Computer Forensics
- Data Mining