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.

 

2821 Introductory Game Design (4 Credits)

 

 

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 Advanced 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. Prerequisite: COMP 2370 and COMP 2355. Co-requisite: COMP 3361.

 

370X Special Topics

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, Video Game AI.

3701 Topics in Computer Graphics (4 credits)

3703 Topics in Artificial Intelligence (4 credits)

3704 Topics in Systems (4 credits)

3705 Topics in Computer Science (1 to 4 credits)

3709 Topics in Computer Security (4 credits)

 

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, MATH 1952/MATH 1962 and MATH 2060.

 

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.

 

3831 – Game Capstone I (2-4 credits)

Required for Games

Pre-requisite – COMP3821

Undergraduate ONLY

 

3832 – Game Capstone II (2-4 credits)

Required for Games

Undergraduate ONLY

 

3833 – Game Capstone III (2-4 credits)

Required for Games.

Undergraduate ONLY

 

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. 

 

4352 Elements of Compiler Design (4 credits)

Graduate level course equivalent to COMP 3352, but includes additional requirements for graduate students. In particular, students are required to understand compiler development at a graduate level and will read and write summaries of recent research in compiler development. Projects will have additional requirements over undergraduate versions. Prerequisite: COMP 3351.

 

4353 Compiler Construction (4 credits)

Graduate level course equivalent to COMP 3353, but includes additional requirements for graduate students. In particular, students are required to understand compiler design and implementation at a graduate level and will read and write summaries of recent research in compiler development. Projects will have additional requirements over undergraduate versions.

Prerequisite: COMP 4352.

 

4372 Theory of Algorithms (4 credits)

Covers a set of assorted topics in algorithms: NP-completeness, lower bound theory, approximation algorithms, amortized complexity and data structures, randomized algorithms, string algorithms, graph algorithms, linear programming, computational geometry. Prerequisite(s): COMP 3371. 

 

4384 Secure Software Engineering (4 credits)

Covers many of the classical flaws in systems that can lead to security problems, including buffer overruns, format string problems, overflows, exception issues, race conditions, etc. We also cover some webapp-specific topics such as SQL injection attacks, and cross-site scripting (XSS) attacks. Prerequisites: COMP 2355 and COMP 2691.

 

4600 Seminar in Computer Science (0 credits)

Presentations by faculty/student and external researchers on topics not generally encountered in formal courses. 

 

4621 Computer Networking (4 credits)

Graduate level course equivalent to COMP 3621, but includes additional requirements for graduate students, helping them become capable of performing research at a graduate level in networking. Students additionally read important research papers in networking and develop projects with more advanced requirements than undergraduates. Prerequisites: COMP 2370 and COMP 2355 (or equivalents). Co-requisite: COMP 3361.

 

470X   Advanced Topics 

Recently offered topics include AI for Traditional Games, Augmented Reality, Computational Geometry, Computer Security, Data Mining, Embedded Systems, Foundations of Information Privacy, Quantitative Software Engineering, Single Agent Search.

4701 Advanced Topics in Computer Graphics

4703 Advanced Topics in Artificial Intelligence

4704 Advanced Topics in Systems

4705 Advanced Topics in Programming

4709 Advanced Topics in Computer Security (3 credits)

 

4991 Independent Study (1 to 10 credits)

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

 

4992 Directed Study (1 to 10 credits)

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

 

4995 Independent Research (1 to 17 credits)

Research projects undertaken in conjunction with a faculty member.

 

5991 Independent Study (1 to 17 credits)

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

 

5995 Independent Research (1 to 17 credits)

Research projects undertaken in conjunction with a faculty member.