Undergraduate
Selected Electives
On this page, the Department highlights selected electives. Our electives bring cutting-edge topics to our students – it is one way that we bring our research into the classroom. USF Course Inventory can be used to determine the prequisites for each course.
Computer Science & Computer Engineering
CAP 4034: Computer Animation Fundamentals - An introductory course to computer animation. Topics include storyboarding, camera control, hierarchical character modeling, inverse kinematics, keyframing, motion capture, dynamic simulation, and facial animation.
CAP 4063: Web Application Design - Analysis, design, and development of software that operates on web servers and web browsers, supporting multiple concurrent users.
CAP 4401: Image Processing Fundamentals - Practical introduction to a range of fundamental image processing algorithms. Extensive programming, with emphasis on image analysis and transformation techniques. Image transformation and manipulation.
CAP 4621: Introduction to Artificial Intelligence - Basic concepts, tools, and techniques used to produce and study intelligent behavior. Organizing knowledge, exploiting constraints, searching spaces, understanding natural languages, and problem solving strategies.
CAP 4628: Affective Computing - This course studies affective computing systems that can recognize, interpret, process, and simulate human affect. Topics include physiology of emotion, lie detection, wearable devices, music, gaming, and ethical, social, and philosophical concerns.
CAP 4662: Introduction to Robotics - This course will introduce students to the fundamental theory and practice of robotics. Kinematics theory, robot motion planning algorithms, and designs of robotic systems.
CAP 4773: Social Media Mining - The objective of this course is to learn how to identify and mine user patterns from social media. We will cover the fundamentals tools and techniques of social media mining --- like the analysis of social networks --- and some of its applications, like news aggregation and recommendation systems. The course will include a project-based programming assignment in which students will learn how to use Python to connect to social media APIs, crawl data, and mine information from them.
CAP 4637: Automated Reasoning and Theorem Proving - This course covers the principles of automated reasoning/mechanical theorem proving. Topics to be covered include propositional logic, predicate logic, skolem standard forms, various resolution principles and methods, and non-classical logics.
CDA 4253: Field Program Gate Array Design - Covers analysis and design of digital systems using VHDL simulation. Provides experience with field programmable logic gates and gate arrays. Introduces the requirements for field programmable systems; testing of circuitry, and analysis of system design.
CDA 4321: Cryptographic Hardware and Embedded Systems - Introduces concepts related to the engineering aspects of cryptography, especially those related to embedded hardware systems. Student build upon previous experience to understand the security concerns of cryptographic hardware and embedded systems.
CDA 4621: Control of Mobile Robots - Mobile robotic control system design and implementation. Includes microcontroller, sensor, and actuator control processes for localization and navigation. Team project development of software interface for robot control.
CEN 4072: Software Testing - The course provides the fundamental principles and tools for testing and validating large-scale software systems. The course is open to majors as well as non-majors.
CAP 4160: Brain-Computer Interfaces - This course involves the exploration of new forms of Human-Computer Interaction (HCI) based on passive measurement of neurophysiological states (cognitive and affective). Explores the uses of non-invasive ubiquitous electroencephalographic (EEG) brain technologies. Students will learn the basics of other brain imaging technologies such as near-infrared spectroscopy (fNIRS) and Functional Magnetic Resonance Imaging (fMRI) and how they can be studied in the field of computing, and ways to use such measurements as a form of brain-controlled machines.
CAP 4641: Natural Language Processing - Provides an introduction to the field of Natural Language Processing (NLP), the study of how to use artificial intelligence to understand text written by people in natural settings. We will cover vector embeddings, calculating text similarity, and various language models, primarily using Python (prior experience is recommended, but not required).
COT 4601: Quantum Computing and Quantum Algorithms - This course serves as an introduction to and a survey of quantum computing. In this course, we will discuss the concept of the qbit and how quantum computers may be constructed using qbits. We will also discuss potential algorithmic benefits of quantum computers.
COP 4365: Software System Development - Analysis, design, and development of software systems using objective methodology with object oriented programming and advanced software development tools (such as integrated development environments).
COT 4210: Automata Theory/Formal Languages - Introduction to the theory and application of various types of computing devices and the languages they recognize.
COT 4521: Computational Geometry - Computational geometry is the study of efficient algorithms to solve geometric problems. Topics covered include Polygonal Triangulations, Polygon Partitioning, Convex Hulls, Voronoi Diagrams, Arrangements, Search and Intersection, and Motion Planning.
CIS 4345: Big Data Storage and Analysis with Hadoop - An introduction to design and analysis big data storage and analysis systems. Topics include cluster architecture of Hadoop Distributed File System, big data analysis in MapReduce, Spark, and other Hadoop ecosystems, such as Hive, Pig, OoZie, and Sqoop.
COP 4520: Computing in Massively Parallel Systems - This course looks at basics in large-scale parallel computing, CUDA programming, advanced techniques for code optimization, and domain-specific case studies. Students will engage in hands-on experience in CUDA programming.
CNT 4800: Network Science - This course will provide an introduction to graph theory and hands-on experience with analyzing real network datasets. The graph theory component provides the rigorous platform for understanding graph properties, important graph metrics, and different types of graphs. The data analysis component aims to build familiarity with basic tools for measuring graph properties and interpreting results.
CIS 4212: Privacy-Preserving and Trustworthy Cyber-Infrastructures - This course will explore emerging cyber-security technologies addressing security issues of cyber-infrastructures. It will cover privacy-enhancing and trustworthy techniques for cloud computing and internet of thing systems. It will also capture cryptographic techniques that are used to secure critical cyber-systems such as blockchains, vehicular networks and aerial drone systems.
CAP 4111: Introduction to Augmented and Virtual Reality - This course will introduce students to the variety of computer graphics and computer vision techniques that make modern augmented and virtual reality systems immersive. Students will engage in a semester's-long group project from concept-to-demo, targeting their choice of application in augmented, mixed, or virtual reality.
CDA 4323: Practical Hardware Security - Security has historically been considered a software-level issue. It was assumed that the hardware was trustworthy, that it was doing what it was designed to do, and nothing more. Recent years have shown that hardware is not impervious to attack, and that ensuring the trustworthiness of software starts with ensuring the trustworthiness of the hardware. Thus, hardware is the root of trust. In this course, we will investigate issues related to ensuring the security and trustworthiness of hardware, including ASICs, FPGAs, and CPUs. We will discover the diverse ways hardware can be attacked, what countermeasures can protect against these attacks, and how the constant back-and-forth between those attacking the hardware, and those trying to protect it, drives innovation on both sides – for better or for worse.
CIS 4930: Computational Modeling Reasoning - Different paradigms for computationally modeling reasoning will be covered, including formal logical reasoning, informal argumentation, analogical reasoning, and approximate inference methods. Some experience in the following is recommended, but not required: Propositional calculus or Boolean algebra; and Python programming.
CIS 4930: Biometric Authentication on Mobile Development - In this course, we will explore various biometric implementations as a more conclusive alternative to user authentication. In particular, we will carefully consider the framework for a biometric system, and how mobile device platforms offer unique challenges in regard to this framework and other biometric properties. We will discuss and implement innovative ideas which coincide with and/or extend the research literature in regard to mobile device biometrics, incorporating various elements associated with machine learning, pattern recognition, and cybersecurity.
CIS 4930: Digital Circuit Synthesis - Digital circuit modeling and abstractions, hardware description languages, behavioral and logic synthesis algorithms, automatic circuit optimization, datapath and control synthesis, algorithmic transformations, and design space exploration.
CIS 4930: Capture the Flag - This is a new course and we are very excited to be offering it. At its heart, this course is being offered to help students interested in computer security compete in Capture the Flag competitions. This course will help you to understand computer security fundamentals, as well as prepare you to for the computer security profession. This course covers fundamental problems, principles, and practical problem-solving techniques employed in various subfields of computer security; many of the techniques will be demonstrated and practiced using commonly used and customized tools and reinforced through CTF challenges.
CIS 4930: Cyber-Physical Systems - This course considers cyber-physical systems and their design principles. Issues of cyber-physical systems at design/run time and possible approaches to addressing those issues will be discussed.
CIS 4930: IoT System Design - In this course, we will learn what an IoT system is, different layered IoT architecture models, edge and fog computing concepts, design IoT systems for applications in various domains, such as, smart home, smart transportation, smart health, etc. We will also into security aspects of IoT Hands-on design exercises will be completed using IoT design kits.
CIS 4930: Comp Methods for Imaging - Computational imaging systems fully integrate sophisticated computational algorithms into the image-formation pipeline of imaging systems, thus enabling novel imaging systems with capabilities that transcend the limits of conventional imaging systems. In recent years, there has been a rapid growth in the application of computational imaging in consumer photography, microscopy, human computer interaction, autonomous navigation, scientific and biomedical imaging, defense and security, as well as remote sensing. In this course, we will study the computational aspects that form the core of these systems from a signal processing (and inverse problems) perspective. We will also explore, recent, exciting examples of computational imaging in action: From 3D imaging with as little as one detected photon per pixel and seeing around corners, to imaging of biological structures previously thought to be unresolvable using light.
CIS 4930: Embedded Systems - Embedded systems are computing systems – complete with a processor, memory, input/output and peripheral devices, embedded within a larger system. Dozens of different application areas use embedded systems for various control and monitoring tasks, and every area adds its own unique requirements and constraints. The ubiquity of these systems means that research and innovation in diverse technology areas, e.g. processing architectures, memory technologies, device fabrication, sensors, etc. can have a profound impact on our everyday lives. This course provides a foundation in the fundamental technologies used in embedded systems, as well as emerging application areas, through lectures and student-led presentations and discussions.
Information Technology & CyberSecurity
CIS 3363: IT Systems Security - This course covers foundations of systems security, including availability, authentication, access control, network penetration/ defense, reverse engineering, cyber physical systems, forensics, supply chain management, and secure systems design. Please note this course is for Cybersecurity majors only.
CNT 4403: Network Security and Firewalls - This course surveys network security standards and emphasizes applications that are widely used on the Internet and for corporate networks. This course also examines Firewalls and related tools used to provide both network and perimeter security. This is a core class for Cybersecurity majors, but it can be requested as an elective for Information Technology.
COP 4200: Penetration Testing for IT - Penetration testing and related software tools are presented. Legalities and various cyber-attacks such distributed denial of service, man-in-the-middle, and password attacks are covered. Methods to correct security flaws are given. This is a core class for Cybersecurity majors, but it can be requested as an elective for Information Technology.
COP 4883: Java Programming for IT - This course explores advanced programming techniques, using the Java language. Topics include generic programming applied to the Java collection framework, meta-programming allowing the code to inspect and interact with itself at runtime, and functional programming with the new stream API.
COP 4931: Information Privacy Trust Systems - This course covers foundational concepts, algorithms, protocols and tools to enhance information privacy for trustworthy computing systems, with a clear emphasis on both theoretical concepts and practical applications, and impact.
COP 4931 Capture the Flag - This is a new course and we are very excited to be offering it. At its heart, this course is being offered to help students interested in computer security compete in Capture the Flag competitions. This course will help you to understand computer security fundamentals, as well as prepare you to for the computer security profession. This course covers fundamental problems, principles, and practical problem-solving techniques employed in various subfields of computer security; many of the techniques will be demonstrated and practiced using commonly used and customized tools and reinforced through CTF challenges.