At the end of CS1101S, students were asked to apply for this module, where they would be assigned a partner and a project to improve the Source Academy system. I just had to fill up a short online form, where I had to list my experiences with various technologies. A few weeks later, I got an email informing me of my acceptance into the module.
The module itself is CS/CU, and students are expected to put in 5 hours a week to obtain the 2MCs for this module. However, we were also given the option to put in 10 hours a week, where we will then be enrolled in CP3108B the next semester to gain an extra 2MCs. I was told this was done because in previous iterations of this module, some pairs would do the bare minimum and still get 4MCs for their work.
I applied for this module, wanting to work on my own project to implement a Language Server for Source, as the editor for Source on the Source Academy platform was very bare-bones. Instead, I was assigned to work on a VSCode plugin for Source Academy, so that students can use the Source Academy platform inside of VSCode. This plugin was already being developed by a student for his final year project, and luckily, it was in need of an LSP!
Learning about Source Academy
The first week or two into the semester, I was trying to understand the whole Source Academy system, which was much bigger than I expected. There is
- js-slang, the main implementation of Source and its variants
- modules, implementation of various modules available in source
- frontend and backend, for the Source Academy website.
- And many more smaller projects by other students
For my project I initially imported from js-slang to implement some editor features, but eventually decoupled js-slang from my project as it caused some issues when used within the Electron environment in VSCode.
Weekly meetings
Every week I had meetings with Prof Martin Henz who mentored my project along with Hui Zhang, the creator of the VSCode plugin. These meetings helped me learn more about the Source Academy system, and kept me on track so that I would implement some feature every week. These meetings were very chill and were just to keep prof up to date with our project, and for him to give us advice as well.
STePS
Every CP3108 project was submitted to be showcased at the SoC Term Project Showcase (STePS). We had to make a poster about our project and I felt it was a nice way to wrap it up, as I got to talk about my project that I had spent many hours on to other students and profs working on the Source Academy system.
Conclusion
This module was my most time consuming one in my first year of NUS. I committed to spending 10 hours a week on my project, even though I didn't really have to, but I was passionate about developing a better tool for NUS students as well as learning more about how LSPs actually work.
In the end I would say it was worth it and I managed to develop a functioning LSP that comes with most modern editor features. I will continue working on it throughout the summer break, so that it can be used by future CS1101S students. I will talk about my LSP in a future blog post, but for now you can still view the source code here.