Teaching
Banerjee has been teaching in the Department of Computer Science at Stony Brook University since 2016. His experience spans both graduate and undergraduate courses, ranging from large core classes of over 250 students to specialized advanced courses with fewer than 20 students.
SPRING 2025
CSE 216 : PROGRAMMING ABSTRACTIONS (UNDERGRADUATE)
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 concurrency.Course Page | Syllabus [ PDF ]
CSE 583 : PROGRAMMING ABSTRACTIONS (GRADUATE)
Programming concepts and paradigms, including functional programming, object-orientation, basics of type systems, program and data abstractions, parameter passing, and modularity.Course Page | Syllabus [ PDF ]
UNDERGRADUATE
Natural Language Processing | Machine Learning | Information Theory & Communication† | Computational Finance† | Programming Abstractions† | Data Structures | Systematic Program Design, Coding & Testing | Foundations of Computer Science
GRADUATE
Machine Learning | Programming Abstractions†
† designed and developed by BanerjeeUndergraduate Teaching
NATURAL LANGUAGE PROCESSING Spring 2024
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-19
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 & COMMUNICATION Fall 2017
Information Theory is one of the very few fields in computer science that have a well-defined beginning, in Claude Shannon's famous paper, "A Mathematical Theory of Communication" (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-23 | Fall 2024 | Spring 2025
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 concurrency. Programming assignments utilize a variety of high-level languages such as OCaml, Java, and Python.
SYSTEMATIC PROGRAM DESIGN, CODING, & TESTING Spring/Fall 2016-17 | 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/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-23 | Spring 2025
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.