한 권으로 읽는 컴퓨터 구조와 프로그래밍
컴퓨터 프로그래밍은 두 단계로 이뤄진다.
- 우주를 이해한다.
- 3살짜리 아이에게 이해한 내용을 설명한다.
책 표지에 "비전공자도 재미있게 읽는"이라고 적혀있다. 나는 전공자이긴 하지만 학부시절 때 공부한 내용을 다시 훑어볼 수 있으면 좋겠다는 생각에 읽어보았다. 학교마다 커리큘럼은 다르겠지만 내가 나온 학과에서 배운 내용 중 가장 기초들이 모두 들어가 있어서 읽으면서 그때 강의시간에 배운 내용들과 시험때 기억들이 새록새록 떠올랐다. 이 책은 비유를 하자면 "컴퓨터공학"이라는 repository의 REAME.md 같다. 만약 전공자라면 이 책을 읽고 다른 전공책으로 다시 공부하면 정말 좋겠다는 생각이 들었다. 그리고 비전공자라면 이 책을 다 읽고나면 무엇을 공부해야할지가 눈에 들어올 것이다.
책에 나온 컴퓨터 관련 기초가 그 이후에 나온 프로그래밍 언어에 영향을 끼친 부분이 많은 것이 흥미로웠다. 그리고 읽기 전엔 몰랐지만 예시로 자바스크립트 코드가 많이 나와서 좋았다. 아마도 자바스크립트가 많이 쓰이는 언어 중에 하나여서 그럴 것이다.
책을 다 읽으면 간단히 감상을 적어보고 덮는데 이 책은 이상하게 다시 읽어보고 싶어졌다. 그래서 추천의 글, 옮긴이의 말, 지은이의 말, 들어가며...순서로 앞 부분을 다시 읽어보았는데 만약 책 전체를 다시 읽어본다면 어떤 부분을 생각하며 다시 읽어야 하는지 많이 느낄 수 있었다. 이래서 여러 번 읽어야 하나보다. 그리고 다른 책을 읽을 때도 다시 읽기 전에 꼭 앞부분을 읽어야겠다는 것을 배웠다.
책 앞부분 "지은이의 말"에는 다음과 같이 나와있다.
이 책은 이미 존재하는 고급 기능만으로는 상상력을 충족할 수 없는 사람들을 위한 책이다. 이 책은 '새로운' 고급 기능을 만들고 싶은 사람을 위한 책이다. 여러분이 단순히 마법 아이템을 사용하는 사람이 되지 않고 진정한 마법사가 되고 싶다면 이 책은 여러분을 위한 책이다.
이 구절에서 나를 위한 책이라는 것을 확신했다. 하지만 책을 다 읽었다고 해서 바로 마법사가 될 순 없었다. 당장에 마법사가 될 순 없지만 이 책에 나온 기초들을 계속 생각하며 수련해나간다면 내가 생각하는 마법사가 되어있지 않을까하는 작은 소망을 가져봤다.
🔖 나중에 읽어볼 것
좋은 컴퓨터 프로그래머가 되기 위한 첫 번째 단계는 모든 분야를 가능한 한 많이 배우는 것이다. 문제에 대한 해답을 종종 예기치 못한 장소에서 발견할 수 있다. 따라서 어떤 것이 당장 필요하지 않을 것이라며 무시해서는 안 된다. p.40
...이는 코더가 HTML이나 자바스크립트 등 어느 한 언어에만 능숙한 것과 비슷하다.
... 하지만 프로그래밍은 한 전문 분야 이상을 알고 있다는 뜻이다. ... 프로그래머는 데이터를 정렬하고 조작하는 최적의 알고리즘을 결정하고, 웹 클라이언트와 웹 서버 사이의 통신 구조를 결정하며, 사용자 인터페이스를 결정하는 등의 작업을 수행한다. 이런 작업은 '코드에 끼워 넣는' 식의 간단한 작업은 아니다. p.43
역사에 대해 말하자면, 이 책은 흥미진진한 기술과 그 기술을 발명한 사람의 이름들이 가득 들어 있는 책이다. 기술과 그 기술을 발명한 사람에 대해 배우기 위해 시간을 내보라. 이 책에서 언급한 사람들은 대부분 흥미로운 문제를 최소한 한 가지 이상 해결한 사람이며, 이들이 세계를 어떻게 인식했고 문제를 해결하기 위해 어떤 접근을 했는지 배워볼 만한 가치가 있다. p.46 ... 이들이 기초적인 것에 얼마나 의지하는지 명심하라. 이들의 대화는 '위키피디아에서 뭘 할지 찾아보자'나 '스택 오버플로'에 질문을 올려보자', '깃허브에서 패키지를 찾아보자'가 아니었다. 어느 누구도 해결하지 못한 문제를 푸는 방법을 배우는 것이 가장 중요한 기술이다. p.47
무언가를 안전하게 지우는 동작조차 '코딩 스쿨'에서 배울 수 있는 어떤 내용보다도 더 복잡하다. 이런 일을 잘하려면 프로그래밍 환경을 전반적으로 잘 이해하고 있어야 한다. 여러분이 이 책을 읽고 있는 이유가 바로 이것이다. p.529
프로젝트에 참가할 때마다 염두에 둬야 하는 아주 중요한 질문이 있다. 바로 "내가 가치를 더하고 있는가?"라는 질문이다. 여기서 가치는 어떤 과업을 달성하는 데 내재된 고유한 가치를 말하는 것이 아니라, 생산성 증대를 말한다. p.570