This review has been originally written Dec/2017.
Finally, I made it! I hesitated if I should call this post as a ‘review’, but decided not to consider it too seriously.
I nearly have zero knowledge of both coding or computer science. I even rarely studied math in high school. I wanted to start self-study and enrolled an online course provided by Google&Opentutorials, but that one was rather timid during 2/3 of the whole course and suddenly digging too deeply and hastily with the remaining 1/3. I finished it anyway but It didn’t’ feel like I actually learn something with the program. So I signed up with Codeacademy. It was way better than the former one, but I was missing something. I felt I was struggling with basic concepts and assumed that it came from my lack of knowledge in mathematics. So, I studied Math I, II and III in Kahnacademy, and then enrolled in a class of Advanced Functions of Grade 12. This helped me to get a proper attitude to learning programming. However, it was still not enough. I couldn’t catch a concept of the whole system and I was starting to lose my interests and motivations. I felt nervous because a doubtful thought that it might be not my thing was started to grow at a corner of my heart. I should have found something which is covering fundamental principles or exciting, or both – and I found this. nand2tetris.
What I intrigued the most was the additional word after its title – ‘Project-Centered Course’. It seemed like the most effective way to get new knowledge in my head while not losing my focus and interest. I also love the concept. There is no prerequisite at all, and everything would be built one by one from the basis.
It was not easy though. In the first project, I asked to build 14 chips(gates) using only Nand gates and previously built chips and suffered nearly one hour while writing for one single DMux4Way gate. Though it was quite fun. The forum was not only helpful but also kind of a relief to know that I am not the only one who struggles from day 1 pulling my innocent hairs. The following projects were actually not miserably hard. Most of them were quite challenging. I needed to spend 3-5 hours fixing, rewriting, or reconstructing the whole code, but nothing was impossible to finish. When I succeeded to run my CPU properly, I literally jumped to the ceiling.
I feel a bit stupid for myself that I hesitated to take the 6th week for a few days. I was horrified to build an assembler because I thought I was going to build it with HDL. Even while watching the lectures my mind was messy and full of worries about the upcoming last project which would be at least thousands of lines of Mux and Dmux. Turned out my worries were all for nothing. Since I have no knowledge about programming I asked to just ‘translate’ it by myself. How silly.
In this course, everything is provided and explained clearly. For a person who has no background such as myself, it might be a bit tough and watched several times repeatedly, and sometimes a bit of additional research is required. However, it is certainly achievable, and mostly enjoyable. The professors are kind-hearted and have a sense of humour.
I am going to take part two directly. I’m curious if the software part(part II) will be easier than the hardware part(part I) – probably not, I assume? Anyway, it is a very nice, well-structured course and I would recommend it to anyone interested in computer science.
+) After I watched the first few videos on part II, I realize that unlikely the first one it is requiring some prerequisite on computer programming. The lecture strongly urges not to move forward for someone who has no background on any of programming languages. I really wanted to make this project to the finish line so it's such a shame I should stop here. I'll definitely come back after I gain some knowledge of this world!
+Mar 2018) I programmed the assembler! Yay! Now I feel confident to proceed Part II. Currently, I'm a bit busy since I'm middle of the semester, but I'll come back later when I got some spare time.
+July 2018) As I have a bit of time for summer I tried to resume this course, then I realised that I'm still not good enough to do this. The instruction for the next assignment suggested dividing tasks into smaller parts and do one at a time, but I have no idea how to organize them myself. I think I need more studying for programming in general.