I am primarily a Senior Lecturer at Yale University at the School of Engineering & Applied Science. My primary teaching interests are in computer graphics, building game engines, and computer systems. My current research interests are in the domains of real-time computer graphics, software visualization/program analysis, and education.
Along with teaching and research, I juggle occasional consulting work as a 3D Senior Graphics Engineer and Technical Trainer. My [Youtube] channel is also frequently updated with training and educational materials.
My research interest is in analyzing the performance of real time systems. Typically applications where performance matters are in the domains of game engines, computer graphics, and intensive system applications. I perform my research by building static analysis, dynamic analysis, and software visualization tools. [Google Scholar Link]
Current Northeastern students wanting to get involved with my research can browse various Sidequests to get some ideas of projects that may be mutually interesting projects.
MD Shah
Links: [ Published Link]
This was a course presented at SIGGRAPH on an introduction to scripting in Blender3D. It was designed to be a very accessible look at programming 3D tools, with some fun geometry algorithms. The end result is that if you can program, experiment, and used Blender3D as a sandbox -- you may gather some cool insights and build useful tools for the 3D pipeline.
MD Shah
Links: [Preprint][ Published Link]
This work is on a new course I developed to open computer graphics to a wider diversity of students. The course is programming-language agnostic and focuses on image rendering using path tracing with utilizing only freely available resources
F Muzny, MD Shah
Links: [ Published Link]
This is an adaptable curriculum for training undergraduate and graduate teaching assistants with emphasis on both technical training and training on interpersonal skills and communication.
J Merrin, M Shah
Links: [ Published Link]
This is an early work on a strategy for creating dynamic vertex hierachies for view-dependent mesh simplification.
A Turcotte, MD Shah, MW Aldrich, F Tip (Best Artifact Award)
Links: [ Published Link][Slides]
Dr. Async is a lightweight static analysis for identifying anti-patterns in promise-based JavaScript. The accompaning analysis is complemented with a novel software visualiztion tool for examining asynchronous JavaScript.
Y Sun, Y Zhang, A Mosallaei, MD Shah, C Dunne, D Kaeli
Links: [Preprint]
Daisen is a Web-Based interactive visualization for examining GPU execution traces targetted towards GPU designers.
R Toppur, MD Shah
Links: [ Published Link]
This is a sample curriculum to integrate CUDA programming into non-traditional CUDA domains (e.g. security) to expose students to high performance computing (HPC) who would otherwise not be exposed.
Z Casey, MD Shah
Links: [ Published Link]
This is a framework for writing performance claim annotations ("performance assertions") for use in a dynamic analysis -- consider this an "exception" but for performance metrics.
EC Sheffield, MD Shah
Links: [Preprint][ Published Link]
This is work on Procedural Conteng Generation (PCG) for game level design using reinforcement learning
MD Shah, SZ Guyer
Links: [Preprint][ Published Link][Slides]
Iceberg is a Java-based dynamic analysis built on the Soot framework for finding performance variability in critical sections.
MD Shah, SZ Guyer
Links: [Preprint][ Published Link]
This is a collection of software visualizations used to build a 'story' capturing performance features of a program in a notebook like way.
MD Shah, SZ Guyer
Links: [Preprint][ Published Link]
A novel software visualization tool using for representing both static and dynamic call graph information of programs. Real-time Software Visualization helps handle challenge of understanding large software applications.
MD Shah, SZ Guyer
Links: [Preprint][ Published Link]
Iceberg is a static analysis for detecting possible overuse of the 'synchronized' keyword in Java.
The following table lists all of the courses I have developed and previously taught.
Course Number | Title | Semester |
---|---|---|
(NEU) CS 4300/5310 | Computer Graphics (Ugrad/Grad) | Sp18, F18, Su19, Su20, Su21,F21, Sp22, Su22,F22,Su23,F23,Sp24,F24 |
(NEU) CS 4360/5360 (Formerly 4910/7680) | Computer Graphics - Non-Interactive Rendering Techniques | Su21, Su22,Su23, F23 |
(NEU) CS 7380 | CS - Advanced Computer Graphics | Su24 |
(NEU) CS 5350 | CS - Applied Geometric Representation and Computation | Su23, Su24 |
(NEU) CS 4910/7680 | Special Topics in CS - Performance Engineering | Su20 |
(NEU) CS 3520 | Programming C++ | Su21,F22 |
(NEU) CS 5008/5009 | Data Structures, Algorithms, and Their Applications within Computer Systems | Sp21,Sp22 |
(NEU) CS 3650 | Computer Systems | F17, F18, F19 |
(NEU) CS 5600 | Computer Systems (Grad) | Su18 |
(Yale) CPSC 411/511 | Building Game Engines (Ugrad/Grad) | F24 |
(NEU) CS 4850/5850 | Building Game Engines (Ugrad/Grad) | Sp18, Sp19, Sp21, Sp23, Sp24 |
(NEU) CS 4955 | Teaching Computer Science | Sp20 |
(NEU) CS 5500 | Foundations of Software Engineering | Sp20,F20, F21, Sp23,F23 |
(NEU) CS 5006 | Algorithms (Align-Grad) | Sp19, Su19 |
(NEU) CS 5007 | Computer Systems (Align-Grad) | Su18, Sp19, Su19 |
(NEU) CS 5340 | Human Computer Interaction (Grad) | F17 |
(NEU) CS 1802 | Discrete Mathematics | F17 |
(Tufts) Comp 11 | Introduction to Computer Science | Su17 |
Year | Event | Title | Resources | 2024 | Meeting C++ | TBD | [Slides] |
---|---|---|---|
2024 | NYC++ Meetup | TBD | [Slides] |
2024 | DConf 2024 | The Case for Graphics Programming in Dlang Part 2 - Tech Demo | [Slides] | 2024 | CppIndia | Getting Started with Modern C++ - A Tour of Features | [Slides] | 2024 | C++ North | A Study of Plugin Architectures for Supporting Extensible Software | [Slides] | 2024 | SIGGRAPH | Talk | [Slides coming soon] | 2024 | SIGGRAPH | Course | [Slides coming soon] | 2024 | Private Corporate Event at a Gaming Company | Title/abstract to be released in 2029 | [Talks of this type available for corporate training] | 2024 | C++ FRench User Group (FRUG) | Fundamentals of ConcurrencyThreads, Pools, and Patterns -- in C++ | [Slides] | 2024 | ACCU 2024 | How DLang Improves my Modern C++ and Vice Versa | [Slides] | 2024 | Munich C++ User Group -- invited (virtual) speaker | The Flyweight Design Pattern | [Slides] | 2024 | DConf Online | The Case for Graphics Programming in Dlang | [Slides] | 2024 | C++ Online | The Strategy Design Pattern | [Slides] | 2024 | Tufts University SIGGRAPH Guest Lecture | Introduction to scripting in Blender3D | [Slides] | 2024 | FOSDEM | The D Programming Language for Modern Open Source Development | [Slides] | 2024 | Invitation for Guest Lecture on Design patters in CFTT - University of Tehran | Thinking about Design with Patterns -- Visitor Pattern -- in C++ | [Slides] | 2023 | Meeting Cpp 2023 | Introduction to C++ Containers-- Know Your Data Structures | [Slides] | 2023 | Blender Conference 2023 | Getting Started with Scripting in Python | [Slides] | 2023 | Cppcon 2023 | Back to Basics: Functions | [Slides] | 2023 | DConf 2023 (With 4 students) | A Semester at University: Teaching Software Engineering in DLang | [Slides] | 2023 | cppIndia Conference | Optimization Design Patterns | [Slides] | 2023 | C++ Italy Conference | Optimization Design Patterns | [Slides] | 2023 | Core CPP | Running Away From Computation -- An Introduction | [Slides] | 2023 | MIT IAP - D Programming Workshop | Introduction to Phobos Standard Library | [Slides] | 2022 | DConf Online 2022 | Engineering a Ray Tracer (The Next Weekend) | [Slides] | 2022 | Handmade Seattle 2022 - Systems Programming Conference | Introduction to Memory Allocation Design and Implementation | [Slides] | 2022 | 2022 - Northeastern University Mathematics Club | Introduction to Computational Geometry | [Slides] | 2022 | CppCon 2022 | Software Design Track - The Observer Pattern | [Slides] | 2022 | CppCon 2022 | Back to Basics - Debugging | [Slides] | 2022 | Core CPP | Introduction to Smart Pointers and Why | [Slides] | 2022 | Career Seminar | Northeastern Vancouver Campus Visit | [Slides] | 2022 | DConf 22 | Ray Tracing in (Less than) One Weekend with Dlang | DConf 2022 | [Slides] | 2022 | C++ on Sea | Beginners Guide to C++'s Best Kept Secret - std::algorithm | [Slides] | 2022 | ACCU | How I Teach Modern C++ One Pixel at a Time | [Slides] |
2021 | CPPCON | Back to Basics: Pointers | [Slides tbd] |
2021 | CPPCON | Back to Basics: Concurrency | [Slides tbd] |
2021 | CPPCON | Software Design: The Factory Pattern | [Slides tbd] | 2021 | First Byte Student Organization Invited Guest Speaker | Teaching in One Minute | [Slides] | 2021 | Inaugural Illinois Computer Science Summer Teaching Workshop | Evolving the Course Website and Lecture for Online Teaching | [Slides] |
2021 | (Invited Talk) Boston Fusion | Game Engines - What Problem Are you trying to Solve? | [Slides] |
2021 | Northeastern Workshop | Building a Game Portfolio | [Slides] |
2020 | CPPCON | Back to Basics: Design Patterns | [Slides] |
2020 | Northeastern U. - Khoury College Tech Talks | Performance Engineering and Program Analysis | [Slides] |
2019 | ACCU Autumn | Introduction to Cache Oblivious Algorithms | Slides to be posted |
2019 | Northeastern+MIT LLVM Seminar | Introduction to Program Analysis | [Slides] |
2019 | Northeastern+MIT LLVM Seminar | Introduction to Clang | [Slides] |
2019 | Northeastern+MIT LLVM Seminar | Introduction to LLVM | [Slides] [files] |
2019 | Northeastern U. ACM Student Chapter | Introduction to Program Analysis | [Slides] |
2019 | Northeastern U. Workshop | Building a Game Portfolio | [Slides] |
2018 | Northeastern U. Teaching Faculty Seminar | Introduction to Github Classroom | [Slides] [Video] |
2018 | CPPCON | Let's Build an OpenGL Logger | [Slides and Video] |
2018 | Northeastern U. Workshop | CS1200 Careers Talk | [Slides] |
2018 | Northeastern U. Workshop | Building a Game Portfolio | [Slides] |
2018 | Northeastern U. Workshop | (Guest Lecture Nathaniel Tuck) Operating Systems | [Slides] |
2018 | FOSDEM | Introduction to LLVM | [Slides and Video] |
2017 | Northeastern U. Workshop | Getting a job in the game industry | [Slides] |
2017 | (Guest Lecture) MIT Performance Engineering | Hands on Introduction to LLVM Lecture | [Slides] |
2016 | MIT LLVM Seminar | Profile-Guided Optimization LLVM Lecture at MIT | [Slides] |
2016 | Tufts University - 4th Tufts Ignite Talk | (CSI) Critical Section Investigator (3rd Place Talk) | N/A |
2016 | MIT LLVM Seminar | Introduction to LLVM | [Slides] |
2016 | Tufts University - Teaching Fellow talk | Introduction to Parallelism | [Video] |
2016 | (Invited Talk) Cambridge Pint of Science | How do Computers Compute so Fast | [Slides] |
2016 | 19th Annual Tufts Graduate Student Research Symposium | TBD | N/A |
2015 | Tufts University - 3rd Annual Tufts Ignite Talk | Microarray Visualization (3rd Place Talk) | [Slides] |
2015 | PLMW | Programming Language Mentoring Workshop One-Minute Madness Talk | [Slide] |
2014 | Tufts University | 18th Annual Tufts Graduate Student Research Symposium | TBD |
2014 | (Guest Lecture for Remco Chang) | Tufts University - Computer Graphics Shaders | N/A |
2014 | 1st Annual Tufts Ignite Talk | Code Advisor | N/A |
2013 | PLDI | Fun and Interesting Ideas | [Slides] [Paper] |
(Please see my CV for a fully up to date list) I have participated in helping create many university organizations, and served in several roles to improve the academic experience of undergraduate and graduate students.
These days I am active in various professional programming conferences like CPPCON and serving on programming committees for SIGGRAPH and SIGCSE in various capacities.