How I Became Interested in Computer Science
I am currently pursuing a graduate degree in computer science at NCTU. Deciding to go down the CS path was a long process for me. This story starts from the very beginning and describes how my interest in computer science gradually took shape. Everyone’s story is unique; I hope mine can offer some inspiration and lessons for others.

(Me during a sharing session)
Before I went to college, I thought I would become a physicist. I never doubted it—even though my high school physics exams were terrible and I couldn’t solve a single physics olympiad problem. But I still had some passion for doing research, and my physics science-fair projects got a tiny bit of recognition, so I believed I could keep going. It wasn’t until I actually entered college—when I didn’t do well in calculus or general physics either—that I realized I really didn’t have the talent. People who truly fit a physics major are gifted in math and physics; I have friends who are insanely good at physics, and you can tell just by watching them. That was also when I realized: my talent was definitely not in physics.
Although I didn’t fully realize until my sophomore year that I had to go into computer science, my earliest exposure to computers—and the start of my interest—actually began in elementary school. Back then, I thought cybersecurity was cool: hacking into someone else’s computer seemed “so badass”. Most books on the market were about trojans and viruses, and I would borrow them to read. They often used tools as examples. Looking back, those books were basically useless—if you want to be a hacker, you obviously write your own tools and find your own vulnerabilities. When I was a kid, PCHome ComputerHome was still a fresh and interesting magazine, and it often had tutorials such as how to install Ubuntu. I followed along and found it pretty fun. So, since childhood, I’ve been curious about computers.
After entering middle school, I read an introductory C++ book. At the time, I understood the basic syntax, but when it introduced classes and templates, I was completely lost. I couldn’t understand why you’d need them—why not just write the program directly? What’s the benefit of classes? I still remember a day when my math teacher, Ms. Chao Li-Lien, asked me: “Liu An-Chi, you’re so smart—can you turn a Wii controller plus a projector into an electronic whiteboard?” I thought it was too hard and told her I couldn’t. Looking back, the tech required wouldn’t actually be that difficult: if you can access the Wii API, you could probably do it pretty easily. Or you could build your own setup with an IR emitter and IR receiver to analyze 3D trajectories—also not that hard. There was another student in my cohort, Cheng Ken, who later got into Yale CS and won gold medals in both informatics and physics olympiads in high school. I believe he could have done it back in middle school, while I didn’t have that capability until college.
In middle school, I was still immersed in astronomy and physics. I almost went through every book on the market about the universe. It’s kind of amazing—there are so many popular-science books about astronomy and the cosmos. At the time I naïvely believed that if I read them all, I would become really strong. It was only later that I realized: popular-science books can cultivate scientific literacy, but real experts in middle school are already grinding through university-level general physics, mechanics, and electromagnetism. No one ever told me that, which is honestly a bit sad. I think my level dropped after entering a science-focused class partly because I didn’t study the right way in middle school; apparently other science-class students were already reading original textbooks back then.
After entering high school, we had programming classes in 10th grade. The teacher’s method was to explain the logic of programming concepts—what if is, how it checks whether a condition is true or false, and how the program behaves differently depending on that. Then the teacher would throw out a problem, roughly like: “Xiao-Ming wants to check whether his national ID number is valid. The rule is that the first character is a letter, and the digits after that must satisfy some position-by-position formula…” Then we practiced, and eventually ran a checker program. That rekindled my curiosity about programming. I went and found a C++
introductory book and read it again. Same story: I still didn’t understand what classes and templates were for, but at least I was ahead of the teacher—everything taught in class, I could already do. I also remember that some classmates couldn’t understand the teacher or hadn’t “gotten it” yet and were basically stuck; I would go teach them, and now those people have all gone into electrical engineering or computer science and write code too.
At the same time, I found out my school had programming competitions. The teacher would post some contest problems on his Facebook. I thought they looked interesting, so I went and tried them. The teacher also provided reference material—basically algorithm notes—so I learned while solving, and discovered that programming was genuinely fun. I have to thank “Algorithm Notes” (演算法筆記), as well as classics like “Bird’s Linux” (鳥哥的 Linux) and “Beej’s Network Programming”. These tutorial articles are basically textbooks, free for everyone, and have benefited so many students.
So during 10th and 11th grade, I spent a period of time digging into programming competitions—essentially data structures and algorithms. Solving problems was fun, and getting AC was especially satisfying. But I think I really wasn’t talented at competitive programming. I believe the core issue is shared: my mathematical and logical thinking wasn’t actually that strong. I’m not good at abstract thinking like math and algorithms; I need a long time to think, and I’m not good at generalizing from one case to another. So once contest problems deviated from the standard templates like LCS or LIS and introduced variations, I would have no idea what to do. It was frustrating. I felt I wasn’t suited for CS, so I gave up and went back to physics science fairs and physics debates.
In high school, I also participated in physics training at Academia Sinica’s Institute of Atomic and Molecular Sciences. One of the courses used numerical simulation to compute interactions between atoms and molecules to study which structures are stable. The institute had its own computer room; I vaguely remember it was built from a pile of PS3 cores. Back then it wasn’t NVIDIA GPUs yet—who would have guessed that later deep learning would explode and the whole world would start buying NVIDIA GPUs like crazy for deep learning? Anyway, the experience felt fresh to me and helped me understand that computing is an important tool in science.
Although I needed to write code for my physics science-fair projects, it was very shallow—basically just “run some data”. Later, after finishing the college entrance exam, I wanted to do something meaningful, so I did another science-fair project: studying infectious diseases through numerical simulation. I documented it in this post and this post. In short, it was about creating a virtual world where people could interact, and modeling how interaction could transmit illness when someone is sick. I think building a virtual world is incredibly fun—like the movie The Matrix, or the artificial fluctlights in Sword Art Online. There are many similar sci-fi works. I don’t think it’s impossible; it’s just a matter of how long it will take humanity to do it. But just thinking about building a virtual world is exciting—whether it was me in high school or me now—so I started practicing programming again. This time, unlike contest problems that lean toward algorithms, I was using code to build a model. Infectious disease was the research subject, and the code was just a tool—but using that tool well is itself a field of knowledge, and through that process I started finding programming fun again.
However, because I always believed that CS majors should be naturally good at competitive programming—and because I also believed I was destined to become a physicist—when I filled out my university applications, my first choice was NTU Physics, and my second was NTU Atmospheric Sciences. I don’t even remember what I put after that. In fact, my score that year was enough for NCTU CS. Sometimes I wonder: would it have been better if I had gone directly into NCTU CS? But I also think maybe not—because the opportunities and experiences I had at NCTU might not have happened. Even though NCTU could have had different opportunities, I really like everything that happened to me at NTU: meeting students from all kinds of departments, taking EE electives as a freshman and getting destroyed, joining forums and environmental groups, attending talks on campus when bored, and enjoying the advantages of being in Taipei when looking for internships. Those years at NTU shaped who I am today.
I became certain about going into CS during college. I wrote the detailed college story in the “NTU reflections and observations” series (「台大心得與觀察系列」), and I’ve recorded many other independent stories as well, so I won’t rewrite them here. In short: I first learned web development and started getting interested in frontend. Frontend and backend are tied together, so I learned backend too. Then I wasn’t satisfied with writing only small programs and wanted to contribute to large open-source projects; by coincidence, that opened the door to my interest in browsers. I not only contributed to Mozilla’s Servo browser, but also had the chance to develop the Puffin browser. I also took several CS-related courses; for example, after taking DBMS and finding it interesting, I started writing a toy DBMS. Later, I went to Skymizer to develop ONNC, a cross-platform machine learning compiler. I also participated in many open-source events: I gave talks at Taiwan and Hong Kong open source conferences, led a group translating the Rust official website, and hosted a Rust track at COSCUP. All of these stories feel exciting to me.
My interest in CS was still in its early stages before college, but it grew rapidly afterward. Once I found my interest, I proactively pursued things I thought were cool—open source, internships, courses—and I think that was the result of actively striving for opportunities. But even though my experience may look rich on the surface, I’ve also been rejected by many companies. I also know that because I didn’t come from a traditional CS background, I lacked a lot of fundamentals, and I couldn’t keep up with the level I wanted to reach. That is why I chose to pursue a CS graduate degree—to fill in those missing foundations. For now, I’m working hard to train myself and become a first-class computer scientist.