2009년 11월 18일 수요일

Too much knowledge will kill you

Computer Systems: A Programmer's Perspective
Randal E. Bryant David R. O'Hallaron


일때문에 어셈블리어에 대해 알 필요가 있어서 인터넷 검색을 하다가 발견한 책. 어셈블리어, 프로세서 구조, 최적화 및 링킹에 대한 챕터등 앞 300페이지 정도의 내용은 생소한 내용이 많아서 신나게 읽었는데, 나머지 700페이지는 많이 접해보았던 내용이어서 읽다가 기운이 빠졌다. 목차 및 리뷰를 볼 때는 이 책을 읽고 나면 보다 나은 프로그래머가 될 수 있을 것이라고 생각했지만, 4주나 들여 다 읽고 난 지금은 굳이 그렇지도 않다. 뭐가 변했을까? 디스어셈블한 코드를 떠듬떠듬 읽게는 되었다는 정도?

이런건 대학때 읽었어야 하는 것이었다. 설렁설렁 4주정도에 읽는게 아닌, 수업을 들으면서 연습문제를 풀고 프로젝트를 해 나가면서...

이 분야에 오래 있었기 때문에 관련 지식은 어느정도 쌓여 있다. 그로 인해 새로이 무엇인가를 공부할 때에 좋은 점도 있지만 나쁜 점도 있다. 좋은 점이라면, 새로 배우려는것이 혁신적인 것이 아닌 다음에야 이미 알고 있는 것에 어느 정도 추가되는 정도에 불과하므로 배우는 속도가 무척 빠르다는 것. 그러나 나쁜 점은, 새로 배우는 과정이 자기가 이미 알고 있는것을 재확인하는 과정만으로 작용하기 쉽다는 점이다.

대부분 아는 내용이기 때문이니까 무척 빠르게 지나가는데, 그 중간중간 모르고 있던 내용이 나왔을 때에 '아 대부분 아는 내용이지만 이것을 몰랐군, 알고 지나가자' 로 생각하기 보다는 '대부분 아는 내용이고, 이건 그다지 중요하지 않아' 로 생각하기 쉬운 것이다. 특히 그 모르고 있던 내용이 이해가 어려울 때에 그런 경향이 더욱 두드러진다. 그런데, 그 모르고 있던 내용이 중요한 내용일 수가 있는 것이다. 도리어 아예 새로운 분야라서 아는 부분이 모르는 부분에 비해 적을 때는 도리어 철저히 하고 넘어가게 된다.

그 빼놓은 부분이 사소한 것이면 다행이로되, 중요한 것이라면 흔히 말하여지듯 "대충은 알 것 같은데 디테일을 모르겠어" 가 되는것이다. 그래서 백지와 같은 시절에 학습하는 것이 중요하고, 또한 선생에게 배우는 것이 중요한 것이다. 선생은 어느 부분이 중요한 지 말해 줄 수 있는 사람이니까.

This book, well known as CSAPP, is a perfect text for undergraduate system programming. 3rd year (junior) might be a perfect fit for this graduate. It would become a better book if authors drops out Chapter 8 and above, the part related with programming in application layer. However, the former part is quite impressive. It's deadly illustrative instruction.

5 stars for Chapter 3. Machine-Level Representation of Programs, Chapter 4. Processor Architecture, Chapter 5. Optimizing Program Performance, Chapter 6. Memory Hierarchy, Chapter 7. Linking. 3 stars for all other chapters.

Though I learned a lot from earlier chapters, I already knew most of the subject the book covered. As a consequence, I skimmed the book from chapter 8. When a some difficult parts came across, I skipped them thinking "I'll visit there later".
Now I've finished reading. What did I reap from this book? I might read disassembled code in x86 and x86_64. Some optimization techniques might be earned. But I think that those are too few result regarding 4 weeks I've spent in reading.

Why couldn't I earn more? Maybe the book was a crap or my reading attitude was broken. But most important reason is that I know too much, however shallow, too much. Because the book tells the story not foreign, already well-known, I try to understand the whole forest, ignoring trees which were the details of the forest. This mechanism works unless the details are the key. In many cases the details are the key.

Too much knowledge will hinder you from learning more. Too much knowledge might kill you.

댓글 없음: