Banerjee has taught since 2015 at the Department of Computer Science, Stony Brook University. His teaching experience covers graduate as well as undergraduate classes, ranging from large classes (250+ students) on core topics to specialized advanced courses with small classes (< 20 students).

Course Designer & Developer



Academic Instructor


Natural Language Processing  |  Machine Learning  |  Information Theory & Communication  |  Computational Finance  |  Programming Abstractions  |  Data Structures  |  Systematic Program Design, Coding & Testing  |  Foundations of Computer Science


Machine Learning  |  Programming Abstractions





Undergraduate Teaching


Introduction to basic natural language analysis tasks such as language modeling and syntactic analysis, as well as core applications such as text classification, information extraction, question answering, and machine translation, including relevant algorithms, machine learning solutions, and evaluation methodologies.

MACHINE LEARNING        Spring 2016 | Spring 2017 | Spring 2018 | Spring 2019

Covers fundamental concepts for intelligent systems that autonomously learn to perform a task and improve with experience, including problem formulations and learning frameworks, standard models, methods, computational tools, algorithms and modern techniques, as well as methodologies to evaluate learning ability and to select optimal models. Applications to areas such as computer vision, natural language processing, and robotics motivate the material.


Information Theory is one of the very few fields in computer science that have a well-defined "beginning", originating with Claude Shannon's famous paper, A Mathematical Theory of Communication, in 1948. For a few decades, this field remained in relative obscurity, until results from information theory started to play a fundamentally important role in artificial intelligence, cryptography, computer security, data processing and storage, etc. This course introduces the basic concepts of information theory, and then dives into some important applications of the theory. A part of the coursework will involve seminar-style presentations and discussions. Topics include mutual information, data compression, entropy and counting, amortized complexity, streaming algorithm bounds, pseudorandom generation, data processing in noisy channels, and applications in AI.

COMPUTATIONAL FINANCE        Fall 2018 | Spring 2024

The financial industry is a major employer of computer science graduates, and this industry is undergoing tremendous changes vis-à-vis automation and AI-driven processes. In this course, we will study the basic tools and terminology of finance, and focus on computational and mathematical modeling techniques used in financial data analysis. In particular, we will study derivatives, pricing models, and financial time series.

PROGRAMMING ABSTRACTIONS        Spring/Fall 2019 | Spring/Fall 2020 | Spring/Fall 2021 | Spring/Fall 2022 | Spring/Fall 2023

Intermediate-level programming concepts and paradigms, including functional programming, object-orientation, basics of type systems, memory management, program and data abstractions, parameter passing, modularity, and parallel programming. Programming assignments utilize a variety of high-level languages such as OCaml, Java, and Python.

SYSTEMATIC PROGRAM DESIGN, CODING, & TESTING        Spring/Fall 2016 | Spring/Fall 2017 | Spring 2018 | Spring 2019

Development of the basic concepts and techniques learned in introductory computer science courses into practical programming skills that include a systematic approach to program design, coding, testing, and debugging. Application of these skills to the construction of robust programs of several thousand lines of source code. Use of programming environments and tools to aid in the software development process. The course instills an appreciation of modularity and the use of appropriate design patterns in the context of large-scale object-oriented programming.

DATA STRUCTURES        Fall 2015 | Spring/Fall 2016 | Spring 2017 | Fall 2020 | Fall 2022 | Fall 2023

Programming concepts for data storage and manipulation on complex data sets. Topics include data structures like stacks, queues, binary trees, heaps, balanced trees, and graphs, and searching and sorting algorithms with asymptotic analysis of efficiency. Recursion is heavily utilized.

FOUNDATIONS OF COMPUTER SCIENCE        Spring 2016 | Summer 2018

Introduction to the logical and mathematical foundations of computer science. Topics include functions, relations, and sets; recursion; elementary logic; and mathematical induction and other proof techniques; an understanding of recursion as a computing paradigm.

Graduate Teaching

MACHINE LEARNING        Spring 2020 | Summer 2020

The theory and practice of machine learning from a variety of perspectives. Topics include Bayesian networks, decision tree learning, support vector machines, statistical learning methods and unsupervised learning, as well as theoretical concepts such as the PAC learning framework, margin-based learning, and VC dimension. This course is designed to give a graduate student a thorough grounding in the methodologies, technologies, mathematics, and algorithms relevant to machine learning.

PROGRAMMING ABSTRACTIONS        Spring 2021 | Spring 2022 | Spring 2023

Programming concepts and paradigms, including functional programming, object-orientation, introduction to type systems, program and data abstractions, parameter passing, modularity, and concurrency. This course does not attempt to teach multiple programming languages. Instead, the core idea is to understand the concepts underlying various paradigms, how and when they can or should be used, and how to transfer the concepts across programming languages.