## Courses

**Foundations of Computer Science (CSci 60)**

Computer science spans a range of topics from theoretical studies of algorithms and the limits of computation to the practical issues of implementing computing systems. This course covers the foundations of computer science including logic, discrete mathematics, and aspects of computation. Particular emphasis is given to abstraction, iteration, induction, recursion, complexity of programs, data models, and logic. The course consists of 3 lecture and 2 lab hours, and is also supported by supplemental instruction

**Compiler Design (CSci 134)**

Compilers are fundamental to modern computing. They act as translators, transforming a human-oriented programming language into a computer-oriented machine one. Apart from being able to design such systems, compiler theory can also support better coding practices. This course offers a comprehensive coverage of compiler theory. It covers the syntax and semantics of programming languages and the main phases of the compilation process (i.e., lexical analysis, parsing, semantic analysis, code generation and optimization). Emphasis is given on lexical analysis, several parsing techniques including SLR and LALR parsing, parser generators, the role of symbol table organization and semantic action routines.

**Simulation (CSci 154)**

A computer simulation is a generally approximate imitation of the operation of a process or a system based on a respective model using a computer. Computer simulation is a powerful tool for the study of complex systems in computer science, statistics and operations research. This course covers the basic principles and phases of computer simulation, including a review of the basic principles behind and examples of simulation languages with a focus on the Python programming language. Particular emphasis is given on data mining and modeling, as well as on generating random variables, as an integral part of the computer simulation process.

**Introduction to Reinforcement Learning (CSci 291T)**

Reinforcement learning lies in the intersection of mathematics, computer science, engineering, economics, neuroscience and psychology, and deals with designing agents that interact in unknown and stochastic environments. It has produced some extremely successful applications in domains ranging from game playing to manufacturing and is a highly active area of research. This course covers the basic concepts and current trends in reinforcement learning, including the theory of Markov decision processes, dynamic programming, temporal difference learning, Monte Carlo methods, and the role of function approximation.

All courses taught are hosted on canvas.