프로필 사진
후하하핫
bolt icon9.6k·6개월·
6.9k
·수정됨
공유

공부하는 법: 경공부와 연공부 나누기

공부를 오래 하다보면 자신만의 공부하는 방법을 찾게 되는데요, 제 경우에 대부분의 주제에 적용 가능했던 방법을 공유합니다.


0. Hard study vs. Soft study


저는 공부를 hard study (경공부)와 soft study (연공부), 둘로 나눠서 접근합니다. (둘 간의 회색 영역도 없진 않습니다만…)

Hard study는 지식의 양을 때려 넣어야 하는 공부에 속합니다. 대표적으로 법학이나 의학 같은 것들이 있죠. 컴퓨터공학에는 컴퓨터 네트워크가 이에 가까운 경우가 있습니다. 이 경우에는 지식의 양을 빠른 시간 안에 최적으로 늘려야 합니다.

Soft study는 지식의 양보다 하나의 원칙을 아주 잘 이해하는게 중요한 공부입니다. 대표적으로 수학이나 물리학, 컴퓨터 공학에서는 프로그래밍 그 자체와 알고리즘을 들 수가 있겠네요. 얘는 뭘 외우거나 이해하는 수준으로는 불충분하고, 겁나 생각해서 사고의 방식 자체를 바꾸고 체화해야 합니다.

대부분의 공부는 이러한 경공부와 연공부의 사이에 있습니다. 각각을 어떻게 할 수 있는지 얘기해보죠.


1. Hard study: Study hard!


경공부는 공부를 빡세게 해서, 아는 지식을 늘리는게 관건입니다.

지식을 늘리기 가장 쉬운 것은, 내가 아는 지식에서 출발해서 하나씩 지식을 늘려가는 것입니다. (실제 뇌가 이렇게 새로운 기억을 만들죠)

구체적으로 예를 들면, 처음 경공부를 할 때 두꺼운 책 한권을 독파하는 것은 매우 불리합니다. 내가 아는 지식이 이 책의 5% 도 안될 가능성이 큽니다.

책이라는 매체는 특히 처음 경공부를 할 때 쥐약입니다. 책은 제 경험상 90% 의 이미 아는 내용을 책의 논리를 참고해 머리 속의 지식을 재구성하는데 가장 좋고, 어쩌다 내가 모르는 10% 를 발견해서 채울 수 있으면 좋고 아니면 마는 상황에서 의미가 있습니다.

차라리 경공부를 처음 할 때는 책보다 영화, 유튜브, 혹은 잘 가르치는 강사의 강의를 듣는게 낫습니다. 최소한 키워드와 어떤 흐름으로 이 지식이 구성 됐는지를, 낮은 해상도라도 지도를 그리는 것이 큰 도움이 됩니다.

이렇게 다양한 매체를 보면서 대충 지식이 잘 정리는 안됐어도 키워드 수준에서 이해가 갔다면 (즉, 지식이 90% 정도 쌓였다면), 그때 책을 보세요. 책을 읽다가, 잘 이해가 안되면 그 책을 바로 덮고 다른 책이나 다른 설명을 들으세요. 그렇게 해도 이해가 안가면 일단 넘어 가세요.

이걸 반복하다 보면 특정 지식이 95%에 가깝게 정리가 됩니다. 

여기서 남은 5%를 채우려면, 강의를 해야합니다. 내가 아는걸 다른 사람에게 가르치고, 다른 사람이 질문을 하면 대답하는 식을 반복하다보면 알고보니 내 지식이 95%가 아니라 75% 였구나, 같은 현실 자각을 하게 됩니다. 그때 또 공부를 열심히 해서 90% 까지 올리고, 또 책을 읽고, 또 강의를 하시면 됩니다.

99%까지 올리셨다면 (이 수준까지 꼭 올 필요는 없습니다. 자기가 필요한 곳에서 끊으세요) 컴퓨터공학의 특징을 이용해 그 개념을 만든 사람이나 교과서 저자, 혹은 그에 상응하는 전문가를 만나 보세요. 그 사람하고 대화하면 알고보니 나는 20% 밖에 몰랐다거나, 아니면 나랑 이 사람의 생각하는 수준이 비슷하다거나 하는 식으로 확신을 얻게 됩니다. 그리고 최전선에서 새로 만들어지는 것들을 파악하거나 내가 새로운 것을 만들면 100% 를 잠깐 터치할 수도 있습니다.

이게 전문가가 되는 수준의 경공부를 하는 방법입니다.

P.S. 경공부를 얼마나 해봤나가 궁금해서 면접 볼 때 네트워크나 운영체제, 컴퓨터 공학 기초 관련해서 질문해서 물어보는데 박사급이면 평균적으로 자기 분야에서는 97%에서 100% 사이, 자기 분야가 아니어도 대략 85-90% 이상은 대부분의 분야에 대해 알고 있고, 학사 신입 중 잘하는 사람이 자기 분야에 대해서 95% 정도, 자기가 잘 모르는 분야에 대해 50% 정도는 알고 있더라구요.

P.S.2 경공부를 잘하기 위한 데일리 팁은, 인터넷에서 모르는게 나오면 바로 다 찾아보세요. 쓸데 없어보여도 지식이나 교양이 많아지면 경공부에 유리합니다.


2. Soft study: study lazy


사실 하드 스터디는 누구나 시간만 들여서 숙련도를 올릴 수 있지만, 소프트 스터디가 진짜 진짜 어렵습니다. 

사고의 체계를 바꾸는 일 자체가 일단 빡셉니다. 상대론 역학을 만든 아인슈타인도 양자역학을 못받아 들일 정도로, 여기엔 단순히 지성 뿐만 아니라 태도나 정치적 입장까지 영향을 줍니다.

또한 소프트 스터디를 많이 해본 사람을 찾기가 너무 어렵습니다. 그리고 그 사람 말이나 사고 패턴와 속도를 따라잡는 것도 쉽지 않습니다.

마지막으로 소프트 스터디는 토론을 요합니다. 내가 생각하는 방식을 갖고 뭔가를 뱉었을 때 나보다 고수가 그건 네가 생각을 잘못했거나 이런 방향으로도 생각해 봐야 한다는 말을 해줘야 합니다.


빡세단 얘긴 했으니, 그나마 제가 지금까지 파악한 훈련법을 공유하면 다음과 같습니다.

일단 하드 스터디적인 지식을 갖추긴 해야합니다. 예컨데 알고리즘이라면 시간복잡도와 공간복잡도가 무엇인지, big Oh notation이 뭔지, divide and conquer, dynamic programming, greedy approach, backtracking, pruning 과 같은 접근 방법들, linked list, tree, graph 등의 기반 자료구조 및 알고리즘 들, NP complete 이 뭐고 NP hard가 뭐고 어떻게 NP complete 문제끼리 호환이 되고 NP hard 문제로 바꿀 수 있는지 등등... 일단 수업 시간에 공부를 열심히 해야합니다.

하드 스터디가 됐다면 제 생각에 제일 좋은 방법은 가능한 모든 문제를 이 방법들을 적용해 해결해 보는 것입니다. 알고리즘 사이트에 가서 문제를 풀어봐도 좋고, 친구들한테 최소 비용으로 선물을 보내면서 최대 만족도를 줄 수 있으려면 어떻게 해야할까를 생각해보기도 하고, 내가 하는 일을 쭉 써놓고 topological sort 로 정렬을 해보기도 하구요. 말그대로 사고 방식을 계속 실험하면서 알고리즘의 본질에 다가가야 합니다.

하지만 인간은 동기가 없으면 일을 안합니다. 저게 재밌는 덕후들은 하겠지만, 노잼이면 외부 동기라도 끌어와야겠죠. 예를 들어, 저는 학부 및 대학원 시절 도서관, 연구실, 그게 아니면 교수님이나 박사과정 학생들하고 계속 잡담을 했습니다. 회사에서는 매니저, 동료들, 다른 팀 사람들과 커피를 마셨고요.

그중 최소한 나보다 소프트 스터디를 잘 해낸걸로 보이는 사람이 있다면 계속 그 사람과 토론합니다. 보통 이런 사람들은 자기 관심사만 맞으면 이런걸 좋아하기 때문에 (그 사람도 수련중이고, 자기 스파링 파트너가 핑요하거든요) 대화를 해 나갑니다.

혹은 온라인의 kaggle이나 topcoder, codeforce 같은 곳에서 경쟁을 합니다. 경쟁을 계속 하다보면 아주 첨예하게 1, 2등이 갈리게 되는데, 그때 나보다 잘하거나 못한 사람들하고 문제 놓고 토론하면 서로 사고 과정을 잘 이해하게 됩니다.


3. 마치며


구글의 인사 정책의 모토는 (지인한테 들어서 정확한 문장은 안떠오릅니다만) "우리를 가르쳐 줄 수 있는", 즉 조직을 더 낫게 할 수 있는 사람을 찾는 것이라고 하더군요.


저는 구글을 개인적으로 싫어하지만, 저 모토는 동의합니다. 인사 정책에서 사람을 뽑을 땐 우리를 더 나은 사람들과 더 나은 팀으로 만들어줄 수 있는 사람을 뽑아야 합니다. 가르쳐서 쓰겠다는 마인드로 사람을 뽑으면 비용이 너무 큽니다.


거꾸로 공부를 해서 새로운 기회를 얻고 싶으신 분들이라면, 내가 저 회사에 보탬이 될 수 있는 것을 준비해서 가세요. 그게 쉽지 않겠지만, 그걸 목표로 삼아야 중간이라도 가지 않겠습니까. 시키는 것만 하지 않고, 진짜 풀려는 문제가 뭐고 그걸 위해 어떤 전략이 필요한지를 적극적으로 생각하면 당연히 좋은 인재가 될겁니다.

43
cat-footer