개발자스럽게 공부하는 방법

잡담

웃기라고 가볍게 쓴 것도 있는데 실제로 이렇게 공부하는 방식이 개인적으로는 도움이 많이 되었다.


1. 공부할 거리를 찾는다(혹은 해야지 생각만 하고 있던 것들을 잡는다)

나는 JAX (쉽게 설명하면 Yet Another Autodiff Framework)를 공부하고 싶었다. 좋아보이는데 쓸 기회가 없었다. 간지나보이긴 하는데 써 본적이 없는 상황이 1년 정도 되었던 것 같은데, 마침 시간도 남아서 공부하기로 했다.

2. 공부하고 싶은 걸 가져다 쓰는 오픈소스 프로젝트 중에서 너무 크지 않고 너무 작지도 않은 걸 찾는다.

나는 jaxopt 이 라이브러리를 선택했다.

예전에 한 번 본 적 있는 라이브러리라, 도움이 될 것 같았다. 주의할 것이 있는데 너무 작거나 큰 프로젝트는 피하는 것이다. 너무 큰 프로젝트는 추상화가 잘 되어 있고 리팩토링 수준도 높아서 나같은 뉴비가 따라해볼 만한 건 남아있지 않다. 너무 작은 프로젝트는 내가 PR 날렸을때 내 코드를 읽어 줄 사람이 없다는 단점이 있다.

3. PR을 읽어보고 따라해볼만한 걸 찾는다

1

저 코드를 조금 살펴보고 난 뒤에, 저걸 바탕으로 Fletcher-Reeves 알고리즘을 구현하기로 결정했다. 여기까진 만만해 보인다. 왠지 할만해보여서 비슷한 거 해볼 수 있을 거 같았다. 해보기 전까지는…

4. 대가리 깨지며 비슷한 걸 만든다

1 일단 머리가 아프고 이해가 안 가고 막 짜증이 나는데, 이 와중에 JAX의 대략적인 흐름이 이해가 가기 시작하고… 예시도 실제로 쳐보고… 펜도 꺼내서 이것저것 노트에 이것저것 써 보고… 한다. 이 과정에서 공식 문서를 읽거나 예제를 따라하는 것만으로는 이해가 안 가는 것들이 슬슬 이해가 되기 시작한다다. 예를 들어서, JAX의 Pytrees 개념이 문서만 읽어서는 잘 이해가 안 됬는데(실제로 연산이 어떻게 동작하는지 이런 부분들), tree_div 얘의 아빠(상속된 함수나, 원래 함수의 정의)의 아빠…를 살펴보다가 이해가 가기 시작했다.

다른 식으로 얘기하면, 내 머리는 추상적인 상황에서 예시를 만들 정도로 똑똑하진 않은데 이 과정에서 구체적인 예시가 많이 나와 이해에 도움을 주는 것 같다.

5. PR을 날린다

1

이때 기분 젤 좋음.

6. 좀있으면 나보다 똑똑한 아조씨들이 JAX 가르쳐주러 와서 이거 잘못됬다 이거 고쳐라 해주면 고친다.

(복습에 숙제까지 일석이조 ㅆㅅㅌㅊ 천재적방법…)

https://github.com/google/jaxopt/pull/142

학생일 땐 리뷰를 아예 받을 수 없어서, 받는 것 자체가 좋은 경험이었다. 지금은 코드 리뷰 해줄 사람이 있긴 하지만, 그래도 상당히 높은 수준의 코드 리뷰를 받을 수 있는 건 역시 좋은 일이다. 느낀 점으로는, 어떤 프로젝트들은 모르겠지만, 어떤 프로젝트는 기준이 내가 불가능할 정도로 높은 기준을 요구하지 않는다는 사실을 알 수 있었다. 이것도 사람이 하는 일이니까… 아닐까?

(나중에 듣기로는 엔드유저가 직접 쓰는 프로덕트나, 하드웨어와 관련된 건 리뷰가 더 빡빡하다고 한다.)

나보다 똑똑한 아조씨들이 지적하는 대로 고치고, 내 의견도 얘기해보고 하다 보면 코드가 이뻐지게 된다. 그리고 대체로 내가 몰랐던 걸 배울 수 있다. 예를 들면, 이번엔 Sphinx의 사용 방법을 배우게 되었다. 그러다 보면 머지가 된다.

1

7. 드는 생각.

프로그래밍 언어를 공부할 때, 나는 아주 간단한 예시 (공식 홈페이지 예시에 있을 법 한)는 좋아하지만, 프로그래밍 언어나 프레임워크 관련 책 챕터 뒤에 있을 법한 연습 문제는 싫어한다. 어려워서..가 아니라, 별로 현실성이 없는 문제를 위한 문제들이 주어지기 때문이다.

비슷한 취지에서, (무언가를 공부하기 위한) 토이 프로젝트도 그다지 좋아하지 않는다. 토이 프로젝트를 간혹 실제 프로젝트/사업화 하는 사람들도 있지만 나 같은 사람은 대충 몇 번 해보다가 그리고 적당히 만들어 놓고 더 이상 건드리지 않기 때는다. 내가 토이 프로젝트를 하면 프로젝트를 위한 프로젝트가 되어서 별로 좋아하지 않는다.

근데 오픈소스는 현실성이 넘치는 적절한 난이도의 연습 문제를 제공해준다. 그리고 이런 문제는 인터넷에 널려 있다. 그리고 하면 누가 고마워하므로, 그리고 아마 누가 쓰므로 세상에 도움이 될 지도 모른다. 경험이 많은 훌륭한 프로그래머의 리뷰를 받을 수 있다는 것도 큰 장점이다.

다만, 단점은 배경지식이 전혀 없는 분야는 이렇게 공부하기를 아예 시도할 수 없다는 점이 있다.

5 그리고 그냥 이런 뱃지는 좀 간지난다.

PREVIOUSReverse Maximum Inner Product Search
NEXT친숙함에 관해, 혹은 수학 우물을 피하는 방법에 대해