우테코에서 찾은 나만의 효과적인 공부법

우테코에서 찾은 나만의 효과적인 공부법

글쓰기 두번째 미션

  • 해당글은 우아한 테크코스 글쓰기 미션을 위해 작성하고 제출한 글입니다.
  • 나만의 효과적인 공부법인 것처럼 지극히 주관적이고 개인적인 생각입니다.
  • 글의 분량이 상당히 깁니다.

우테코를 시작하기 전의 나의 공부법

무언가를 공부하다가 새로운 개념을 만나면, 그것까지 이해하려고 계속 파고들며 학습하는 방법.

이것이 나의 기존 학습법이었다. 이 방법은 한 주제에 대해서 나름 깊게 이해를 할 수 있다는 장점이 있으나, 명확한 단점이 존재했다.
삼천포로 빠지는 경우가 잦다는 것이다.

만약 내가 오늘 A, B, C 3가지를 공부하기로 마음먹었다고 해보자.
A를 공부하다가, A랑 관련된 a라는 새로운 개념이 나온다. 그러면 그 a에 대한 개념을 공부하기 위해서 시간을 할애하게 된다.
이런 방법은 결론적으로 A라는 것에 대해 깊게 알아갈 수 있지만, B와 C는 전혀 공부하지 못한 채 하루가 끝나게 된다.

우테코를 진행하면서, 아주 짧은 기간에 많은 것을 학습해야 하는 순간이 계속 찾아왔다.
나의 경우 기존에 java 언어를 사용하던 사람이 아니었고, spring 프레임워크 사용 경험도 없었다.

또한, 사용자와 웹, 앱 서비스 전체를 구현해본 적도 없었다.
프로젝트를 진행하면 코어 로직 쪽만 담당했을 뿐, 클라이언트와 서버가 통신하는 부분에 대한 경험 역시 많이 부족했다.

이런 내가 기존의 공부법을 그대로 사용하자니, 온종일 무언가를 공부하긴 하는데, 많은 시간을 투자하고도 막상 당장 필요로 하는 지식을 습득하지 못하는 경우가 잦아졌다.

시간은 한정되어있고, 해야 할 것의 우선순위는 명확하다. 무언가 새로운 공부법을 찾아야 함을 느끼게 되었다.


공부를 바라볼 때 나의 마인드셋

절대적인 공부량과 밀도 있는 학습은 기본이다.

나는 java에 대한 경험, spring에 대한 경험의 절대적인 공부량 자체가 부족하다.
그러므로 내가 다른 크루들보다 spring 지식, java 지식이 부족한 것은 너무나 당연한 이야기이다.

내가 아마도 다른 크루들보다 조금이나마 강점이 있다면, 알고리즘 문제 풀이 능력 단 하나일 것이다.
몇몇 크루들이 나에게 물어봤었다. 알고리즘 어떻게 공부했어요? 언제부터 공부했어요? 그러면 난 항상 같은 대답을 해주었다.

문제 개수가 크게 중요한 건 아니지만, 저는 모든 저지를 다 합하면 1,000문제 정도의 문제를 풀었어요. 아마 xx도 이 정도 숫자의 문제를 풀면 저보다 더 잘하실 거예요.

아마 1,000문제, 아니 그 절반인 500문제라도 풀어본 크루들은 나에게 질문을 하지 않았을 것이다.

이처럼 학습에서 나는 절대적인 양이 중요하다고 생각한다.
그리고 단순히 공부한 기간이 긴 것 보다, 얼마나 밀도 있게 했느냐가 중요하다고 생각한다.

내 생각을 뒷받침하는 예시를 하나 간단히 들어보고자 한다.

A는 자격증 준비를 두 달 준비했는데, 떨어진다.
반면 B는 같은 자격증 준비를 2주일 준비했는데, 합격한다.
대학교에서 이런 경우를 굉장히 많이 보아왔다.

이는 두 사람의 학습 능력치의 차이 때문인가? 나는 그렇게 생각하지 않는다.
애초에 대학교라는 곳은, 중 고등학교와는 다르게 시작 선이 굉장히 비슷한 경우가 다수이다.
A, B 둘의 학습 능력치의 차이는 크지 않다고 생각한다. (적어도 1, 2학년 때만큼은)
이 두 사람의 차이는 절대적인 학습량과 공부의 밀도가 다른 것이다.

차이점을 좀 더 자세히 살펴보면 아래와 같았다.

A의 사례는 2달 전에 책을 편 것이지, 2달 내내 지속해서 공부한 경우는 쉽게 보지 못했다.
분명 일주일 중 공부한 요일이 세 번이 채 안 되거나, 공부를 하더라도 2~3시간 정도 한 경우가 잦았다.
8주 중 마지막 일주일 정도만 열심히 공부한 경우가 대다수였다.

2주 만에 합격한 B 사례의 경우 하루 8시간씩 주 6일간 공부하는 경우를 자주 보아왔다.

단순히 수치상으로 환산을 해보아도
A : 주 3일 x 하루 2시간 x 7주 (42) + 8시간 x 5일 (40) = 88시간
B : 12일 x 8시간 = 96시간

절대적인 투자 시간부터 차이가 나는 것이다.

꾸준히 공부하는 것은 좋다고 생각한다. 하지만 꾸준히듬성듬성 은 완전히 다르다는 것을 나는 이야기하고 싶다.
A는 절대적인 공부량도 적고, 밀도 있게 공부하지도 않았기 때문에 불합격한 것이다.

다시 돌아와서, 저 크루 왜 저렇게 잘하지? 하면서 마냥 부러워하는 것은, 그 실력 뒤에 쌓아온 노력을 생각하지 못하는 경우가 많다.

예를 들어 제이슨을 보자.
제이슨은 나와 나이 차이도 크게 나지 않는데, 나와 비교하면 아주 뛰어난 프로그래밍 스킬을 가지고 있다.
그렇다면 나는 제이슨을 마냥 부러워만 해야 하는가?

제이슨은 초등학생 때부터 코딩을 접한 것으로 알고 있다.
나는 대학교에 와서야 코딩을 처음으로 접했다. 그리고 대학교 내내 코딩을 그렇게 열심히 한 것도 아니었다.

절대적으로 프로그래밍 학습에 투자한 시간이, 제이슨과 비교하면 압도적으로 모자라다.
제이슨보다 프로그래밍을 못하는 것은 너무 당연하다.

잘하는 크루들을 마냥 부러워하기 전에, 실력향상을 위해 내가 저 크루만큼의 시간을 쏟았는지를 한번 생각해보자.


시도해본 공부 방법들

잠을 줄인다

밀도 없는 단순 양치기 공부법

할 건 많은데, 시간이 부족해요. 어떻게 하면 좀 더 효율적으로 학습할 수 있을까요?

라는 질문에 대해서 항상 듣는 대답은 잠을 줄여라 였다.
그리고 level 2부터는 요구 학습량이 방대해짐으로써, 많은 크루들이 학습을 위해 잠을 줄이는 모습이 자주 보이기 시작했다.

그래서 나도 한번 4월 중 2주 정도 잠을 한번 줄여봤다.
결과적으로는 최악이었다.

건강이 나빠지기 시작했고, 잠이 부족해서 스트레스가 계속 쌓여있는 상태가 지속되었다.
잠을 줄여서 앉아있는 시간 자체는 길어졌지만, 밀도 있는 학습을 하기가 힘들어졌다.
겉에서 볼 때는 절대적인 학습량이 늘어난 것 같지만, 좋은 컨디션에서 1시간 동안 100을 학습할 수 있다면, 피곤한 상태에서는 1시간 동안 20 ~ 30을 학습하는 것조차 힘들었다.

나는 원체 잠이 많은 사람이다.
그리고 체력이 거의 고갈된 상태에서 공부할 것들을 더 잡고 있어 봤자 능률이 잘 나오지 않는 타입의 사람이다.

노력으로 인해 바뀔 수 있는 부분이 있고, 바뀌지 못하는 부분이 존재한다고 생각한다.
바뀌지 못하는 부분은 받아들이고 억지로 고치려고 노력할 필요가 없다고 생각한다.

수면은 평소대로 최소 7시간 30분 ~ 8시간 정도를 확보하고, 주중에 그러지 못한 경우에는 주말에 12시간 넘게 자면서 부족한 수면을 채우기 시작했다.
피곤한 상태로 12시간 앉아있는 것보다, 7시간 자고 5시간 동안 공부한 것이 더욱 얻어가는 것이 많았다.
오히려 잠을 줄이며 공부했던 것보다 훨씬 밀도 있는 학습을 할 수 있게 되었다.

데일리 회고

하루를 마무리 지으며 학습한 것을 되돌아 본다.

나는 새롭게 배우는 것보다, 잊지 않는 것이 더 중요하다고 생각한다.
데일리 회고도 그런 의미에서 만든 활동이다.

우테코를 시작하기 전 아침마다 우리는 데일리 미팅을 한다.
나는 데일리 회고도 있으면 어떨까라고 항상 생각해왔고, 실천하기 시작했다.
처음에는 페어였던 루트랑 단둘이 진행하고 있었고, 에어가 블로그의 글을 보고 컨택이와서 에어까지 총 3명이 함께 진행하고 있다.
데일리 회고는 짧게 그날 18시 전까지 그날 공부한 것을 각자 키워드 중심으로 발표 식으로 부담 없이 이야기한다.

이 활동의 주목적은 지식전달과 공유가 아니다.
물론 두 개는 파생적으로 따라오는 효과이지만, 18시에 발표를 하면서 그날 자기가 공부한 것을 의식적으로 돌아보는 것을 의도했다.

또한, 기존에는 학습하면서 파편적으로 기억으로만 담고 넘어갔던 정보들을, 키워드식 발표를 하기 위해서 학습할 때 참고한 링크와 간략한 설명을 적으며 문서화할 수밖에 없다.
이런 일련의 과정을 통해서 학습, 기록, 복습, 토론 이 4마리의 토끼를 한 번에 잡을 수 있는 활동이라고 생각했고, 아직은 굉장히 효과가 좋다고 생각한다.

앞에서 언급한 내용 말고도, 서로가 몰랐던 내용에 대한 지식공유, 피드백을 통해 잘못되게 학습한 내용을 바로 수정하는 등의 부수적인 효과들 또한 아주 좋다.

새롭게 배우는 것은 간단하게 예습하기

이것 역시 3월 회고록에 언급했던 내용이다.

배경지식을 조금이라도 가지고 수업을 듣는 것과, 아예 백지상태에서 수업을 듣는 것의 차이는 크다고 생각한다.
예를 들어 MVC config을 주제로 내일 수업이 잡혀있다면, 브라운의 학습 테스트를 미리 진행해보고 수업에 들어가는 것이다.
학습 테스트를 진행할 때 너무 자세히 들여다보려고 하지 않고, 일단은 accept를 받는 것을 목적으로 하면서 간략하게 학습 테스트를 진행한다.
이때 대충 모호하게 이해되는 키워드들이 있을 것이다.
이 모호한 키워드들을 수업할 때 들으면서 깨달음을 얻는 학습 방법이다.

이 방법은 굉장히 효과적이었다.
아예 스프링에 문외한인 내가 아예 생소한 개념의 수업 때 들으면, 어? 저게 뭐지? 하는 고민이 생기고, 그 개념에서 확장되는 다른 지식이 나오면 ???? 상태로 수업이 끝나는 경우가 종종 있었다.
하지만 예습을 진행한 뒤로부터는 수업 시간이 아, 저게 저렇게 쓰였던 거구나, 저래서 필요한 거구나 같은 깨달음을 얻는 시간이 되었다.


앞으로 어떻게 할 것인가?

해야 할 일은 빨리 해치우기

하버드생들의 공부비법은 예정보다 10일 빠르게 해치우기라고 한다.
누구는 이 말이 우스갯소리라고 웃어넘기겠지만, 나는 이 방법이 굉장히 효과적인 방법이라고 생각한다.

일을 일찍 끝내놓으면, 심리적 안정감이 생긴다.
어떤 분들은 일이 닥쳤을 때 압박감이 생기고 그것이 동력이 된다고 말씀 하실 수도 있지만, 나는 그런 타입의 사람이 아닌 것을 확실히 인지하고 있다.
처음부터 완벽하게 하려고 하는 것이 아닌, 어느 정도의 완성도로 미리 끝내놓고, 그것을 다시 되짚어보면서 리팩토링 해보자.

지금 글쓰기 미션을 미리 진행하는 것도 위와 같은 이유 때문이다.
해야 할 일을 일단 빠르게 끝내놓자.
이것은 빨리 끝내고 휴식을 취함을 위해서가 아니고, 더 잘하기 위해서이다.
마감기한 직전에 내는 글과 10일 전에 초안을 미리 완성해두고 시간이 날 때마다 재확인하며 수정을 거치는 글.
둘중 어떤 글이 결과적으로 더 완성도가 있을지는 상상에 맡기겠다.

남는 시간이 아닌, 시간을 내서

level 2에 들어오면서 드라마틱하게 안 좋은 방향으로 바뀐 것이 있다면, 블로그 글을 쓰는 주기가 굉장히 길어진 것이다.
기존에 블로그에 글을 작성하는 활동은, 미션을 진행하고 남는 시간에 진행했다.
하지만 level 2에 와서는 새로운 것을 너무나도 많이 배워야 하는지라 남는 시간이 부족해지기 시작했고, 블로그 글도 적기 힘들어지기 시작했다.

필독서도 마찬가지이다. 필독서도 반드시 읽어야 하는 책이기 때문에 필독서라고 이름이 붙은 것이다.
하지만 미션에만 몰두하다 보면, 필독서를 읽을 시간을 내는 것도 힘들어지게 된다.

이렇게 해야 할 활동은, 남는 시간이 아닌 할 시간을 따로 배분할 필요성이 느껴졌다.
해야 할 활동을 남는 시간에 하려고 하지 말자. 시간을 확보해서 진행 해보자.
어떻게 시간을 확보할지, 어느 시간대로 분배할지는 여러 트러블 슈팅을 겪으며 나에게 최적의 시간을 찾아보려고 한다.

꾸준함을 통한 습관 생성

단기간에 쌓아 올린 지식은 휘발성이 짙다.

위에서 밀도 있게 단기간에 공부하는 것이 자격증 공부에는 효과적이라는 코멘트를 적었다.
하지만 자격증은 단 한 번의 시험을 위해서 쌓아 올리는 지식이라면, 개발은 끊임없이 지식을 쌓아 올려야 한다.

그렇다면 어떻게 해야 할까?
장기적인 기억이 될 때까지 꾸준히 하는 것이다.
듬성듬성 장기적으로 하는 게 아니고, 매일매일 꾸준히 조금이나마 공부해나가는 것이다.

이런 꾸준함을 통해서 얻어지는 효과는 습관화라고 생각한다.
예를 들어 하루 매일 30분씩 읽으려고 책을 시도한다고 해보자. 생각보다 쉽지 않을 것이다.
그리고 대부분이 실패할 것이다.

그렇다면 매일 20분씩 책을 읽으려고 시도한다. 실패하면 10분씩 책을 읽으려고 시도한다.
이마저도 실패하면 5분씩 책을 읽으려고 시도한다.
하루 5분씩 책을 읽는 것은 어렵지 않을 것이다.
그렇다면 5분씩 읽는 책이 얼마나 의미 있는가? 라는 질문에 나는 이렇게 대답하고 싶다.
가만히 있다가 전속력으로 달리기는 힘들지만, 걷다가 가속도를 붙여서 달리기는 어렵지 않다고.

필자의 경우 이런 꾸준함을 위해서 1일 1커밋 활동을 이전부터 해왔다. 이 부분에 관한 이야기는 과거에 쓴 글로 대체하겠다.

1일 1커밋도 아주 작은 활동이다.
작년까지는 1일 1커밋은 알고리즘 문제 풀이로 채워왔으며, 최근 대부분의 커밋은 위에서 서술한 데일리 회고에서 작성한 TIL로 채워지고 있다.

하지만 이런 사소한 꾸준함을 통해서 습관을 만들었고, 이를 통해 얻어온 장기적인 효과는 지금 와서 돌아보면 나에게 지대한 영향을 주었다.
1일 1커밋 알고리즘 문제 풀이는, 처음에는 쉬운 문제 하루 한 문제씩 풀어오던 활동이었다.
그러나 나중에는 쉬운 문제는 하루 50문제 이상, 어느 정도 난도가 있는 문제도 하루 3문제 이상 풀 수 있는 능력을 만들어 주었다.
이 꾸준함은 나에게 코딩테스트에 대한 두려움을 없애주었다.

1일 1커밋 TIL은, 처음에는 요약하고 참고한 링크만 정리해놓는 수준이었다.
그러나 지금은 자기 전에 대략적인 예시 코드도 포함하며 그날 공부했던 내용을 좀 더 상세하게 기록하게 되었고, 이를 통해서 광범위한 지식의 습득이 필요한 스프링 학습에 있어서 나에게 기억 꺼내기용, 그리고 좋은 레퍼런스가 되어주고 있다.

달리기가 힘들다면 걷기부터 하자.


글을 맺으며

이번 글쓰기 미션을 통해 무언가 평소에 하고 싶었던 이야기이지만, 이런 말 할 대상을 찾지 못해서 담아두기만 했던 이야기를 풀어볼 기회를 가질 수 있었다.
내 생각이 결코 정답이 아니지만, 이 글을 읽는 누군가에게 글에 담긴 나의 경험과 생각이 긍정적인 영향을 주었으면 좋겠다는 이야기를 마지막으로 하며, 생각보다 많이 길어진 꼰대 같은 글을 매듭지어보려고 한다.