AUSG / QCS-Books

Quick Circle Study - Books
MIT License
8 stars 0 forks source link

[Book Reviews] 2019 09 26, 문성혁 - CODE(2014, 개정판) #2

Closed roeniss closed 1 year ago

roeniss commented 5 years ago

Read this book from: 2019 09 16 to 22

Short reviews: 세 줄 요약 가능 책이 생각보다 쉽네... 이렇게 설명할 수도 있네... 리뷰를 챕터별로 쓰네...

챕터 별 리뷰 (1 ~ 10)

Chapter 0. 들어가기 전에

역자가 '이 책 오래되었지만 진짜 좋은 책이예요!'라는 말을 부담스럽지 않은 선에서, 설득력있게 풀어내줘서 고마웠다. 덕분에 부담감 다운.

Chapter 1. 친구들과의 대화

원서 초판이 1999년에 나왔다는 것을 확인하고 납득했다. 저자는 모스 부호의 개념을 어떻게든 쉽게 설명하려고 하는데 나는 이미 엑시트에서 SOS 신호를 배웠기 때문에 전혀 놀랍지 않았다.

Chapter 2. 부호와 조합

모스부호의 개념을 자연스럽게 이진법으로 확장하는 설명 방식이 퍽 인상깊었다. 이 책을 읽는 동안 저자의 설명 방식에 대해 자주 감탄했다.

Chapter 3. 점자와 이진 부호

점자의 개념에서 시프트(Shift) 키의 개념이 처음으로 나왔는지는 잘 모르겠지만, 컴퓨터의 자판과 연결될 수도 있는 그 지점이 꽤 흥미로웠다.

Chapter 4. 전등을 분해해 봅시다

갑자기 분위기 과학모드... 저항의 개념과 전기가 전류의 반대 방향으로 '이동한다'는 설명은 고등학교 때나 지금이나 별로 와닿지 않는다.

Chapter 5. 다른 방법을 찾아봅시다

접지의 개념을 이렇게 활용할 수 있다는 것에 신기했다. 마더 어스...

Chapter 6. 전신과 릴레이

릴레이, 즉 리피터의 개념이 나오니 생각하지 않을 수 없는 과거가 떠올랐다. 마인크래프트(속칭 마크)라는 게임. 나는 본의 아니게 마크로 회로를 배웠는데, 이 게임에서 자동문을 만들려면 회로를 구성할 수 있어야 하기 때문이다. 놀랍게도 게임은 그런 기능을 제공하고 있었고 내가 해야할 것은 블로그에 설명된 것과 똑같은 모양으로 회로와 리피터를 까는 것 뿐이었다. 그래서 난 릴레이보다 리피터라는 말이 좋다.

Chapter 7. 우리가 사용하는 열 개의 숫자들

이 책은 누구한테 권하기가 참 애매하다. 대학생이 보기엔 좀 쉽게 느껴질 것이고, 중학생이 보기엔 많이 무거울 것이다. 결국 전자공학과 또는 CS에 관심있는 고등학생을 타겟팅 해야할 것 같은데, 이 부분을 읽어가면서 특히 그런 생각을 많이 했다.

Chapter 8. 십진수 이외의 것

나름대로의 아이디어를 발휘해서 n진법을 설명하려는 것이 재밌었다. 이렇게도 설명할 수 있구나, 하는 느낌. 하지만 '8진법에서는 7 다음에 10이다'라는 설명은 혼동을 줄 수 있을 것 같다. 번역의 문제인 듯 하기도 하고, 문화권의 차이인 것 같기도 하고.

Chapter 9. 비트(bit), 비트, 비트

평소에 궁금했던 바코드 원리를 설명해줘서 좋았다. 역시 내 예상대로 바코드 아래쪽에 있는 숫자는 바코드 값이었군.

리뷰를 쓰면서 생각난 건데, QR 코드를 이용한 행사나 소개 자리에서, QR 코드 대신 바코드를 활용하면 좀 신선하지 않을까? 추가적인 장비를 요구하긴 하지만 좀 색다른 기분이 들 것 같은데.

Chapter 10. 논리와 스위치(Switch)

AND 게이트와 OR 게이트를 설명하는 모습이 아무리봐도 '자, 다다음장에 플립플롭 나옵니다~'라고 말하는 거 같아서 우울해졌다. 마크에서도 플립플롭은 그냥 외워서 만들었는데... 그러고보면 마크가 참 좋은 게임이다.

10장은 부울 개념을 밑바닥부터 제대로 잡아주는 느낌이 들어서 마음에 들었던 챕터다. '대수학과 같은 기호를 쓰지만 다른 식으로 사용한다'는 말이 나의 찝찝함을 확 덜어주었다.

rayleighko commented 5 years ago

ㅋㅋㅋㅋㅋㅋ 챕터 별 리뷰는 저 혼자 그렇게 쓰려고 처음 썼던 거에여 챕터별로 쓰지 않고 한 주간 읽은 내용을 바탕으로 리뷰하시면 될 것 같습니다! ㅋㅋㅋㅋ 그런데 이 이슈를 읽다보니 챕터 별로 쓰는 것에서 얻는 인사이트가 있을 것 같아서 챕터 별 리뷰를 기본으로 하는 것도 좋을 것 같습니당 ㅎㅎ

roeniss commented 5 years ago

@rayleighko 네네 저도 고민 많이했는데(?) 일단 이번 책은 챕터별로 써볼게요 겸사겸사 다시 들춰보게 되어서 좋았어요 시간은 오래 걸렸지만..

roeniss commented 5 years ago

오늘도 세 줄 요약 아 회로.. 아 메모리... 오 어셈블리!

Chapter 11. 빌 게이츠? 논리게이트!

갑자기 난이도가 미친듯이 치솟기 시작했다. HA와 FA까지는 어떻게든 이해해 볼 수 있었다만, 이 이후로 상당히 멘붕이었다.

Chapter 12. 이진 덧셈기

부드럽게 설명을 해 주었기 때문에, 꽤나 도움이 되었다. 자리올림의 개념이 생각보다 훨씬 어려웠는데(느낌은 이해했으나 그걸 회로로 짠다는게...) 내가 전자공학과가 아니므로 마음을 진정시킬 수 있었다.

12장 시작할 때 뜬금없이(심지어 이제서야) 이 책이 실제 코딩이랑 그닥 연관이 없다고 말해주는데 괘씸하다고 생각했다. "사실 이 책은 컴퓨터를 만들려고 하는 책이죠"? 서문에서 말했어야지...

Chapter 13. 그렇다면 뺄셈은 어떨까요?

1의 보수와 2의 보수는 어렴풋하게 알고만 있었던 것이 도움이 되었는지, 생각보다 이해가 잘 되었다. signed라는 말을 조금 더 "정확하게" 이해한 것 같아서 흡족했다.

Chapter 14. 피드백과 플립플롭(flip-flop)

"솔직히 비전공자가 R-S 플립플롭 이해했으면 충분히 고생한 것 아닐까? ^^" 라는 생각으로 마음의 호수를 평온하게 다스리는 데에 집중했다 대충 이쯤부터 회로 그림을 곁눈질로 넘기게 된 듯하다. D 플립플롭도 얼추 따라잡은 것 같은데, 지금으로썬 정확히 이해했다고 말하기 어렵다. 솔직히 나중에 마인크래프트로 구현하는 게 매우 도움이 될 듯하다. 말 나온김에 얘기하자면, 어릴 때는 마인크래프트의 회로가 "리피터" 때문에 매우 빠르게 진동(loop)하는 것을 보면서 '플립플롭을 게임에서 구현하기 위한 눈속임 내지는 버그 장치'라고 생각했는데 이제보니 꽤나 사실적으로 구현한 것이었다.

Chapter 15. 바이트와 16진수

16진수가 필요하다고 한다. 그 당위에 대해 열심히 설파한 챕터지만, 왠지 너무 당연한 얘기같아서 그 이유가 귀에 들어오진 않았다. 이 장에서 얻은 값진 정보라면 KiB라는 표현 방법 정도.

Chapter 16. 메모리를 만들어봅시다.

갑자기 주체할 수 없이 회로 분량이 늘어난다. 앞 챕터들을 꼼꼼히 읽어야만 정확히 문맥을 이해하고 흐름에 맞춰 나아갈 수 있는 부분이라고 생각한다. 앞 챕터들을 느낌으로 이해했기 때문에 여기도 느낌으로 이해했다. 아무튼 램은 휘발성이다.

Chapter 17. 혼자서 움직이는 컴퓨터

느낌이 싸해서 종이를 넘겨보니 17 챕터의 분량이 상당하다. 한숨을 푹 쉬고는 읽기 시작했다. 내용적으로는 거의 앞에 나온 이야기의 총집합 + 결론("짜자잔 그래서 이것이 컴퓨터~")인데, 어디서 본 듯 한 어셈블리어가 튀어나와서 내심 편안했다.

이 챕터를 이해하는 데 필수적인 요소 중 하나는 "리플 카운터", 즉 D 플립플롭과 오실레이터의 관계를 정확히 이해하는 것이다. 이에 대한 내용은 14 챕터에 있다.

여기까지 읽고보니 10~17 챕터를 한 묶음으로 이해하는 것이 그나마 정신적인 고통을 줄여주는 방법이라는 생각이 들었다.

roeniss commented 5 years ago

프로세서에 대한 첨언:

"central processing unit (CPU), also called a central processor or main processor"

"CPU는 대부분 산술논리장치가 연산을 수행하기 위한 명령어를 메모리로부터 불러오고, 연산의 결과값을 저장하는 일을 한다."

라는 위키 구절을 보아하니, 이 책에서 말하는 프로세서를 CPU로 이해해도 괜찮을 듯 하다.

이 책 어딘가에서 (아마 16~17챕터 사이) "컴퓨터 = 프로세서 + 메모리 + 입력장치 + 출력장치"로 요약하는데 프로세서를 검색하면 자꾸 프로세서 레지스터 라던가 ALU 라던가 이상한 애들이 튀어나와서... 짚고 간다.

rayleighko commented 5 years ago

'10~17 챕터를 한 묶음으로 이해하는 것'에 매우 공감합니다 ㅋㅋㅋㅋㅋㅋ 개인적으로 한 자리에서 10 ~ 17장을 읽어야 이해가 쉬운 것 같아요 읽다가 몇 번을 멈춰서 생각했는지 ㅜㅜ 하드웨어에 대한 부족함을 절실히 느꼈습니당 다음에 기회되면 CPU 동작 원리를 자바스크립트로 구현해보는 것도 재밌을 것 같아용

roeniss commented 5 years ago

@rayleighko 으악;

roeniss commented 5 years ago

(이번 주는 거의 읽지 못했습니다. 다음주는 시험기간이니까(?) 몰아쳐서 읽는 것으로 ... ㅜㅜ)

Chapter 18. 주판에서 반도체까지

roeniss commented 5 years ago

Chapter 19. 두 가지 고전적인 마이크로프로세서들

챕터 18이 언덕을 오르는 T-Express였다면 챕터 19는 내려가기 직전에 갑자기 탈선하는 T-express와 같다. 앞부분(특히 논리회로 파트)을 완벽히 숙지하지 않았다면 한 줄 한 줄 이해하면서 읽어나갈 수 없는 난이도에 머리가 어질어질했다. 우리 학교 컴공과 운영체제가 이 부분을 집중적으로 다루는 것으로 알고 있는데 다음 학기에 들을 생각을 하니 정신이 아득할 뿐이다.

챕터 19에서는 마이크로프로세서에 대한 희미한 윤곽을 잡는 것만으로도 크나큰 발전이 있다고 생각한다.

Chapter 20. 아스키 코드와 문자의 변환

아스키 코드와 유니코드에 대한 역사적, 개념적 설명이 들어있는 챕터이다. 프랑스 보도국 뭐라뭐라 했던 것 같은데 자꾸 알고리즘 문제 풀 때마다 구글링으로 찾아본 아스키 표가 오버랩 돼서... 요지는 알아먹은 것 같다. 어쨌든 표준(Standard)가 중요하다는 결론이다.

Chapter 21. 버스에 올라탑시다.

빵판에 대한 추가적인 구글링으로 어렵사리 개념을 잡을 수 있었다. 여기서부터 뭔가 현대적인 분위기가 스멀스멀 피어난다. PCB 얘기하다가 은근슬쩍 픽셀 얘기를 보여주는 것부터 그러하다.

Chapter 22. 운영체제

아마도 이 챕터에서 제일 중요한 키워드는 'CP/M'이라는 OS일 것이다. 운영체제가 어떻게 특정 프로그램(.COM)을 불러오고, 사용하는지에 대해서 대략적으로 알 수 있었다. 말미에는 UNIX도 언급되고 있어서 반가웠다(오랜만에 아는 단어).

이 타이밍에 한 가지 고백하자면 챕터 18부터 마지막 페이지까지는, 거의 느낌으로 이해하면서 읽어나갔다. 한 마디 한 마디를 곱씹으면서 읽어보기엔 나의 내공이 너무 부족했기 때문이다. 안간힘을 다해 책에 써있는 것과 얼추 비슷할(거라고 믿는) 그림을 머릿속에 그려보는 것 정도가 나의 솔직한 한계였다.

Chapter 23. 고정소수점과 부동소수점

알고리즘 문제 때문에 본의 아니게 이 부분은 기초 지식을 미리 가지고 있었다. 얼마나 많이 봤으면 IEEE랑 관련되었다는 것도 안다! 컴퓨터가 이만큼이나 발전했는데도, 부동소수점의 오차에 대해선 크나큰 발전없이 지금까지 유지되어 내려오고 있다는 것이 퍽 놀라울 따름이다.

Chapter 24. 고수준 언어와 저수준 언어

컴퓨터 유우머에서나 볼 수 있었던 COBOL과 LISP를 "얼마 전까지 핫했던 언어" 정도로 설명하는 부분은 참을 수 없는 괴리감이... 그와 반면에, 한번도 들어보지 못했던 ALGOL이라는 언어가 C의 직접적인 조상, 혹은 모티브 정도로 소개되는 부분이 새로웠다.

Chapter 25. 그래픽 혁명

챕터 타이틀과는 조금 다르게, 현대적이라고 부를 만한 온갖 것들이 총출동하는 마무리 챕터이다. 뭔가 이것저것 막 던지는 느낌이 학기말에 밀린 진도를 한 번에 빼는 교수 같았다. 어차피 시험에 안나오니까 가볍게 즐기자는 생각이 절로 드는... 그런 마무리 챕터다.

OS들의 API, 즉 어떻게 보면 애플리케이션이 참조하는 최고 네이티브 API라고 부를만한 것들의 소개를 보고 있자니 좀 더 '깊게' 파고드는 애플리케이션을 만들어보는 것도 꽤 재미있겠다,는 생각이 들었다. Electron, Flutter 등등... 최신의 기술들은 점점 더 쉬워지고, 더 네이티브하려고 노력하는 모습이 많이 보이기 때문이다.

챕터 마지막의 마지막 쯤에 HTML이 이 책을 통틀어 처음으로 언급된다. 컴퓨터 세계의 깊이를 간접적으로 체감할 수 있는 아주 유쾌한 페이지가 아닐 수 없다.

ps. 얼마 전 우연히 git official repo를 들어가봤는데 최신 라이브러리나 프레임워크에서는 상상도 못할 어마어마한 양의 c코드가 (루트 폴더에서부터!) 가득 차 있었다. 여러모로 생각이 들지 않을 수가 없었다.