I currently work at Hudson River Trading in the core development team in Singapore, mostly using modern C++.
I completed my undergraduate studies in computer science and applied mathematics at the National University of Singapore (NUS) in January 2022. This was a double degree programme, and I graduated with a Bachelor of Computing (BComp) in Computer Science, as well as a Bachelor of Science (BSc) in Applied Mathematics. I am a recipient of the NUS Merit Scholarship.
I have participated in many algorithmic programming competitions, such as the ACM-ICPC World Finals, the International Olympiad in Informatics (IOI), and the Google Code Jam. When opportunities arise, I continue to participate in such competitions.
I also tinker with technologies and write some code during my free time. See below for some of my personal projects.
Interests:
- Algorithmic problem solving
- High-performance software development
- Lock-free and wait-free parallel programming
- C++ programming language
- Rust programming language
- (and there might be more …)
Work Experience:
-
Apr 2022 – present
I now work as a core developer at Hudson River Trading. My responsibilities include building and maintaining latency-sensitive market data feeds and order gateways for connecting to various exchanges, as well as building internal tools to help with trading. I primarily use C++ for this role.
Technologies: C++20/23
-
May – Aug 2021
This was an eleven-week summer internship with the core development team at HRT's Singapore office, and I worked mostly using modern C++.
I extended their common market data framework with the ability for dual-process market data feeds to perform a rollover of the order book. Order and trade data needed to be obtained from the two processes and coordinated to perform the rollover. I then implemented this feature for around ten markets that required rollover functionality, enabling those market data feeds to run in the lower-latency dual-process mode.
I also worked on an internal tool that intelligently explains HRT- and trading-specific terms, incorporating domains such as symbols, log files, hosts, and a glossary. This involved calling into various code in the core trading libraries, as well as implementing new functionality in the trading libraries to get the information I required. I built a CLI as well as a web frontend for this tool, allowing HRT employees to easily look up any term.
I also completed two other smaller projects: I rewrote a C++ compile-time interface detection library to support inherited interfaces using decltype/declval-style detection, which required reading through and fixing a number of complex libraries that depended on the old interface detection library in esoteric ways. The other project was to write a tool to playback UDP and TCP packets that were previously captured from an exchange, in order to simulate the exchange for testing market data feeds. This required ensuring correct packet ordering across multi-connection feeds, and in particular those that required the coordination of simultaneous UDP and TCP connections.
Technologies: C++20, Rust
-
May – July 2020
This was a ten-week internship at the Singapore office. I built a low-latency order gateway to enable Jump to trade on a new exchange. I also worked on improving various tools for testing and analysing past data, including using C++20 coroutines to bring usability improvements to some of these tools. The internship culminated with a presentation on C++20 coroutines to the core development team in Jump's Asian offices.
Technologies: C++14/17/20
-
June – August 2019
This internship comprised a four-week training programme at the Chicago headquarters, and then six weeks of work at the Singapore office. I worked on the portion of the trading platform that receives market data, which is used by trading teams to efficiently receive and parse data from exchanges. My work improved the compilation time and execution performance of the trading platform.
Technologies: C++14/17
Personal Software Projects:
-
January 2020 – Present
Sourceror is an optimising compiler from Source to WebAssembly. Source is a simplified variant of JavaScript designed for the introductory programming module at NUS. Sourceror implements many features expected of a fully-featured compiler, including modules (multi-file compilation with import/export), a foreign function interface with JavaScript, a garbage collector, and optimisations for variable capture, type propagation, and function call devirtualisation. The compiler itself is compiled to WebAssembly so that Source programs can be compiled and run from within the browser. Sourceror was my project for the CS4215 module at NUS. Sourceror is now maintained by the Source Academy team at NUS which I am part of, and I continue to review code that goes into the project.
Technologies: Rust, WebAssembly, TypeScript
-
August 2018 – Present
Native File Dialog Extended (NFDe) is an abstraction over the platform-specific file and directory pickers on Windows, Mac, and Linux. It is based on
Native File Dialog, and adds additional features such as friendly filter names and a C++ wrapper. NFDe was originally designed for use with Circuit Sandbox, but I still maintain it and it is now depended on by other third-party projects.
Technologies: C, C++, Objective-C
-
August 2019 – Present
Fluminurs is a CLI tool and library to download files, announcements, videos, and other resources from LumiNUS, NUS's online learning management system, using a reverse-engineered API. I was a casual contributor in 2019 and 2020, but joined the development team in 2021 and took a more active role in developing new features.
Technologies: Rust
-
May – August 2018
Circuit Sandbox is a digital sandbox game where users can create arbitrarily complex circuits out of simple components. To support large and complex simulations efficiently, Circuit Sandbox uses many careful optimisation techniques, such as lock-free multi-threading and C++ template metaprogramming. Circuit Sandbox is a collaboration with
Kuan Wei Heng, for our
Independent Software Development Project (Orbital) module at NUS.
Technologies: C++17, Boost, SDL2
-
March 2017
Jelly is a browser-based compiler for
Brainfuck, one of the most well-known esoteric programming languages. Jelly features an optimising compiler (written in JavaScript) that compiles Brainfuck to WebAssembly, which can then be compiled to native code and executed in the browser. This allows much faster execution as compared to other browser-based compilers.
Technologies: JavaScript, WebAssembly
Check out my GitHub account for my other software projects.
Competitive Programming (other than being a contestant):
-
The
International Olympiad in Informatics is the most prestigious algorithmic problem solving competition for high school students (i.e. those who have not enrolled in a university). Each country sends a team of up to four students. Tasks may be submitted by anyone, but task authors are typically contestants of past IOIs. The scientific committee selects six tasks out of the task submissions. Selected tasks are expected to be of a high standard.
-
January – March 2017
January – March 2018
January – July 2020
January – March 2021
The
National Olympiad in Informatics is the main algorithmic problem solving competition for secondary school and junior college students in Singapore, modelled after the International Olympiad in Informatics. Each year, around 200 students take part in the contest. The scientific committee prepares and ensures quality control the tasks in the competition. In 2017, I reviewed and tested the competition tasks. In 2018, I designed and prepared some tasks which were eventually used in the competition. In 2020 and 2021, I was in charge of the scientific committee, and led the team in task selection and preparation, to ensure the quality and fairness of the competition tasks.
Competitive Programming:
-
- 22nd at ACM-ICPC World Finals Invitational 2020
- 1st at ACM-ICPC Asia Kuala Lumpur On-Site Regional Contest 2019
- 4th at ACM-ICPC Asia Bangkok On-Site Regional Contest 2019
- 62nd at ACM-ICPC World Finals 2019
- 7th at ACM-ICPC Asia Singapore On-Site Regional Contest 2018
- 1st at ACM-ICPC Asia Yangon On-Site Regional Contest 2018
- 5th at ACM-ICPC Asia Jakarta On-Site Regional Contest 2017
-
- 432nd (round 3) in 2022
- 338th (round 3) in 2021
- 163th (round 3) in 2020
- 51st (round 3) in 2019
- 295th (round 3) in 2018
- 834th (round 2) in 2017
- 166th (round 3) in 2016
- 952nd (round 2) in 2015
-
- 155th in 2017
- 79th in 2016
-
- Bronze Medal in 2013
- Participation in 2012 :(
-
-
- Doing some problems, with the aim of creating the fastest solution for each problem I solve
-
Olympiad Mathematics:
-
-
- Silver Award (Open Category) in 2014
- Silver Award (Open Category) in 2013
NUS Degree Certificates/Transcripts and Academic Awards:
I have graduated from my undergraduate studies at NUS, and have attained an Honours (Highest Distinction) for both computer science and applied mathematics. The "Honours (Highest Distinction)" degree classification is awarded to students with a CAP of 4.50 and above (out of 5.00) — a criteria that I far surpass.
I was the valedictorian in my graduating cohort for the Bachelor of Computing. Read my blog post about my experience or watch the YouTube video.
In recognition of being the top student in both computer science and mathematics, I have been awarded these awards:
The Dean's List is awarded to students in the top 5% of their cohort each semester. Students are only eligible for the Dean's List after their freshmen year, and they must take at least two modules from their host faculty in that semester. As a student enrolled in a double degree programme, I am eligible for either faculty's Dean's List only when I take at least two modules offered by that faculty in the same semester.
Module coordinators may occasionally award recommendation letters to students for outstanding performance in their modules.
BComp (CS) Focus Area Certificates are awarded to students with outstanding performance in the modules satisfying that focus area.
- AY 21/22 Sem 1 Dean's List for NUS Faculty of Science | Digital certificate
- AY 20/21 Sem 2 Dean's List for NUS School of Computing | Digital certificate
- AY 20/21 Sem 2 Dean's List for NUS Faculty of Science | Digital certificate
- Certificate of Distinction in the Programming Languages Focus Area of the Bachelor of Computing in Computer Science | Digital certificate
- Certificate of Distinction in the Algorithms & Theory Focus Area of the Bachelor of Computing in Computer Science | Digital certificate
- AY 19/20 Sem 1 Dean's List for NUS School of Computing
- AY 19/20 Sem 1 Dean's List for NUS Faculty of Science
- Recommendation Letter for CS4261
- AY 18/19 Sem 2 Dean's List for NUS School of Computing
- AY 18/19 Sem 1 Dean's List for NUS School of Computing
NUS Teaching Awards:
The Honor List of Student Tutors is awarded by NUS School of Computing each academic year to recognise excellence in teaching among its student tutors. The exact criteria for this award is not known, but it is believed to be derived from the student feedback collected at the end of each semester.
- AY 19/20 Honor List of Student Tutors
- AY 18/19 Honor List of Student Tutors
NUS Modules Taught:
NUS School of Computing provides opportunities for undergraduate students to be teaching assistants, usually by conducting tutorial and lab classes. Undergraduate teaching assistants are chosen by the module coordinator, and usually have done well when they took the module as students.
-
AY 21/22 Sem 1 (August – November 2021)
Conducted lab sessions for 2 classes (39 students in total); designed, implemented, and graded one of the assignments. Sessions were conducted online due to the pandemic. I worked with Ye Jiadong to teach this class.
-
AY 20/21 Sem 2 (January – April 2021)
Conducted tutorial sessions for 2 classes (34 students in total); graded one written assignment.
-
AY 20/21 Sem 1 (August – November 2020)
Conducted lab sessions for 3 classes (51 students in total); designed, implemented, and graded one of the assignments. Sessions were conducted online due to the pandemic.
-
AY 19/20 Sem 1 (August – November 2019)
Conducted lab sessions for 3 classes (61 students in total); designed, implemented, and graded one of the assignments.
-
AY 18/19 Sem 1 (August – November 2018)
Conducted lab sessions for 1 class (14 students) and tutorial sessions for 1 class (19 students); designed and implemented one of the assignments.
-
AY 17/18 Sem 2 (January – April 2018)
Conducted lab sessions for 1 class (36 students). Although a lab class in name, this was more like a tutorial class with weekly presentations and discussions that reinforced the content covered in the lectures. I worked with
Lin Si Jie and Lim Heng Guang to teach this class.
Note: NUS introduced a new module balloting system in AY 19/20 Sem 1, which significantly reduced students' incentive for providing feedback.
NUS Modules Taken:
Here is an exhaustive list of modules that I have taken in NUS. Where available, you may use my cheatsheets for your studies (but I cannot guarantee the correctness or completeness of any information on them). If you want the LaTeX source, you have to ask for it.
I also maintain a page on general module planning advice here.
AY 13/14 Sem 2 (A-levels H3 programme)
AY 17/18 Sem 1
AY 17/18 Sem 2
- CS2100 Computer Organisation | Review | Cheatsheet
- CS2105 Introduction to Computer Networks | Review | Cheatsheet
- CS3233 Competitive Programming
- CS3233R Competitive Programming (R)
- ES2660 Communicating in the Information Age | Review
- GER1000 Quantitative Reasoning | Review
- IS1103 IS Innovations in Organisations and Society | Review
- MA2104 Multivariable Calculus | Review | Cheatsheet
AY 17/18 Summer Break
AY 18/19 Sem 1
AY 18/19 Sem 2
- CP3108B Independent Work (self-directed training for ICPC World Finals)
- CS3203 Software Engineering Project | Review
- CS4231 Parallel and Distributed Algorithms | Review | Cheatsheet
- MA2108S Mathematical Analysis I (S) | Review
AY 18/19 Summer Break
- CP3200 Internship (summer internship at Jump Trading)
AY 19/20 Sem 1
AY 19/20 Sem 2
AY 20/21 Sem 1
AY 20/21 Sem 2
AY 21/22 Sem 1
About DMC1401CS Design Your Own Module (DYOM): Students may propose their own module (called a DYOM), which counts as a 4MC CS/CU unrestricted elective. There is generally no restriction on the kind of topic allowed, as long as they can find a supervisor (an NUS professor) and a sufficient number of interested students. At the point of writing, a minimum of ten students is required (though this may be negotiable), and each student may take up to two DYOMs in total. For information about starting and running a DYOM in general, see this page. For SoC-specific guidance, see this page (maintained by students). Some people in NUS Hackers might also be able to provide guidance.
