About Me

I am an undergraduate senior at Columbia University, studying Computer Science.



wn2155 AT columbia DOT edu



  • April 2018 I will join CMU as a Ph.D. student!
  • January 2018 I will be one of the TAs for COMS 4115 again in Spring 2018.
  • October 2017 Gave a talk at DSLDI 2017 in Vancouver, Canada.
  • May 2017 Joined REU-SE, a summer research program, at Carnegie Mellon University.


I am interested in programming languages, computer graphics, and computer vision. As a visual thinker who loves designing and implementing programming languages, I aspire to create new languages for graphics/vision applications. Currently, I am working on Penrose, a system that visualizes mathematics from high-level, declarative programs.


B.S. in Computer Science, Columbia University, Magna cum laude
B.S. in Computer Science, Dickinson College, Summa cum laude

Yes, I have two bachelor’s degrees because I did the Combined Plan Program.


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] [www] [repo]

Whiteboard Scanning Using Super-Resolution

Wode Ni.
Dickinson College Honors Theses. Paper 221.

Selected Projects


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]


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]


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]


My name is 倪沃德 ( ní wò dé ) in Chinese. “Nimo” has been my alias since high school, during which I was a street dancer (Popping) and competed under this alias. My first name, often written as “Wode”, looks like a single word in English and people often pronounce it that way. Sadly, I have trouble answering to “ Wode “ under all circumstances. If you find it hard to pronounce ( ní wò dé ) , try “Nimo”.

I play Yo-yo, and have won provincial contests. I mostly do 1A. Here are 4 different ways to form a Green Triangle:

Broadly speaking, I am interested in many forms of Object manipulation, such as Zippo tricks and pen spinning.

I love billiards, especially Snooker.