이번 여름방학에 오클랜드 대학교에서 경제학과의 연구 장학프로그램을 했다. 연구 장학프로그램이란 학생들이 대학원이나 Honours같은 연구를 하길 원하거나 관심있는 사람들이 지원해서 여름방학(10주)동안 교수와 함께 연구를 진행하는 것이다. 대학교에서 직접 학생에게 $6,000불을 지급해서 교수들도 부담되지 않게 연구를 보조해 줄 사람을 뽑는 것이니, 교수한테나 나에게 모두 윈윈이다.
나에게 지정된 교수는 Debasis라는 교수님인데, 거시경제학(Macroeconomics)로 꽤 이름이 나있으신 분이다. 우리 연구 프로젝트의 목적은 MATLAB을 사용해서 교수가 이미 발표한 논문에 만들어 놓은 수학적 모형을 사용해서 외부 변수를 변화시켜서 9개의 내부변수들이 어떻게 변화하는지 확인하는 것이다. 예를들면 delta라는 외부변수는 likelyhood of man being reported to police인데, 이 변수를 변화시키면서 probability of crime against women, bargaining power of women, consumption of male/women, probability of battering등등 여러가지 내부변수의 값들이 어떻게 변하는지 볼 수 있는 것이다. MATLAB이 필요한 이유는 내부변수들의 값이 정해질 때 여러가지 조건들이 들어가고, 또 그래프로 보면 한눈에 내부변수들이 외부변수의 변화에 따라 어떻게 변하는지 볼 수 있기 때문이다.
아무래도 가장 가치있다고 생각했던 부분은 경제학 분야에서 경제학 모델이 어떻게 세워지는지, 또 그것이 어떻게 전개되고, 어떠한 질문들을 하며 어떠한 답을 내려고 하는지를 볼 수 있었다는 부분이다. 또한 어떤 수학적인 전개 방식을 컴퓨터 스크립트로서 짜내는 경험을 한 것도 새로웠다. 또 이런 시뮬레이션의 특성상 행렬을 많이 다룰 수 밖에 없었는데, Vectorisation을 통해서 계산 시간을 효율적으로 만드는 작업이 얼마나 중요한지 배울 수 있었다. 또한 MATLAB이란 언어의 특성상 프로그램 구조가 declarative하게 짜져서, 자칫하면 반복적인 부분들이 생기고, 프로그램도 너무 커질 수가 있었다 (OOP방식으로 접근하기에 너무 어렵게 되어있음). 처음엔 Java를 쓴 사람으로서 여러 파일들로 분산시켰지만, 결국 프로그램 로직 자체가 분산되어있으면 교수의 요구가 달라질 때 마다 코드를 변경하는데 시간이 많이 걸리고 에러가 날 수 밖에 없었다. 그래서 어떤 문제를 처음 접했을 때는 그냥 아무리 반복적으로 적는게 많아지더라도 한 파일로 프로그램을 짜는게 중요하다는걸 절실하게 느꼈다. 그리고 나서 전체적으로 윤곽이 잡히면 refactoring을 하는 것이다.
또 여러가지를 느꼈는데
- 프로그램의 로직이 너무 크고, 그리고 프로그램의 언어가 익숙하지 않다면, 일단 로직을 잘게잘게 자른뒤, 한 세그먼트 씩 가장 쉬운 예제를 만들어서 먼저 작은 프로그램을 만들어 보는 것이다. 2 by 2 non linear equation을 numerical하게 해를 구하려면 먼저 Function handler를 어떻게 구현하는지, 그리고 그 function handler를 fsolve에 넣었을때 해가 여러게 있다면 어떻게 처리하는지, 그런 것들을 하나하나 차근차근 짚고 넘어가다보면 결국 퍼즐이 하나하나 맞춰지듯이 더 큰 그림을 그릴 수 있는 도구들의 집합이 완성되는 것이다.
- 프로그래밍을 잘 모르는 사람과 협업할 때는, 결국 지금 해야하는 작업에 대해서 그 사람이 이해하는 것과 배경지식을 내가 이해하면 이해할 수록 더 프로그램을 잘 짤 수 있다. 프로그램을 돌려본 뒤, 교수가 예상하던 결과가 나오지 않는다고 하는데, 교수는 그럴만한 수학적 이유가 있는 것이다. 처음엔 이런 수학적 이유를 내가 알 필요 없다고 생각하고 그냥 태스크 주는대로 프로그램만 짰다. 하지만 계속 기대하던 결과들이 나오지 않자, 수학적 배경을 차근차근 짚어 나갔다. 그러고 봤더니 내 프로그램에도 여러가지 구멍들이 있었다는 걸 볼 수 있었다. 그리고 좀 더 유기적으로 프로그램을 이해하기 때문에 프로그램을 더 선명하게 짤 수 있었다. 원하지 않는 결과가 나오지 않는 것들은 중간중간에 console 아웃풋을 달아 확인해 보며 어느부분이 오류가 있는지 확인해서 더 robust한 프로그램을 짤 수 있었다.
'Archive until 15 Jul 2021 > Writing' 카테고리의 다른 글
도와주는 것에 대해서 (0) | 2021.06.13 |
---|---|
직장생활에서 초보 인턴이 살아남는 법 (0) | 2021.01.14 |
교수님과 미팅 전. (0) | 2021.01.14 |