흔히 하는 말로 개발자는 평생 공부를 해야 한다고 합니다. 개발자로 일하는 20년 동안 이 말이 틀렸다는 생각은 한번도 든 적이 없습니다. 그만큼 개발자에게 학습은 뗄레야 뗄 수 없는 관계일 것입니다.

그럼에도 불구하고 어떻게 공부를 해야 보다 더 나은 결과를 얻을 수 있을지에 대해서는 항시 의문으로 남습니다. 그도 그럴것이 만병통치약인 학습법이란 존재하지 않는 것처럼 보이기 때문입니다. 그러나 많은 분들에게 인정받는 것처럼 보이는 방법 또한 존재하는 것이 사실입니다.

이 글에서는 이런 학습법에 대해서 이야기를 해볼까 합니다. 다만 이것이 정답이다라고 말하지는 않겠습니다. 아무리 좋은 방법이라고 해도 사람에 따라 안 맞을 때도 있기 때문입니다.

홀로서기

개발자의 공부 방법은 기본적으로 ‘독학’이 우선 전제가 됩니다. 학교나 학원에서 배울 수도 있고, 요즘이라면 유튜브나 인터넷 강의 사이트 등을 통해서 배우기도 합니다만, 실제 일을 하다 보면 독학을 하지 않으면 안 되는 상황을 쉽게 만나게 됩니다.

예를 들어 새로운 플랫폼이나 아키텍쳐가 나왔을 때 이것을 가르쳐줄 사람이나 잘 정리한 책 같은 것이 있을 가능성은 낮습니다. 어디까지나 그런 건 어느 정도 대중화 된 이후의 일입니다. 그렇기에 개발사 등에서 제공하는 매뉴얼을 보고 독학을 해야 하는 경우를 드물지 않게 만나게 됩니다.

그렇기에 개발자는 독학에 익숙해져야 할 필요가 있습니다. 독학을 하지 못한다면 어디까지만 대중적으로 널리 쓰이기 시작해서 강의 영상과 책들이 나온 이후에야 배울 수 있을 것이고, 이는 플랫폼이나 프레임워크를 한 발 먼저 받아들임으로서 얻을 수 있는 여러 좋은 기회들을 포기 할 수 밖에 없다는 이야기가 됩니다.

뭐로 공부를 하나?

독학을 위한 수단은 과거 책이 전부였다고 해도 과언이 아니지만, 현재는 매우 다양한 도구들이 있습니다. 하지만 아직까지 일반적인 경우 책이 제일 널리 쓰이고, 그 외에 매뉴얼, 세미나/컨퍼런스, 강의 영상 등도 여전히 효과적인 수단입니다.

여러 수단 중 책을 통한 학습을 우선 추천합니다. 매뉴얼은 매우 세세하고 정확한 내용을 담고 있지만 중요도에 따른 편집이 생략된 경우가 많아 단계별 수준별 학습을 하기 어렵습니다. 세미나/컨퍼런스는 시간/공간 제약이 심하고 주제 또한 제한적일 뿐더라, 경우에 따라 큰 비용이 드는 경우도 있습니다. 온라인 아카데미나 유튜브 등을 통한 강의 영상은 접근성이 좋고 학습 이해 측면에서 좋은 점수를 줄 수 있지만, 시간 대비 학습량이 많지 않고 무엇보다 중요도에 따른 학습의 진행 완급을 조절하기 힘들다는 단점이 있습니다.

이에 반해 책은 비교적 적은 비용으로 시간과 공간의 제약이 거의 없으며, 학습 단계에 따른 진행도를 스스로 측정하기 쉽고 학습 속도의 완급 조절이 매우 쉽다는 장점이 있습니다.

책 보다 다른 것이 나은 경우

책이 학습에 좋은 도구라고 하여 무턱대고 필요한 모든 책들을 사는 것은 비용과 시간을 둘 다 비효율적입니다. 물론 금전 여유가 있으시거나 책장에 책이 가득차길 원한다면 모조리 사들이는 것도 나쁜 일은 아닙니다. :-)

가능하면 책 보다는 다른 학습 수단이 적절한 경우는 이렇습니다.

변화가 빠른 기술

어떤 기술은 매년 중요한 변경점이 일어나고 호환성이 깨지곤 합니다. 이런 기술을 다룬 책은 그 수명이 길어야 1년 이내인 경우가 대부분이고, 책의 발간에 걸리는 시간을 감안하면 책을 산지 불과 몇 달 뒤에 책 내용의 적지 않은 부분이 실제와 맞지 않는 상황이 벌어지기도 합니다.

이렇게 변화가 빠른 기술은 가능하면 매뉴얼을 통해서 습득하는 것이 좋고, 매뉴얼만으로 어렵다고 하면 보조적으로 강의 영상 등을 참고로 하면서, 인터넷에 공개된 도서의 목차 등을 참고로 하여 스스로 학습을 위한 단계를 설정해나가는 것이 적절합니다.

향후 미래가 불확실한 기술

일시적으로 유행처럼 인기를 끌었다가 몇 년 뒤에 더 나은 것으로 보이는 새 기술이 나오면 사라지는 기술들이 점점 늘어나고 있습니다. 이런 유행하는 기술을 위한 책들은 몇 년 안으로 중고책 거래도 안 되는 사장된 기술을 다루는 것이 될 가능성도 있습니다. 이 정도 비용을 투자하는 것이 경우에 따라 문제가 되지 않을 수 있겠지만, 개발자가 알아야 할 기술의 범위와 양이 늘어나는 현재 흐름 상 관련한 책들을 모조리 구매한 뒤에 몇 년 뒤 폐지로 버려야 한다면 효율적인 지출이라 말하긴 어려울 듯 합니다.

그럼 어떤 책을 사면 되나요?

빠른 기술의 변화 흐름 속에서도 오랜 시간 개발자가 항시 함께 해야하는 기술들이 있습니다. 책을 살 때는 이런 기술들을 다루는 책을 우선적으로 구매하는 것이 좋습니다.

다음 세가지 질문을 했을 때 모두 답이 ‘네’라고 나오는 책을 우선 구매하시면 됩니다.

  1. 10년 전에도 유효한 기술을 다루고 있었는가?
  2. 현재도 유효한 기술을 다루고 있는가?
  3. 10년 뒤에도 이 기술이 유효 할 것처럼 보이는가?

개발자들의 필독 추천서 목록을 보신다면 목록 속 책들의 상당수가 세가지 질문에 들어맞는다는 것 확인하실 수 있습니다.

책을 샀는데 그럼 이제 뭘 하죠?

학습하려는 주제에 맞는 책을 구입한 뒤에는 학습 계획을 세워야 합니다. 여기서 학습 계획이란 적절한 난이도별로 설정한 일종의 목표점들입니다.

예를 들어 새로운 프로그래밍 언어를 배워보겠다고 하면, 처음에 HelloWorld를 만들겠다는 목표점을 설정합니다. HelloWorld는 개발 및 빌드 환경의 설정, 프로그램의 시작과 종료, 표준 출력 등을 다루는 법을 배우기 위한 목표점입니다.

그 뒤로 제어문이나 변수 설정, 표준 라이브러리를 사용하는 법을 배우기 위한 다음 목표점을 설정하고, 그 뒤로 계속해서 본인이 바라는 수준에 다다를 때까지 단계별로 목표점을 계속 추가해 갑니다.

이는 새로운 프로그래밍 언어를 배울 때마다 반복적으로 일어나는 일이기 때문에, 미리 정리해놓고 이를 재사용 하는 것도 좋은 방법입니다. 다음은 목표점의 예시입니다.

  1. Hello World
  2. 3-6-9
  3. Guess Number
  4. Tic-Tac-Toe
  5. Snake
  6. Tetris
  7. Web Server
  8. Chat Server

책을 읽어나가면서 목표점을 개발 할 수 있을 수준까지 학습을 마치면 즉시 코딩을 시작합니다. 중간 중간 기억 안 나는 부분은 다시 책을 펴서 확인을 하면서 코딩을 하고, 필요에 따라서는 검색을 통해서 부족한 지식을 보충해도 좋습니다.

이렇게 학습과 코딩을 반복하면서 목표점을 하나씩 지워나가다 보면 전체적인 감을 어느 정도 익힐 수 있습니다. 계획했던 모든 목표점을 달성했다면, 이제 본격적으로 처음에 프로그래밍 언어를 공부해서 만들려고 했던 무언가를 만드는 작업을 시작해도 되고, 만약 그런 것이 없었다면 기존의 프로젝트를 새 프로그래밍 언어로 재개발을 해보는 작업을 시작해도 좋습니다. 특히 기존 프로젝트를 재개발 하는 방법은 코딩 이외의 요소에 대해 고민 할 거리가 적은 것이 장점입니다.

이게 끝은 아닙니다

학습을 통해 원하는 목표를 이뤘다고 해서 학습이 완전히 끝난 것은 압니다. 학습의 마무리는 언제나 ‘가르치기’로 끝내야 합니다. 그래야 학습 과정 속에서 대충 넘어갔던 부분도 좀 더 확실하게 알 수 있게 되고, 다시 한 번 반복을 통해서 머리 속에 확실히 새겨넣을 수 있습니다. 또한 훗날 잊어버리더라도 스스로에게 다시 가르칠 수도 있기에 새로 배운 것은 꼭 남에게 가르치는 것으로 마무리를 지어야 합니다.

어떻게 가르쳐야 할지 모르겠습니다

가르친다고 하면 세미나/컨퍼런스에 강연자로 나서서 발표를 하거나, 유튜브나 온라인 강의등을 통해서 직접 설명하는 것만을 떠올리는 경우가 많습니다.

하지만 처음부터 이런 방식으로 가르치는 것은 쉬운 일이 아닙니다. 그렇기 때문에 학습을 위해 단계별로 목표점을 설정했듯, 가르치는 것도 단계별로 진행하면 좀 더 쉽게 접근이 가능합니다.

  1. 블로그
  2. 소규모 세미나 (사내 / 개발자 커뮤니티)
  3. 강의 동영상 (유튜브 등)
  4. 기고
  5. 컨퍼런스
  6. 출판

가르친다고 이 모든 것을 다 할 필요는 없지만, 블로그와 소규모 세미나 발표만큼은 꼭 해야 합니다. 이 둘을 통해서 글쓰기와 발표 기술까지 동시에 훈련이 되는데, 개발자들에게 이것들 또한 필수 요소이기 때문입니다.

계속 함께 갑시다

평생 학습을 계속해야 하는 개발자의 삶은 쉬운 일이 아닙니다. 때때로 지치기도 하고 번아웃 될 때도 있습니다. 그럴 때 비록 독학을 해야 하는 상황 속에서도 서로 공부한 것을 가르치고 공유하면서 격려한다면 혼자 걷는 줄만 알았던 이 길 위에 수 많은 동료 개발자들이 함께 걸어가고 있음을 깨닫을 수 있을 것입니다.

오늘도 우리 모두 함께 걸어갑시다.