Available courses

The course covers fundamental techniques in functional programming. With the primary focus on purely functional programming, the courses explores how to handle state transformation and IO. The course introduces elementary types, control flow, environments and scoping, closures, and other structural features of typical functional programs. The course will cover additional topics such as typed functional programming languages, type inference, continuation passing, streams, algebraic data types including monads.

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). 

CSE 3150 covers all the essential capabilities of C++, illustrating their specificities as well as how the language can be used to model object-oriented implementation of a number of classic problems.

CSE1729 is a rigorous introduction to programming based on the famous text "Structure and Interpretation of Computer Programs," by Abelson and Sussman. The course covers basic programming in a largely declarative style using Scheme, a simple but powerful programming language. The course covers elementary design principles, including object-oriented design, and basic data structures such as binary trees, and heaps as well as Abstract Data Types such as stacks, and queues.

CSE 2500 Introduction to Discrete Systems taught by Kaleel Mahmood.

CSE 1729 Spring 2022, section taught by Kaleel Mahmood. 

Three credits.

Two 50 minutes "flipped" lectures and one 2-hour laboratory per week.


CSE2100 or CSE2050.


Introduction to system-level programming with an emphasis on C programming, process management, and small scale concurrency with multi-threaded programming. Special attention will be devoted to proficiency with  memory management and debugging facilities both in a sequential and parallel setting.

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.