“It’s the time of the year again”: to look at what I have been through, ranging from switching into Computer Science to doing another math research, and how I broadened my tentacles from math competitions into regionals programming contest. It’s also a change of perspective, somewhat.
First Movement: Winter 2018 (Allegro vivace)
Quick, light, lively, which somewhat characterizes the Hackathon adventures amid my adaptation as a CS student. The closing section was preceded by a heavy-duty passage ending with a 7-note-chord at fortissimo (staying up late for a group project), but nothing else extraordinary that deviates from the usual pattern.
It’s the first term after I switched into the Computer Science department, in the hope to explore a variety of courses that I would crack my head out just to get the course admission. This also means that, instead of diving under the infinite mathematical odyssey indefinitely, I would have to frequently get my head up and breathe the air of programming. As a fish who’s so accustomed in this mathematical sea, taking the Object Oriented programming course propelled me out of my comfort zone — that was the course that took me a disproportionate amount of time in completing the assignments and studying for the material. As I thought that the workload might be lighter as the term passed by, no– I had to gave up a few nights sleep just to complete our group assignment project, the chess engine. Only after seeing the ensuing success could I pat myself on my back for what I have done.
The second aspect of my adaptation as a CS student was my exploration and experimentation of programming competitions, which were the Communitech Code and Win Finals, Google Games (again), Citadel’s the Data Open, and the UOttaHack. Sleep deprivation became real after almost every single such event (all-nighters), but thinking of the new skill gained, it’s worth it.
The sweet spot behind every single coding struggle was that I am still able to immerse myself in the mathematical odyssey and swim as vigorously as I want in this infinite ocean. Contrary to the CS courses, the few pure math courses I took challenged me with the rather obscure concepts and identities. It’s also, however, these challenges that opened to me one of the most beautiful gem in the mathematical world (like the unsolvability of quintic polynomials).
Second Movement: Spring/Summer 2018 (Andante)
This movement is slower than the rest, probably because there’s no academic workload to bind me during a non-school term. But the cadence (i.e. chord progression) of this movement is difficult to predict: it can make a detour that leads to a I-IV-V-VI-V(7)-IV-I instead of a more straightforward I-IV-V-I (well, research outcomes are often unpredictable, right?). Another symbolization of the unresolved mysteries was the use of the modulation into the dominant key in the first section, which was then resolved in the later section by the tonic modulation except that one last part. Oh well…the only way to get around with it was the closing cantabile section.
“That’s the one”, I monologued before Prof. David Jao’s profile, being captivated by his research focus on number theory and cryptography. Subsequently, I applied to work for him under the Combinatorics and Optimization research program, and got the offer a few days later.
It all started with “Crypto 101”: mindblown by the array of fundamentals (elliptic curves and their isogeny mappings, ideal class groups and binary quadratic forms, and the most dreaded yet the most quintessential quaternion algebra), and the intensive study and summarization of recent works and optimizations in post-quantum cryptography. Thereafter, I went into the scavenger hunt (as quoted from my prof) on the optimization sweet spots, bearing in mind on the future beast-in-development: the quantum computer attack, before deciding on the project to go forward: to implement a signature scheme using sagemath.org. There I went, starting to understand the pseudocode and the theory behind it, only to be obstructed by logic that hardly made sense to me, objects that I wish there’s built-in functions (but no), and one-liner sub-procedure that left me to figure its implementation details. Amid the clueless sessions of me trying to merely get its syntax correct, some room of optimization (for some auxiliary algorithms) appeared afloat upon the discussion with my professor. I rushed to my laptop and swiftly started the implementation process, and delightfully see that this optimization worked out. But the overarching problem was still there: how should I fill in the gap and make everything completely correct?
Complementing the research experience was the side project development, one of which was inspired by the research itself: the Big Integer Library in C++. Having the object-oriented principles fresh in mind after CS 246, I strived to maintain these principles in mind while maximizing optimizations simultaneously. This involved some efforts like learning the Fast Fourier transform and minimize compiler-specific redundancies, but when my running time improved from 4 minutes to 0.2 seconds, the pain is worth it. Another side of my coding was the practice on Codeforces, which saw me improving from cyan to purple within 7 contests. Unwilling to succumb to the fact that I was new to coding, I allocated time practicing on this competitive programming platform, in the hope to achieve a respectable rating and get that sense of vanity. While a few initial leaps in rating boded well on my mission, this effort was once hampered by a 90-point plunge, no thanks to my inability to cope with time constraint and a failed verdict by system test. Served as a wake-up call to restructure my contest strategy, I aced the two subsequent contests and eventually reached my lofty purple rating.
Rounding up those were the blessing of having friends around me to had great leisure activities, the most important of which was cooking. Being able to learn the arts and crafts of culinary that returns you with great gastronomical rewards have never been boring. The periodic gathering with mates over meals also served well to relieve the stress and tension from my work, sometimes made more mirthful by the atmosphere of birthday celebration (including mine in the piano room 😛 ) and brief vacation.
Finally, thanks to my research prof I was given the privilege to travel to Santa Barbara to attend the Crypto 2018 conference. Relishing in the rustic campus view by the Pacific Ocean aside, I also had the opportunity to broaden my cryptography horizons well beyond what I was doing in my research through listening to the presentations. This marked a great closing to the Spring 2018 term. 🙂
Third Movement: Fall 2018 (Presto)
The relatively relaxed opening seemed to belie the nature of this movement: it actually serves to build up the mood for the main theme. Thereafter, it’s just a healthy mix of running notes in semiquavers and 7-note chord in this movement, with the right hand becoming fugue-like in the middle section (i.e. multitasking between 7 courses and interview). The whole intensive nature lasts throughout the piece (except the last few bars: Christmas break). Not for everyone, tbh.
The beginning of the term was characterized by extracurricular activities like the Velocity bootcamp, Hack the North, and the PennApps. But soon, the effect of taking 7 courses instead of 5 began to crystallize when the assignments started to pile up to the extent of me having up to 6 of them due in the same week. The study term then became a relay race of me with those homework, one after another, like an infinite relay week after week. Adding to these were the planned hurdles: the midterms, which sometimes came when part of classroom material still remained conundrum to me.
Come mid-September, the WaterlooWorks recruitment season for Winter 2019 began. Having started my internship application and interview process since July, I should reassure myself that the process was going to be smooth. No, it didn’t happen. Still being fresh into the Computer Science major, the struggle of cherry-picking mutual interests from the thousands of job postings was tangible — I had grave trouble filtering jobs out of my shortlist. Following the submission of my applications was the great fluctuations of my feelings: fear, both because of the initial “no job” paranoid when interview never came in the first week, and of the “can’t cope” spectre when interviews and midterms started sandwiching each other; underwhelmed, every time after a sub-par interview performance, and after a rejection by a position that I had been dreaming for long. Only during the unfolding of the position offers towards the end of the recruiting period could I catch a breath out of my hectic schedule: I am rewarded with 3 offers.
Embellishing my already packed schedule was my participation in the ACM-ICPC North American regionals, qualified through my rather unexpected placing of the top positions in the Waterloo local contest. As an amateur competitive programmer, the practice sessions offered a new perspective into competitive programming–the combination of teamwork, speed and accuracy. It’s therefore a great privilege to learn from the more experienced teammates and work with them during the contest, which resulted in our victorious placing of the 2nd place in the contest. Later in the term, come the Putnam contest that I have been enjoy writing every year. Though the extreme workload rendered any Putnam practice almost impossible on my own, cracking at mathematical problems have never been less enjoyable for me.
The routine of the term made me resonate with the third movement of the Moonlight sonata, prompting me to take some break from my routine and self-learn the piece (still in progress). Arms weary after each practice, this piece nevertheless gave me an avenue to express my feeling about my extra-hectic life during this 4 months. Luckily for me, this isn’t the only leisure I had: I had several short gathering over meals with several friends that were quintessential to my uni life, as well as some brief explorations over sports like archery, badminton and squash. This leisure went to a pinnacle at the end of the academic term as I travelled to Montreal again, this time with the bold try of skiing without really going through the 101’s, and finally a countdown there. 😉
2018 is a year characterized by adventure, mainly marked by my switch into CS and the ensuing change in my course structure and the commitment to side projects and hackathons. Perhaps, time to give credits to the following people (shamelessly citing from my Facebook post)
- people who offered me help and advice out of their initiative — even without me asking first
- those who offered constructive criticism when I need them the most, sometimes harsh enough for a wake-up-call
- those who disseminated their passion in different fields, encouraged me to try them out, and patiently provided guidance to those, even though I could be extremely intractable in those fields
- my comrades who struggled together with me, be it a group assignment, a hackathon project, or even when applying jobs together
- my family who continuously provide support and advice even from the other side of the globe
Thanks to these people I dare to make these adventure, not only in venturing into the CS field which I previously lack confidence in, but also trying new things out (like skiing and side projects). Having them around me simply alleviates me from the stress over my routine — even if it’s a simply discourse over life.
“May things happen in the way they should be, even though it won’t necessarily go in my favour”, here I wish, for 2019.
Lastly, photo credits to the following: A. Chan, J. Lim, Y. Li, S. Lin, F. Chen, Z. Low, the ACM official photographer. Apologies for using them unabashedly without your permission 😛
1 thought on “My 2018 ‘Sonata’”
7 courses my goodness…