← Blog

Why am I learning Computer Science fundamentals and C programming

A personal note on why I’m investing in Computer Science fundamentals to build stronger mental models for the future.

Recently, I’ve been spending about 10–20% of my time building my Computer Science foundation.

I’m reading books to learn how computers actually work, studying the OS basics, and writing programs in C that are closer to the kernel and hardware layer. I usually write codes in JavaScript / TypeScript where many things such as memory management, dynamic arrays, and objects are abstracted away. I wanted to understand what is actually happening underneath those abstractions. For learning C, I created a roadmap with AI and use AI as my tutor to learn concepts, but when I write code, I try to design and implement it by myself as much as possible.

Why spend time learning Computer Science and writing C programs in the age of AI Coding? If you know what you want to build (especially web application), isn’t it enough to just let AI build it?

I’m not doing this because I want to become a C programmer.

I don’t have a Computer Science degree. I began learning programming almost 3 years ago and I learned the basics of JavaScript and web development through a coding bootcamp. Since then, I’ve spent my free time building several web applications. Along the way, I also learned things like hosting on Vercel, AWS, and Cloudflare, setting up CI/CD etc, by actually building and deploying applications. Today, AI can write much better code than I can. Especially for web applications, developing with AI is much faster, and if you give it clear instructions and review the output properly, it can produce very good code.

When I worked in Product Marketing at AWS, I often felt that my lack of a Computer Science foundation was becoming a disadvantage. I’ve studied web applications and algorithms before, but I never really understood what is hidden underneath modern web applications, things like operating systems, kernels, virtual machines, networking (HTTP/TCP), and other lower-level concepts. While AI generates code for us (and platforms like Vercel make deployment incredibly easy), kernels, HTTP etc still exist exactly as before. Modern programming languages also hide how arrays are actually implemented, how memory is managed, and how programs communicate over the network. When talking about container orchestration technologies like Kubernetes or Amazon ECS, understanding concepts such as port, IP address, load balancing, is almost assumed. Likewise when thinking about infrastructure, understanding what a virtual machine actually is, what Linux on EC2 actually means, or what concurrency is becomes important when choosing and managing services.

The industry is also evolving incredibly fast. New products and new ideas appear almost every day. At the same time, many of them are on top of concepts that have existed in Computer Science for a long time. That’s why I believe that if I understand the fundamental concepts in Computer Science, I’ll have much better mental models for understanding whatever comes next. Until now, because I didn’t have those foundations or mental models, I found myself asking AI the same kinds of questions over and over again. Even though I got answers, my understanding stayed at a surface level, and I couldn’t really apply those ideas. Since I started studying operating systems and writing C, I feel that I now understand many more things than before.

I once talked about this with a prinicipal engineer at AWS. He told me that a Computer Science degree is just a ticket to get your first software engineering job, and that what really made him who he is today is the experience of actually building and struggling as a software engineer in his job. I think he’s right. There’s something you can only learn through real experience. At the same time, I also think that the Computer Science foundation he learned in his degree has become so natural to him that he no longer notices it. That foundation is still there underneath everything he does.

I’m currently exploring projects at the intersection of XR/AR and AI agents and trying to build products that could become part of the next generation of user-computer interfaces. I’m building with Claude Code (and sometimes with Codex or other AI coding tools…), working on several product demos/demo concepts. I am also using a personal agent like Hermes and experimenting with building my own personal agent to better understand how to build an AI agent. I’d like to write about these in another blog posts.

Going forward, I want to deeply understand technology, use it, and confidently build products with it. I’ll continue using AI as much as possible, but I also want to understand the technology myself to be able to design systems, maintain them, and deliver products with confidence.

I’m starting a little (a lot?) later than others, but I believe that building strong fundamentals now is a worthwhile investment if I want to continue understanding AI and whatever new technologies come next.

Right now, I’m spending about 20% of my time on things like:

  • Writing programs in C while learning Computer Science fundamentals such as system calls, memory management, HTTP, and concurrency
  • Reading Operating Systems: Three Easy Pieces (OSTEP) to deepen my understanding of operating systems

After that, I plan to read about networking and books like Designing Data-Intensive Applications and Distributed Systems. If you have any recommendations, I’d love to hear them.

I’ll continue sharing what I learn and what I build through this blog as I make progress.