10월에 퇴사하고 쉬면서 이직을 바로 하기보다는 넥스트를 고민하고 어떤 일을 하고 싶은지 쉬어가는 기간을 갖기로 했다. 쉬면서 그 간 나의 약점이였던(하지만 꼭 해야했던) 알고리즘과 시스템 디자인을 중점적으로 공부하려고 계획을 세웠다.
마침 shon 이 함께 공부하자는 좋은 제안을 주셔서 10월 26일부터 과 알고리즘 스터디를 진행했다. 그간 얻은 lesson-learn 을 공유한다.
내가 뭘 모르는지 아는 것이 첫 번째다.
내가 뭘 모르는지 그리고 뭘 알아야 하는지 사전조사하기
시간은 무한하지 않으니 내가 뭘 공부해야하는지 그리고 이미 그 과정을 거쳐서 목표를 달성한 사람들은 어떻게 공부를 해 왔는지를 탐색한다. 사실 알아야 할 내용은 너무 많아서 무턱대고 하다보면 금세 지칠거라고 판단했다. 그래서 레딧, 리트코드, 블라인드, 링크드인, 유튜브 등을 통해 해외 빅테크 취업사례, 공부법등을 보고 자주 나오는 패턴, 공부 전략등을 파악했다. 최소한 목적지는 알고 시작하다보니 불확실성에서 오는 불안감을 낮출 수 있었다.
사전조사한 결과를 통해 투자할 수 있는 시간과 현재 나의 상태를 파악하여 학습 목차를 세우고 학습 전략 세우기
- 이 때 수립한 계획은 당시에는 몰랐지만 시간이 지나면서 알게된 정보로 인해 바뀔 수 있음을 가정한다.
- 큰 목적은 유지하되 세부 실행 전략은 효율성과 해당 주기의 상태에 따라 유연하게 변화할 수 있다.
- 실제로 어디에 얼마나 투자해야하는지 나는 현재 어떤 상태인지를 대략적으로 추정하니 얼마만큼 투자하면 될지 대략적인 감이 생겼다. 이를 통해 실천 가능하고 실현 가능한 계획을 통해 무너지지 않은 루틴을 지켜나갈 수 있었다.
메타인지 역량 기르기
알고있다는 착각에서 벗어나기
어떤 일이나 학습을 하다보면 어떤 패턴에 익숙해져서 혹은 더이상 나의 지능을 의심하기 싫어서 스스로 이 정도면 충분히 잘 알고 있다는 착각을 많이 하게 된다. 이번에는 아래의 훈련들을 통해 의식적으로 그 함정에 빠지지 않으려고 노력했다.
말로 설명해보기
- 혼자서 문제를 풀 때와 실제로 누군가에게 나의 사고과정을 설명하면서 문제를 푸는 것은 많이 다르다. 숀에게 나의 문제 접근과 해결 과정을 계속해서 하면서 애매하게 아는 것들 혹은 안다고 착각해서 넘어갔던 것들이 제대로 아는 게 아니였다는 것을 깨달았다. 나중에 혼자 공부할 때에는 숀에게 혹은 다른 누군가에게 어떻게 설명할 것인가를 의식적으로 떠올리면서 푸는 것이 도움이 되더라.
- 특히 숀은 문제를 정의하거나 풀어나가는 과정에서 논리적으로 미흡한 부분이 있으면 날카롭게 잡아내는데 이 부분이 내가 의식적으로 논리적 접근법을 성장시키는데 큰 도움이 되었다.
글로 정리해보기
- 혼자서 공부할 때에는 나의 사고의 과정을 글로 써가면서 문제를 푼 이후 정리했다. 그 과정이 도움이 되었는데 내가 어떤 부분들에서 자주 실수를 하고 틀리는지 알게 되어 그 부분을 의식적으로 개선하려고 했다. 그리고 개념을 몰라서 틀렸던 부분과 훈련이 필요해서 못 푼 문제들은 따로 정리해서 그 주에 모아서 다시 점검하는 시간을 가지고 있다.
나는 열심히 했어요.
- 나는 “열심히 해도 안 돼요” 라는 말을 싫어한다. 이는 그 사람이 정말로 잘 하기 위해 어디까지 스스로를 측정했고 그 기록을 통해 다음번엔 어떻게 했는지 전혀 그려지지 않기 때문이다. 더해서 열심히 라는 것은 굉장히 주관적인 지표이기 때문이다. :)
- 반대로 “잘하기 위해서 A라는 방법을 시도했고 해보니 B 라는 결과가 나왔어요. 여기서 어디에 더 집중하면 좋을까요?” 라는 말을 좋아한다. 이는 스스로 잘하기 위한 여러가지 시도들을 스스로 “열심히” 생각해서 측정했기 때문이다. 이게 나에게 있어서의 "열심히"다.
정말 몰입한 시간은 얼마나 되나요?
- 자리에 오래 앉아만 있는 것보다 실제 몰입한 시간을 측정하고 이 시간을 최대한 확보하는게 중요하다고 생각했다. 스스로 산만한 것을 알고있으니 차라리 툴을 이용하여 실제로 내가 집중하는 시간을 측정하고 이를 개선할 부분이 있으면 개선하는게 맞다고 판단했다.
- NBT에서 테크리드였던 심샘님이 알려준 테크닉을 활용
- 본인은 에전에 캘린더에 평일에 출근시간부터 퇴근할 때까지 캘린더를 한시간 단위로 블록하고 알림이 오면 내가 무엇을 하고 있고 어떤 부분을 고민했는지를 작성했다고 하였다. 이를 통해 내가 뭘 모르는지 어디서 헤매고 있는지를 빠르게 파악해서 다음에 일을 어떻게 하면 더 잘할 수 있을지를 고민하고 개선하는데 있어서 도움을 얻었다고 알려주셨다.
- 이를 응용해서 KCD 에서 나름 효과를 본 방식이 있다. pomodone 과 zapier, excel 을 이용해서 하루에 각 태스크 당 집중한 시간을 측정하고 엑셀로 취합해서 노션으로 관리했다. 다만 이렇게 하다보니 손이 많이가고 번거로워서 잘 사용하지 않게 되더라. 이번에는 내가 덜 신경써도 루틴을 잘 관리할 수 있는 툴을 찾게 되었다.
- RIZE가 나한테는 그런 서비스였고 그 외에 진척도 관리나 한 일/ 할 일 관리는 옵시디언을 통해 하고 있다. 이 두 가지와 구글캘린더를 사용하여 하루, 주간, 월간 단위를 큰 노력을 들이지 않고 측정을 하여 가시성을 높이고 있다.
- 측정결과 내가 학습에 몰입하는 시간은 평균적으로 4시간에서 5시간 사이였다. 나는 스스로 8시간~ 9시간을 공부한다고 생각했지만 실제로는 4시간이 나의 최대 생산성을 만들어낼 수 있는 한계인 셈이다.
- 지금은 오전 2시간/ 운동 + 15분 낮잠 +명상 / 오후 2시간을 Deep Focus 시간대로 정해서 해당 시간동안은 학습과 문제해결에 집중한다. 그 나머지 시간대는 덜 몰입해도 성과를 볼 수 있는 일들: 복습, 회고, 학습 전략 파악, 독서 등을 통해 덜 몰입해도 결과를 낼 수 있는 일들을 한다.
피드백 루프
고수의 피드백을 통해 내가 인지하지 못한 개선점을 끌어내기
- 나 자신을 아무리 객관화하려고 해도 내가 뭘 모르는지 모르는 단계를 쉽게 벗어나기는 어렵다. 이 때 고수의 피드백이 도움이 된다. 고수의 눈에는 내가 뭘 못하는지 그리고 어떻게 개선해야하는지 보인다. 이에 대한 피드백을 듣는 건 내가 빠르게 성장하기 위한 좋은 방법중의 하나다.
고수는 어떻게 하는지 관찰하기
- 나보다 잘하는 사람은 문제를 어떻게 정의하고 접근하는가? 그 과정을 보는 것도 엄청나게 도움이 되었다. 숀이 문제를 정의하고 푸는 것을 관찰한 후 나라면 어떻게 할 지를 생각했다. 그리고 나한테 취약한 부분을 어떻게 적용할지를 고민하고 조금씩 적용해나가다보니 점진적으로 개선됨을 느꼈다.
회고하고 개선하기
셀프 피드백과 외부의 피드백을 통해 회고한다. 이를 통해 다음 번 공부 스프린트에 최소의 인풋을 통해 최대한의 임팩트를 낼 수 있는 방법을 고민하고 적용했다.
한 주에 아주 작은 단위로 쪼개서 임팩트가 큰 기준으로 3가지만 적용하기.
- 한번에 다 개선하려고 하면 인지부하가 일어나서 내 뇌에서 하기 싫은 이유를 만들어내서 이 학습 루틴 자체가 무너질 수 있다고 판단했다. 대신에 큰 노력을 들이지않아도 임팩트가 큰 개선할 수 있는 습관을 추가하면 부담은 적은 반면 효과는 확실해서 이 개선 루틴을 꾸준하게 지켜나갈 수 있을 거라고 생각했다.
인지 부하에 영향을 미치는 부분을 절차 기억화 시켜서 인지부하 줄이기
- 어떤 일이든 처음이고 익숙하지 않으면 뇌에 인지부하가 생긴다. (정확히는 이전의 학습된 패턴에서 얻을 수 없는 형태의 새로운 일을 이야기한다.)
- 인지부하를 줄일 수 있는 효율적인 라이브러리나 패턴들이 반복되면 그 기능이나 패턴을 의도적으로 학습하여 절차 기억으로 만드는 훈련을 했다.
- 짜치는 예시지만 초반에 파이썬의
default_dict
[1] 라는 기능을 몰랐을 때에는 그냥 불필요하게 코드를 늘려가며 사용하곤 했다. 안그래도 알고리즘 문제 풀이 훈련이 안되어있는데 이렇게 생각할 거리들을 늘리다보니[2] 뇌의인지부하로 인해 쉬운 문제도 어렵게 풀게 되는 경우가 발생했다. 애초에 해쉬맵 자체는 기본 자료구조이니 이 기능을 숙달하고 외워버리는게 문제 풀이에서 고민해야 하는 영역의 20프로를 줄일 수 있을 거라 판단했다. - 실제로 다음주부터는 의식적으로 이를 활용했고 해쉬맵을 사용해서 푸는 문제의 경우는 여기서 잡아먹는 시간의 비효율을 개선해서 대략 5~ 10프로 정도 푸는 시간이 줄었다.
- 짜치는 예시지만 초반에 파이썬의
얻은 경험
- 나의 상태를 unknown unknown( 뭘 모르는지 모르는) 에서 unknown known( 뭘 모르는지 아는) 으로 빠르게 만들어야 삽질을 덜 한다.
- 끊임없이 회고하고 개선해라. 시간이 지나면 그 경험들이 복리 로 쌓여서 나중에 학습곡선이 점점 더 빨라진다.
- 내가 생각하는 나와 실제로 측정된 나의 차이를 줄여라. 메타인지만 제대로 훈련되도 성과를 짧은 시간내에 만들어 낼 수 있다.
- 고수와 함께하라. 대부분 고수와 함께하는 것을 나의 멍청함이 드러나는 것을 겁내서 꺼리는 것 같다. 나는 “지금은 멍청한데 1주일 뒤의 나, 1달 뒤의 나는 안 멍청한데?” 라는 뻔뻔함으로 그냥 했다. 어쩌피 나보다 잘하고 천재들은 워낙 많아서 부끄러워 숨기보다는 뻔뻔하게 배우는 게 훨씬 남는 장사더라. ( 숀도 나중에 처음엔 내가 진짜 너무 못 풀어서 답답했다고 말씀해주시긴 했음)
평소에 중요하게 생각하는 시도-회고-피드백-개선 무한 루프를 알고리즘 학습에 적용해보았다.
사실 여전히 미흡하고 부족하다. 그럼에도 불구하고 그 과정에서 얻은 경험도 공유하는 것도 유의미하다는 판단이 들어 공유해본다.
#학습 #회고 #알고리즘