Teaching
Class websites for classes I taught at UNCG (since 2019) are available here.
Class Websites
CSC 452/652/752: Theory of Computation
Semesters: Spring2025 Fall2024 Spring2020
Finite state automata and regular expressions, context-free grammars, push-down automata and their use in parsing, overview of language translation systems, models for programming language semantics, computability and undecidability.
CSC 481/681: Principles of Computer Security
Semesters: Spring2025 Spring2024 Spring2023 Fall2021 Fall2020 Fall2019
Core concepts in computer security, including the security goals of confidentiality, integrity, and availability; authentication; access control; secure software development; use of cryptography; and basic network security.
CSC 485/685: Modern Cryptography
Semesters: Fall2023
Theory and practice of cryptography, emphasizing formal models and security reasoning. Primitives covered include private and public-key encryption, message authentication codes, hash functions, digital signatures, secret sharing, and zero-knowledge proofs.
CSC 362: System Programming
Semesters: Spring2023 Fall2021 Spring2021
System programming with emphasis on processes, memory management, multithreaded programming, synchronization and deadlocks, interprocess communication, parallel and distributed computing, networking, files systems, security, signals, and virtualization containers.
CSC 454/654: Algorithms Analysis and Design
Semesters: Spring2022 Spring2021 Spring2020
Sequential algorithm design and complexity analysis. Dynamic programming. Greedy algorithms. Graph algorithms. Selected advanced topics from NP-completeness; approximation, randomized, parallel, number-theoretic algorithms; Fast Fourier Transform; computational geometry; string matching.
CSC 495/693: Software Security
Semesters: Spring2022
Common security-relevant bugs in software, including buffer overflows, return-oriented programming, stack smashing, integer overflow, SQL injection, cross-site scripting. Secure development techniques including good programming practice and static analysis.
CSC 439/639: Introduction to Compiler Design
Semesters: Fall2020
Basic techniques of compiler design and implementation: lexical analysis, parsing, code generation. Sizable programming project implementing a compiler for a block-structured language with strong typing.
CSC 656: Foundations of Computer Science
Semesters: Fall2019
Introduces the mathematical foundations that support advanced studies in computer science including computer programming and the analysis of algorithms.