..

밑바닥부터 만드는 컴퓨팅 시스템(Nand to Tetris) 후기와 추천 대상

2024년 08월 즈음, 친구와 Nand to Tetris(밑바닥부터 만드는 컴퓨팅 시스템)라는 온라인 강의를 수강했다.
나에게 매우 만족스러운 강의였어서 간단한 소개와 느낀점에 대해 공유해보고자 한다.

밑바닥부터 만드는 컴퓨팅 시스템(Nand to Tetris) 소개

컴퓨터의 작동원리를 실습을 통해 이해할 수 있는 프로젝트이다.
간단한 논리 연산자인 Nand부터 시작해서 GUI 프로그램을 동작시킬 수 있는 범용 컴퓨터를 만든다.
하드웨어 및 소프트웨어를 순서대로 만들어 보면서 컴퓨터 과학의 주요 지식을 이해할 수 있다.

밑바닥부터 만드는 컴퓨팅 시스템라는 책과 Nand to Tetris라는 강의로 나뉘어 있는데, 두 가지를 함께 보아야 수월하게 진행할 수 있다. (둘 중 하나로도 진행 자체는 가능할 것 같다.)
강의는 실습 과제를 제출하고 평가받을 수 있어 피드백을 통해 올바르게 학습했는지 확인할 수 있고, 책을 통해서 더 자세한 설명을 들을 수 있다.

Teach Yourself Computer Science를 통해서 강의를 알게 되었는데, 마침 이런 저수준의 동작에 대한 궁금증을 가지고 있어서 수강하게 되었다.

후기

좋았던 점

프로그래밍 언어, 컴퓨터의 동작 원리 이해

C++이나 Java의 객체지향이 내부적으론 함수와 구조체로 구성된다는 점을 깨달았다.
고수준 프로그래밍 언어는 저수준 언어/중간 언어/기계어로 컴파일되며, 최종적으로 CPU가 이해할 수 있는 저수준 언어가 된다.

저수준 언어에서는 단순한 명령어를 순차적으로 실행되며, 때때로 Jump 명령어로 함수나 분기, 반복문을 구현한다.

CPU의 역할은 매우 단순하다. 저수준 언어를 실행하여 정해진 기능을 수행하기만 한다.

CPU와 RAM은 논리 게이트로 구성되어 있다.

프로그래밍에 대한 더 열린 사고

모든 프로그래밍 언어는 결국 기계어로 변환되어 실행된다는 사실을 알게 되었다.

각 언어는 문제 해결 방식이 다를 수 있지만, 기계어 입장에서는 동일하게 처리된다. 이 사실을 깨달은 후, 새로운 언어와 기술에 대해 더 열린 마음을 갖게 되었다.

특히 Java와 Spring에만 익숙했던 내가 다른 기술에 대한 막연한 두려움이 줄어들었다.

실습의 중요성

강의에서 다루는 많은 내용을 들어본 있었지만, 실제로 이해하지 못한 부분이 많다는 것을 깨달았다.

단순히 아는 것과 이해는 다르며, 직접 구현을 통해 더 깊이 이해할 수 있었다.

앞으로도 이러한 실습을 통해 모르는 부분을 배우고자 한다.

아쉬운 점

실제 구현보다는 제한적인 부분

나는 장점에 더 가깝다고 보는데, 실제 구현에서 다루는 수많은 문제는 생략되어 있다.
대신 현실의 복잡한 문제를 고민할 필요 없이 이해에 집중할 수 있다.

OS에 대한 설명 부족

강의는 기초적인 컴퓨터 시스템에 중점을 두며, 리눅스 등 현대 OS에 대한 내용을 다루지 않는다.

인터셉터나 논리 메모리와 같은 현대 OS 필수 개념을 기대했다면 아쉬울 수 있다.

2부 실습 난이도 여려움

강의 2부로 넘어가면서 난이도가 급격히 올라갔다.

1부는 외부 자료 없이도 해결할 수 있었지만, 2부부터는 구글링 없이는 어려웠다.

복잡한 요구사항을 많이 다뤄보지 않은 사람에겐 어려울 수 있다.

실제 구현에 대한 비교 부족

강의에서 다룬 내용이 실제 구현과 어떤 차이가 있는지 설명해주지 않아 아쉬웠다.

한국어 번역 문제

심각한 부분은 아니지만, 종종 오타/오역(영단어와 한글 단어의 의미가 일치하지 않음)이 보인다. 원서를 무리없이 읽을 수 있다면, 원서를 보고 진행하는 걸 추천한다.

추천 대상

추천하는 대상:

  • 컴퓨터의 동작 원리를 이해하고 싶은 사람:
    • CPU, RAM 부터 OS까지 만들어보는 경험을 할 수 있다.
  • 프로그래밍 언어의 근본적인 개념에 대해 궁금한 사람:
    • 기계어, 어셈블리어, 중간 코드, 고수준 프로그래밍 언어까지 직접 개발할 수 있다.
    • 그리고 이러한 구현 별 추상화를 담당하는 컴파일러도 직접 만든다.
  • 실습을 통해 학습하는 것을 선호하는 사람:
    • 단순 이론적 학습보다 실제 구현을 통해 개념을 더 잘 이해할 수 있다.
    • 강의를 수강하는 경우, 과제 제출 평가를 통해서 피드백을 받고 학습할 수 있다.

추천하지 않는 대상:

  • 실제와 비슷한 저수준 시스템을 만들고 싶은 사람:
    • 강의에서 진행하는 프로젝트는 이해를 중점으로 만들어져, 현실에서 필수적인 많은 부분은 다루지 않는다.
  • 이미 저수준 기반의 동작 원리를 이해하고 있는 사람:
    • 컴퓨터의 동작 원리, 프로그래밍 언어(컴파일러 동작 과정 등)와 같은 지식이 충분하더면 굳이 읽을 필요는 없어보인다.
  • 책에서 다루는 특정 부분에만 관심이 있는 사람:
    • 각 붙야를 넓고 얕게 다루고 있어서, 책에서 다루는 한 분야에만 관심이 있다면 추천하지 않는다.
    • 예를 들어, 컴파일러 구현에 관심이 있다면 컴파일러 구현만을 다루는 다른 자료를 찾는게 좋다.