Hi there!

My Photo

I am Paul Tan, a computer engineer from Singapore. My specialties are in computer graphics and the design and implementation of programming languages. I enjoy programming, and have worked on a large variety of projects and technologies. I try to keep a blog on my progress.

View my resume

My Education

I have a bachelor's degree in Computer Engineering from the National University of Singapore.


I've done web dev (2 years), computer graphics (2 years), compilers (2 years), embedded systems (1 year). See my Projects List for more details.

Programming Languages:

My Interests

Do take a look at my Projects List to get a good idea of my interests and specialties. Historically, I've mostly done programming stuff to "scratch my own itch", and my interests reflect that.

Programming language design / Compiler Engineering

My journey in Compiler Engineering began as a possible way forward for me to achieve the holy grail of "write once, port anywhere" application development. I wasn't just interested in applications that can be easily re-compiled for different operating systems, but for the web as well. In 2019, this has been accomplished via bpat, which leverages DSLs and transpilers to compile the same code base to multiple platforms.

Nowadays, I am interested in exploring the use of compilers and programming language design to allow programmers to write more expressive code without sacrificing correctness or performance. I developed CIR, for example, as an experiment on using advanced metaprogramming techniques on top of C by pairing it with a compile-time JIT compiler.

3d computer graphics

Skeletal animation implementation test
Skeletal animation implementation test

I find writing 3d computer graphics code extremely fun, and it's even better when the results turn out good. After my first foray into 3d graphics rendering with Bouncy Boar 3 where I used the well-established OGRE 3d rendering engine, I then placed my sights on developing my own 3d rendering engine from scratch using OpenGL. That was... a very long journey to say the least, but recently parts of the 3d rendering engine I've developed has shown up in projects such as DSL for Visual Novels in Scala as well as the web port of Bouncy Boar 3. Many new opportunities for me to showcase my rendering engine are on the way, so look out for it ;-).

Build systems

Aka make, ninja and friends. It's not that fun, really, but it's certainly important. I believe that a good build system setup is the lifeblood of any non-trivial project (especially one that cross-compiles to multiple platforms, like bpat), and so I've done some research/experimentation on them in the past, and keep track of any new developments. I use my own build system, ngkbuild, for some internal projects, which allows me to write the build scripts via Typescript/Javascript. Typescript compiles too slowly though, so I'm currently exploring swapping it with a custom statically typed scripting language.


Other Activities

Open source

Having benefited from open source projects, I try to contribute back when time permits and interests align. Some of my contributions include:

Video Games

Nowadays, I don't really have time to play video games, but when I do my go-to game is Splatoon 2, especially when I need more salt in my diet from playing ranked. I mostly play the Sloshing Machine and Bamboozler.

Me playing Splatoon 2

Other games that I really enjoyed include:

Reading List

Stuff that I have read and liked: