Skip navigation

Daniel Felix Ritchie School of Engineering & Computer Science Department of Computer Science

Computer Science

Course Descriptions

1101 Analytical Inquiry I (4 credits)

Explores concepts of Computer Science and Mathematics by learning how to write computer programs. Students learn how to create animations, simple video games, and manipulate images.

1571 Procedural Programming I (3 credits)

An introduction to fundamental procedural programming using the C programming language. Topics include an overview of computers and programming languages, variables and data types, arithmetic operators, input/output, comments, control structures, user-defined functions, scope, constants, file I/O, and pointers. Prerequisite: High School Algebra.

1670 Introduction to Computing (4 credits)

An overview of computing, including history and impact, use of computer as a tool in various disciplines, logical process of problem solving, and concepts of programming using a high-level language. Appropriate for students who wish to learn more about computers but are not planning to continue in computer science.

1671 Introduction to Computer Science I (4 credits)

An introduction to structured programming techniques including abstract data types, functions, iteration, and conditional statements; object oriented programming including classes, instance variables, and methods.

1672 Introduction to Computer Science II (4 credits)

Covers intermediate programming techniques including arrays, dynamic data structures (linked lists and trees), recursion, inheritance and polymorphism. Prerequisite: COMP 1671.

1771 Introduction to Computer Science (Honors) (4 credits)

This is an honors section of Introduction to Computer Science, meant for incoming freshman who are already experienced in computer programming. This course is faster paced than its counterparts COMP 1671/1672. It covers basic programming in Java, object oriented (OO) programming, exceptions, streams and file I/O, recursion, generics and basic data structures, and algorithms. Prerequisites: AP credit in Java, or at least one quarter of programming, or permission of instructor.

1991 Independent Study (1 credit)

Cannot be arranged for any course that appears in the regular course schedule for that particular year.

1992 Directed Study (1 to 10 credits)

Used where a regular catalog course is offered individually to a single student.

2300 Discrete Structures in Computer Science (4 credits)

Covers number systems and basic number theory, propositional and predicate logic, proof techniques, mathematical induction, sets, counting and discrete probability; case studies with applications from computer science, such as data representation, algorithm analysis and correctness, and system design.

2355 Introduction to Systems Programming (4 credits)

An introduction to C/C++ programming emphasizing advanced features in C++ including templates, operator overloading, polymorphism and design patterns. Students will use a modern IDE and cover topics such as classes, objects, templates, types, pointers, constants, operators, scoping, static typing, memory allocation, I/O and the Standard C Library, operator overloading, polymorphism, exceptions, templates, generic programming and the Standard C++ Library, including containers and algorithms. Projects will focus on design, reusability, and functionality. Students are expected to have a solid foundation in imperative and object-oriented programming as imparted from COMP 2673, including an understanding of linked-lists, trees, sorting, and arrays. Prerequisite: COMP 2673.

2370 Introduction to Algorithms & Data Structures (4 credits)

Covers performance analysis of algorithms; data structures and their physical storage representation; recursive techniques; stacks, queues, lists, trees, sets, graphs; sorting and searching algorithms. Prerequisites: MATH 2200/COMP 2300 and COMP 2673.

2400 Software Tools (4 credits)

An introduction to the Unix environment, focusing on UNIX commands, emacs environment, vi, X-windows, regular expressions, processes, scripting with bash, makefiles, and understanding the directory structure and typical layout in a Unix environment. Prerequisite: COMP 2370.

2555 Principles of Computer Forensics (4 credits)

An introduction to computer investigation, preparation, data acquisition, forensic tools; disk and file structures; file recovery, steganography, reconstruction; network, email and mobile device forensics. Prerequisite: COMP 1672 or COMP 1771.

2673 Introduction to Computer Science III (4 credits)

Covers advanced programming techniques; introduction to design patterns (singleton, factory, state, and strategy); advanced dynamic data structures such as graphs; algorithm complexity and efficiency. Prerequisite: COMP 1672 or COMP 1771.

2691 Introduction to Computer Organization (4 credits)

An introduction to assembly language programming - simple operations, addressing modes, looping, arrays, subprograms; logic design - multiplexers, decoders/encoders, flip-flops, counters, shifters, sequential network design. Prerequisite: COMP 1672 or COMP 1771.

2901 Computing and Society (4 credits)

Explores the social implications of computing practices, organization and experience. These topics and other issues are correlated with examples from the older and modern history of technology and science. Some formal experience with computing is assumed, but students who have a good familiarity with ordinary computing practice should be ready. Students are also expected to contribute their expertise in one or more of the areas of their special interest. Cross-listed with COMP 3901 and DMST 3901.

2992 Directed Study (1 to 10 credits)

Used where a regular catalog course is offered individually to a single student.

3000 Seminar: The Real World (1 credit)

A series of lectures by alumni and others on surviving culture shock when leaving the University and entering the job world. Open to all students regardless of major.

3200 Discrete Structures (4 credits)

Covers discrete mathematical structures and non-numerical algorithms; graph theory, elements of probability, propositional calculus, Boolean algebras; emphasis on applications to computer science. Cross-listed as MATH 3200. Prerequisites: MATH 2200/COMP 2300 and COMP 1672/COMP 1771.

3341 Multimedia Systems (4 credits)

Covers fundamental issues in design and implementation of multimedia applications, technologies in multimedia systems such as multimedia data representation, compression, coding, networking, data management, and I/O technologies. Prerequisite: COMP 3361.

3351 Programming Languages (4 credits)

An introduction to programming languages as a component of software development environment; binding, scope, lifetime, value and type of a variable; run-time structure - static, stack-based and dynamic languages; parameter passing - call by reference, value, result, value-result and name; subprogram parameters; role played by side effects, dangling pointers, aliases and garbage; garbage collection; data abstraction - study of object-oriented, functional, and logic languages. Prerequisites: COMP 2370, COMP 2691 and COMP 2355.

3352 Elements of Compiler Design (4 credits)

An introduction to compiler construction where students are required to design and implement major pieces of a compiler. Topics include lexical analysis, regular expressions, finite automata, parsing, context-free grammars, predictive parsing, LR parsing, abstract syntax, semantic actions, abstract parse trees, semantic analysis, symbol tables, and type-checking, activation frames, and intermediate code generation. Prerequisite: COMP 3351.

3353 Compiler Construction (4 credits)

A continuation of COMP 3352 in which students build a more advanced compiler with optimizations, including basic blocks and traces, instruction selection, liveness analysis, register allocation, garbage collection, object-oriented languages, functional programming languages, polymorphic types, dataflow analysis, and loop optimizations. Prerequisite: COMP 3352.

3361 Operating Systems I (4 credits)

An introduction to the fundamental concepts of an operating system, its functions and design, and the algorithms behind the efficient management of computing resources. Topics covered include operating system services, structure, interface; processes and threads, CPU scheduling, process synchronization, deadlocks, paging, virtual memory, file systems, mass-storage systems and I/O systems. Prerequisites: COMP 2355, COMP 2370 and COMP 2691.

3371 Advanced Data Structures & Algorithms (4 credits)

Covers advanced data structures, algorithm design and analysis of algorithms; asymptotic complexity, recurrence equations, lower bounds; algorithm design techniques such as incremental, divide and conquer, dynamic programming, randomization, greedy algorithms, etc. Prerequisite(s): COMP 2370 and COMP 3200.

3381 Software Engineering I (4 credits)

An introduction to software engineering. Topics include software processes, requirements, design, development, validation and verification and project management. Prerequisite: COMP 2370.

3382 Software Engineering II (4 credits)

A continuation of COMP 3381. Topics include component-based software engineering, model-driven architecture, and service-oriented architecture. Prerequisite: COMP 3381.

3410 World Wide Web Programming (4 credits)

Covered topics include creating WWW pages with HTML, accessing user-written programs via CGI scripts, creating forms, imagemaps and tables, and Java programming principles and techniques. Prerequisite: COMP 2355.

3421 Database Organization & Management I (4 credits)

An introduction to database concepts and design. Topics include database design, ER modeling, database normalization, relational algebra, SQL, physical organization of records and clocks, heap files, sorted files, hashing, extendible hashing, linear hashing and B trees. Prerequisite: COMP 2370.

3501 Introduction to Artificial Intelligence (4 credits)

Covers fundamental concepts of artificial intelligence including general problem-solving techniques, logic, search, probabilistic reasoning, and learning. Prerequisites: MATH 2200/COMP 2300 and COMP 2370.

3621 Computer Networking (4 credits)

An introduction to computer networks with an emphasis on Internet protocols. Topics include network topologies, routing, ethernet, TCP/IP, UDP, DNS, SMTP, HTTP, study of client/server and peer-to-peer architectures, and performance modeling. In addition, projects include significant socket programming via the development of a client/server or peer-to-peer protocol. Co-requisite: COMP 3361. Prerequisite: COMP 2370 and COMP 2355.

370X Special Topics (4 credits)

Recently offered topics include AI for Traditional Games, Computer Security, Data Mining, Foundations of Information Privacy, Game Capstone, Introduction to Game Design, Multitouch, Secure Software, Software Testing, Video Game AI. Prequisites vary according to offered topic.

3801 Introduction to Computer Graphics (4 credits)

An introduction to computer graphics, fundamentals of graphics hardware, scan conversion algorithms, 2-D and 3-D viewing transformations, windows, viewports, clipping algorithms, mathematics for computer graphics, graphics programming using a standard API. Prerequisite(s): COMP 2370.

3821 Game Programming I (4 credits)

An introduction to game programming in which students develop a fully working 2D game in teams while learning the fundamentals of game programming. The entire architecture of a game is developed in this course and includes topics such as the game design document; coding for a real-time system; sprites; 2D camera, screen, and world space; 2D matrix transformations; scene management; collision detection and response; data-driven design; sound management; pathfinding and flocking; conversation graphs; game rules; and design patterns. Prerequisite: COMP 2370.

3822 Game Programming II (4 credits)

A continuation of Game Programming I, with a focus on 3D games and architectures. The primary goals of this course include building major subsets of a 3D game engine such as terrain and foliage generation, indoor and outdoor scene management, animations, particles, scripting, sound, video, user-interfaces, physics and artificial intelligence. Prerequisites: COMP 3801 and COMP 3821.

3904 Internship/Co-Op in Computing (0 to 10 credits)

Practical experience in designing, writing and/or maintaining substantial computer programs under supervision of staff of University Computing and Information Resources Center. Prerequisites: COMP 2370 and approval of internship committee (see department office).

3991 Independent Study (1 to 10 credits)

Cannot be arranged for any course that appears in the regular course schedule for that particular year.

3992 Directed Study (1 to 10 credits)

Used where a regular catalog course is offered individually to a single student.