미적분 밖에 모르고 시작했던 컴퓨터 과학
대학교 1학년이 끝나갈 무렵부터 나는 경제학과가 연결된 다른 전공인 경제학과 통계학 전공으로 옮기기로 결심했다. 부모님이 원하는 경제학과의 형태는 유지하며, 좀 더 수학과 관련된 과목들을 들을 수 있기 때문이었다. 통계 과목인 회귀(Regression)와 수학 과목인 행렬 대수(Matrix Algebra)를 들으며, 수학과 통계학 전공이 나에게 맞다고 느낄 즈음, 프로그래밍 입문 과목이 눈에 들어왔다. 재학 중이던 대학교가 컴퓨터과학으로 세계적으로 유명한 학교였기에, 이 입문 과목이 비전공자들에게 어려울 수 도 있다는 말을 많이 들었음에도, 한 번 도전을 해 보고 싶다는 생각이 들었다. 주변에서 이미 몇몇 컴퓨터과학 과목들을 들은 학생들은 프로그래밍과 관련된 개념 수학 과목도 추천을 받았다. 마음의 준비를 하고, 프로그래밍 입문과 개념 수학 과목을 시작했다. 프로그래밍은 시도해 본 적이 없어서 약간의 걱정이 있었지만, 개념 수학은 미적분과 행렬 대수를 마친 나에게 좀 더 편하게 느껴졌다. 하지만, 개념수학의 두 번째 주 숙제 점수를 받았을 때, 나는 귀신에 홀린 것 같은 기분이었다. 모든 문제에서 받은 점수가 제출을 했을 때 받을 수 있는 기본점수였다. 이것이 의미하는 바는 내가 이해하고 풀었던 방식이 개념수학 과목에서 요구하는 룰과 전혀 상응하지 않는다는 것이었다. 두 번째 주 숙제의 주제는 귀납법이었다. 어떤 식이 주어졌을 때, 가장 기본이 되는 첫 경우부터, 순차적으로 무한대까지 늘어난 경우에서, 이 식이 성립됨을 보여야 하는 것이었다. 귀납법을 써야 하는 방정식 문제를 일차원적으로 풀어버린 학생에게 기본점수도 사치였을 것이다.
그런데, 믿었던 수학 과목에서 쓴 맛을 본 내가, 다음 프로그래밍 수업을 들어갔을 때, 종이로 풀어내던 수학 과목의 귀납법 숙제와 이 프로그래밍 수업에서 다루어지던 for loop 사이에서 어렴풋이 겹치는 부분이 보였다. n=1인 경우부터 시작하는 귀납법과 i=1부터 시작되는 for loop. 단지 차이는 개념수학 속 n은 무한대를 향해 달리지만, 그 날 수업의 for loop 속 i는 100을 넘기지 못했다. 이 날부터 나는 개념수학의 과목 속 주제들과 프로그래밍 과목 속 주제들이 서로 연결되고 대입될 수 있는지 찾아보고 시도해 보기 시작했다. 논리, 함수, 귀납법, 확률, 이산 수학 등 많은 주제들이 프로그래밍에서 너무나도 쉽게 몇 줄의 코드만으로 실행되었다. 그 당시의 프로그래밍 입문은 지금 돌이켜 보면 하루 만에도 다 끝낼 수 있을 것 같지만, 프로그래밍 경험이 없던 나에게 그 프로그래밍 입문은 정말로 새로운 세계로 들어서는 느낌이었다. 경제학에서 경제학과 통계학으로, 그리고 수학 과목들을 들었던 나에게, 컴퓨터 과학이라는 분야는 새로운 것이었다.
우선 컴퓨터 과학이 왜 통계학이나 수학 분야와 강한 관련을 갖는지 설명하고 싶다. 응용 부분을 고려하지 않고 핵심적인 컴퓨터 과학의 분야를 보면, 크게 세 가지 분야가 있다고 생각한다. 첫 번째는 알고리즘과 데이터 구조 분야이다. 눈 앞에 펼쳐질 수 있는 여러 종류의 문제를 수학적으로 디자인하고 효율적인 알고리즘과 꼼꼼한 증명으로 풀어내야 한다. 알고리즘을 짜다 보면 흔하게 마주치는 수학 분야가 이산수학이다. 알고리즘을 실행할 때 풀어야 하는 문제는 어떤 주어진 상황에서 경우의 수나 확률을 구해야 할 수도 있고, 함수 관계도나 그물망처럼 짜인 이론상의 네트워크 구조 위에서 문제를 구상하고 풀어내야 할 수도 있다. 이 모든 과정은 또한 귀납적인 방식을 통해 단계별로 풀어내야 한다. 알고리즘은 무언가를 최적화하기도 하고 확률을 측정하기도 하기 때문에 수학의 여러 분야와 자연스럽게 맞닿아 있다.
두 번째는 우리가 흔히 사용하는 윈도나 운영시스템을 개발하는 시스템 분야이다. 컴퓨터 네트워크나 컴파일러 디자인도 이 분야에 속하고 특히 컴퓨터의 보안키를 생성하는데 수학의 수 이론이 이용된다.
세 번째는 알고리즘의 정확성과 효율성을 분석하는 함수 프로그래밍 분야이다. 효과적인 프로그램을 얼마나 효율적으로 코딩할 수 있는지에 대한 분야이고 논리학자들이 발전시킨 수학의 논리 이론, 집합이론, 계산이론 등이 적용된다.
컴퓨터 과학의 모든 핵심 분야는 수학과 분리될 수 없다. 컴퓨터 과학을 이용한 응용 분야로 넘어가면 대표적인 것 중에 하나가 인공지능과 기계학습이다. 인공지능이나 기계학습이 중요한 이유는 다양한 분야를 연구하는데 인공지능과 기계학습이 유용하게 사용되기 때문이다. 사진과 영상을 분석하거나, 언어를 변환시키거나, 분자생물 구조를 들여다보거나, 뇌의 구조를 보여주는 MRI 분석이나, 로봇의 움직임을 측정하는 등의 모든 분야가 이 인공지능과 기계학습과 함께 발전하고 있다.
기계학습은 알고리즘과 통계학이 결합한 분야이기 때문에, 컴퓨터 과학의 핵심분야와 응용 부분을 확실하게 배울 때는 수학과 통계학에 능통한 전공자들이 더 유리하다. 경제학에서 시작해서 통계학을 거쳐 컴퓨터과학과 수학과에 다다른 나는 알고리즘과 기계학습을 적용할 미래의 데이터 분석 프로젝트를 떠올리고 있었다.