I am a remote freelance software developer living in Waterloo, Canada. I am also currently working on an unannounced indie game.
I studied at the University of Waterloo and received my Bachelor of Software Engineering in 2016. I studied under Patrick Lam and received my Masters of Mathematics in 2019. My masters thesis was about automating student assignment grading using static analysis through LLVM.
I started programming back in sixth grade when I stumbled upon a "how-to-build-your-own-website" book in a public library. Back then, all I could make were simple HTML websites with fancy dropdown menus using Notepad and IE6. I later learned PHP and WordPress in high school and did some freelance work for my teachers.
My favourite aspect about programming and ultimately what made me decide to pursue this as a career was the joy I get when I see the monitor change every time I modify my code.
Interesting stuff I've done in school:
- Built the initial frontend of Sana medical procedure editor using Backbone and Marionette for my capstone project (2015-2016)
- Wrote a ray tracer such as refractions, bounded volume hierarchy optimization, depth of field, soft shadows, texture and bump mapping, etc. (July 2015)
- Investigated the feasiblity of using RSA vs. ECDSA signatures on mobile devices (Aug 2014)
- Wrote an OS kernel for a Cortex M3 board (Mar 2014)
- Wrote a MIPS compiler and assembler for a subset of C (Nov 2012)
- Built a 2D scrolling shooter game with C# and XNA (June 2011)
- Served as my high school's Yearbook Editor-in-Chief (2010-2011)
Internships (co-ops) during my undergrad:During my undergrad, I've alternated between four months of school and four months of internships. This allowed me to gain real-world experience and to apply the theoretical concepts learned in class. To see my responsibilities and full work history, please download my resume.
- Rocscience (Jan 2015 - Apr 2015)
- Lookout (May 2014 - Aug 2014)
- IBM (Sept 2013 - Dec 2013)
- 500px (Jan 2013 - Apr 2013)
- Pilot Interactive (May 2012 - Aug 2012)
- Delayed Synchronous UI Updates
- Finally, A Ray Tracer!
- If Programmers Were Hired Like Programmers
- Adventures of Writing an OS Kernel from Scratch on a Cortex M3 Board
- From "Dammit I'm not getting a 100" to "50 is good enough"
- 2010 Canadian Computing Competition results
- 2010 Canadian Computing Competition