나는 보통 재능이나 공부의 양으로 친구들의 성장 속도를 따라가기 힘들었다. 그래서 '무작정 열심히'보단, '의식적인 연습'을 지속해 나가야 했다. 이득충이 되는 방향으로 공부를 하다 보니까, 내가 어떤 방식으로 공부를 하는 지 어느 정도 정리가 됐다. velog의 독자들은 '경험기'같은 글에 니즈가 꽤 있는 것 같아서, 부족하지만 내 공부를 위한 매개체들을 쭉 소개하고, 내가 어떻게 공부하는지를 짧게 이야기하고자 한다.

지식을 전달하는 책은 목차를 위주로

나는 취사선택을 좋아한다. 그냥 SQL UNION 쿼리를 주제로 다룬 아티클만 해도, 온/오프라인에 셀 수 없이 많다. 책을 대하는 태도도 비슷한데, 아무리 유명하고 좋은 책이라고 해도 나랑 안 맞으면 그만이다. 그리고 보통 지식을 전달하는 내용이 위주인 책은, 목차만 보고 그대로 구글링해서 공부하는 편이 취사선택에 유리했다. 'SQL 첫걸음'이라는 책을 읽었을 때 효율이 좋았다. 새로운 걸 공부할 때마다 이 방법을 사용한다.

단, 희귀한 주제의 책에는 적용하기 어려운 경우가 조금 있었다. 경험적으로는, '프로그래밍 언어론', '객체지향의 사실과 오해'가 그랬다.

그냥 재밌는 토픽은 밤마다 읽자

리팩토링, SQL Antipatterns, 알고리즘 도감처럼 그냥 재밌어 보이는 주제를 다루는 책은 밤마다 심심풀이로 읽기 좋았다. 엔지니어링 쪽은 보통 제목이 재밌으면 내용도 재밌는 경우가 많아서, 굳이 이리저리 조사하지 않고 그냥 사는 편이다.

온라인

Stackoverflow

주니어 입장에서 stackoverflow는 그냥 '모르는 거 생기면 다 해결할 수 있는 곳'이다. 그만큼 지식이 많은 곳이라, 내가 좋아하는 태그 몇 개 가지고 가끔가다 한 번씩 검색해 본다. 나도 답변할 수 있을만한 질문이 올라오면 종종 답변을 달기도 한다. 영어로 뭔가를 설명하는 것도 정말 좋은 경험이다. 습관적으로 들어가진 않고, 어쩌다 생각날 때 한 번씩 들어가 본다.

Reddit

프로그래밍 서브레딧에 정말 재밌는 글이 많이 올라온다. 프로그래밍이라는 카테고리도 주제가 굉장히 광범위해서, 특별히 어떤 지식을 얻기 위해서 보기보단 이런저런 요즘의 기술 이야기들을 보기 좋다. 출퇴근 길이나 식당에서 밥 기다릴 때 페이스북 대신 하는 느낌으로 들어가 본다.

유튜브

유튜브에는 개발을 주제로 한 유튜브 채널들이 생각보다 꽤 많다. 나는 Engineer ManNomad Coders라는 채널을 구독하고 있다. 유튜브라는 플랫폼의 특성 상 파이썬으로 5분만에 스네이크 게임 만들기같은 재밌는 챌린지들로 영상을 올리곤 한다. 어차피 자기 전이나 일 하다가 쉴 때마다 게임영상 보러 유튜브에 들어가는 거, 이런 것들도 한 번씩 섞어서 본다. 영어 리스닝에 도움이 되기도 하고, 그냥 한 번 보기 시작하면 재밌게 봐진다.

Velog

velog도 정말 여러 분야의 글이 한 곳에 모이는 플랫폼이며, 아두이노를 이용한 사볼콘 제작기같이 재밌고 말랑말랑한 주제의 글이 트렌딩에 올라 잘 대우받는 곳이라서 reddit처럼 sns 하듯이 읽기 좋다. 좋은 글을 찾는 것에 대해 비용이 정말 적게 소모돼서 좋은 것 같다. 가끔 글 쓰러 들어올 때, 트렌딩에 올라와있는 글 몇 개씩 읽곤 한다.

44bits.io

프로그래밍과 클라우드 관련 글들이 올라온다. 좋은 글을 써낼 수만 있으면 누구나 기고할 수 있는 형태인 것 같다. 백엔드 편향적인 지식을 원하는 내게는 정말 그냥 필독 수준의 블로그다. AWS VPC, Docker, Terraform같이 이미 잘 쓰여진 글이 많은 주제를 가지고, 그들보다 훨씬 더 잘 써낸다. 글 올라오면 그냥 무조건 읽는다.

feedly에 개인 블로그들 rss 모아놓기

feedly는 rss 주소들을 넣어두면 그걸 계속 조회해서 최신 글 같은 것들을 정리해주는 툴이다. 나는 좋은 개인 블로그가 보이면 rss 주소 얻어서 여기다 모아둔다. medium같은 데서 유저 팔로우하는 것과 비슷한 논리다.

코드와 관련된 것들

미니 프로젝트

공부하고 싶거나, 만들고 싶은 게 생겼을 때 '해야지'하고 미루면 끝도 없다. 떠오르는 게 있으면 바로 미니 프로젝트를 해보는 편이다. 파이썬으로 스네이크 게임 만들기, Play 스토어 크롤러 만들기, Django로 게시판 서비스 API 만들어보기, Flutter로 조그만 가계부 만들어보기 등이 그 예다. 지식의 범위를 넓히는 데에 도움이 많이 된다. 모든 개체를 판단할 때는 그 개체를 공부해야 하므로, 좀 더 잘 알고 깝치기 위함이다.

클론 코딩

이미 나와 있는 서비스의 기획과 디자인을 베끼고, 구현은 내가 직접 하는 것을 클론 코딩이라고 부른다. 결과물을 알고 있는 상태에서, 어떻게 개발되었는지는 모르니 내가 여태껏 배웠던 스킬들을 점검하기에 정말 좋다. 넷플릭스를 클론코딩하는 과정에서 동영상 스트리밍을 MPEG-DASH로 구현했다고 치면, 내가 찾아낸 방법과 넷플릭스 팀이 찾은 방법은 아마 다르겠지만 나만의 방법을 찾아서 결과물을 만들었다는 걸 매우 보람차할 것이다. 나는 클론 코딩을 할 때, 정말 빡센 서비스 하나 잡아서 나를 많이 힘들게 만드는 편이다.

클론 코딩은 정말 실용적인 프로그래밍 공부 방법이라고 생각한다. 그러나 한 번 시작하고 나면 잘 끝내야 효과가 있고, 그렇게 되기까지 소모되는 자원이 많으므로 6개월에 한 번, 작업 시간 200시간 미만 정도의 서비스를 잡아서 해보는 정도다.

코드 리딩

당장 뭔가를 해결해야 하는 상황에서는, 라이브러리를 아무 생각 없이 가져다 쓸 때가 많다. 그러다가 튜토리얼 몇 번 보고 나서는 '항상 쓰는 라이브러리'로 굳혀지는 경우가 많았는데, 에러를 아무리 검색해도 안 나와서 디버깅을 걸고 라이브러리의 코드를 따라갔던 것을 시작으로 코드 리딩을 하기 시작했다. 보통 star 많은 라이브러리는 좋은 설계와 코드 베이스를 가지고 있어서 배울 점이 정말 많다. 가끔 아무 것도 하기 싫을 때, 에디터 열어 놓고 대충 자주 쓰는 라이브러리 끌어다가 코드 쳐다보는 시간을 가진다.

정리

글 쓰기

블로그를 처음 시작했을 때는, 1일 1글이고 튜토리얼이고 하며 괜히 진부한 주제에다 글을 더 잘 써보려고 용쓰다가 시간 낭비를 너무 했었다. 예로, 파이썬에서 for문 다루는 건 10분이면 정리할 수 있는데, 그걸 글로 옮기려고 5~6시간을 썼으니 말이다. 게다가 그렇게 시간을 많이 쏟아도, 똑같은 내용을 더 잘 설명한 글은 차고 넘쳤다.

반대로 지금은 정말로 '글로 써야겠다'싶은 주제가 생각났을 때만 글을 쓰고 있다. 예로 얼마 전에는 파이썬으로 URL 가지고 놀기라는 3편짜리 글을 쓰며, URL에 밀접한 관계가 있는 기능을 리팩토링하며 얻게 된 지식들을 정리할 수 있어서 좋았다.

선천적으로 글을 잘 쓰는 사람이 아니고서야, 적은 시간 내에 좋은 글을 쓰는 건 정말 오랜 시간동안 단련이 되어야 한다. 따라서, 글을 쓰는 건 보통 투자한 시간에 비해 공부의 양이 적다고 생각한다. '진짜 이 글은 써보고 싶다'라는 생각이 들기 전에는 굳이 실행에 옮기지 않는 편이다.

삽질 정리

개발과 관련된 작업을 진행하다 보면 필연적으로 삽질을 한다. 그럴 때마다 그 주제들을 따로 어딘가에 적어두고, 자유시간이 있을 때 그들을 정리하는 편이다. 주제에 대해 좋은 글을 찾고, 읽고, 글 링크와 함께 한두 문장으로 내용을 정리한다. 삽질한 게 없으면 그냥 평소에 알고 싶었던 주제들을 공부해서 정리한다. 그렇게 만들어진 게 Let's Study라는 저장소다. 나만의 TIL이라고도 할 수 있겠다.

내가 공부를 지속하는 방법

나는 챌린지 설정 - 공부 - 챌린지 수행 - 피드백 - 휴식 사이클을 짧게는 반년, 길게는 1년 정도마다 반복한다.

  • 챌린지 설정 : 이번 사이클에서 할만한 챌린지를 설정한다. 'React를 공부해서 풀스택으로 인스타그램을 클론코딩 한다.'가 그 예고, 나는 보통 적당히 큼지막한 서비스의 클론 코딩을 챌린지로 잡는다.
  • 공부 : 챌린지를 더 잘 수행하기 위해 위해 필요한 지식 쌓기. 미니 프로젝트 진행, 책, 관련 글, 튜토리얼 읽어보기 등등. 'velog 클론코딩', '미니 인스타그램 만들기'처럼 챌린지와 연관된 미니 프로젝트를 위주로 한다. 메인퀘스트 진행하기 전에 서브퀘스트로 경험치 채우는 느낌?
  • 챌린지 수행 : 설정해 둔 챌린지 수행. 마음에 들 때까지 이 단계에서 계속 머물러 있는다.
  • 피드백 : 프로젝트를 진행하며 새롭게 알게 된 것을 GitHub이나 블로그에 글로 정리하고, 내 구현을 리뷰받기
  • 휴식 : 회사 밖에서는 마치 코딩이 단지 취미인 사람인 것처럼 살기. 길면 2~3달 씩도 쉬어준다. 지치지 않기 위한 번아웃 조절이고, 뒤처지면 안 되니 reddit과 44bits.io에 올라오는 건 계속 읽어준다.

또한 이 사이클은 평소의 생활과 완전히 단절되어야 한다는 규칙을 만들어서 지키고 있다. '학교 다니느라, 프로젝트 하느라 못 한다'라는 핑계를 대지 않기 위함이다. 학교 다니면서 프로젝트 하느라 바쁠 때는 그 만큼 사이클의 유지 시간을 길게 뒀고, 반대로 방학 기간이어서 쉴 때는 투자할 수 있는 시간이 많으므로 그 동안 사이클 하나를 돌리기도 했었다. 지금 나는 저 사이클 중 휴식 단계에 있다.