카테고리작성일2022-03-27태그
computer-science
plan

연차가 쌓이면서 기술적으로 부족한 것들을 느껴서, Computer Science의 주요한 몇 가지 주제들에 대해 좀 더 깊이 공부해보는 시간을 가져보려고 한다.

Operating System: 4월 ~ 6월

가장 먼저 공부하고자 하는 주제는 OS. 운영체제가 어떤 역할을 하는지 어렴풋이 알고는 있지만, 프로세스나 쓰레드가 어떻게 돌아가고 관리되는지, System Call이 뭔지 등등 정확히 어떤 기능을 제공하는지는 잘 모르고 있는 것 같다.

이게 프론트 개발만 할 때는 프로그래밍 디자인이나 UI 최적화가 중요한 느낌이었는데, 백엔드 개발을 하게 되면서 모던 OS의 작동 방식.. 같은 것들에 대한 이해가 점점 필요하다는 생각을 하게 됬다. 특히 도커나 쿠버네티스처럼 인프라쪽에 반쯤 걸쳐져있는 영역은 CPU, 메모리 등의 자원을 관리하거나 볼륨을 마운트하는 등 시스템 분야의 지식과, 소켓, 포트 포워딩, IP 주소 할당과 같은 네트워크 분야의 지식이 더 중요하다고 느껴졌다.

공부는 개념적인 부분과 구체적인 부분 양쪽을 모두 다루려고 한다. 책을 하나 선정하고 따라가면서 부족한 것들은 구글링을 통해서 채울 생각이라서 우선 책을 선정했다.

  • Operating Systems: Three Easy Pieces

    OS의 개념적인 부분에 대한 이해를 위한 책. OS의 기능을 Virtualization, Concurrency, Persistence 세 가지의 관점으로 구분해서 디테일하게 소개하는 것 같다. 첫 장을 읽었을 때 느꼈던 점은 예제가 무척 좋고 글이 잘 읽히는 느낌. 끝까지 완주할 수 있을거라는 생각이 들었다.

  • Operating System Design: The Xinu Approach

    이 책은 다른 책들과 다르게 Bare machine - 백지에서부터 하나하나 운영체제를 만드는 과정을 따라갈 수 있는 책이다. 이론적인 부분과 함께 실제 구현을 해보면 더 잘 이해할 수 있을거라고 생각했다.

Network: 7월 ~ 9월

마찬가지로 백엔드를 하면서 피해갈 수 없는 주제이고, 어떻게 보면 OS보다 더 자주, 광범위하게 활용되는 것들이 많아서, 공부하고 싶은 다른 것들이 많지만 빠르게 다루는 게 좋을 것 같아서 두 번째로 골랐다. 컴퓨터 네트워크의 수학적인 원리.. 같은 것들보다는 네트워크를 구성하는 기술들에 대한 궁금증이 더 커서, 이론적인 부분보다는 실전에 좀 더 집중하려고 한다.

Programming Langauge: 10월 ~ ?

평소에 관심있던 분야. 프로그래밍 언어를 어떻게 만들 수 있을지? 어떤 개념들이 있는지.

  • Structure and Interpretation of Computer Programs

    전에 한 번 읽다가 챕터 2에서 그만두긴 했는데, 프로그래밍 언어가 아니라 프로그래밍 자체에 대한 생각이나 관점이 바뀌게 되었던 책이라, 이번에 끝까지 완주해보고 싶은 욕심이 있다. 워낙 유명한 책이기도 해서 관련 자료들도 많다. 익숙한 언어가 아니라 LISP 방언인 Scheme이 나오긴 하는데, 솔직히 이런 부분은 좀 별로긴 하지만 어쨌든 내용 자체는 좋다고 생각한다.

  • Crafting Interpreters

    일단 무척 최근에 출판됬다는 점이 좋은 것 같고, 실질적으로 모던한 프로그래밍 언어를 만들기 위해 필요한 개념들이 모두 담겨있다. Virtual Machine, Garbage Collection, Closure, Class 등.