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.