DS용 코딩에 대한 바른 이해 – Scientific programming이란?

pabii research

우리 대학원에 대한 여러 공격 중에

수학 잘해봐야 무슨 소용있어요? 어차피 코드 못치면 꽝인데?

라는 개발자 출신의 자기합리화가 묻어나는 비판이 있다.

 

이런식으로 우리 대학원을 욕하는 사람들은 크게 2 가지 특징을 갖고 있다.

  • 우리가 말하는 코딩을 이해 못한다
  • 우리가 말하는 수학을 이해 못한다

한국의 교육 구조상 수학은 증명이거나 계산이고, 코딩은 개발이라고 생각하는게 일반적이라는 걸 알고 있고,

그런 잘못된 교육 때문에 편협한 사고를 갖고 그릇된 편견으로 우리 대학원을 잘못 판단하고 있다는 것도 안다.

 

우리가 말하는 수학과 코딩이라는게, 특정 현상을 설명하기 위한 수학/통계학 기반 모델과, 그걸 풀어내는 코딩인데

이걸 이해하고 나면, 사실 수학과 코딩이 하나의 지식을 표현하는 2가지 방법이라는걸 공감할텐데… 벽치기를 계속하니 좀 답답하다.

 

1. 우리가 말하는 코딩

이게 개발자들이 하고 있는 코딩과 연구자들이 하는 코딩이

완전히 다른 내용을 다루고, 완전히 다른 목적을 갖고 있다는 사실을

전혀 이해 못하기 때문에 나오는 잘못된 비판인데,

하나의 예시를 들어보자.

 

개발자들의 코딩

  • 첫 화면에 들어오면 배너를 띄우고
  • 배너 위의 특정 지점 (X로 디자인 붙여넣은) 을 누르면 배너를 지우고
  • 화면의 특정 위치 (글 제목) 를 클릭하면
  • 해당 위치에 링크가 걸린 정보를 띄우기 위해
  • 데이터 베이스(DB)에 정보를 요청하고
  • DB에서는 그 콜에 맞춰 DB속의 정보를 전달해주고,
  • 화면에는 정해진 규약에 맞춘 포맷으로 DB 속의 정보를 보여준다

이런 작업들을 아마 프론트엔드, 백엔드 개발자들이 코드로 구현을 해 놓을 것이다.

결과값이 이상하게 나오면, 디버깅을 해서, 백엔드에서 제대로 값을 보내주고 있는지,

프론트에서 받아온 정보를 제대로 화면에 띄우고 있는지,

화면 구현할 때 좌표값을 잘 배정했는지 같은 내용을 확인해보겠지.

 

연구자들의 코딩

  • N차원의 Column vector들에 대한 데이터 값이 M개의 열이 있는데,
  • 해당 데이터가 만들어내는 Vector space를 가정하고,
  • 그 중 (X,Y, Z)라는 조건을 만족시키는 Sub-space를 뽑아내는 작업을 표준화하기 위해서
  • (X, Y, Z)에 대해서 Integral out하는 코드 라인을 추가하고,
  • 결과값이 0 벡터가 나왔을 때를 대비해서 오류에 대한 보정을 해 주고,
  • Sub-space가 N-3 차원일 때 우리가 목적하는 (A, B)값들을 뽑아 그래프로 그려낸다

그런데, 내가 원하는 결과값이 안 나와서,

조건을 거는 방식을 제대로 잡았는지 다시 원래의 수식으로 돌아가보니,

이 문제는 Integral out해서 변수를 없애는게 아니라,

(X, Y, Z) 축에 영향을 받는 부분들을 잡아내는게 맞기 때문에,

편미분으로 계산 방식을 바꾼다.

(아래 그림은 전형적인 Scientific coding의 결과물이다.)

Software engineering vs. Scientific research

개발자들과 연구자들은 위에서 보듯이 코드로 하는 일이 다르다.

학부 CS 공부를하고 개발자로 직장을 찾은 사람들이 코딩을 잘 한다는건 논리에 맞춰 상용 프로그램을 효율적으로 잘 만든다는 이야기고,

연구자가 코딩을 잘 한다는건, 수학식으로 풀어낸 문제를 무조건 코드로 바꾸는게 아니라, 재사용하기 좋도록 정리한다는 뜻이다.

엄밀히 따지면, 두 작업 모두 난잡하게 써 놓은 글을 일목요연하게 정리하는 작업과 유사한데,

그 때 다루는 내용이 웹/앱 같은 서비스용 프로그램이냐, 수학/통계학 기반의 연구 지식용 프로그램이냐의 차이일 뿐이다.

그동안 파비블로그에서는 (Software) Engineering Programming vs. Scientific Programming 이라고 표현해 왔다.

 

경험상, 기업 업무에서 언어를 잘 구사한다는건 글이 화려한게 아니라 일목요연하게, 짧은 단어로 핵심 메세지를 잘 전달하는 능력인데

(물론 다른 용도에서는 다른 능력이 더 인정 받을 수 있음을 인정한다.)

양쪽 모두의 코딩 작업에서도 추상화를 통해 반복 업무를 줄이고, 간결한 코드를 치는걸 높게 평가하더라.

쉬운 예시로, 양쪽 모두 무식하게 For-loop만 여러차례 nested 형태로 집어넣는걸 안 좋게 평가한다.

컴퓨터 시스템 설계 자체가 그런 방식의 계산을 지원하지 않기 때문에, 쓸데없는 계산비용을 낭비하기 때문이다.

 

그런 몇몇 공통점에 대해서는 CS쪽의 교육이 필요하다는 것에 동의하지만,

그 외의 다른 부분에 까지 CS 관점에서의 코딩 테스트가 DS전문 인력들에게 반드시 필요한지 납득하기 어렵다.

위에서 보다시피, 수학적인 이해도가 잘못되면 미분해야될 자리에 적분하고 있는 상황이 벌어지는 걸 막으려면,

수학 실력을 테스트하는게 맞다.

 

다른 훈련, 다른 직장

이렇게 다른 훈련을 받기 때문에, 당연히 자기 능력을 살리려면 다른 종류의 업무, 다른 종류의 직장을 가야한다.

한국 사회에서 만나는 많은 기업들이 Data Science 전공자에게 CS 학부 출신에게 주는 것 같은 개발자용 코딩 테스트를 시키더라.

인터넷 커뮤니티들에서는 개발자용 코딩 테스트를 밟는 것을 당연하게 생각하는 CS 학부 출신들이

마치 Data Science는 (개발자용) 코딩만 잘 하면 되는 것처럼 오도하는 메세지를 곳곳에 뿌려놓은 걸 볼 수 있다.

 

단지 코드 작업이 들어간다는 이유로 무조건 CS라고 착각들을 하기 때문일 것이다.

그러나, CS는 코딩을 독점하는 전공이 아니다.

굳이 따지자면 개발자용 코딩을 독점하실 수는 있겠지.

 

Scientific coding 리그에서 CS는 그냥 One of them일 뿐이다.

제대로 돌아가는 전공이면, Scientific coding을 가르치려고 CS 출신을 불러오는게 아니라,

자기 전공 출신들이 강의에 필요한 알고리즘을 짜고, 그걸 수업 중에 가르치고 끝난다.

난 여태 한번도 CS출신에게 (Scientific) Coding 강의를 들은 적이 없다.

 

학부 계량경제학 시간에 CS학부 출신 경제학 석사하시던 조교 분이

(딱 그 해에 그 분을 제외하고는 계량경제학 조교를 타 과 출신이 했던 경우는 없었던 걸로 안다.)

Matlab 이용한 숙제에 뭐라고 질문하면 RTFM (Read-The-Fxxxin-Manual)이라고 자동 응답 메일 보내던 건 기억난다ㅋ

컴퓨터의 계산구조, DB구조 같은 개념은 당연히 CS 강의에서 배워야되는 지식이겠지만,

당시 우리에게는 필요없는 지식이었고,

경제학 같은 응용 수학, 응용 통계학 문제 풀이용 Coding이라는 경험치는 전공 수업의 조교에게서가 아니라,

“구글링으로 배우는거다” 라고 알려주신 거겠지.

 

코딩은 CS의 전유물이라는 황당한 생각을 버려야 내 관점을, 아니 Scientific coding 하는 사람들의 관점을 이해할 수 있을 것이다.

 

 

2. 우리가 말하는 수학

수학 잘해봐야 무슨 소용있어요? 어차피 코드 못치면 꽝인데?

수학/통계학 계속 강조하면

  • 수학과에서 하던 증명들 달달 외워서 시험치는 것 같은 편협한 사고
  • 또는 공학에서 하는 것처럼 계산만 죽어라 하는 것 같은 편협한 사고를

갖고 있는 분들이 수학이 왜 중요한지 납득할 수 없다는 식으로 반박한다.

 

좀 미안한 말인데, 수학을 완전히 잘못 이해했기 때문에 그렇게 곡해하는거다.

수학은 세상을 표현하는 (특수 기호로 표현되는) 언어다.

외계어학과라는 농담으로 불리는 수학과에서는 학부시절 그 언어의 사용법을 배우고,

대학원에서는 그 언어를 이용해서 자연의 질서를 찾아내는 연구한다.

우리는, 아마 거의 대부분의 응용 수학 (&응용 통계학)을 하는 전공들은,

그 언어를 이용해서 현실의 문제를 잡아내고, 수학/통계학 논리를 이용해서 문제를 풀어낸다.

 

우리 대학원은 Pure Math, Pure Stat을 강조하는 기관이 아니라,

영미권의 Applied Math & Stat 전공들이 그렇듯이, 필요한 수학/통계학을 현실 문제에 쓸 수 있도록 교육하는 곳이다.

이런 관점의 교육에서 수학, 통계학을 쓰는 방식을 이미 여러차례 다른 글에서 이야기했으니 참고하시기 바란다.

 

수학/통계학을 높은 레벨에서 써 본적이 없는 사람들은 이해 못하겠지만,

지식이 깊어질수록, 추상화 능력치가 올라갈수록, 수학 모델 하나가 현실을 매우 잘 설명하게 된다.

그 문제를 손으로 풀어낼 수 있으면 컴퓨터 작업 (코딩 작업)은 단순한 그래프 보여주기에 불과하겠지만,

손으로 못 풀 때는 컴퓨터에 의지해 계산 작업을 한다. 마치 계산기를 쓰는 것처럼.

 

데이터를 직접 넣어 “돌려보는 작업”은 굳이 따지자면 수학적 and/or 직관적 모델을

눈으로 확인해보는 작업에 불과하다.

 

당장 코드도 치기 어려운데 무슨 수학이냐?

이런 이야기 참 많이 듣는데,

DS 관련 지식이 원래부터 수학/통계학을 전공별로 현실 문제에 응용 적용하는 석/박 전공자들이 받던 훈련과 흡사하다.

단순히 학부 수준으로 개발 코딩을 배우는 사람들한테 수학/통계학을 대학원 수준으로 해라고 하니 이런 말이 나오는 것이다.

 

내 느낌에는

(물리학 대학원으로 유학가는데,) 영어 공부도 힘든데 무슨 전공 공부 이야기냐?

라는 질문처럼 들린다.

아니, 물리학 못하는데 왜 물리학으로 대학원 유학 갈려고 그러세요?

영어 못하면 물리학이건 철학이건 대학원으로 유학 가기 어렵겠지만, 그렇다고 영어가 전공은 아니잖아?

DS를 자꾸 코딩 위주로, 수학은 보조로 생각하고 있기 때문에 저런 질문을 하는 것이다.

수학/통계학이 핵심이고, 코딩은 마치 영어처럼, 보조적인 수단에 불과하다.

 

그냥 다른 전공이고, 다른 지식이고, 다른 훈련을 받은 사람들이 해야하는 다른 업무라는걸 받아들이면 어떨까?

 

우기기 그만하고, 다른 전공이라는거 받아들이면 안 될까?

학부 고학년 이상의 수학, 통계학 공부를 하면서 꾸역꾸역 Quantitative 전공의 대학원 공부를 하면서 느낀건,

수학/통계학을 추상화시켜서 공부할 수 있는 사람은 학부부터 이미 몇몇 전공 출신이어야 하고,

그 전공에서도 “유전적으로 선택받지 못한” 사람들은 너무너무 힘든 길을 걸어야한다는 냉혹한 현실이었다.

나 역시도 “유전적으로 그다지 좋은 선택을 받은 사람은 아닌” 그룹에 속한다는 사실을 느끼기도 했었고.

(더 열심히 공부해서 수학/통계학 깊이를 쌓지 않은 부분에 대한 비겁한 변명인가?)

 

CS 경력이 아무리 길게 쌓여도, 수학/통계학 추상화를 이용해 현실 문제를 풀어나가는 지식이 쌓일 수가 없다.

당장 수학/통계학을 학부에서 지식만 쌓기도 힘들고, 대학원 레벨은 두말할 나위가 없다.

그렇게 쌓인 지식을 현실 문제에 적용하는 추상화^2 은 완전히 다른 또 하나의 도전이다.

 

나가며 – 왜 DS가 CS같은 교육을 받아야 되냐?

수학/통계학 모델을 기반으로하는 Scientific programming을 계속하면 느끼겠지만,

코딩 작업은 CS쪽 지식이 많이 요구되는게 아니라,

되려 철학적인 논리구조에 대한 지식이 더 많이 요구된다.

그 철학적인 논리구조를 수학이라는 기호 언어가 잘 활용하고 있을 뿐이다.

 

우리 대학원에 CS 강좌가 전체 24학점 중 2학점을 넘지 않고, 나머지는 모두 수학/통계학직관에 대한 강의인 이유다.

(물론 그 직관을 “Scientific” Coding 작업으로 과제로 제출하는 수업들은 널려있다.)

그 직관을 전달하는 도구인 수학/통계학, 그런 기초 학문의 더 아래에 깔려있는 철학적 추상화에 초점을 맞추기 때문이다.

 

또 우기는 내용들이, N사, K사, S 대기업 계열사 같은 “유명”기업들이 다 코딩으로 사람 뽑는데 무슨 수학이냐는 반문인데,

그런 IT회사들이 2류 or 3류라서 그런거지, 개발용 코딩이 DS는 아니다.

그런 회사들의 인력 풀이 엉망진창인 상태인걸 솔직하게 밝히고 간 파비클래스 수강생만 해도 벌써 몇 십명이다ㅋㅋ

회사 오너들이 바보라면 모를까, 몇 년 안에 그 분들은 대규모 해고 사태에 직면할 것이다.

 

어느 지원자 분이 그러시더라,

이만큼 이야길 해 줬으면 됐다고. 멱살잡고 설명해줘도 못 알아듣는 수준인데, 이제 더 이상 노력할 필요 없다고.

이 정도면 자기가 수알못이라서 DS 못 한다는걸 인정하기 싫으니까,

알아듣고는 못 알아들은 체 고집부리는 수준이나 다름없다고.

알아듣고 오는 분들한테 좀 더 좋은 교육을 해 줄 수 있도록 에너지를 아껴쓰자고.

 

Y를 아무리 열심히 설명해줘도 자신이 서 있는 Vector Space가 다르면

Regression에 어떤 종류의 Non-linearity를 집어넣어도 RSS 값을 줄이는데는 도움이 안 된다.

어차피 Neural Net 같은 Non-linear 계산법이 쓰이는 구석이 몇 군데 없다는 교육을 하는만큼,

억지로 Non-linearity를 만들어서 RSS를 줄여 보려는 헛된 시도는 그만두고,

우리 Subspace의 span을 넓히는데나 집중해야겠다.

Similar Posts