Thus Concludes the First Semester of Grad School
I have finished the first semester of my Master’s program in Computer Science at the University of Waterloo. This term for me consisted of taking two graduate level courses: CO 685 (Mathematics of Public Key Cryptography) and CS 842 (Advanced Topics in Language Design and Implementation), teaching two sections of CS 246 (Object-Oriented Software Development), and conducting research in cryptography in my spare time.
Overall, I feel the term was quite successful! In terms of course work, I received a 92% in CS 842, and a 96% in CO 685. Both involved a project component (CO 685 offered either a project or exam, and I opted for project), and in both courses, I scored 100% on the project, which I was particularly proud of. For CS 842 I developed a Lua to WebAssembly compiler, which I wrote more about here. This was a labour of love; I was very grateful to my friends and family who listened to me talk about this non-stop for about 3 weeks as I was scrambling to finish it in time. And for CO 685 I implemented a couple of cryptographic hash functions from expander graphs, which I wrote more about here
A potential career path that I see is becoming a university lecturer/teaching professor. In that regard, I feel quite lucky to have gotten the chance to teach in my first term. Teaching is a lot of work to balance over the term, but it’s been a very valuable and educational experience for me. I have enjoyed lecturing a lot, and hope to continue doing so throughout the rest of my degree.
The project that I have begun work on is in automated verification of the correctness of game hopping proofs. It’s a nice balance between cryptography and programming languages, which are two interests for me. So far I am still in the learning and reading phase of research — it is hard to balance this while having the high teaching load and also doing course work. I’m hoping to get more research done in the spring term and subsequent terms once my coursework is completed.
What’s on the docket for next term? For one, I’m taking another two courses to complete my degree requirements. I’m going to be taking CS 798: high performance multicore programming in C++, and CS 858: Internet Censorship. I’ve never regretted learning more about C++, and the course seems like an interesting mix of theoretical data structures and getting my hands dirty with the low-level implementations. And the course on Internet Censorship seems like an interesting course that will balance social issues with technical details! I’m looking forward to learning a lot from both of these courses.
I am also back teaching again: I have one section of CS 246 to teach, and half a section of CS 136L. CS 246 I am hoping will take less time this term thanks to my previous experience. CS 136L is a fairly new lab course that aims to give students an introduction to software development tooling earlier in their degree. Most of the content is lifted from CS 246, so I do not think it will be too much of a time burden for me. Furthermore, as a lab instructor, the course acts essentially as an extended office hour. Students learn the content online, do their work in the lab, and I am only expected to give a quick recap lecture at the beginning of each lab.
Finally, I’ll be trying to engage a little bit more in research, and getting more experience in writing and understanding game hopping proofs whenever I can squeeze in the time.
Here’s hoping the next term is a good one!