본문 바로가기

개발자가 되고싶은 달걀들에게

개발자 하려면... 수학, 어디까지 해야돼?

반응형

안녕하세요, 연구소장입니다.

이번에는 수학에 대한 이야기를 해볼까 해요. 수학은 세상의 이치를 표현하기 위해 우리가 약속한 언어이며, 동시에 그 언어로 세상을 탐구하는 학문입니다. 숫자란 무엇일까요? 1, 2, 3... 과 같은 숫자의 개념이 여러분들에겐 아마 익숙할 거예요. 그런데 한때 그리스의 남자들은 1은 숫자가 아니라고 생각하기도 했습니다. 그럼, 덧셈이란 무엇일까요? 아마 여러분은 쉽게 두 숫자를 더할 수 있을 거예요. 하지만, 덧셈을 정의하라고 하면 말문이 막히게 되죠. 이렇게 함수라는 개념을, 집합이라는 개념을, 확률과 통계라는 개념을 수학자들이 우리를 위해 만들어두었습니다. 우리는 그들이 사용하기 쉽고 예쁘게 만들어둔 도구를 가져다가 잘 쓰면 되는 것이죠. 그 도구를 사용하는 방법을 익히는 과정이 젓가락질을 배우는 과정처럼, 혹은 자전거를 배우는 과정처럼 조금 어렵고 오래 걸릴 수는 있지만, 한 번 배우고 나면 우리는 다른 개발자들과 차별화된 "슈퍼 개발자"가 되어있을 거예요.

그런데 잠깐, 여러분은 수학을 좋아하시나요? 많은 여자들이 스스로를 "수포자"라 부르고, 이공계 학문에 대한 막연한 거부감을 가지고 있습니다. 수학을 그렇게나 좋아하는 저 마저도 스스로 "수학을 잘한다"라고 할 수 있게 된 것이 채 몇 년이 되지 못합니다. 물리를 좋아하던 중학교 2학년 시절 제 담임선생님은 "물리 하는 여고 없다"면서 물리를 포기하기를 종용했고, 고등학교 때 참가한 물리 올림피아드 여름학교에서는 교실에 빼곡한 남학생들을 보며 "여자와 남자의 뇌가 달라서 나는 따라갈 수 없는 무언가가 있다"라고 믿게 됐고, 결국 대학교 전공은 물리학이 아닌 산업디자인을 선택하게 됐습니다. 그러나 물리 하는 여고가 없어서 저는 과학고에 갔고, 물리 교실에 남학생뿐이었던 것은 사회적인 요인이 컸다는 것을 깨달았고, 결국 컴퓨터과학 박사과정까지 오게 되었습니다. 그러니 늦지 않아요. 한때 수포자였어도, 한때 본인의 능력을 믿지 못했어도, 우리는 할 수 있습니다. 오늘은 그냥 개발자가 아니라, 능력 있는 개발자가 되기 위한 수학 공부에 대해 이야기하고자 합니다.

개발자에게 필요 없는 수학은 없다

쉽게 말하자면, 개발자가 알아두면 좋은 수학은 "전부 다"입니다. 대학원을 다니면서 학부 때 배우지 못한 수학을 공부할 기회가 생겼고, 배우지 못한 한을 풀려는 것인지 굳이 듣지 않아도 되는 측도론, 수리통계, 해석학 등의 수업을 들었습니다. 그러면서 결국 전혀 관계가 없어 보이는 기하학이 함수와 연결되어있음을, 이는 또 교묘하게 통계와 연결되어있음을 깨달았어요. 수학이라는 학문의 아름다움은 이렇게 동떨어져있다고 생각되는 두 개념이 연결되는 것에서 온다고 생각합니다. 그렇기 때문에 "개발자는 XX는 몰라도 된다"라는 말은 할 수 없다고 생각해요. 제가 들은 수학과 수업들은 컴퓨터과학 전공 수업으로 인정도 되지 않지만, 저는 알고리즘 수업을 들으며 다 써먹고 있거든요.

그러나, 실제 땅과 같은 크기의 지도는 유용할 수 없듯이, 존재하는 수학을 다 배우라는 조언은 의미가 없겠죠? 다행히도, 개발자에게 조금 더 중요한 수학은 있습니다.

개발자에게 더 중요한 수학

개발자에게 더 중요한 수학은, 제가 고민해서 생각하는 것보다 유능한 교수님들이 결정하고 역사가 증명한 대학 커리큘럼을 보는 것이 더 좋겠습니다. 그래서 MIT EECS(Electrical Engineering and Computer Science, 전기 및 전자공학) 학과 학부생들이 어떤 수업을 들어야 졸업할 수 있는지 살펴봤어요. (직접 확인하시려면 여기로 이동!)

아래 표를 이해하기 위해서 MIT의 구조에 대한 설명을 잠깐 드릴게요. MIT는 학과별로 숫자가 하나씩 정해져 있습니다. 예를 들어, Course 6라고 하면 EECS (전기 및 전자공학과)에요. EECS는 MIT 내에서도 가장 큰 학과이기에 세부 트랙이 여러 개 있는데요, 그중에 여러분께 소개드린 Software engineering에 해당하는 것이 6-3, Data Science에 해당하는 것이 6-14 트랙입니다. 아래 보이는 그림 두 개는 각각 6-3 (컴퓨터 과학 및 공학)과 6-14 (컴퓨터과학, 경제학, 데이터 사이언스) 트랙으로 졸업하기 위한 학부생들을 위해 만들어진 가이드입니다. (여기 있는 수업만 듣지는 않습니다. 훨씬 더 많이 들어요!) 수학 과목으로는 Calculus, Discrete Math, Linear Algebra, Probability and Statistics 등이 보이네요. 이 외에도 리스팅 된 수업들의 실라버스를 참고하여 어떤 수학이 필수적일지 아래 정리해보았습니다.

 

반응형

 

MIT 컴퓨터과학 및 공학 전공 학부생의 테크트리. Software Engineering 쪽에 관심이 있다면 이 표를 참고. (출처 MIT EECS)

 

 

 

MIT 컴퓨터과학, 경제학, 데이터 사이언스 전공 학부생의 테크트리. Data Science 쪽에 관심이 있으시다면 이 표를 참고. (출처 MIT EECS)

 

1. 미적분학 (Calculus)

미적분학은 도표에서 눈에 잘 보이지 않지만, 제목 밑에 아주 작게 꼭 들어야 한다고 쓰여있습니다. 보통 대학에서 다루는 미적분학은 1, 2로 나뉘어 있는데 둘 다 듣는 것을 추천합니다. 미적분학은 컴퓨터 사이언스뿐만 아니라 어느 STEM 분야에서도 기초적으로 요구되는 사항이며, 미적분학을 모르고는 다음에 나오는 것들을 이해하기 힘듭니다 (기본적으로 알고 있다고 생각하고 추가적으로 설명하지 않기 때문이죠). 그렇기 때문에 아직 대학생이시라면 꼭 강의를 들어서 성적표에 남기기를, 혹은 이미 대학을 졸업하셨다면 코세라/edX 같은 묵 강의를 수강하시기를 (석사 유학을 준비하신다면 유료로 Certificate까지 받기를) 추천합니다.

2. 이산수학 (Discrete Math)

이산수학은 0과 1밖에 모르는 컴퓨터에게 일을 시키기 위해 필요한 필수적인 수학 이론을 다룹니다. 강의마다 조금씩 다르지만, 귀납법, 정수론, 그래프 등을 배우고 약간의 확률론도 나옵니다. 이산수학은 알고리즘을 이해하는 데 중요한 이론인데, 알고리즘은 코딩 테스트(인터뷰)에서 가장 중요하게 다뤄지는 부분입니다. 얼마나 더 효율적인 코드를 짤 수 있는지, 복잡한 코드를 잘 쪼개어 계획할 수 있는지 확인할 수 있기 때문에 개발자(특히 Software engineer)의 “실력”을 판단하는 기준은 대부분 알고리즘 지식에서 나옵니다. 저는 개인적으로 이산수학이라는 이름의 학문을 (고등학교까지 합쳐서) 배운 적은 없습니다만, 그 내용은 다른 수업들을 통해 다루었습니다. 본인이 이 내용을 알고 있는지 확인하고 싶으신 분들은 여기서 MIT의 Mathematics for Computer Science 강의 노트를 확인해 보세요.

3. 확률과 통계 (Probability and Statistics)

 

확률과 통계는 Data Science 분야에 더욱 중요한 내용입니다. 그러나 요즘엔 Software engineer도 가장 기본적인 확률과 통계 수업 하나 정도는 꼭 듣는 것을 추천합니다. 이유는 크게 두 가지인데, 기본적으로 확률에 기반하여 작동하는 알고리즘이 있고, 이를 이해하고 활용하기 위해서는 확률과 통계 지식이 필요하기 때문입니다. 또, AI/머신러닝 등의 이름으로 확률적인 방법론이 결국 Software engineer가 만들어야 하는 제품이 된 경우가 자주 발생하기 때문입니다. 온라인 강의를 듣고자 한다면 edX에 있는 John Tsitsiklis 교수의 수업을 추천합니다. 영어가 부담되신다면 한국어로 된 수업을 들으셔도 괜찮지만, 어쨌든 미국 취업을 목표로 하시는 분들이라면 영어공부는 필수일 테고, 대부분의 수학 수업은 그리 어려운 영어를 요구하지 않으므로, 이번 기회에 도전하시는 것을 추천합니다.

4. 선형대수 (Linear Algebra)

선형대수는 최근 머신러닝이 핫해지면서 다시 떠오른 스타입니다. 컴퓨터의 계산 능력이 눈부시게 발전하면서 다시 주목받게 되었죠. Matrix(행렬), 벡터 등을 가지고 노는 분야가 바로 선형대수입니다. 인간이 상상할 수 있는 차원의 한계(3차원)를 넘어서서 n차원의 데이터를 다루는 틀을 제공합니다. 짐작하셨겠지만, 확률과 통계와 함께 머신러닝을 이해하기 위해 기본으로 여겨지는 분야이기에 Data scientist를 목표로 하시는 분들에게는 필수적이라 하겠습니다. 선형대수의 대가 Gilbert Strang 교수님의 강의는 쉽고 재미있는데, 조금 오래되었지만 MIT OCW에서 공짜로 볼 수 있습니다. 이미 유명한 까만 교과서 이외에도 유용한 책이 많은데, 최근 집필하신 Linear Algebra and Learning from Data 라는 교과서는 특히 데이터 사이언스를 공부하고자 하는 분들에게 특화된 책입니다. 교과서만 보고 스스로 공부하는 것에 익숙하신 분들에게는 이 교과서도 추천합니다. (한국에서 구할 수 있는지는 잘 모르겠습니다.)

 

대학을 입학하기 전인 사람부터 대학생, 이미 대학을 졸업한 직장인 모두가 필요한 정보를 얻어갈 수 있길 바라며 써 보았는데, 그 누구의 니즈도 충족하지 못한 건 아닐지 갑자기 겁이 납니다. 다시 한번 강조하지만, 위 내용을 몰라도 코딩은 할 수 있습니다. 그러나 "일 잘하는" 개발자가 되기 위해서는 어느 정도 이론적인 지식이 뒷받침되어야 합니다. 제가 추천드린 네 분야는 이를 위해 비전공자가 스스로 체크해볼 수 있는 리스트라고 할 수 있겠습니다. 특히 Data Science 전문가가 목표이신 분들은 3. 확률과 통계 와 4. 선형대수 를 더 깊이 공부하게 되실 거에요. 네 가지 모두 Software Engineering과 Data Science 분야에 관계없이 필요한 지식이니 일단 부족한 부분이 보인다면 공부를 시작해 봅시다!