deer-develop / study

2 stars 0 forks source link

모든 책은 1장이 제일 재밌고 #3

Open hyewoncc opened 5 months ago

hyewoncc commented 5 months ago

앞으로 뭘 만들게 될지 두려움 반 흥미 반으로 읽었어 ㅎㅎ

안녕 밑바닥 세상아(p2)

// 프로그래밍 101 과목의 첫 예제 
class Main {
  function void main() {
    do Output.printString("Hello World");
    return;
  }
}

Hello World 같은 프로그램은 겉으로만 간단해 보일 뿐이다. 이런 프로그램이 컴퓨터에서 실제로 작동하는 데 무엇이 필요한지 생각해 본 적이 있는가? p2

자바 처음 배울 때 왜 클래스 안에서 뭘 써야하는지, 왜 거기서도 public static void main(String[] args) 안에 써야 하는지, 또 저 args는 대체 뭔지, 쓰지도 않는데 왜 적어 놓은 건지 어리둥절했던 때가 생각난다


추상화와 구현(p6)

좋은 모듈 디자인이란 시스템의 나머지 부분을 신경쓰지 않아도 되도록 모듈을 독립적으로 만드는 것이다. 사실 시스템이 잘 설계되었다면 이 모듈들을 어떤 순서로 만들든, 팀으로 일한다면 동시에 만들어도 상관없다.
바로 어떤 모듈이든 구성 블록으로 사용할 때는 모듈의 추상화에만 집중하고, 상세 구현은 완전히 무시해야 한다는 점이다.

이 책에서는 저수준인 하드웨어 사이의 분리를 얘기한 건데, 그림에서 제일 고수준에 위치하고 우리가 하는 일은 인간의 사고 <-> 고수준 언어의 프로그램 작성에도 늘 통하는 진리라는 게 인상깊었어. 또 모든 단계가 결국 추상화해서 보면 같은 일의 반복이구나 싶어서 재밌네.


진리표와 불 표현식(p15)

어떤 불 함수의 진리표 표현은 유일하지만, 모든 불 함수는 동등하면서도 매우 여러 개의 불 표현식으로 표현할 수 있으며, 그 중에 더 짧고 작업하기 좋은 표현이 있다. ... 따라서 불 표현식을 단순화하는 것이 하드웨어 최적화의 첫걸음임을 알 수 있다.

하드웨어 최적화 개념을 처음 접해서 재밌었음


기본 게이트와 조합 게이트(p18)

어떤 방식이든 정해진 인터페이스를 따르는 게이트를 구현하는 것이다. 효율성 관점에서는 게이트를 최소한으로 사용해서 비용과 에너지를 아끼고 계산 속도를 빠르게 하는 게 일반적인 원칙이 된다.

이건 세상 모든 작업의 진리라서 재밌다ㅎㅎ


1장 정리(p36)

하지만 현실적으로 대부분의 컴퓨터는 Nand나 Nor 게이트로 만들어진다.

앞에서 나온 다른 게이트, 특히 And, Or, Not이 익숙한 내 입장에서는 더 단순해보이고, 별 차이 없을 것 같은데 왜지? 싶었는데 잘 정리된 네이버 블로그 글이 있더라, 흥미 있으면 읽어봅시다

Deocksoo commented 5 months ago

혜원: 이렇게 저러벨에서의 구현 명세를 보는건 OS책 이외에는 처음이다. 명세에서 보면 "이런 식으로 구현해야 한다" 정도만 알겠다. 저 모든 단계에서 인터페이스를 명세로 보고 구현을 생각하지 말고 해야하는 말이 들어왔고, 고수준 언어에서 통하는 인터페이스의 개념이 이렇게 저레벨에서도 유효하다는게 신기했다.

네이버 블로그: NAND를 쓰는게 트렌지스터 레벨에서 단가가 더 싸다.