컴퓨터, 언어에 대한 원리가 있는 책 추천 부탁드립니다.

wans038의 이미지

지금 까지 프로그래밍을 공부해 오면서 계속 의문이 들었는데요.

만약 API를 공부하고 있다고 가정하면 이 메소드는 어떻게 구현했지?
출발점이 어딘거지? 어떻게 실행되고 구현부가 궁금하더군요.

비트맵을 찍는다면 어떻게 하드웨어는 동작하고, 메소드 구현부분은 어떨까... 계속 F12를 누르면... 뭐랄까... 어떻게 동작하는지 알고싶습니다.

그리고 CPU의 구조? 동작 원리에 대한 책이 여러권 있던데 책을 추천해주시면 감사하겠습니다.

그리고 네트워크 공부를 알아보는데 TCP/IP공부를 우선적으로 하라고들 하는데
네트워크의 원리를 알고 싶습니다. 어떻게 네트워크가 구상되고 말로 어떻게 표현해야 할지 모르겠는데 그냥 최단점, 시작점에 대해서 알고싶은데 그런책을 아직 보지 못했습니다...

책 추천해 주시면 감사하겠습니다.

새해 복 많이 받으세요.

 의 이미지

응용수학과 전자공학의 기반부터 시작해서 모든 사람이 쉽게 쓸 수 있는 어플리케이션에 이르기까지
현대 컴퓨터 시스템은 상당히 복잡합니다.
그 모든 걸 위에서부터 시작해서 진짜 바닥을 볼 때까지 파고들겠다는 사람들이 늘 있지요.
저도 그 중 하나고요.

상당한 끈기와 인내심을 요구하는 힘겨운 길입니다만, 내딛는 한 걸음마다 쾌감이 장난이 아닙니다.
일단 맛보기 시작하면 절대 끊을 수가 없지요.

아무튼 본론으로 들어가서, 질문자님이 현재 어느 정도 수준에 있는지 알 수가 없으니 추천해 드리기가 상당히 애매하네요.
"누구나 읽을 수 있는 컴퓨터의 모든 것" 같은 책 한 권으로 끝낼 수 있을 거라고는 기대하지 않으셨을 테지요.

좋은 출발점으로 책 한 권 추천 드립니다. 마침 최근에 개정판이 나왔어요.
http://book.naver.com/bookdb/book_detail.nhn?bid=10280398
CSAPP이라고 줄여 불리는 유명한 책입니다. 컴퓨터 시스템의 다양한 분야를 다루는 좋은 입문서죠.

제가 알기로 최근에 번역본도 나왔는데, 번역의 퀄리티를 담보할 수 없을 뿐더러
앞으로 질문자님이 읽으실 영어 책들과 문서들이 많을 텐데, 일찌감치 익숙해지시는 편이 좋으실 겁니다.

이 책 다음으로 어떤 책을 보는 게 좋을지는 그 때 가서 새로 질문을 하시는 게 좋겠습니다.
그 때가 되면 질문자님의 취향을 좀 더 구체적으로 정리하실 수 있으실 겁니다.

 의 이미지

답변을 달고 나서 질문자님의 수준을 가늠하고자 발자취를 조금 살폈습니다만,
예전에 제가 프로그래밍 QnA에서 익명으로 답변을 몇 번 달아 드린 적이 있었군요.

뭐 익명으로 활동하던 시절에 쓴 것이라 이제 와서 입증할 수도 없으니 믿지 않으셔도 좋습니다.
감히 몇 가지 충고를 드리려고 하는데, 제게 그럴 자격이 없을 거라고 생각하신다면 그냥 흘려 들어주세요.

1. 처음부터 세부 사항에 무턱대고 들이받지 마세요. 시간 낭비일 뿐입니다.

https://kldp.org/node/154710 같은 질문들 말씀드리는 거에요.
일견 간단해 보이는 질문에 대한 표준 해설이 끔찍하게 길죠. 중간중간 생략되고 단순화됐는데도.

C++는 디테일하게 들어가면 미친듯이 복잡해지는 언어 중 하나입니다. 이런 걸 배우려면, 처음에는 어느 정도 디테일을 뭉개고 시작하는 수밖에 없어요. 잘 모르는 기능은 피해 가며, 교본에서 안전하다고 제시한 예제 코드를 흉내내고, 그런 식으로요. 처음부터 뭐가 되고 뭐가 안되는지 탐구하려 들면 문자 그대로 절대 끝을 못 봅니다.

컴퓨터 시스템을 공부하는 과정에는 이런 종류의 함정이 끝도 없이 많아요. 그런 데 빠져서 시간 낭비하지 않으려면, 처음에는 찜찜하더라도 어느 정도 추상화된 형태로 받아들이고 넘길 수 있는 능력이 필요합니다. 세부 사항은 나중에.

2. 조급한 태도는 좋지 않습니다. 단기간에 되는 게 아니니까요.

배우고 익혀야 할 내용은 많은데, 지금 당장 눈앞에 보이는 걸 마스터하지 못하면 도저히 못 견디겠다는 태도를 가져서 좋을 것은 없습니다. 뭐 사실 그런 태도를 가지고서도 지구력을 유지할 수 있다면야 나쁠 거 없겠지만, 보통은 뭘 제대로 해 보기도 전에 힘이 빠져서 나가떨어지더라고요. 질문자님께서 이 분야를 취미로 공부하시는지 아니면 다른 동기가 있으신지는 잘 모르겠습니다만, 목표로 하시는 바를 볼 때 장기적인 계획을 세우고 꾸준히 나아가셔야 할 것으로 보입니다. 그렇게 생각하지 않으시는지요.

hshin23의 이미지

저도 Computer Science, A Programmer's Perspective 를 추천합니다. 3번째 판이 64비트 지원해줘서 3번째 판을 추천합니다.
국제판의 경우에는 양장판보다 훨씬 더 쌉니다.
혼자 공부하기에는 사실 좀 어렵고 힘들수도 있어서, 온라인 강의도 추천해요.
그리고 디지털 회로라고 해야하나, 이 쪽 공부도 도움 되는 듯 합니다.
그리고 오토마타 이론도 사실 살짝 도움 되었던거 같아요.
둘다 직접적인 연관은 없지만 결국에는 그 기계가 어떻게 만들어졌는지, 그리고 어떻게 작동했었는지를 알려줘서요.

저도 물어보고 싶은게 있는데,
이 책을 읽었고 강의 들으면서 과제도 다 했는데요.
개념 자체는 어렵지는 않은데, 살짝 너무 정돈됨 없이 머리 속에 있는듯한 기분입니다.
너무 많은 양의 정보가 3개월 정도 되는 짧은 시간에 들어와서 그런건가요.
운영체제 공부를 시작하는게 좋을까요? (혹시 그렇다면 책 추천 좀 부탁합니다. 영어책이 좋습니다.)

 의 이미지

원래 CSAPP 특성이 그렇습니다. 컴퓨터 시스템의 넓은 분야를 얕게 훑고 지나가죠.
그렇다고는 해도 hshin23님이 지금 어떤 상황을 겪고 계신지는 정확하게 알 수가 없으니, 뭐라 조언을 드리기는 어렵겠네요.
시간을 들여 다시 천천히 읽어보고 머릿속을 정리하는 것도 좋은 선택이 되겠습니다만.

디지털회로와 오토마타(사실 이산수학이 더 기초입니다만)는 각각 컴퓨터의 하드웨어적 구현과 이론적 모델의 바탕이 되는 교과입니다. 진정으로 컴퓨터를 이해해 보고 싶다면 그냥 지나칠 수 없는 내용이지요.

아무튼 그 책을 떼고 난 다음에는 어느 정도 개괄이 잡힌 상황이니 관심분야쪽의 유명한 텍스트북을 잡고 진행하면 되겠습니다. 취향껏 하시면 되지요. 저는 CPU 구조, 운영체제, 컴파일러, DB 및 일부 프로그래밍 언어의 표준을 공부했는데, 주전공은 CPU입니다. VLSI 설계 관련 이론도 조금 공부했고요.

OS를 공부하신다는 분에게는, 일반 OS 이론을 공부하는 길과 실용적 의미에서 특정 OS를 파고드는 길이 있습니다. 물론 철저히 한 쪽 길만 따를 수는 없지만 아무래도 취향에 따라 더 중점적으로 보는 길이 있겠죠.

전자로는 정말 유명한 책이 있죠. Operating system concepts. 2013년 개정판이 있습니다.
http://book.naver.com/bookdb/book_detail.nhn?bid=7218891
사실 저는 이 책 말고는 다른 책을 본 적이 없어서 뭐라 평가하기가 어렵네요.

후자는... 리눅스 커널이 좋은 교보재이죠. 돌아다니다 보면 좋은 커널 해설서들이 많습니다만
슬프게도 출판된 모든 서적이 어쩔 수 없이 조금씩 outdated 된다는 특징들이 있습니다. 물론 여전히 값진 지식들이 남아있지요. 뭐 예컨대 Understanding the Linux Kernel.
http://book.naver.com/bookdb/book_detail.nhn?bid=1685586

취향에 따라 윈도우즈를 공부하시고 싶으신 분들께는, 뭐 당연히 MS가 레퍼런스가 되지 않겠습니까.
Windows Internals. 이 책은 윈도우즈가 버전이 올라가면서 같이 개정되는데 오지게 비싸요 ㅜㅜ. 학창시절에 4th edition을 샀는데 그 이후 개정판은 못 샀습니다. 도서관에서 봐야지...
http://book.naver.com/bookdb/book_detail.nhn?bid=6886764
그건 그렇고 6판이 최신인 모양인데 Win 7까지 커버하는 모양입니다. 혹시 더 최신 개정판이 있는지 직접 확인해보세요.