Introduction to Modern Cryptography
Three credits. Prerequisites: CSE 3400, CSE 3500; and STAT 3025 or 3345 or 3375Q or MATH 3160.
An introduction to the fundamentals of modern cryptography focusing on development of secure cryptographic tools based on hard computational problems. Topics include one-way functions, pseudorandom generators, encryption, digital signatures, and protocols.
- Teacher: Alexander Russell

This course will take your abilities from zero to being able to write a compiler for a "mini" programming language. Success implies that you will learn about lexing, parsing, type checking, and code generation. We will take advantage of the LLVM platform as extensively as possible. By the end, you will either tame the Compiler Dragon... Or it will tame you! Come and have fun! Knowledge of C / C++ strongly advised.
- Teacher: Laurent Michel

CSE5707: Discrete Optimization
The course will delve into methods and techniques used to solve combinatorial optimization problems with examples drawn from industry and covering scheduling, resource allocation or routing to name just a few. It will focus on mainstream optimization techniques with an emphasis on mathematical programming (e.g., Linear Programming, Integer Programming, Constraint Programming).
- Teacher: Laurent Michel
CSE 3160. Functional Programming Fundamentals. (3 Credits)
The course covers fundamental techniques in functional programming. While the primary focus is purely functional programming, side effects are explored for various purposes such as modeling I/O and rendering stateful objects. The course introduces elementary types, control flow, environments and scoping, closures, and other structural features of typical functional programs. The course may cover additional topics such as typed functional programming languages, type inference, continuation-passing, streams, and monads.
Enrollment Requirements: CSE 3100.
- Teacher: Tim Curry
- Teacher: Laurent Michel