Studying Computer Science
(Checkout the repo).
As soon as I started working as a software developer, I knew that I wanted to study computer science the “right” way. I’m the kind of person who is bothered when I don’t know how something works behind the scenes.
Over the past couple of years, I’ve tried a lot of different things:
- Reading the books listed on teachyourselfcs.com.
- Applying myself to the courses on OSSU.
- Exploring various perspectives on computer science, like one focused on functional programming (some really nice lessons on parallelism there).
- Completing CS61A in 2021, which I loved. This led me to try CS61B (data structures and algorithms) and CS61C (computer systems, C, and Assembly). I couldn’t get through CS61B at all, and CS61C was really fun until the C part.
None of these methods worked too well for me. I would start one, get excited (I loved Systematic Program Design, for example), but then leave it behind for various reasons.
The issue was that I wasn’t having much fun. I was always worried about the job market (studying market-valuable tools was never my thing, but I pushed myself a lot), and the problems in the lessons didn’t really interest me personally. It wasn’t fun. I wasn’t learning much.
But I had an unexpected idea.
In December 2023, I was on vacation and decided to spend one week trying to create a new server framework in Python. Nothing too fancy, but simple enough to answer some questions I had about HTTP, sockets, etc. What I noticed when I started the HTTP project was that I was creating a new study modus operandi: I had a problem (building a server framework), and I had questions (What’s a socket? How does a request and response work underneath?), and I could not only answer those questions (in text) but also prove something by coding a solution.
This gave me the intuition that I could study almost anything with this little framework: Problem -> questions -> answers -> code solution.
Whenever a question popped into my head, I would write it down in a small questions.md file. Some of the questions I wrote down in January were: “What’s a shell?”, “What’s a terminal?”, “What’s multiplexing?”, “What’s a buffer?”, and so on.
In March, I discovered that Oz Nova had opened CS Primer to the public. I was amazed. I’ve always wanted to study in his Bradfield Computer Science course, but I didn’t have the money for it. I was surprised to find that Oz’s method was really similar to what I was doing. He approached problems with questions, answers, and code solutions.
He proposes really interesting problems to solve: like writing a concurrent proxy, or writing a custom shell. I honestly feel excited like the first days of programming! I started studying in April 2024, and I intend to finish most of it by the end of 2025.