Learning how to build my own computer
A year ago, I finished high school and after that hurdle, another one popped up: pandemic. I had to put my studies on hold and had to take a gap year. Surprisingly, it was one of the best decisions I ever took because I got 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 don'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 basic stuff 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 the thing 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 damn 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.
This repo has 2 main folders 'Downloaded' and 'My Folder'. The downloaded folder is simply downloaded from the nand2tetris site. In it's project section, I will add code as soon as I complete them.
My Folder has everything I created on my own. It has all the projectes I have completed thus far. It does not have any test or cmp files only the files I wrote. The code is same in both this folder and the projects in downloaded folder. My Folder also has all the notes for each project in PDF form. These notes might help you finish all the projects or to understand how everyhting works. I would recommed you to only look at my explanation of code ones you have given it a try. My code may not be the most efficient solution, it is just something I come up with, so keep that in mind.
I hope you learn a lot from this repo and the whole Nand2Tetris course.
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 but surprisingly; 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.