About Me

I am a Ph.D. candidate at Carnegie Mellon University, School of Computer Science, advised by Ken Koedinger and Joshua Sunshine. Prior to joining CMU, I graduated from Columbia University, where I studied Computer Science.

News

  • August 2022 Spent the summer as an intern in Machine Intelligence at Apple . Stay tuned for more updates on the work!
  • April 2022 I proposed my dissertation. Officially a PhD candidate now!
  • July 2021 My work at Microsoft, “reCode: A Lightweight Find-and-Replace Interaction in the IDE for Transforming Code by Example,” was conditionally accepted by UIST 2021!

Research

I am interested in human-computer interaction, programming languages, and visualization. I am fascinated by how well-designed languages enable people to succinctly express abstract ideas in various domains, and how visual representations help people understand and reason about them. I aspire to help people understand the abstract world by designing and building powerful, useable languages and tools.

In the past few years, I have been studying how people make conceptual diagrams and building Penrose, a language-based platform for math diagramming.

Education

Ph.D. in Software Engineering, Carnegie Mellon University
B.S. in Computer Science, Columbia University, Magna cum laude
B.S. in Computer Science, Dickinson College, Summa cum laude

Publications

(*indicates equal contributions)

reCode: A Lightweight Find-and-Replace Interaction in the IDE for Transforming Code by Example

Wode Ni, Joshua Sunshine, Vu Le, Sumit Gulwani, and Titus Barik.
In Proceedings of the 34th ACM Symposium on User Interface Software and Technology (UIST’21).
[PDF] [BibTeX] [video preview] [talk]

Penrose: From Mathematical Notation to Beautiful Diagrams

Katherine Ye, Wode Ni, Max Krieger, Dor Ma’ayan, Joshua Sunshine, Jonathan Aldrich, and Keenan Crane.
ACM Transactions on Graphics (SIGGRAPH’20).
[PDF] [BibTeX] [www] [repo]

How Domain Experts Create Conceptual Diagrams and Implications for Tool Design

Dor Ma’ayan*, Wode Ni*, Katherine Ye, Chinmay Kulkarni, and Joshua Sunshine.
Best Paper Honourable Mention
In Proceedings of the 2020 CHI Conference on Human Factors in Computing Systems (CHI’20).
[PDF] [talk] [BibTeX]

Defining Visual Narratives for Mathematics Declaratively

Max Krieger, Wode Ni, and Joshua Sunshine.
Evaluation and Usability of Programming Languages and Tools (PLATEAU 2019), co-located with UIST.
[PDF] [slides]

Designing Declarative Language Tutorials: a Guided and Individualized Approach

Anael Kuperwajs Cohen, Wode Ni, and Joshua Sunshine.
Evaluation and Usability of Programming Languages and Tools (PLATEAU 2019), co-located with UIST.
[PDF] [slides]

Substance and Style: domain-specific languages for mathematical diagrams

Wode Ni*, Katherine Ye*, Joshua Sunshine, Jonathan Aldrich, and Keenan Crane.
Domain-Specific Language Design and Implementation (DSLDI 2017), co-located with SPLASH.
[PDF] [slides]

Whiteboard Scanning Using Super-Resolution

Wode Ni.
Dickinson College Honors Theses. Paper 221.
[PDF]

Selected Projects

Animate++

Animate++ is a C++ library that lets you rapidly compose beautiful vector graphics animation. We built the library in a course with Bjarne Stroustrup. [Slides]

MPL

Matrix Processing Language (MPL) is a domain specific language that focuses on matrix computations. Using MPL, we built a simulation of Conway’s Game of Life in less than 30 lines. [repo]

Raytra

For a Computer Graphics class, I implemented a ray tracing renderer from scratch. Raytra employs Monte-Carlo ray tracing and scene-wide acceleration using BVH-tree. [repo]

Personal

My name is 倪沃德 ( ní wò dé) in Chinese. “Nimo” has been my alias since my street dancing days. My first name, often written as “Wode”, looks like a single word in English and people often pronounce it that way. If you find it hard to pronounce ( ní wò dé), try “Nimo”.

If I’m not working, I play billiards. I am a member of the CMU Pool Team and play in ACUI tournaments, BCA 8-ball league and USAPL 9-ball league.

I also enjoy playing Yo-yo. Here are 4 different ways to form a Green Triangle: