나는 어떻게 공부했는가?

성장하는 개발자를 위한 팁

John Cho
11 min readNov 9, 2019

미국으로 가는 비행기 안에서 마땅히 할 게 없다는 사실을 깨달았기 때문에, 그 시간에 블로그 글을 작성하는 게 어떨까 싶어 이 글을 작성한다. 주제는 친구가 추천해주었다. (나중에 꼭 술 사요!)

아래 글은 모두 나의 이야기를 담고 있기 때문에 교육학적인 측면 or 이게 맞다는 이야기는 아니라 오롯이 내가 이렇게 공부했다를 다루고 있다.

따라서 이 글을 읽는 사람들이 이 방법을 무작정 따르기보다는, ‘아 저런 방식으로도 공부하는구나’ 정도로 생각해주시면 좋겠다.

여기서 ‘너’는 보통 나 자신을 지칭한다.

쓰다보니 꽤 장문이라 세편으로 나눌까 고민되지만 일단 하나로 쓴다.

자기객관화

너는 네가 생각하는 것보다 뛰어나지 않다. 이 세상에는 너보다 뛰어난 사람도 많으며, 그 사람들과 더불어 살아가기 위해서, 그 사람들과 친밀하게 지내고 싶다면,그들이 사는 세상에 조금이라도 발을 내딛을 수 있어야한다. 너의 현실을 자세히 살펴보자.

HTML & CSS

실력:

잘하는 편이지만 이 세상에는 네가 쓰는 W3C 스펙을 직접 만드는 사람이 존재한다.

미래:

당장 몇년간은 무리가 없을 수도 있지만, 회사에서 HTML & CSS 역량을 높게 평가하지 않기 때문에, 대다수의 경우에는 네가 기대한 수준의 연봉을 받지 못하거나, 네가 기대한 수준의 역할을 맡지 못할 수 있다.

그러면:

네가 지금 HTML과 CSS를 잘하는 게 ‘정말로’ 너의 현재 삶에 도움이 되고 있는가?

자바스크립트

실력:

자기객관화가 어렵고 스스로를 계속 ‘나정도면 잘하지 않나?’ 라고 세뇌하는 걸 보면 너는 잘 하는 게 아닐거다. 다른 이를 보고 만족하는 수준이라면 잘하는 건 아니다.

미래:

자바스크립트를 배우는 것이 미래일 수는 있지만, 네가 들이는 비용 대비 본인의 만족도를 고려해보자. 너는 정말 FE를 하고싶은 거 맞니? 그냥 돈을 벌고싶어서 FE를 하는 거 아니니?

그러면:

네가 앞으로 FE를 위해 자바스크립트를 공부하는 걸 게을리 하면, 미래가 아무리 전도유망하더라도 그냥 길거리에 굴러다니는 A 정도로 끝날거야.

위와 같은 생각은 내가 커리어를 전환하기 전에 마지막으로 생각했던 것이다. 나는 여전히 UI 개발은 타인에 비해서 더 잘한다는 믿음이 있다, 또한 탄탄한 아키텍쳐가 아니라면 FE 개발에서도 프로토타입 수준의 제품은 금방 만들어낼 수 있다.

하지만 앞으로는 어떨까? 흔히 말하는 ‘먹고 살기’ 위해서 이 일을 지속하고 반복해야한다면, 더 재미있고 더 가치있게 일할 수 있는 쪽을 택해야 하지 않을까? 자신의 현실을 ‘아주 정확하게’ 객관화 시키는 것이 중요하다.

물론 자기 자신을 객관적으로 바라보는 데에는 아주 오랜 시간이 걸리고, 흔히 말하는 자기 연민으로 인해 시야가 흐려지는 경우도 많다. 하지만 당신이 앞으로 더 나아가려면 한번은 거쳐야하는 단계이기 때문에, 아주 오랜 시간이 들더라도 스스로를 돌이키는 학습을 먼저 해야한다.

스스로를 돌이키다 보면, 스스로에게 무엇이 부족한 지 알 수 있게 되고, 스스로가 앞으로 어떻게 나아가야할 지를 알 수 있게 된다. 그런 면에서 지속적인 명상은 당신의 삶을 중-장기적으로 밝게 만들어준다.

당신이 가지고 있는 자기 연민 또는 자기 혐오 모두를 자신이 만들고 있기 때문에,당신 스스로를 더 사랑하고 아껴주어야하기 때문에, 당신 스스로를 더 잘 알아야할 필요가 있다.

의도적 반복을 통한 학습

인간은 누구나 망각하게 되어있다.

인간의 망각 프로세스에 대해서는 많은 논의가 있고, 뇌과학에서 풀 문제이니 이 부분에 대해서는 생략해도, 당장 어제 짠 코드도 메모해두지 않으면 까먹을 수 있는데 한 달 뒤의 자신을 어떻게 믿는가?

나는 특정한 패턴을 의도적으로 반복하는 과정을 통해 인간이 자신의 기술을 닦아나갈 수 있다고 생각한다. 또한 모든 과정에는 반드시 ‘육체적인’ 노력이 필요하다 생각한다. 흔히 말하는 감각을 통한 자극에는 어느정도 한계점이 있다고 생각한다.

예를 들어, 나는 얼마 전에 출시 된 오버워치 2 트레일러의 몇개 대사를 외우고 있고 연출 순서를 외우고 있다. 당연한 소리지만 이 걸 외우려고 외운 것은 아니다.

다만,

  1. 지속적으로 시청하였고
  2. 대사를 들을 때 집중해서 들었으며,
  3. 이 대사를 말하는 캐릭터의 억양 / 심리 상태 등을 고려했고
  4. 무엇보다 오버워치 2에 대한 기대감이 있는 상태

로 오버워치 2 트레일러를 보았기 떄문이라 생각한다.

그러니 지금 비행기 안이지만 (아래는 읽지마..) 첫 장면은 모두가 비어있는 빈 비행기 안에서, 동료들의 자리 + 소품들을 클로즈업 하고, 메이가 윈스턴에게 말을 건네며 (우리 이정도면 괜찮을까요? — 함꼐라면 괜찮아요) 메이는 안도를 내쉬는데 트레이서가 눈치 없이 방해하고, “이제부터 전자기기를 사용하실 수 있습니다” 라는 대목에서 윈스턴이 무기를 활성화하고, 트레이서의 계기판에는 자신의 여자친구 사진이 붙어있고, 영문 버전에서는 널 섹터 공격에 강세를 넣지만, 한국어 버전에서는 그러지 않으며, 윈스턴에게 ‘착륙 지점 좀 확보해줘’ 라고 하니 윈스턴이 ‘늦기만 해봐’ 라고 하면서 뛰어 내리고 (이 때 메이가 널 섹터는 왜 지금 공격하고 지랄이야 라고 대사 침) 지상에서는 경관 + 어린아이 + 옴닉이라는 누가 봐도 의도적인 조합이 대피하고 있다가, 윈스턴이 뛰어내리면서 로봇 세기를 터트리고 ‘봉주르 경관님 도와주러 왔어요’ 라는, 탱커가 공격을! + ‘저거 원숭이죠?’ 라는 대사를 프랑스어로 치는 옴닉을 통해 웃음을 자아내고, 전기로 다 지지면 될 거 같은데 굳이 줘패다가 로봇들에게 휩싸인 윈스턴을 메이가 구하고, 공격당할 뻔한 메이를 트레이서가 구해주면서 ‘뒤를 조심해!’ 라는 소리를 하고 그 뒤로 사라지고, 메이한테 ‘시민들을 대피시키세요!’ 해서 알았다 했더니 엄청 큰 로봇이 나타나서, 메카라빔 한방에 도시가 초토화되고, 타고온 비행선이 반토막나고 (UN: 아이고 내 돈), 시민들 구하려다 메이가 다쳐서 후퇴하자고 하니 윈스턴이 ‘내가 시간을 벌게’ 하고 나서, 트레이서가 ‘늦기만 해봐’ 라며 액자식 구조를 자아내는데…!

이 다음은 트레일러 5분 14초를 살펴보세요!

그러니 무언가를 의도적으로 한다는 것이 반드시 당신의 모든 의식을 거기에 집중해야 한다가 아니라, 어느정도의 집중력을 가진 상태에서 무언가를 지속적으로 반복하는 것을 의미한다. 일회성, 고 수준의 집중은 오히려 악영향을 미친다고 생각한다.

그런 의도에서 내가 고등학교 시절에 영어 선생님이 해주었던 말이 뇌리에 잘 박혀있다.

영어는 하루에 다섯 단어만 외우면 된다.

이게 많아보일 수도 있고 적어보일 수도 있지만,

아마 대부분에게 적은 갯수라고 생각한다.

이 다섯 단어를 의도적으로 반복해서 외워라.

어떤 단어여도 좋지만 다섯 단어를 내일도 까먹지 않게 외워라.

반복하고 반복하면 그 단어를 까먹지 않게 되고,

그 단어는 결국 너의 것이 된다.

의식의 반복은 곧 무의식에 가까워진다.

무의식이 될 때까지 의식적으로 반복해보는 걸 권장한다.

유한 자원, 무한 자원

아마 이 글을 읽는 당신이 지금 조급할 수 있다고 생각한다. 나를 포함한 다른 사람들은 어쩌면 당신보다 일찍 시작했고, 왠지 당신보다 더 뛰어난 사람인 거 같거나 비슷한 수준인 거 같고, 나에게 주어진 시간보다 저 사람에게 주어진 시간이 더 많아보일 수 있다.

시간은 모두에게 평등하지 않다, 내가 비행기에서 이 글을 쓸 수 있는 것이 내가 비즈니스 항공권을 탔기 때문인 것처럼, 누군가는 지금 내가 비행기에서 쓰고 있는 이 시간을 단순 교통 시간으로 쓰고 있을 수도 있다.

그러니 예컨데 시간은 유한 자원에 한없이 가깝다. 내가 신림동에 살던 시절에 회사까지 1시간 20분이 걸렸다. 지금 나는 강남에 살고 회사까지 20분 ~ 30분이 걸린다. 누군가는 분당에 살고 아마 회사까지 5분이 걸리는 사람도 있을 것이다.

당신의 체력 / 정신력도 무한하지 않다. 당신은 언젠가 지칠 것이고, 지친 상태로 무언가를 반복하다보면 결국에는 쓰러질 것이다. 어느 순간 당신을 지탱하는 것이 당신의 삶을 부숴버리기도 한다. 이 이야기를 하는 이유는, 나는 젋은 시절의 에너지와 시간을 너무 쉽게 써버렸기 때문이다. 이 말을 들으면 ‘그래도 은님은 젋은거죠!’ 라고 생각할 수 있겠다. 당연하다. 나는 실제로 젋으니까 :sunglass:

하지만 지금보다도 더 젋었던 시절에 쏟은 에너지는, 결국 병이라는 이름으로 돌아왔으며, 병을 통해 나는 내가 더 지속할 수 있었던 무언가를 하지 못하게 되었다.

그로 인해 슬럼프가 찾아오고, 그로 인해 좌절감이 찾아오고, 그로 인해 지속할 수 있는 원동력을 잃게 된다. 당신이 가지고 있는 자원은 대부분 유한하다.

딱 한가지, 무한대로 가질 수 있는 것이 있다. 바로 욕심이다.

에너지는 유한한데 욕심은 무한하다. 이로 인해 발생하는 일은 결국 주변 사람들의 에너지를 소비하는 것이었다. 욕심을 잘 제어하고, 당신이 할 수 있는 일부터 하면서, 당신이 할 수 없는 일은 다른 사람의 도움을 받아가면서, 적절한 수준의 에너지를 소비하는 것이 장기적으로 좋다고 생각한다.

나는 개인적으로 인간이 하루에 집중할 수 있는 시간은 최대 4시간이며, 그 이상 시간을 소비하는 건 낭비라고 생각한다. (이른바 처리력이 저하될 가능성이 높다고 본다.)

그러니 다시 한 번 말하지만 꾸준히 지속가능한 모델을 만드는 걸 우선적으로 하가를 바란다. 당신의 성장에 대한 욕심이 때로는 당신에게 돌아가는 칼이 되지 않기를 바란다.

효율적인 개발 공부 방법

이제 본격적으로 개발 공부라는 면에서 살펴보도록 하겠다. 이는 내가 HTML + CSS를 공부하던 시절에 많이 쓰던 방법이고, 최근에는 Flutter, 데이터 과학, 머신 러닝 등을 공부하면서 주로 사용하는 방법이다.

해당 분야 커뮤니티 또는 전문가를 찾는다.

  1. 트위터 또는 페이스북을 많이 활용하는 편이다.
  2. 애매하면 팔로워 대충 많아 보이는 사람을 찾는다.
  3. 그럼에도 애매하면 그 기술을 만드는 곳에 메일을 보낸다.

키워드를 줍는다.

  1. Flutter를 예로 들면,
  2. Flutter는 크로스 플랫폼 (1) 라이브러리 (2) 입니다.
  3. Flutter 엔진은 C++ (3)과 Skia (4)로 구성되어 있습니다.
  4. Flutter는 크게 Cupertino (5)와 Material (6) 컴포넌트를 사용합니다.
  5. Flutter의 모든 것은 위젯 (7) 입니다.
  6. Flutter의 상태 (8) 관리 (9)는 리액트 (10)의 것을 많이 차용했습니다.
  7. 데이터 과학을 예로 들면,
  8. 데이터 과학은 데이터 (1)를 수집 (2)하고 정제 (3) 하여, 의사 결정을 더 정교화 시킬 때 사용할 수 있습니다.
  9. 어떤 데이터 (4)를 수집하나에 따라 제품 전략 (5)이 달라질 수 있으며, 이는 곧 수익 창출 (6)로 이어지기도 합니다.

키워드를 바탕으로 어떤 공부가 필요할 지 청사진을 그린다.

  1. Flutter란 무엇인가?
  2. Flutter의 크로스 플랫폼이란 무엇인가?
  3. 라이브러리와 프레임워크의 차이점은 무엇인가?
  4. 전통적인 Android, iOS 개발과 어떤 점이 다른가?
  5. Flutter는 왜 독자적인 엔진을 가지고 있으며, C++로 구현했는가?
  6. Skia는 무엇이며, 왜 필요한가?
  7. Cupertino와 Material의 차이점은 무엇인가?
  8. Widget은 무엇인가?
  9. 상태는 무엇인가? 상태가 바뀌면 무슨 일이 일어나는가?
  10. 어떤 상태 관리 모델이 있으며, 어떤 식의 관리가 유용한가?
  11. 리액트는 무엇이며, 어떤 상태 관리 모델을 가지고 있는가?

가용한 리소스를 최대한 활용하여 공부한다.

  1. 책이 있다면 책이 최고다. (1 ~ 3까지 생략 가능하다)
  2. 공식 홈페이지를 이용한다.
  3. 인터넷 강의를 이용한다. (인프런, Udemy, Udacity 등)
  4. 예를 들어 Flutter는 Udemy의 Angela Yu 강의가 바이블처럼 전승된다.
  5. 오프라인 강의를 이용한다.
  6. 세미나 등을 통해 트렌드를 파악하고 키워드를 줍는다.

데드라인을 정한다.

  1. 2019년 XX월 XX일까지, 1장까지 완료하겠다.
  2. 그 날 까지 완료했다면 작은 보상을 주는 것도 좋다.
  3. 완료하지 못했다면 회고를 통해 내가 정말 ‘가능한’ 분량을 세웠는 지 고민해본다.
  4. 의도적인 공부를 하고싶다면 본인이 사용하는 시간을 정리해두는 게 도움이 된다.
  5. 45분 공부 / 15분 휴식 패턴을 권장하되, 하루 2시간 이상은 지양한다.

공부한 내용은 반드시 블로그에 정리한다.

  1. 다시 한 번 말하지만 인간은 까먹는 동물이다.
  2. 코드만 짜놓고 뿌듯해하는 일은 절대로 있어선 안된다.
  3. 블로그 정리를 통해서 내가 부족했던 것, 몰랐던 것, 알았던 것들을 모두 정리한다.

1에서 6을 반복한다.

그러니 내가 블로그에 글을 안올리면 공부를 안하는 거라고 생각하시라! (는 농담이고 노션에 별도로 정리하고 있다)

정리하는 습관은 중요하다. 당신이 지금 어디까지 알고 있으며, 앞으로 어디를 더 알아야하는 지에 대한 지표로 사용하기에 좋기 때문이다. 무엇보다 정리를 통해서 당신이 배운 걸 다시 정리하게 되고, 다시 정리하는 과정에서 더 많은 것을 이해할 수 있게 된다.

따라서 당신의 성장을 위해서 정리는 ‘선택’ 이 아니라 ‘필수’ 라고 생각한다. 그리고 나는 관심 기반의 공부도 필요하다고 생각한다. 당신이 공부하고 있다는 걸 전국 방방 곳곳에 알려라. 그러면 당신의 공부를 누군가는 도와줄 것이다.

마무리

보통 이런 글은 꼰대성 글이 짙다. ‘나는 말이야 어! 하루에 네시간만 자고 공부를 했어! 어!’ 하지만 당신은 그러지 않았으면 한다. 당신에게는 당신의 삶이 있고, 당신에게 맞는 공부법이 있으리라 생각한다.

모쪼록 이 글을 읽는 사람들이, 내가 하는 이 공부법이 도움이 되기를 바라며 글을 마친다.

--

--