Computer Science (COMP)
COMP 1101 Analytical Inquiry I (4 Credits)
Students explore the use of mathematics and computer programming in creating animations. Students create animations on their laptop computers using animation software. This course counts toward the Analytical Inquiry: The Natural and Physical World requirement.
COMP 1571 Procedural Programming I (3 Credits)
The C programming language is used to introduce fundamental procedural programming including engineering applications. Programming 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.
COMP 1572 Procedural Programming II (3 Credits)
The Java programming language is used to introduce object-oriented programming. Topics include fundamental object-oriented concepts, class design and implementation, inheritance, polymorphism, exceptions, and event-driven programming. Prerequisite: COMP 1571.
COMP 1601 Computer Science Pathways (1 Credit)
This course is designed to help first year computer science and game development students succeed in a very challenging major. Topics and activities may include academic success strategies; personal inventory exercises; interviewing computer science alumni; exploring ethical concerns within the profession; seminars by industry and academic experts; establishing the relationships between computing and other disciplines; critical and creative thinking activities; disseminating information on the dual degree programs, the honors program requirements, the honor code, and computer science department program structures; and readings from and discussions about computing related articles and publications.
COMP 1671 Introduction to Computer Science I (4 Credits)
Characteristics of modern computers and their applications; analysis and solution of problems; structure programming techniques; introduction to classes, abstract data types and object-oriented programming. This course counts toward the Analytical Inquiry: The Natural and Physical World requirement. Prerequisite: high school algebra.
COMP 1672 Introduction to Computer Science II (4 Credits)
Advanced programming techniques; arrays, recursion, dynamic data structures, algorithm abstraction, object-oriented programming including inheritance and virtual functions. Prerequisite: COMP 1671.
COMP 1991 Independent Study (1 Credit)
COMP 2300 Discrete Structures in Computer Science (1-4 Credits)
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.
COMP 2355 Intro to Systems Programming (4 Credits)
The prerequisites for this class are a good understanding of imperative and object-oriented programming in Java. The prerequisites for this class include a good understanding of basic programming constructs, such as branches (if, switch), loops (for, while, do), exceptions (throw, catch), functions, objects, classes, packages, primitive types (int, float, boolean), arrays, arithmetic expressions and boolean operations.
Computer organization is a parallel prerequisite; if possible, students should register for both this course and COMP 2691. You must have a good understanding of basic data structures such as arrays, lists, sets, trees, graphs and hash-tables. This is a class on systems programming with focus on the C programming language and UNIX APIs. There will be programming assignments designed to make you use various Debian GNU/Linux system APIs. Programming assignments involve writing code in C or C++. Prerequisite: COMP 2673.
COMP 2370 Introduction to Algorithms & Data Structures (4 Credits)
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 or COMP 2300 and COMP 2673.
COMP 2673 Introduction to Computer Science III (4 Credits)
An introduction to several advanced topics in computer science. Topics vary from year to year and may include any of the following: theory of computing, cryptography, databases, computer graphics, graph theory, game theory, fractals, mathematical programming, wavelets, file compression, computational biology, genetic algorithms, neural networks, simulation and queuing theory, randomized algorithms, parallel computing, complexity analysis, numerical methods. Prerequisite: COMP 1672 or COMP 1771.
COMP 2691 Introduction to Computer Organization (4 Credits)
This course covers basic topics in Computer Organization and is a required course in the BS in Computer Science, BS in Game Development, and BS in Computer Engineering degrees. Topics include: instruction set architectures, integer and floating point arithmetic, processors, memory systems, and topics in storage and Input/Output.
COMP 2701 Topics in Computer Science (1-5 Credits)
COMP 2821 Introductory Game Design (4 Credits)
Learn the fundamental game design practices and how to transition from a design, to a prototype, to a final game. This course covers theory, design, 2D game art, and culminates in the creation of a (simple) 2D computer game or other games. Prerequisites: COMP 1672 or COMP 1771 or EDPX 2100.
COMP 2901 Computing and Society (4 Credits)
This course is designed to explore 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 DMST 3901.
COMP 3000 Seminar: The Real World (1 Credit)
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. Cross listed with MATH 3000.
COMP 3200 Discrete Structures (4 Credits)
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 or COMP 2300 and COMP 1672 or COMP 1771.
COMP 3351 Programming Languages (4 Credits)
Programming language 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.
COMP 3352 Elements of Compiler Design (4 Credits)
Techniques required to design and implement a compiler; topics include lexical analysis, grammars and parsers, type-checking, storage allocation and code generation. Prerequisite: COMP 3351.
COMP 3353 Compiler Construction (4 Credits)
Design and implementation of a major piece of software relevant to compilers. Prerequisite: COMP 3352.
COMP 3361 Operating Systems I (4 Credits)
Operating systems functions and concepts; processes, process communication, synchronization; processor allocation, memory management in multiprogramming, time sharing systems. Prerequisites: COMP 2355, COMP 2370, and COMP 2691 or for MS Cybersecurity COMP 3001, 3002, 3003, 3004, COMP 4355, and COMP 4370.
COMP 3371 Advanced Data Structures & Algorithms (4 Credits)
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. Prerequisites: COMP 2370, MATH 3200.
COMP 3381 Software Engineering I (4 Credits)
An introduction to software engineering. Topics include software processes, requirements, design, development, validation and verification and project management. Cross-listed with COMP 4381. Prerequisites: COMP 3351, COMP 3361 or instructor permission.
COMP 3382 Software Engineering II (4 Credits)
COMP 3400 Advanced Unix Tools (4 Credits)
Design principles for tools used in a UNIX environment. Students gain experience building tools by studying the public domain versions of standard UNIX tools and tool- building facilities. Prerequisites: COMP 2400 and knowledge of C and csh (or another shell), and familiarity with UNIX.
COMP 3410 World Wide Web Programming (4 Credits)
COMP 3411 Web Programming II (4 Credits)
In this course you will learn how to develop a full-stack web application that is capable of serving dynamic content from a database. Furthermore, you will learn the core design concepts and principles that will enable you to develop scalable and easy to maintain webapplications - a set of skills that will serve you well in both your personal and professional projects in the future. Prerequisite: COMP 3410.
COMP 3412 Web Projects: Web Development III (4 Credits)
In this course you will learn how to develop, as a group, a full-stack web application that is capable of serving dynamic content from a database. We will use the MongoDB, ExpressJS, Angular, and Node.js (MEAN) software stack to work on a real-life problem presented to us by an external product owner. In the class we will use the Scrum framework for Agile development to work, as a software team, through several sprints of development. You will be peer reviewing each other throughout the course, and the product owner will also be reviewing your product through end-of-sprint demos as features are completed. The goal for this class is for it to be a fun, collaborative, and educational environment that demonstrates what it is like to work as a real software team. Prerequisite: COMP 3411.
COMP 3421 Database Organization & Management I (4 Credits)
An introductory class in database management systems covering both relational and non-relational databases with an emphasis on relational. Topics include database design, ER modeling, relational algebra, SQL, scripting, and embedded SQL. Each student will design, load, query and update a nontrivial database using a relational database management system (RDBMS). In addition, an introduction to a NoSQL database will be included. Graduate students will read one or two relevant technical papers and write a summary report. Prerequisite: COMP 2673 for undergrads. COMP 3006 & 3007 are enforced co-requisites for data science grad students.
COMP 3424 NoSQL Databases (4 Credits)
In this course, students learn what NoSQL databases are, learn to identify the differences between them, and gain a fundamental understanding between SQL, relational databases, and NoSQL databases. Students further explore which type of NoSQL database is the correct one given a use-cases, examining types, methods of communicating with it, contrasts to other NoSQL databases, performance and scalability. Prerequisites: COMP 2355 is required, and COMP 3421 is suggested.
COMP 3431 Data Mining (4 Credits)
Data Mining is the process of extracting useful information implicitly hidden in large databases. Various techniques from statistics and artificial intelligence are used here to discover hidden patterns in massive collections of data. This course is an introduction to these techniques and their underlying mathematical principles. Topics covered include: basic data analysis, frequent pattern mining, clustering, classification, and model assessment. Prerequisites: COMP 2370.
COMP 3441 Introduction to Probability and Statistics for Data Science (4 Credits)
The course introduces fundamentals of probability for data science. Students survey data visualization methods and summary statistics, develop models for data, and apply statistical techniques to assess the validity of the models. The techniques will include parametric and nonparametric methods for parameter estimation and hypothesis testing for a single sample mean and two sample means, for proportions, and for simple linear regression. Students will acquire sound theoretical footing for the methods where practical, and will apply them to real-world data, primarily using R.
COMP 3455 Shell Scripting and System Tools (4 Credits)
This course covers navigating and utilizing tools in a UNIX environment, including use of common command line utilities, Bash and Python shell scripting, source control via Git, pipes and I/O redirection, networking in Python and OS multi-processing/multi-threading. More emphasis will be placed on using these tools than on how those tools work. Students should have experience with Python prior to taking this course.
COMP 3501 Introduction to Artificial Intelligence (4 Credits)
Programming in LISP and Prolog with applications to artificial intelligence; fundamental concepts of artificial intelligence; emphasis on general problem-solving techniques including state-space representation, production systems, and search techniques. Prerequisites: MATH 2200, COMP 2370.
COMP 3510 Software for AI Robotics (4 Credits)
This course provides an introduction to the key artificial intelligence issues involved in the development of intelligent robotics. We will examine a variety of algorithms for autonomous mobile robot behavior, exploring issues that include software control architectures, localization, navigation, sensing, planning, and uncertainty.
We also introduce the Robot Operating System (ROS) middleware, which is popular in academic, industry, and government research.
This course does not assume any prior knowledge of artificial intelligence or robotics.
The course will be project focused. In the project assignments you will learn ROS and learn to implement algorithms essential for conducting AI robotics research.
COMP 3621 Computer Networking (4 Credits)
An introduction to computer networks with an emphasis on Internet protocols. Topics include; network topologies, routing, Ethernet, Internet protocol, sockets, operating system impact and client/server implementations. Prerequisites: COMP 2355 and COMP 2370.
COMP 3681 Networking for Games (4 Credits)
Implementing the networking code for multiplayer games is a complex task that requires an understanding of performance, security, game design, and advanced programming concepts. In this course, students are introduced to the networking stack and how this is connected to the Internet, learn how to write protocols for games, and implement several large games using a game engine that demonstrate the kind of networking and protocols required by different genres of games. In addition, tools are introduced that help understand and debug networking code, simplify the creation of protocols, and make the development of networking code easier.
COMP 3701 Topics in Computer Graphics (4 Credits)
COMP 3702 Topics in Database (4 Credits)
COMP 3703 Topics-Artificial Intelligence (4 Credits)
COMP 3704 Advanced Topics: Systems (4 Credits)
COMP 3705 Topics in Computer Science (1-4 Credits)
COMP 3721 Computer Security (4 Credits)
This course gives students an overview of computer security along with some cryptography. Some network security concepts are also included. Other concepts include coverage of risks and vulnerabilities, policy formation, controls and protection methods, role-based access controls, database security, authentication technologies, host-based and network-based security issues. Prerequisite: COMP 3361.
COMP 3722 Network Security (4 Credits)
Network Security covers tools and techniques employed to protect data during transmission. It spans a broad range of topics including authentication systems, cryptography, key distribution, firewalls, secure protocols and standards, and overlaps with system security concepts as well. This course will provide an introduction to these topics, and supplement them with hands-on experience. Prerequisites: COMP2355 and COMP3721, or permission of instructor.
COMP 3723 Ethical Hacking (4 Credits)
Ethical hacking is the process of probing computer systems for vulnerabilities and exposing their presence through proof-of-concept attacks. The results of such probes are then utilized in making the system more secure. This course will cover the basics of vulnerability research, foot printing targets, discovering systems and configurations on a network, sniffing protocols, firewall hacking, password attacks, privilege escalation, rootkits, social engineering attacks, web attacks, and wireless attacks, among others.
COMP 3731 Computer Forensics (4 Credits)
Computer Forensics involves the examination of information contained in digital media with the aim of recovering and analyzing latent evidence. This course will provide students an understanding of the basic concepts in preservation, identification, extraction and validation of forensic evidence in a computer system. The course covers many systems level concepts such as disk partitions, file systems, system artifacts in multiple operating systems, file formats, email transfers, and network layers, among others. Students work extensively on raw images of memory and disks, and in the process, build components commonly seen as features of commercial forensics tools (e.g. file system carver, memory analyzer, file carver, and steganalysis). Prerequisites: COMP 2355 or for MS Cybersecurity COMP 3001, 3002, 3003, and 3004.
COMP 3732 Human-Centered Data Security and Privacy (4 Credits)
With an increasing digital presence, it is critical to understand users' needs and requirements in using technological equipment to secure interactions and adhere to privacy perceptions. Thus, it is essential to analyze the cognitive, social, organizational, commercial, and cultural factors in mind. This course will provide a socio-technical approach for analyzing critical user interaction with devices encountered in everyday life, including web, mobiles, and wearables. This course will help students develop an understanding of technological interactions from the perspectives of multiple stakeholders such as users, developers, system administrators, and others and build tools to protect user data.
COMP 3801 Introduction Computer Graphics (4 Credits)
Fundamentals of graphics hardware, scan conversion algorithms, 2D and 3D viewing transformations, windows, viewports, clipping algorithms, mathematics for computer graphics, graphics programming using a standard API. Prerequisites: COMP 2370, MATH 1952 or 1962, and MATH 2060.
COMP 3821 Game Programming I (4 Credits)
An introduction to computer game programming. Use of a game engine to create 3D computer games. Topics to include game scripting, simple 3D asset creation, incorporation of assets, keyboard/mouse event handling, animation, game phases and score keeping. Prerequisite: COMP 2370.
COMP 3822 Game Programming II (4 Credits)
In this course, students learn how to work with a 3D game engine and build 3D games. Topics include algorithms, mathematics for 3D game engines, scene management, animations, 3D shaders, particle systems, physics for games, UIs, terrain systems, and working with higher-level scripting languages on top of the low-level implementation language. Prerequisites: COMP 3801, COMP 3821.
COMP 3831 Game Capstone I (2-4 Credits)
Students design, build, test and debug a fully working game from scratch. Both art and programming are developed by the student teams with the instructor acting as a project manager to ensure that goals are met through the 10-week development process through various milestones. In addition to building the game, students learn group collaboration, software processes, testing, and the methodology for researching new game concepts to implement in their final project. Prerequisite: COMP 3821.
COMP 3832 Game Capstone II (2-4 Credits)
Students design, build, test and debug their existing game from Game Capstone I. Both art and programming are developed by the student teams with the instructor acting as a project manager to ensure that goals are met through the 10-week development process through various milestones. In addition to building the game, students alter their game design document to add new features, making corrections to prior design issues, and focus on making the game playable and "fun." Prerequisite: COMP 3831.
COMP 3833 Game Capstone III (2-4 Credits)
Students design, build, test and debug their working game from Game Capstone II. Both art and programming are developed by the student teams with the instructor acting as a project manager to ensure that goals are met through the 10-week development process through various milestones. In addition to building the game, students modify their design document and implement changes in their game, create new concept art for the features, build an introduction level into their game, test the game with "Play testers", and focus on creating a game that is "fun" to play. By the end of the quarter, their game is ready for distribution on an appropriate platform. Prerequisite: COMP 3832.
COMP 3904 Internship/Co-Op in Computing (0-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).
COMP 3991 Independent Study (1-10 Credits)
Cannot be arranged for any course that appears in the regular course schedule for that particular year.
COMP 3995 Independent Research (1-10 Credits)