라이브러리
115
2021-10-14 16:02:30
2
910

CS공부 어떻게 하면 좋을까요?


전공잔데도 시험 끝나면 까먹고 하다보니까 기억이 흐릿해서 다시 공부해야 할 것 같아요. 

보니까 자료구조, 컴퓨터네트워크, 운영체제, 데이터베이스 이렇게가 좀 중요한것 같은데 보통 어떤식으로 공부하시나요? 

공부방법이랑 공부 과목 조언좀 부탁드려요

5
  • 댓글 2

  • 후하하핫
    1k
    2021-10-14 16:56:48

    "How to Read a Paper" 라는, UWaterloo 대학의 Keshav 교수가 제안한 논문을 읽는 방법이 있는데요 (http://ccr.sigcomm.org/online/files/p83-keshavA.pdf), 저자는 논문을 세번 읽는 프로세스를 제안합니다.

    1) bird-eye view, 즉 조감도로 빠르게 읽어라. 이게 뭐에 대한 것인지 파악하라.

    2) 조금 더 자세히 읽으면서 디테일은 패스해라. 핵심적인 부분을 체크하라.

    3) 마지막으로, 완벽하게 그 논문을 이해하고 싶다면, "virtually re-implement the paper", 즉 머릿속으로 그 논문을 재구현 해봐라.


    저는 CS의 많은 주제들도 이 방법으로 접근할 수 있다고 생각합니다. 먼저 큰 그림을 보고, 큰 그림 안에서 어떤 핵심적인 component 들이 있는지 파악하고, 머릿속으로 재구현을 해보는거죠. (실제로 코드로 구현을 해봐도 좋구요)


    예를 들어서 OS 시간에 scheduling을 공부한다고 합시다.

    1) 처음엔 scheduling이 뭐고 왜 해야 하는지, 그 대상이 뭔지 정도를 파악하겠죠.

    2) 그 다음으로는 scheduling의 방법들의 핵심 아이디어를 이해해 봅니다. FCFS, SJF, RR 같은 것들이 있겠죠. Waiting time, throughput, starvation 과 같이 scheduling을 평가하는 방법들도 있을거구요. Preemption 과 같은 요소들을 통해 batch processing과 scheduling을 비교해 볼 수도 있겠네요.

    3) 다시 하나하나 자세히 읽으면서 각 scheduling 알고리즘을 머리속으로 짜보고, 평가하는 방법들을 어떻게 작성할지 생각해 보세요. SJF 같은 알고리즘은 생각해보니 미리 job execution time을 알아야 적용이 가능할테니, 실제로 적용하기 어려울 수가 있겠네요. RR은 time quantum 마다 뛰면서 job을 할당하니 이 단위를 설정하는게 scheduling performance에 영향을 주겠네요.


    대략 이런 것처럼, 각 과목들의 핵심적인 개념들을 머리속에서 깊히 생각해보면서 공부해 보세요.


    + 생각해보니 어떤 자료로 어떻게 공부하면 좋냐, 이런 질문인 것 같기도 해서, 제가 학부 떄 공부했던 좋은 책들을 남깁니다.

    1. Computer Systems: a Programmer's Perspective (R. Bryant, D. O'Hallaron)

    CMU에서 쓴 컴퓨터 구조, 시스템 프로그래밍, 그리고 운영체제 과목의 일부와 연결이 되도록 쓴 명저입니다. 프로그래머 관점에서 궁금한 것들을 많이 다루고 있습니다. (예: if가 빠를까, switch가 빠를까?)

    2. Operating System Concepts (Siberschatz)

    흔히 말하는 공룡책입니다. 다들 보는 책이니 무난하게 보기 좋고, 다루는 폭이 넓습니다.

    3. Modern Operating Systems (A. Tanenbaum)

    운영체제 책 중에 하나만 꼽으라면 꼽는 타넨바움 책입니다. (MINIX를 만든 그 사람이죠) 확실히 운영체제를 만들어 본 사람이 쓰는 책이라 그런지, 저자의 통찰력이 느껴집니다.

    4. Compilers: Principles, Techniques, and Tools (A. Aho et al.)

    흔히 말하는 용책입니다. 제가 컴파일러 책은 이 책만 읽어봐서 더 좋은 입문서가 있는진 확신이 없지만, 저에겐 충분히 좋은 책이었습니다.

    5. Computer Architecture: A Quantitative Approach (J. Hennessy, D. Patterson)

    Stanford의 총장이신 저자가 쓴 historic 한 컴퓨터 구조 책입니다. 컴퓨터 구조 얘기를 반도체에서부터 소프트웨어까지의 넓은 폭으로 다루며 숫자로 설득합니다. 프로세스들을 비교해주기도 하고요. CSAPP을 읽은 후에 도전하기 아주 좋은 책이라고 봅니다.

    6. Computer Networks: A Top-down approach (J. Kurose, K. Ross)

    컴퓨터 네트워크 입문서로 많이 알려진 책입니다. Top-down으로 설명해서 큰 그림에서 조망하면서 읽어갈 수 있습니다. 개인적으로 네트워크는 좀 지루해 하는데, 이 책에서 설명한걸 따라가면서 그나마 큰 그림에서의 조망이 가능했던 것 같네요.

    7. Database Management Systems (R. Ramakrishnan, J. Gehrke)

    생각보다 최근에 나온 DB 교과서인데, DB 구현에서 query planning 같은 것도 소개하고, 분산 DB에 대한 개괄도 되어 있어서 기본과 트렌드를 함께 볼 수 있는 책입니다.

    8. 자료구조 & 알고리즘...?

    사실 저는 자료구조와 알고리즘은 그냥 독학하면서 이 책 저 책 봤어서... 어떤 material이 좋은지 잘 모르겠네요. 최소한 MIT에서 나온 Introduction to Algorithms는 저에게 너무 어려웠어서 이게 과연 intro가 맞나 하는 생각이 들었습니다.

    제 경험상 자료구조와 알고리즘은 수업 열심히 듣고, 문제를 겁나게 풀어보는게 답인 것 같습니다.

    13
  • 라이브러리
    115
    2021-10-14 17:54:58

    후하하핫 

    상세한 답변 감사드립니다!!! 너무 정성스럽게 댓글을 달아주셔서 몸 둘 바를 모르겠네요. 조언과 알려주신 자료들 참고해서 열심히 해보겠습니다. 다시 한번 답변 정말 감사드립니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.