Professor Shah headshot

About Mike Shah

(He/Him; Phonetic pronounciation: (Mike: /ˈmaɪk/) (Shah: /ˈʃɑ/))

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.

Contact

Research

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 Yale students wanting to get involved with my research can browse some graphics and systems research projects and various Sidequests to get some ideas of projects that may be mutually interesting projects.

Introduction to Scripting in Blender3D: Computational Geometry Algorithms

Introduction to Scripting in Blender3D: Computational Geometry Algorithms (2024)

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.

There Can Be (at least) Two Introductory Graphics Courses: Teaching Introduction to Non-Interactive Computer Graphics

There Can Be (at least) Two Introductory Graphics Courses: Teaching Introduction to Non-Interactive Computer Graphics (2024)

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

Teaching Assistant Training: An Adjustable Curriculum for Computing Disciplines

Teaching Assistant Training: An Adjustable Curriculum for Computing Disciplines (2023)

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.

Dynamic Vertex Hierarchies for Parallel View-Dependent Progressive Meshes

Dynamic Vertex Hierarchies for Parallel View-Dependent Progressive Meshes (2022)

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.

DrAsync: Identifying and Visualizing Anti-Patterns in Asynchronous JavaScript

DrAsync: Identifying and Visualizing Anti-Patterns in Asynchronous JavaScript (2022)

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. This paper received a best artifact award.

Daisen: A Framework for Visualizing Detailed GPU Execution

Daisen: A Framework for Visualizing Detailed GPU Execution (2021)

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.

Lightning Talks of EduHPC 2021: Attack at Dawn: Cracking Codes with CUDA and Teaching Parallelism

Lightning Talks of EduHPC 2021: Attack at Dawn: Cracking Codes with CUDA and Teaching Parallelism (2021)

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.

Combating Run-time Performance Bugs with Performance Claim Annotations

Combating Run-time Performance Bugs with Performance Claim Annotations (2020)

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.

Lib Metamorphosis: A Performance Analysis Framework for Exchanging Data Structures in Performance Sensitive Applications

Lib Metamorphosis: A Performance Analysis Framework for Exchanging Data Structures in Performance Sensitive Applications (2019)

M Shah

Links: [Preprint][Slides]

This work presents a mtehodology for exchanging data structures automatically to test performance of data structures.

Dungeon Digger: Apprenticeship Learning for Procedural Dungeon Building Agents

Dungeon Digger: Apprenticeship Learning for Procedural Dungeon Building Agents (2018)

EC Sheffield, MD Shah

Links: [Preprint][ Published Link]

This is work on Procedural Conteng Generation (PCG) for game level design using reinforcement learning

Iceberg: dynamic analysis of Java synchronized methods for investigating runtime performance variability

Iceberg: dynamic analysis of Java synchronized methods for investigating runtime performance variability (2018)

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.

Critical Section Investigator: Building Story Visualizations with Program Traces

Critical Section Investigator: Building Story Visualizations with Program Traces (2016)

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.

An Interactive Microarray Call-Graph Visualization

An Interactive Microarray Call-Graph Visualization (2016)

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.

Iceberg: a tool for static analysis of Java critical sections

Iceberg: a tool for static analysis of Java critical sections (2016)

MD Shah, SZ Guyer

Links: [Preprint][ Published Link]

Iceberg is a static analysis for detecting possible overuse of the 'synchronized' keyword in Java.

Teaching

The following table lists all of the courses I have developed and previously taught.

Note:Apparently some of my pages are loading slowly, so I am working on a refactoring of my content over the next few weeks/months to speed things up.

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
A listing of my courses that I TA'd, co-taught, or served as a lab instructor while at Ohio State and Tufts University from 2010-2017 are here

Talks


This section contains peer reviewed conference talks, guest lectures, invited lectures, and some research competitions I have participated in.
Year Event Title Resources
2024 Yale Guest Talk for Amoriem Labs [Slides]
2024 NYC++ Meetup The Little Talk of Semaphores -- and a Tour of C++ Concurrency.pdf [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]
 

Service

Computer Graphics

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

Media/Press

Computer Graphics
Check out Glimpse Podcast for more interviews with great scientists.

Personal Projects and Fun


Academic Lineage

Personal Projects
  • I enjoy tutoring programming, and am working on several Python lessons for first time programmers.
  • This is my undergraduate capstone project which I am quite proud of. It was a collaboration with a team of 5 total members in the spirit of a 'Pixar' short movie. Click to watch: Shelved Souls (Note: This has sound that plays when starting)
Travel - It's of particular importance to travel the world, because then you can see the similarites we all have and the different ways of living across the planet. Learning and s haring with different people in the world makes us stronger.
  • I drove across the country twice (Boston, MA to Portland,Oregon and back) in 2014.
  • My international travel includes:
    • Photos available here
    • (Barcelona) Spain 2017
    • (Brussels) Belgium 2018. 2024
    • (Amsterdam) Netherlands 2018
    • (Vancouver 2018, 2022, Toronto 2024) Canada
    • (Arusha) Tanzania 2019
    • (Reykjavik) Iceland 2019
    • (Dublin) Ireland 2019
    • (Belfast) Northern Ireland 2019
    • (Bristol, London, Folkestone) England 2022, 2023
    • (Paris) France 2022
    • (Tel Aviv, Jerusalem) Israel 2022, 2023
    • (Rome, Montepulciano, Pienza) Italy 2023
    • (Cozumel) Mexico 2024
    • (Limassol) Cyprus 2024
  • I am always interested in learning about new cultures and places to travel near and far. The best part of working at a university is meeting people from all over the world.
  • Please introduce yourself, and correct me if I do not pronounce your name correctly (It's a big deal to pronounce correctly! My name is relatively short and simple, but I still supply the phonetic pronounciation just in case, and to encourage others to do so.).
Hobbies
  • I consider myself an amateur pizza maker, although this web link needs to be updated with more content. The art of pizza
  • I am a long distance runner. I have run the Columbus marathon twice(2009,2010), several half marathons(2009 - Columbus, 2011 - Indiana,2013 - Columbus,2018 BAA Half, 2019 Malden, MA, 2019 Baltimore, 2021 Cambridge), full Tough Mudder(2018), and the Boston Marathon in 2023.
    • I am slowly getting slower as the years go on. Results
  • I follow the NBA (very closely), track&field, and other competitive runners (i.e. marathon)
  • I enjoy playing the guitar, typically acoustic songs or alternative rock. Some favorite bands are:
  • 'Survivor' is my guilty pleasure as far as prime time television.
  • I believe in funding small creators, artists, and independent developers.
Non-Academic Publications
  • Non-Academic Publications 2014, February 4. On Increasing Enrollment of Computer Science Courses. Tufts Daily. Link | PDF
Fun Facts
  • In my graduate student days I was runner-up in a Graduate Student Photo Contest at Tufts showcasing student life. You can be the judge if this photo speaks to your life as a (Computer Science) graduate student.
  • I was acknowledged in a music masters project by my friend Jane West. Goethe's "Faust" and Nineteenth-Century Music: Essays and an Exhibition
  • Some kickstarter and indiegogo funded projects I have sponsored include: Double Fine's original kickstarter, Eric Lyngel's Volume 1 and Volume 2 of Game Engine Development books, and FPS Documentary. There have probably been more I'll add later.

Class Photos

Note: I am slowly populating this list -- more to come!
Please do not redistribute or host any materials without e-mailing me first. I generally am happy to share the latest .pdf or slide presentation with those who ask. Thank you for your time!