Skip to content

Learning how to build my own computer

Notifications You must be signed in to change notification settings

Niskarsh12/Nand2Tetris

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nand2Tetris

Learning how to build my own computer


Back Story

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.


What is 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.


What's this repository?

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.


My Experience with Nand2Tetris

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.

About

Learning how to build my own computer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Hack 62.2%
  • Assembly 24.3%
  • Scilab 8.8%
  • HTML 2.5%
  • Python 2.2%