brunch

You can make anything
by writing

C.S.Lewis

by 퀀트대디 Jan 25. 2024

퀀트의 공부법 #3.

# 2편에 이어

논문을 읽는 것이 그저 읽는데서만 끝난다면 이는 제대로 된 공부라 할 수 없다. 공부는 결국 어떤 지식을 실제로 활용할 때만이 진정한 공부가 된다. 자기계발서를 읽는 것도 실천하지 않고 그저 읽기만 한다면 한낱 찰나의 자위에 불과하듯이 지식도 그것을 반드시 써먹어야만 비로소 살아있는 지식이 될 수 있다. 따라서 논문을 읽고 이해를 했다면, 이제 해야 할 일은 바로 그러한 추상적인 개념을 구체적인 것으로 변환하는 일이다. 퀀트의 영역에서는 이것을 구현이라 부른다.



# 구현을 한다는 것의 진정한 의미

구현(Implementation)은 머릿속에 들어 있던 심상을 세상 밖으로 끄집어내는 활동을 의미한다. 이러한 구현을 가능케하는 퀀트의 도구는 프로그래밍, 즉 코드를 치는 일이다. 


하지만 여기서 말하는 구현이 단순히 앵무새처럼 손으로만 코드를 따라치는 것을 의미하지는 않는다. 그보다는 구현은 코드가 내가 원하는 작동을 할 수 있도록 머릿속으로 그 구조를 구상해 보는 것에서 시작한다. 이미 나와있는 코드를 따라치며 똑같은 결과물을 얻는 것은 무의미한 행동이다. 왜냐하면 종국엔 내가 나만의 프로젝트를 처음부터 끝까지 완성할 수 있어야 하기 때문이다.


또한 구현의 기본은 함수, 즉 입출력 관계를 이해하는 것에서 출발한다. 이러한 입출력 관계를 구상하고 이해하는 것이 효과적인 이유는 그 값들을 임의로 바꿔보며 함수의 기능을 유추하고 나아가 이론적 기법이 과연 어떻게 작동하는지를 이해할 수 있기 때문이다. 나아가 좋은 코드는 효율적으로 설계된 입출력 관계들의 연결이다. 실무에 들어가게 되면 스스로 이러한 계층적 구조를 구성할 줄 아는 사고력이 필요하다. 그렇기에 무턱대고 코드만 베끼는 방식은 절대로 좋은 방법이 아니다. 한 편의 글을 쓰기 전에 머릿 속으로 미리 생각을 어느 정도 해놓고 키보드는 그저 그 생각을 받아적는 것처럼 구현 또한 중요한 프로세스는 모두 먼저 머릿 속에서 일어나야 한다.



# 문과에게 필요한 '코딩 수학' 공부

특히나 구현을 시도할 때 항상 염두에 두어야 할 것은 수식과 같은 수학적인 요소들을 어떻게 구현할 것인가, 그리고 각 코드는 그러한 수학적 개념들과 어떤 관계를 맺고 있는가를 이해하는 일이다. 그렇기에 이러한 구현에 대한 연습은 다소 수학적 기반이 약한 문과생들에게 큰 도움이 된다. 


왜냐하면 결국 구현의 영역에서 실제 계산을 하기 위해서는 고등 수학처럼 어떤 어려운 개념을 함축적인 수식으로 묘사하는 것과는 반대로 계산의 세세한 과정들을 사칙연산의 다발들로 전부 쪼개어 펼쳐놓아야 하기 때문이다. 따라서 어떤 수학적 개념을 구현한 코드 블럭을 한 줄 한 줄씩 분석해나감으로써 수학적 개념을 보다 깊이 이해할 수 있다.


numpy, scipy, simpy 같은 파이썬 패키지들은 수학적 연산에 특화되어 있는 패키지들인데, 사실 이러한 패키지들은 구현도 구현이지만 수학 공부를 위한 최고의 도구이다. 퀀트에게 필요한 선형대수, 미적분, 확률통계에 관한 구현 요소들을 두루 갖추고 있기 때문에, 만약 리버스 엔지니어링을 통해 이 패키지들의 작동 원리를 이해한다면 그와 상응하는 수학적 개념 또한 내 것으로 만들 수 있다.


또한 구현을 통한 수학 공부를 추천하는 이유는 수학적 계산의 결과를 즉각적으로 시각화해 직관적인 이해를 가능케 하기 때문이다. 지면 상에 그저 수식으로만 존재하는 수학 문제는 우리에게 그렇게 크게 와닿지 않는다. 하지만 똑같은 개념이라도 그건을 2차원 혹은 3차원의 시각적 요소들로 표현해 본다면 그 느낌은 분명 다르다. 입력 변수의 변화와 매개 변수의 변화에 따른 결과의 변화를 추적하다 보면 어느새 그 개념을 전혀 부담스러워하지 않는 자신을 발견할 수 있다.


이산화(Discretization)는 이에 관한 대표적인 예시다. 수학의 세상에서는 개념을 매끄럽고 연속적인 형태로 표현할 수 있지만, 실제 세상은 너무나도 이산적이다. 따라서 구현의 세계로 넘어올 때 우리는 이러한 차이를 인식하고 둘 간의 괴리를 가장 최소화시킬 수 있는 방법을 모색해야 한다. 따라서 에셔의 도마뱀처럼 퀀트라면 이론과 구현의 세계를 자유로이 넘나들 수 있어야 한다. 이론을 구현하고 또 그 구현이 새로운 이론에 영감을 주는 과정을 끊임없이 반복하며 모델은 발전하고 퀀트 비즈니스의 토대는 성장한다.



# 매도 먼저 맞는 게 나은 것처럼

마지막으로 구현 능력, 다시 말해 프로그래밍 스킬을 향상시킬 수 있는 가장 효과적인 방법은 현재 내가 구현해 보고 싶은 문제 혹은 프로젝트에 곧바로 뛰어드는 것이다. 왜냐하면 프로그래밍은 결국 언어, 나아가서는 도구를 활용하는 방법이기 때문에 현재 내가 관심을 가지고 있는 문제에 이걸 곧바로 적용해 보는 것이 그 학습 의지를 지속시킬 수 있는 방법이기 때문이다. 어떤 분야던지 흥미가 없다면 학습을 지속할 수 없다. 프로그래밍도 마찬가지다. 


따라서 print("Hello, World") 같은 프로그래밍 언어의 기초를 배우는 짓은 최대한 짧은 시간 내에 마무리하고 바로 본격적인 문제 해결 과정에 뛰어들어야 한다. 프로그래밍을 기초부터 차근차근 배우겠다는 생각은 마치 영어를 커리큘럼에 따라 기초부터 배우는 생각과 비슷하다. 하지만 영어를 빠르게 배우는 가장 좋은 방법은 다소 서툴더라도 바로 그 환경 속으로 다이빙을 하는 것이다. 설사 그 과정이 조금 불안하고 두려울지라도.


프로그래밍 언어를 배우는 것 또한 마찬가지다. 원래 코딩을 배운다는 것은 앞으로 수없이 쏟아져 나올 에러를 마주하며 끝없는 구글링을 통해 그것들을 하나씩 디버깅해나가는 지난한 과정이다. 에러 없이 한 번에 완벽한 코드를 만들겠다는 말은 마치 이론으로만 빠삭하게 영어를 공부한 후 원어민과 유창한 프리토킹을 하겠다는 말과 같다. 결국 배움의 왕도는 부딪혀보고 깨져보는 것이다. 그 시기는 빠르면 빠를수록 좋다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari