What’s The Best Way to Learn Computer Science
Build a computer!
A year ago, I finished high school and after that hurdle, another one popped up: the pandemic. I had to put my studies on hold and take a gap year. Surprisingly, it was one of the best decisions I ever made because I gained a lot of free time, an uncluttered mind, and the freedom to do anything.
If you are a self-taught programmer, you must have had a similar journey: made projects googling a bunch of stuff, jumped from one technology/language to another, don’t know anything in particular, finally realized GitHub is a lifesaver.
Yes, I am in the same mess. So, I decided to take my computer science skills to the next level. I had built a few apps, websites, machine learning models, and a bunch of other stuff, but I knew that I still didn’t understand the basics.
I didn’t know the most efficient way of doing stuff. I surfed around the internet and found that data structures and algorithm was one of the basics about computer science that I must know, and then there were low-level languages, operating systems, compilers, etc.
I took a course on Coursera by Stanford called Algorithms Specialization. It was good and helpful, but a little boring. I completed 3/4 of it and put it on hold. Then, I turned to a book: Computer systems: A programmer's perspective. This was probably the biggest mistake. As with most of the technical books, it was gigantic and boring, but somehow I survived till page 200.
Then I found Nand2Tetris.
Nand2Tetris is a project-centric course with an aim to teach computer science by building a modern computer from the ground up. The course is instructed by Shimon Schocken and Noam Nisan, who are both professors at The Hebrew University of Jerusalem.
You might ask: Why learn CS from the ground up? Wouldn’t I land a job just with python?
- A lot of computer science degree programs expect you to know how operating systems, low-level languages, assemblers work.
- Traditional education expects you to understand everything by reading books.
- Project-based learning is a lot more fun; You are making a computer from the ground up in weeks!!!
- You will really need to use your brain for this one :)
It’s important to reason from first principles rather than by analogy… With first principles, you boil things down to the most fundamental truths… and then reason up from there. — Elon Musk
The whole course is divided into 2 parts. The first part focuses on the hardware side of things such as making elementary logic gates, ALU, RAM, etc. The second part is more inclined towards the software side of things: making the operating system, high-level language, compiler, etc.
As of this writing, I am in week 5 of the course. The course is divided into 12 weeks, with the first 6 being part one of the course. When I took the course, I thought it would be hard and complicated. However, I completed 3 weeks' worth of course in just the first week.
I have documented my thought process, explanation, and code in a GitHub repository. If you need help with the course, you can check it out and ask me questions.
The course was more than learning computer science for me. Have you ever heard of John Conway’s game of life or rules of life? It is a simple game with just 4 basic rules and people have made logic gates, other games, and spectacular things out of it. You should definitely check it out.
Similarly, in the course, we built logic gates, ALU, RAM, etc. with just 1 gate: Nand. It left a smile on my face when I realized that all the computer logic, complexity, beauty is created by simple rules. Maybe our universe is designed in the same way: The Theory of Everything might be just a simple rule.
Hi! I am Shubh, a Programmer, Blogger, and a YouTuber. I believe in decentralisation, love tech, and invest in crypto. I create content related to these topics and programming and bogging.