인턴 파투 이후로 준비했던 과제를 직접 구현해서 실험해야 했다. 전에도 적었지만 데이터 과학자로서 나의 결정적인 단점은 프로그래밍에 능하지도 않고 즐기지도 않는다는 거다. 잘하지 못하니 즐기지 않는 것인지 아니면 즐기지 않으니 잘하지 못하는 것인지는 구분하기 어려우나 현재는 잘하지도 못하고 즐기지도 못한다. 평소에는 여러 문제 상황에서 머리로만 검토해서 해결 방법을 제시하거나 필요한 데이터만 간단히 SQL과 엑셀 잡으로 분석하고, 더 정교한 실험이나 프로덕션은 더 잘하는 담당자에게 넘겨주면 된다. 그럼에도 1년에 한두 번 꼴로 직접 더 복잡한 프로그램을 코딩해야 할 때가 가끔 있다. 모두 바빠서 손이 없을 때도 있고 이전 업무와는 결이 다른 POC 작업일 때도 있고 아주 가끔은 아직 서비스와는 조금 먼 최신 기술을 직접 확인해봐야 할 때도 있다. 이럴 때면 어쩔 수 없이 주피터 노트북을 실행한다. 일전에는 노트북을 교체한 지 1년이 넘었는데 파이썬/노트북이 아직 설치돼있지 않다는 걸 발견하고 제법 놀랐던 적이 있다.
이렇게 수개월에 한 번씩 파이썬 코드를 구현하니 매번 새롭다. 파이썬 책도 구입해서 분명히 다 읽었고 여러 번 예제들을 보고 직접 손 코딩도 해봤는데 여전히 모든 문법이 새롭다. 하지만 또 금세 구글링으로 얻은 코드를 조금 수정해서 필요한 작업을 완수하는 걸 보면서 스스로 뿌듯해지기도 한다. 그렇게 필요한 만큼만 구현해서 실험하고 나서 또 몇 달의 시간을 파이썬과 결별한다. 그렇게 파이썬과 데면데면해질 때쯤 다시 노트북을 실행한다. 이러다 보니 파이썬 (프로그래밍)에 능통해지기는 커녕 익숙해지는 것도 쉽지 않다.
인턴 과제를 시작할 때도 참 막막했다. 내가 특히 프로그래밍에서 어려워하는 것은 기본 문법이 아니다. 개발을 편하게 돕기 위해 만들어진 수많은 라이브러리와 자동화 툴에 익숙해지는 것이 어렵다. 그것들이 왜 만들어졌는지 어떻게 작동하는지 등에 대한 기본 개념을 이해하기 전에는 사용하는 게 쉽지 않다. 그냥 문제 상황을 해결하는 프로그램의 전체 구조와 흐름 등은 머릿속에 설계도처럼 바로 그려지는데, 이걸 실제 코드로 만드는 것, 특히 기존 라이브러리와 자동화 툴을 엮어서 작동하게 만드는 것이 어렵다. 어떤 라이브러리와 툴이 있는지도 모르거니와 어떻게 작동하는지 도통 감이 잘 잡히지 않는다. 특히 인풋 데이터를 어떻게 만들어줘야지 작동하는지가 가장 막막하고, 다음으론 자동화 툴의 동작 원리를 이해하지 못하니 제대로 활용하지 못한다는 거다. 새로운 버전이 나오면 더 쉬워져야 하는데, 오히려 겨우 익혀둔 것과 프로토콜이 달라져서 그냥 포기하게 되고 그러니 프로그래밍에서 더 멀어진다.
어쨌든 과제를 직접 해야 하니 막막함은 잠시 뒤로 하고 시작했다. 똑같지는 않겠지만 비슷한 문제를 경험한 많은 이들의 경험과 결과물들이 이미 인터넷 상에 많을 테니 적당히 참조할 예제만 찾아서 수정하면 된다. 주말 동안 구현할 알고리즘을 확정하고 내가 생각했던 프로세스와 비슷하게 구현한 예제들을 찾아서 탐독하고 나서, '할 수 있겠다'는 자신감이 생겼다. 월요일에 데이터를 준비하고 전처리 코드를 작성했다. 여전히 막막했지만 화요일 오전에는 구현하고자 했던 가장 기본 기능을 예제를 보면서 작성했다. 이게 돌아갈까라고 생각했는데 학습이 제대로 진행돼서 놀랐다. 참조한 예시 코드에는 학습 중 밸리데이션 부분이 빠져있어서 작성한 코드 또는 모델이 테스트 데이터에도 맞는지 가늠할 수 없었다. 그런데 수요일엔 어찌어찌하다가 밸리데이션 부분도 추가했다. 목요일엔 다른 방식의 학습기도 만들어졌고 금요일엔 다시 기존에 흔히 사용하던 -- 우여곡절은 있었지만 -- 크로스 엔트로피를 사용한 새로운 모델도 완성할 수 있었다. 아직 구현하고 실험하고 확인해야 할 것들이 많이 남아있지만 만족스러운 일주일이었다.
계속 구글링을 하면서 프로그램을 완성하다 보니 내가 지금 코딩을 하고 있는 건지 구글이 코딩하고 있는 건지 구분하기 힘든 아구글일체의 경지에 오른다. 프로그래밍에 대한 기본 개념과 문법만 알고 구글에 접속만 할 수 있다면 세상의 모든 프로그램을 구현할 수 있다는 게 오랜 지론이지만 이번에 또 그런 경험을 추가했다. 이번 구현 경험을 통해서 전에 막연했던 몇몇 부분들을 이해할 수 있게 됐다. 비슷한 분석 및 모델링 프로그램을 복사하듯 막 찍어낼 수 있을 것 같은 자신감이 생긴다. 알고리즘을 공부할 때도 그렇지만 프로그래밍에서도 몇몇 기초와 개념에 관한 이해의 문턱만 넘으면 그때부턴 나머지는 편해진다. 좋은 경험이었다.
직접 해보기 전까진 데이터의 포맷을 맞춰서 모델에 넣는 것과 복잡한 구조의 모델을 학습시키는 것에 대한 모호함이 있었다. 이것 때문만은 아니지만 머리로만 구상할 때 도저히 해결되지 않아서 굳이 실제 코딩으로 연결할 엄두가 없었다. 막상 과제를 하면서 여러 참고 자료도 찾아보고 실제 몸으로 부딪히며 코딩을 하면서 그동안 너무 바보 같이 굴었다는 생각도 들었지만, 한편으론 이제 이미지 처리 모델과 언어 모델만 연습 삼아해 보면 어떤 도메인의 문제든 딥러닝으로 다 해결할 수 있을 것 같은 근자감도 생긴다. 이론은 계속 팔로잉했는데 실기가 부족해서 딥러닝 전문가라고 자신 있게 말하지 못했는데, 조금만 연습하면 내가 평소 욕하던 그런 좆문가가 될 것 같다.ㅎㅎ 아직도 많은 어려움이 있겠지만 낮은 문턱을 넘고 나니 이제 적당한 라이브러리나 오픈 소스만 있으면 어떤 모델이든 구현해서 실험할 수 있을 것 같다.
이 지점에서 고민이 시작된다. 과연 미래의 데이터 과학자는 어떤 모습일까? 어떻게 일할까? 자동화가 진행되면 어느 순간 데이터 과학이라는 것이 무의미해지겠지만 아직은 좀 먼 미래의 일이다. 어쩌면 내가 코딩에 약해서 갖는 열등감일 수도 있지만, 나는 일반 개발자 (데이터, 알고리즘을 다루는 개발자와 대비시키기 위한 표현임)가 데이터 과학이나 머신러닝을 한다는 것에 다소 부정적인 견해를 갖고 있다. 데이터 과학에 입문하는 것에 대한 부정이 아니라, 제대로 할까? 에 대한 부정이다. 일부는 데이터 과학, 머신러닝, 그리고 알고리즘 등을 기초부터 깊게 파고 들어가서 전문가가 되겠지만, 오랫동안 여느 시스템/솔루션 프로그램만 개발하던 이들이 그저 인공지능이 핫하다고 해서 책 몇 권이나 인터넷 글만 좀 읽고 또 오픈 소스 몇 개를 사용해봤다고 해서 나도 이제 데이터 과학자 (또는 머신러닝 개발자)다라고 말하는 것에 부정적인 거다. 과연 제대로 알고 있는 걸까?라는 의문이 든다. 물론 편협한 생각이다.
기초부터 개념을 하나씩 증명하면서 터득하고 연습 문제를 직접 손으로 풀어보고 또 어떤 거는 직접 구현해서 작동 원리를 다 파악하고 데이터 과학이나 머신러닝이 어떻게 동작하는지 알겠다고 말하는 개발자가 과연 몇이나 될까? 그저 누군가가 개발해둔 오픈 소스나 라이브러리를 가져와서 공개된 데이터나 사적 데이터에 적용해서 결과가 나오는 걸 보고 데이터 과학 또는 머신러닝이 별 것도 아니네라고 말하는 사람들이 많지 않을까가 우려된다. 그저 몇몇 하이퍼 파라미터만 변경하는 정도의 A/B 테스트를 진행하는 것만으로 데이터 과학을 마스터했다고 우기지는 않을까? 모두에게 해당되지는 않겠지만, 그들이 조작한 하이퍼 파라미터의 의미는 제대로 알고는 있는 걸까? 예측 모델이 내놓은 결과는 제대로 해석하고 있는 걸까? 물론 이런 우려나 거부 반응이 나의 어리석은 우월감에서 오는 것일 수도 있다는 점은 반성한다. 하지만 실제 이런 경우를 많이 봤다. 거저 인기에 편승해서 데이터 과학을 해보겠다는 친구들을 면접장에서 심심찮게 만난다.
데이터 과학 관련 소프트웨어들이 다양해지고 쉬워지는 것에 불만인 건 아니다. 오히려 그건 환영하는 바다. 다만 기저에 있는 개념들에 대한 완벽한 이해 없이 그런 소프트웨어를 기계적으로 오남용 하는 것에 대한 우려다. 같은 데이터를 넣으면 숙련자든 비숙련자든 같은 결과를 얻는다. 어차피 결과가 같은데 굳이 알고리즘을 더 자세히 알기 위해서 두꺼운 책을 찾아본다거나 수식을 이해하려고 노력하지 않을 거다. 이렇게 쉽게 배운 기술자들을 데이터 과학자의 범주에 넣는 것이 합당한가? 에 대한 의문이다. 어쩌면 나는 어렵게 배웠는데, 요즘 애들은 너무 쉽게 배운다는 점을 시기해서 이런 글을 적는지도 모르겠다. 비싼 학비로 여러 교과목을 수강해서 기초 개념을 익히고, 또 취직해서 온갖 욕을 듣고 스트레스를 이겨내며 밑바닥부터 차근차근 경험을 쌓았는데, 지금은 누가 더 소프트웨어를 자유자재로 사용하느냐에 따라서 데이터 과학자의 능력을 평가받는 시대가 된 것 같아 씁쓸하다. 쉬움에 취하지 않길 바란다.
미래의 데이터 과학자는 과연 어떤 모습일까? 수많은 라이브러리와 자동화 툴로 구현과 실험은 더 쉬워질 테니, 이론과 도메인 지식을 더 파고 들어가야 하는 걸까? 아니면 그냥 구축된 모델을 가져와서 레고 블록 쌓듯이 끼워 맞추면 그만이니 이론은 다 집어치우고 더 개발만 잘하면 될까? 모든 데이터 과학자가 이론가 또는 연구자가 되어야 한다는 얘기는 아니다. 어차피 이론은 소수의 천재들이 알아서 잘 증명할 테고 또 다른 천재 개발자들이 라이브러리로 잘 만들어줄 테니, 괜히 머리 싸매며 이론을 공부하거나 그걸 코드화하지 않고 잘 만들어진 걸 가져와서 사용하면 그만일까? 정말 데이터 과학의 미래가 후자일까? 이게 바람직한 방향일까? 아니면 잘못된 길일까? 지금 이런 고민은 내가 부족한 부분에 미래가 있다는 생각에 그냥 몽니를 부리고 있는 걸까? 나는 5년, 길면 10년을 어찌어찌 버티다가 은퇴하면 그만이지만, 사랑하는 나의 업의 미래는 과연 어떻게 될까? 몹시 궁금하다.
그저 데이터/알고리즘 기술자만 양성되고 데이터 선무당들만 난립하는 미래가 그려지는 건 왜 일까?
===
처음엔 많은 걱정으로 데이터 과학에 초점을 맞춘 파이썬 책도 오랜만에 구입했는데, 결국 한 페이지도 넘겨보지 않고 계획했던 프로그램을 완성했다. 아직 갈 길이 멀지만 감당할 수 있는 시련은 사람을 성숙, 성장시킨다.