NTU Observations and Reflections (8): Senior Year (Fall)
My days at National Taiwan University (NTU) have entered the fourth year. Without noticing, there is only one year left on campus, and it makes me very reluctant to leave. From entering NTU from high school to being about to graduate, I have changed a lot—going from wanting to be a physicist to becoming a software engineer, and changing my favorite sport from swimming to tennis. I have gone through so many things that I often even forget that I once experienced them: GIS Taiwan, the Green Collar Agricultural Market, internships at multiple companies, and all kinds of talks, among others.
The main purpose of university is to teach professional knowledge, but what I value most at NTU is the “socialization training.” I participated in many activities, talks, and courses on campus and met some of the most outstanding young people in Taiwan. At the same time, I also joined many activities off campus and worked in industry. Through interacting, learning, and working together, I learned how to engage with people from all kinds of backgrounds, how to express myself, how to listen to others, and how to communicate and coordinate.
This series records a complete university life, so this post enters senior fall. The previous post covered up to junior spring. As for the summer after junior spring, I recorded it in This summer at CloudMosa. To graduate, I still had to take the credits I needed. Previously, because of work, transferring departments, and taking courses in other departments, I ended up with as many as five courses this semester that I took purely for graduation. And on top of that, I also took two courses I wanted to take: Database Management Systems (DBMS) and Computer Architecture. Altogether, it was over 20 credits. You should know that having a huge pile of credits in senior year is not normal—I felt sorry for myself. (By the way, next semester I still needed to take three department courses in order to graduate. Sigh!)
¶ Graduate School Applications
My reflections on applying for graduate school are actually written in Applying to Graduate School in CS in Taiwan as a “self-taught” applicant. But that post only records the application itself, so here I will add some context before and after, as a complement. This section may be a bit boring—you can skip directly to the next post.
Long before senior year, I had never even considered going to graduate school. I even wanted to take a leave of absence at one point. But after all, I am neither Steve Jobs nor Bill Gates; I had no great plan. So I grit my teeth and continued until I could get my NTU bachelor’s degree. Later, the idea of graduate school came up because taking CS courses felt clearly easier for me, and because in my summer internship I realized that my skill level was still quite poor—graduate school could be a way to fill those gaps.
I thought about graduate school early. I had been paving the way as early as the research plan from half a year ago, and I started preparing documents in August and September. Most students only started preparing when the deadline arrived in October, but it does not really matter—it’s just a difference of how rushed it feels. Even with preparation, the application process was still quite irritating. From the start of the semester to mid-October, my life was disrupted: revising documents, drafting recommendation letters, running through administrative steps, and repeatedly reminding professors to upload recommendation letters.
During the process, I often wrestled with the question of whether to go abroad. I talked with colleagues, asked Professor 洪士灝, and thought about it myself—and honestly, it still bothers me to this day. But having domestic admissions first is always a retreat, so I applied to NTU’s Graduate Institute of Networking and Multimedia and NCTU’s Institute of Computer Science and Engineering. The Networking and Multimedia institute is essentially CS, but I was not admitted. I was disappointed, because I felt that with my level and experiences I should have gotten in. But NTU only looks at grades. So what if a future software engineer got a C in mechanical engineering courses? On the other hand, I did get admitted to NCTU CS, which let me breathe easier. During my transition, I kept worrying that others would look down on me. In some sense, getting into a CS master’s program also “proved” myself. But in truth, even without that external value, I had already proven myself.
After being admitted, NCTU required students to find an advisor first—and finding an advisor is also very hard. The first professor I approached gave me a terrible impression. He was often impatient in conversation, and it felt like he did not want to take me. I also did not understand: if he was going to reject me, why not just reject me in the first email? Why make me travel to NCTU just to listen to a bunch of self-righteous “big truths”? The second professor was much kinder. I first talked with a senior student who was experienced in research, and I also talked with the professor, but he thought I might not be suitable and told me to think more. Then I emailed a third professor. The third seemed very strong—Professor 洪士灝 recommended him—but his lab was full. Until the fourth, Professor 張永儒, things finally worked out.
Professor 張永儒 works on human–computer interaction (HCI), and he has a PhD from the University of Michigan. This is the same as Professor 洪士灝, which made me feel like I had some kind of connection to Michigan, and I fantasized about studying there one day. I think HCI might suit me better, because unlike many other areas, it does not require extremely “orthodox” CS training. For someone like me who switched paths halfway, it is a very good topic. Also, HCI is closer to real life, rather than being vague and intangible like some other research topics, which is more helpful for someone who wants to start a business.
In the end, even though I got admitted to graduate school, I still do not know whether I will actually go. Maybe after graduation I will go abroad to work directly. Maybe I will spend one more year applying to graduate programs abroad. In short, the future is still full of uncertainty. But getting admitted to NCTU CS is still a happy thing!
¶ Computer Architecture
In the summer, I asked Professor 洪士灝 whether I should take Computer Architecture, and he scolded me. I have long forgotten what I got scolded for. I only know that I needed to take it, and after taking it, I felt I gained a lot.
The professor wrote many Facebook posts related to computer architecture. The earliest one I remember is Computer Architecture Keeps Evolving with the Times. But honestly, he often shares thoughts on these kinds of topics, and reading them often feels inspiring.
By the end of the semester, I wrote another post: Three Courses Software Engineers Must Take. The three courses are Data Structures and Algorithms, Computer Architecture, and Operating Systems—this course is one of them. CS graduate programs often list these three as required make-up courses for master’s students who are not from the field, and that is absolutely not without reason. In the software development process, these three complement each other and have a decisive influence on whether a software engineer can write efficient and fast code.
¶ DBMS
This semester I took a Database Management Systems (DBMS) course. From the beginning, I planned to build my own DBMS. The project was named StellarSQL, a lightweight DBMS implemented in Rust. And for almost the entire semester, I was basically coding on this.
This year, the iThome Ironman competition started earlier than usual, and this semester was already my third year participating. Since I wanted to build a DBMS, I decided to start from Ironman. My topic was Let’s build a DBMS. I thought: if I research a bit and write a bit every day, maybe I can finish it in a month. But having stable daily output is really too hard. To be honest, if the topic is “build a brand-new system,” just researching and reading materials can consume the whole day. So later in the Ironman, I could not keep up, and in the end I received an honorable mention.
Later, at the awards ceremony, I ran into one of the judges, Mr. 徐千洋. He is one of HITCON’s founders and serves as a judge every year, so we can be considered acquaintances. When he saw me, he encouraged me and said that my writing over the past two years had been good. I thought last year’s browser series was okay, but this year’s DBMS series was honestly quite bad, as I said above. Yet in reality, I truly came to understand DBMS, and it was only by the end of the semester—two months later—that I got my self-built StellarSQL to look somewhat like a real system. I think I should rewrite a smoother tutorial in the future, but I also believe the “journal” I wrote during that period is still worth reading.
I was surprised that I even got an honorable mention this year, since the whole series looked like a purposeless research diary. But I believe my topic choices were fairly distinctive. When everyone was writing about “how to use the wheel,” I was studying “how to make the wheel,” and that is probably why the judges liked my series. So when I said I felt I wrote badly, Mr. Xu just smiled and said he knew this was a hard thing to write.
ITHelp Ironman venue
Later, I found teammates. They shared about half of the work, and StellarSQL’s development speed improved significantly. Over several months, I wrote more than 10K lines of code and spent hundreds of hours. Thanks to my teammates 黃宇平, 董書博, and 李彦均 for their help, which made the project smoother and more complete.
Building a system is truly interesting. Almost everything you learn in school can be used, and you will also learn what school does not teach. When we planned StellarSQL, we had already considered the system design in detail. But due to time constraints, some parts were implemented in the simplest way—for example, designs for the protocol, cache, and parser were very minimal. Still, as a “lightweight DBMS,” I do not think the architecture design is bad at all, and I believe the code quality is also quite high.
To be honest, the completeness is probably less than 1/3. But the prototype already exists: it runs, and it is an actively developed project. In the future, we will fill in important functionality—such as completing the SQL commands—and rewrite some modules, gradually swapping them for more complex but higher-performance designs.
