Olympiad of Informatics
I wrote my first code on paper during high school where electronics were not allowed. A pencil case which contained a Raspberry PI and a mini monitor is my computer. Using a keyboard and touchpad with Bluetooth functionality, I typed the code I'd written on paper into an IDE on Raspbian Linux. Then, run, error, debug, run, error, debug. It seemed a bit geeky and made me a high school OI team member because my teacher noticed me writing code in class (OI is the competition of Olympiad of Informatics, doing some complicated algorithmic problems with C). Then I always prepared OI in the computer room. I remember writing a challenging problem once, and it took me six hours to improve until I passed with AC; however, I enjoyed the feeling of solving a complex question. Years later, I won a couple of awards in OI. I was glad to achieve acceptance for what I am loved. But the most pleased is that I have found a definite goal, which made me step into the hall of Computer Science.
Web Frameworks, Univ of Bologna, and ReedNote
When I first came to the university, there was this funny story. I first met my roommate (who also started writing code in high school), and he showed me his naive prime-finding algorithm code. Then I wrote one with the Eratosthenes sieve because it has lower time complexity. We became friends soon.
I discovered I had already studied many college classes, especially programming. I don't think the university is challenging. Hence in my freshman year, of high confidence, I took over an outsourcing project to implement a web application to manage the deliveries for a company. However, I found it difficult in practice because I have always been a "command line" developer. Although I have learned HTML, JavaScirpt, and CSS in class, I have little knowledge of making data exchangeable between static web pages and databases. I designed a simple web framework to fulfill the functionalities, handle the user's requests, interact with the database, render the user's data into the web page template, and send this web page to a specific user. With the support of my friend, we implemented the web application and received our first salary by writing codes.
Afterward, I attended a summer school at Bologna University. I learned about the Django framework, the MVC design pattern, and template rendering to implement a data visualization project. I was surprised to discover that the idea of my web framework was just MVC, yet I designed it without any reference at the time. A year later, I began a project to create an online WYSIWYG Markdown editor with my roommate, and we called it ReedNote. To build it, I learned Node.js, Vue.js, and Electron, JavaScirpt ES6. When I get to know a technique from the ground up, I usually find some new ideas and work on them!
HKDL and my research topic
In my second year of studying at Macao, I met Professor Xavier of Hong Kong Data Lab(HKDL) and friends worldwide. We had a Data Science knowledge-sharing session every Saturday in a meeting room at CityU, where we made presentations of some of the recent DS projects we had been working on. I once shared the Web Scrapping on Baidu Searching Index, a project that could integrate with NLP. I worked with a friend of Melco's on Amazon Search Ranking to help his amazon store have a higher hierarchy.
Besides HKDL, I learned CS229 online from professor Andrew Ng about traditional machine learning algorithms and deep learning. Most of the algorithms I've learned in OI involve Numbers Theory. While machine learning, especially Deep Learning, needs more Calculus and Linear Algebra. With the aid of necessary mathematical tools, I understood how Deep Neural Networks combine every simple Linear Regression Unit (or Neuron) to achieve feature extraction. I also comprehended the method of feeding the data into the network, how to "teach" the network by calculating partial derivatives of loss in the back-propagation process, and the techniques like CNN to help machines "recognize" a generalized object.
As I realized more about machine learning and read more papers, I felt curious about the area of study, so I am working on my Final Year Project in Adversarial Driven Data Augmentation. Luckily, I've already had some good results, so I plan to publish a paper at a conference in early 2023.
Blog and Interest Group
When I was a freshman at MPU, I enrolled in the Interest Group several times, which taught us techniques outside the classroom. I have studied Blockchain and Unity 3D development. I have always believed that the most effective way to learn something is to teach it to others. So I decided to introduce some algorithms since I am confident with my algorithmic skills. My Interest Group on Algorithms started "recruiting students" for MPU CS majors. Twelve students attended in the first semester. I have given lectures on data structures and algorithms, such as greedy, binary search, DFS, BFS, shortest path, topological sorting, etc. Probably because word of mouth was pretty good, in the third semester of my lecture, the class had almost 40 students! Besides, I taught another one - Machine Learning, which was also very informative, from Numpy to Jupyter Lab. And a super cool lecture -- implementing a neural network from scratch using only Numpy. I shared my knowledge from learning CS229. Many of my students have implemented it by coding after listening to this lecture and actively discussing Machine Learning with me. I also learned a lot by being an Interest Group lecturer. I enhanced my skills when preparing for the courses and practiced my ability to communicate in English.
I have benefited a lot from the content for learning for free. Hence I appreciate the open-source spirit a lot. So I created a blog to post some tutorials. Moreover, I have made public many of my project codes on GitHub.
The BluPurple internship, I could say it was a great experience. Boss Steven presented us with the latest tech stack. Then we learn them from their official documents. And I finally implemented the projects: front-end interface and logic for Health Code, an online chat room with Firebase as the back-end, an automated chatbot with Puppeteer crawlers, and finally, an iOS app, mPark, which is a native app for presenting parking locations and parking slots in Macao, and I plan to publish it on the App Store. Having done a lot of exciting projects in just eight days, I feel like this internship has been great. It is fulfilling that implement something while learning a technique.
We shouldn't just limit ourselves to theoretical details (vital as it is). We should utilize the knowledge and follow up the mainstream technology stack in the marketplace to build some helpful stuff. When I knew that many institutes still teach JSP, an almost obsolete technology, and use textbooks from the last century, I was grateful to see the tech stack of the marketplace. During my internship, I felt a sense of accomplishment when I integrated what I had learned at the university and created something that would help me and others. Of course, technology is getting updated, so keep learning!