Skip to main content

Course Description for Upper-Division Computer Science Courses and Elective Courses

Updated on November 11, 2021

Note:  All the courses are 3 credits except for a few courses listed otherwise.  For graduate students, CS 5250 (1 credit) and CS 5260 (2 credits) must both be listed in the same semester on a POS in order to be applied to a degree.  For undergraduate students, CS 5250 (1 credit) and CS 5260 (2 credits) must both be completed in the same semester in order to be applied to a degree.

Upper-Division Computer Science Courses

CS5000: Theory of Computability

Instructor: Dr. Vladimir Kulyukin (Regularly offered in Fall semesters)

Theory of Computability (TOC) is the mathematical study of models of computation. Given a problem, a TOC researcher is interested whether the problem is solvable in a given model of computation and, all other things being equal, leaves speed and optimization to algorithmics. By the end of this course, students will have mastered or become familiar with such topics as deterministic and non-deterministic finite-state automata; the Myhill-Nerode theorem and automata minimization, the pumping lemmas for regular and context-free languages, context- free grammars, stack machines, the Cocke-Younger-Kasami algorithm, Church’s thesis, Rice's theorem, Turing machines, primitive recursive, partially computable, and computable functions, Gödel's numbers, Chomsky’s hierarchy, public-key cryptography.

 

CS5030/CS6030: High Performance Computing (4 credits)

Instructor: Dr. Steve Petruzza (Regularly offered in Fall semesters)

It will provide an introduction to High-Performance Computing (HPC), which is the practice of leveraging parallel computing power, from computer clusters and supercomputers, to solve complex computational problems faster. It will give students hands-on experiences using openMP,MPI and CUDA to write highly optimized code for modern multi-core processors and GPUs and computing clusters. The course explores concepts and challenges of performance scalability portability, and energy efficiency of HPC applications and systems, parallel hardware, parallel programming models, how to run on an HPC system, shared memory programming (Pthreads, OpenMP), performance analysis, distributed programming (MPI), load balancing, GPU programming, parallel and distributed applications.

 

CS5040/CS6040: Scientific Visualization

Instructor: Dr. Steve Petruzza (Regularly offered in Spring semesters)

This course introduces principles, methods and techniques for visual analysis of scientific data. Students will learn how to make effective visualization of scalar, vector and tensor field data using state-of-the-art techniques including those for surface and volume geometry representation. It is complementary to CS5820 Data Visualization, which focuses on visualization related to tabular data (e.g., graphs, text, and maps). Topics will include: scientific visualization tools, visualization of 2D, 3D, vector and tensor fields and in situ analytics.

 

CS5050: Advanced Algorithms

Instructor: Dr. Nick Flann (Fall), Dr. Haitao Wang (Spring) (Regularly offered in both semesters)

This course provides a study of algorithms and their analysis with emphasis on mathematically analyzing algorithms for their average complexity; standard algorithms in sorting, graphs, mathematics, and heuristic optimization; deriving upper and lower bounds of computation and using them to inform algorithm design. Students will gain an understanding of how to apply approximate and heuristic algorithm solutions to NP problems, and problem reduction as a technique for computing lower-bounds and solving problems. Topics may include design by induction, algorithms involving sequences and sets, graph algorithms, geometric algorithms, algebraic algorithms, reductions, NP-completeness, and parallel algorithms.

 

CS5060: Decision Making: Algorithms Under Uncertainty

Instructor: Dr. Mario Harper (Regularly offered in Spring semesters starting Spring 2023)

This course is designed for students to develop end-to-end tools for decision making under uncertainty. Key concepts will cover detecting uncertainty, working with little to no data, rapid adaption, and decision making algorithms in multiple fields (robotics, fintech, economics, sociology). Course material will be applied in real-world projects.

 

CS5080/CS6080: Time Series Data Mining

Instructor: Dr. Soukaina Filali Boubrahimi (Regularly offered in Fall semesters)

This course provides a broad introduction to state-of-the-art research on data mining, machine learning models, and statistical pattern recognition on time series data. The goal is to learn how to apply, inspect, and evaluate different mining techniques on time series data using Python. Topics covered include time-series representation learning, Fourier and Wavelet transform dimensionality reductions, similarity search, classification, visualization, and frequent patterns mining. Additional coursework is required for students enrolled in the graduate-level course.

 

CS5110/CS6110: Multi-Agent Systems (4 credits; TEAMWORK course)

Instructor: Dr. Vicki Allan (Regularly offered in Spring semesters)

Students in this course will study the theory of a computerized system consisting of multiple interacting autonomous agents. Multi-agent systems can solve problems that are difficult or impossible for an individual agent to solve. Topics will include multi-agent interactions, normal form games, extensive form games, voting models, coalitional game theory, auctions, bargaining, predicting human-decision making. This is a TEAMWORK (T) course.

 

CS5250: Introduction to Cloud Computing (1 credit)

Instructor: Dr. Stephen Clyde or Dr. Steve Petruzza (Regularly offered in Fall semesters; Online course)

This course covers general cloud-computing concepts, including public-cloud infrastructure, security, economic factors, networking fundamentals, compute, storage, and database services, principles and practices of architectural design, application monitoring, and scaling. Students will gain hands-on experience working with a variety of cloud services.

 

CS5260: Developing Cloud-based Software (2 credits)

Instructor: Dr. Stephen Clyde or Dr. Steve Petruzza (Regularly offered in Fall semesters; Online course)

This course deals with the development of secure, available, scalable, reliable, and durable software applications in a cloud environment. It covers the implementation of cloud- based software, setup of a development environment, essential security concepts (the shared responsibility model, authentication, and authorization), and cloud-based services in distributed applications (object storage, non-relational databases, distributed caching, containers, queuing, notification, serverless functions, and workflow coordination). Students will gain hands-on experience programming with cloud-based software, deeper exploration of security for cloud- based distributed applications, and exposure to DevOps concepts.

 

CS5300: Compiler Construction (4 credits)

Instructor: Dr. John Edwards (Regularly offered in Spring semesters)

This course is an introduction to key design principles and techniques for constructing compilers. The major goal of this course is to understand the components, algorithms, and theories behind compilers, including lexical analysis, syntax analysis, semantic analysis, intermediate code generation, target code generation, and some of the principles of optimization. Topics include lexical analysis, syntax analysis, semantic analysis, intermediate code generation, run-time environments, target code generation, and optimization.

 

CS5410: Game Development (4 credits; TEAMWORK course)

Instructor: Dr. Dean Mathias (Regularly offered in Spring semesters)

This course explores technical game development so that students gain the ability to perform technical game design and technical game development. The course emphasizes integration of multiple computer science topics within a single application and includes a team project to develop a computer-based game. Topics include graphics, input handling, collision detection, particle systems, entity systems/frameworks, multi-threading, multi-core, networking, synchronization, optimization, and scripting. This is a TEAMWORK (T) course.

 

CS5500: Parallel Programming (4 credits; TEAMWORK course)

Instructor: Dr. Dan Watson (Regularly offered in Spring semesters. Spring 2022 is the last semester to offer CS5500. It will be offered as CS5030/CS6030 High Performance Computing in the future.)

This course examines basic techniques for designing parallel algorithms. The course explores parallelism via explicit message passing using cluster computers and the MPI library. Topics include master/slave configurations, recursive doubling, cube-type communications, load balancing, finite automata, and large-scale genetic algorithms. An independent project is a significant component of this course. Many of the studied algorithms can be run on the student’s personal computer, while larger clusters, such as those available at the Utah High Performance Computing Center, may be used as part of the course. This is a TEAMWORK (T) course.

 

CS5510/CS6510: Robot Intelligence (4 credits; TEAMWORK course)

Instructor: Dr. Mario Harper (Regularly offered in Fall semesters)

Explore the field of robotics through the lens of decision-making algorithms to understand critical aspects of autonomous systems from a machine learning and data science perspective, with emphasis on sensing, high-level objective planning, motion planning, and human interaction. Learn the latest technologies developed in the field through projects in simulation and hardware and solve problems for search-and-rescue missions. Topics include motion planning, unstructured environments, unique optimization, human awareness, overall objective planning, constrained motion, and terrain understanding.

 

CS5600/CS6600: Intelligent Systems (4 credits)

Instructor: Dr. Vladimir Kulyukin (Regularly offered in Fall semesters)

AI aims to study, design, and build intelligent systems. What computational models should we use to model natural intelligence? What aspects of natural intelligence, if any, should we model, to begin with? We study and build AI systems to shed light on how natural intelligence deals with problems in data-driven modeling, natural language processing, and planning and problem solving.

 

CS5620/CS6620: Artificial Intelligence in Clean Energy

Instructor: Dr. Nick Flann (Regularly offered in Spring Semesters in Odd Years (2021, 2023, etc.))

This course will study applications of state-of-the-art machine intelligence techniques that are needed to optimally manage clean energy systems and other emerging technologies aimed at a future low carbon economy. Many disparate applications may be covered, including energy storage, wind, and solar supply, electric transportation, smart homes, the internet of things, ecological monitoring, lab meat simulation, and social media sentiment. The class will give students experience working in multidisciplinary teams and individually to identify challenges and implement innovative AI-based solutions to tractable problems. Topics covered include
climate science and possible technological and policy solutions, combinatorial optimization methods (genetic algorithms, simulated annealing, and stochastic gradient descent), deep neural networks, machine learning, reinforcement learning, and fitting physical models. Students will produce a project report suitable for inclusion in their portfolio.

 

CS5640/CS6640: Reinforcement Learning

Instructor: Dr. Nick Flann (Regularly offered in Fall Semesters)

This course will introduce reinforcement learning in constructing software systems that learn from external environment interaction and the mathematical foundations of the methods. It will give students hands-on experience using Python and Julia to build learning systems. Topics include applications of reinforcement learning, tabular solution methods, finite Markov decision processes, Monte Carlo methods, temporal difference learning, approximate solution methods, on and off policy method, eligibility traces, and policy gradient methods. Students will produce a project report suitable for inclusion in their portfolio.

 

CS5665: Introduction to Data Science

Instructor: Dr. Shuhan Yuan (Regularly offered in Fall semesters)

Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from structural and unstructured data. The goal of this course is for students to learn how to use deep learning for solving real-world data analysis problems, especially in the fields of computer vision and natural language processing. Topics include linear regression, logistic regression, feed-forward neural network, convolutional neural network, recurrent neural network, and transformers.

 

CS5680/CS6680: Computer Vision: Foundations and Applications

Instructor: Dr. Xiaojun Qi (Regularly offered in Fall semesters)

This course will provide an introduction to theories and techniques of machine intelligence, with emphasis on image processing, pattern recognition, and computer vision. It will give students hands-on experiences using Matlab to process digital images and analyze the images. The topics include enhancement, morphology, segmentation, object representation and recognition, neural network, deep convolutional neural network, principal components analysis, K-means algorithm, and hierarchical clustering.

 

CS5750/CS6750: Computing Education Research

Instructor: Dr. John Edwards (Regularly offered in Fall semesters)

This course introduces topics in computing education research, including learning science, cognitive science, motivation and affect, statistical methods, qualitative methods, pedagogy, assessment, equity and diversity, programming paradigms, and computing for other disciplines.

 

CS5800: Introduction to Database Systems

Instructor: Dr. Soukaina Filali Boubrahimi (Regularly offered in Fall semesters)

Students will develop a conceptual model of a database; become familiar with a database management system; and build and query a database. The course emphasizes introduction of database systems, database design/ER model, the relational model, logical design, physical design, and applications. Topics include conceptual design, ER model, relational model of data, SQL, query optimization, noSQL, data mining, and normalization.

 

CS5820/CS6820: Data Science - Data Visualization

Instructor: Dr. Isaac Cho (Regularly offered in Fall semesters)

This course is an introduction to key design principles and techniques for interactively visualizing data. Major goals of this course are to understand how visual representations can help in the analysis and understanding of complex data, how to design effective visualizations, and how to create your own interactive visualizations using modern web-based frameworks. Topics include perception and cognition, color, data types and dataset types, marks and channels, interaction, and views.

 

CS5830: Data Science Incubator

Instructor: Dr. John Edwards (Regularly offered in Spring semesters)

This course is a practical, project-based introduction to production data science where students will learn data science concepts and techniques in a very applied setting. Students will examine many, many different datasets and work with them to accomplish different tasks of analysis as computer scientists and domain scientists work together to solve problems. Topics covered include bar charts, line charts, scatterplots, statistics, getting and cleaning data, k-nearest neighbors, Naive Bayes classifiers, linear regression, logistic regression, support vector machines, decision trees, and neural networks.

 

CS5840/CS6840: Social Network Analysis

Instructor: Dr. Hamid Karimi (Regularly offered in Fall semesters)

Online social media platforms have become an integral part of our societies in the 21st century. Billions of users have joined these platforms and are creating a gigantic amount of data at a very fast pace. Hence, there is an unprecedented demand for novel methods to both effectively and efficiently utilize this data for extracting insightful patterns. These patterns can then be used to understand the past, make predictions about the future, and ultimately take actionable steps towards improving our society. This is where we turn into social media mining which is the process of acquiring data from social media and finding meaningful patterns. Social media mining has numerous applications in different areas such as advertisement, education, security, healthcare, etc. This course introduces the background, techniques, and state-of-the-art concepts in social media mining while focusing on social relations, users, user-generated content, and applications. The course provides students with hands-on experience via working on real data from social media and further helps them develop efficient methods to process this data. Moreover, relevant papers from literature (both fundamental and new studies) will be provided to students, and they are encouraged to study these papers. Modules and their corresponding key topics covered in this course are (I) Foundation (introduction to graphs, graph models, network centrality measures, homophily measurement, information diffusion), (II) Deep learning on graphs (including network embedding and graph neural network models and applications) (III) Applications (including sentiment analysis, event detection, social spammer detection, and fake news detection).

 

CS5890/CS6890: ST: Introduction to Interactive Virtual Reality (a new course number will be assigned in Spring 2023)

Instructor: Dr. Isaac Cho (Regularly offered in Spring semesters starting Spring 2023

This course is an introduction to the core and state-of-art technologies and techniques of Virtual Reality. Topics covered include: head-tracked and head-mounted displays, 3D tracking, 3D user interfaces and interactions, VR applications, human perception, cognition and factors, evaluation of VR, and other VR-related topics. Students will develop a VR application with off-the-shelf VR devices.

 

CS5890/CS6890: ST: Introduction to Data Analysis (a new course number will be assigned in Spring 2023)

Instructor: Dr. Hamid Karimi (Regularly offered in Spring semesters starting Spring 2023)

Course description will come up soon.

 

CS6050/7050: Computational Geometry: Algorithms and Applications

Instructor: Dr. Haitao Wang (Regularly offered in Fall semesters in Odd Years (2021, 2023, etc.)

This course aims at gaining knowledge and learning theories in computational geometry, an important field of computer science. Students will study data structures and algorithms in which geometry plays a crucial role, with wide applications in databases, graphics, robotics, computer- aided design and manufacturing, and geographic information systems. The course explores Euclidean, Manhattan, and Lp distances; vectors; intersections; convex hull; binary lifting; convexity trick; sweep line algorithm; circular sweep line; geometric data structures; polygon triangulation; Voronoi diagram; and duality via paraboloid lifting.

 

CS6460: Usable Privacy and Security

Instructor: Dr. Mahdi Nasrullah Al-Ameen (Regularly offered in Fall semesters)

This course focuses on the human factors of privacy and security, with a goal of understanding user’s privacy perceptions, security behavior, and how to design and build secure systems with a human-centric focus. This interdisciplinary course is designed to introduce students to the basic principles of human-computer interaction, and apply these insights to the design of secure and privacy-protective systems. The topics in this course include, but not limited to human-centric design in user authentication and security warning, understanding user’s security mental model, privacy visualization in social media, smartphone, and IoT environment, and exploring usable solutions to the security requirements of the people with special needs (e.g., older adults, people with visual impairments, etc.).

 

CS6630: Fuzzy Logic and Its Application

Instructor: Dr. Heng-Da Cheng (Regularly offered in Spring semesters)

Students in this course will study a new method and a novel approach for dealing with uncertainties in thinking, problem solving, learning and reasoning. Topics may include classical sets and fuzzy sets; classical relations and fuzzy relations; membership functions; defuzzification; fuzzy operations and extension principle; and classical logic and fuzzy logic. Other topics may include fuzzy expert systems; fuzzy decision making; fuzzy pattern recognition; fuzzy control; and fuzzy measures.

 

CS6665: Data Mining

Instructor: Dr. Shuhan Yuan (Regularly offered in Spring semesters)

Data mining aims at finding useful patterns in large data sets. This course will introduce basic concepts and algorithms of data mining on various types of data. The course topics include frequent itemset mining, finding similar items, classification, clustering, data stream mining, dimensionality reduction, recommender systems, PageRank, and computational advertising.

 

CS6675/7675: Advanced Data Mining

Instructor: Dr. Soukaina Filali Boubrahimi (Regularly offered in Spring semesters)

This course provides a deep dive into advanced topics in mining texts, graphs, time-series data, vector datasets, and frequent itemset and association rules. The lectures will provide students with a sufficient foundation to apply data mining techniques on massive real-life data repositories using Python. Students will gain hands-on experience in the chosen aspect of the data mining area through the completion of a major data mining project. Topics covered include Node2Vec/Word2Vec models for text and graph embedding, vector space models, time series classifiers, representation learning, data reduction, and association rule mining.

 

CS6685: Deep Learning Theory and Applications

Instructor: Dr. Kevin Moon (Math & Statistics faculty) (Regularly offered in Fall semesters)

This course provides a principled and hands-on approach to deep learning with neural networks, which are important to machine learning tasks such as image recognition, speech recognition, and natural language processing. Students will master the principles and practices underlying neural networks including modern methods of deep learning, and will apply deep learning methods to real-world problems. Topics covered include machine learning basics, feedforward neural networks, stochastic gradient descent, backpropagation, convolutional neural networks (CNNs), recurrent neural networks (RNNs), autoencoders, generative adversarial networks (GANs), and transformers.

 

CS6800: Advanced Database Systems

Instructor: Dr. Curtis Dyreson (Regularly offered in Spring semesters starting Spring 2023)

This course is an advanced study of non-relational data models, the internals of a database management system, and database frontiers. Students will learn new ways to query and model data, as well as become familiar with the expanding role of database technology. Topics may include models and query languages, concurrency control, recovery, and security.

 

CS7150: Computational Complexity

Instructor: Dr. Haitao Wang (Regularly offered in Fall semesters in Even Years (2022, 2024, etc.))

This is a theory course and there will be no programming but lots of theoretical proofs. The major goal of the course is exploring how to deal with NP-Complete problems. Topics include the following: basic concepts such as P, NP, NP-Complete (NPC), NP-hard; how to prove a problem is NP-hard or NP-Complete; designing approximation algorithms; randomized algorithms, etc.

 

CS7650: Advanced IPPRCV

Instructor: Dr. Heng-Da Cheng (Regularly offered in Spring semesters in Even Years (2022, 2024, etc.))

This is an advanced study of image processing, pattern recognition, and computer vision issues. Students will learn about new developments in image representation, gray level images and color images, thresholding, segmentation, curve detection, visual perception, and statistical and syntactical pattern classification theories and applications. Topics may include feature and primitive selection; neural networks, fuzzy logic and genetic algorithms for CVPRIP; supervised and unsupervised learning; SVM for CVPRIP; and real application analysis and design.

 

CS5xxx/CS6xxx: Human Factors in Computing

Instructor: Dr. Mahdi Nasrullah Al-Ameen (Regularly offered in Spring semesters starting Spring 2023)

Course description will come up soon.

 

Elective Courses

 

CS3200: Mobile Application Development

Instructor: Joseph Ditton (Regularly offered in Fall semesters)

This course is an exploration of mobile application development. Students will design, build, and potentially publish several Android or iOS applications over the course of the semester. Topics include a high-level overview of mobile platforms, history of mobile devices, mobile economics, ethical advertising, Firebase, maps, GPS, device to device communication, mobile sensors, advanced UI, animation, cross-platform development, and publishing mobile applications.

 

CS3430: Scientific Computing with Python

Instructor: Dr. Vladimir Kulyukin (Regularly offered in Spring semesters)

Scientific Computing (SciComp) is the collection of algorithms, tools, and theories required to solve numerical problems in science, engineering, mathematics, economics, etc. By the end of this course, students will have mastered or become familiar with such topics as linear systems, LU decomposition, linear programming, simplex, differentiation engines, Newton-Raphson algorithm, central divided difference, integration approximation, periodic function approximation with Fourier series, congruence systems, Richardson's extrapolation, Romberg integration, decision trees, Huffman codes.

 

CS3460: Modern C++

Instructor: Dr. Dean Mathias (Regularly offered in Fall semesters)

This course is intended to develop the student’s understanding and use of the C++ programming language, with a particular focus on the latest C++ standards. It focuses on C++ as a systems language and emphasizes application/computational performance. Topics include history of C++, C++ ecosystem (e.g., CMake, gtest), dynamic memory, object oriented C++, functional C++, generic programming, and miscellaneous subjects such as containers, date and time handling, random numbers, and algorithms.

 

CS4320: Introduction to Machine Learning

Instructor: Dr. Shuhan Yuan (Regularly offered in Fall semesters)

Information retrieval is the process through which a computer system can respond to a user's query for text-based information on a specific topic. This course studies the basic and advanced techniques for building text-based information systems. Topics include text data preprocessing, boolean and vector-space retrieval model, text indexing, web search (crawling, link analysis, and storage), text classification and clustering, recommender systems, and question answering.

 

CS4460: Introduction to CyberSecurity

Instructor: Dr. Chad Mano (Regularly offered in Spring semesters)

This course introduces the concepts of cyber security, vulnerabilities, and the mechanisms to secure a system. The course covers the basics of a variety of topics including cryptography, web security, authentication, network security, system security, and software security, where students gain a primary understanding of the security vulnerabilities and protection techniques.

Career Electives

The following are elective course recommendations considering various career paths for those earning a degree in Computer Science.

Data Science Analyst

  • CS 3430 – Scientific Computing with Python
  • CS 5665 – Introduction to Data Science
  • CS 5830 – Data Science Incubator

Computer Vision/Machine Learning Developer

  • CS 5000 – Theory of Computability
  • CS 5600 – Intelligent Systems
  • CS 5665 – Introduction to Data Science
  • CS 5680 – Computer Vision: Foundations & Applications

Game Developer

  • CS 3460 – C++
  • CS 5400 – Computer Graphics I (taught infrequently)
  • CS 5410 – Game Development

Mobile Application Developer

  • CS 3200 – Mobile Application Development
  • CS 5800 – Introduction to Database Systems

Network Administrator

  • CS 4460 – Introduction to Cybersecurity
  • CS 5500 – Parallel Programming

Security Analyst

  • CS 3460 – C++
  • CS 4700 – Programming Languages
  • CS 4460 – Introduction to Cybersecurity
  • CS 6460 – Usable Privacy and Security

Software Engineer

  • CS 5000 – Theory of Computability
  • CS 5050 – Advanced Algorithms
  • CS 5110 – MultiAgent Systems
  • CS 5300 – Compiler Construction
  • CS 5800 – Introduction to Database Systems

Web Developer

  • CS 4610 - Modern Web Development
  • CS 5800 – Introduction to Database Systems