brunch

You can make anything
by writing

C.S.Lewis

by 엘리스코딩 elice Jun 12. 2019

프로그래밍에 수학이 필요할까요?

수. 포. 자를 위한 프로그래밍 수학

나는 정말 수포자일까?


우리는 몇 학년 때부터, 어떤 개념에서부터 수학을 어려워했던 걸까요? 여러분도 한 번쯤 수학을 잘하는 주변 친구를 부러워한 적이 있지 않나요? 

수학은 유독 천재성이 부각되는 학문 분야이기도 하고, 단순 암기나 노력만으로는 도달할 수 없는 한계를 쉽게 느끼곤 하는 분야이기도 하죠. 자칭 수포자라고 하는 많은 사람들에게 수학 시험은 마치 IQ 테스트처럼 이미 내가 타고난 '수학 머리'를 단지 진단해볼 뿐인 시험일 지도 모르겠습니다.


하지만 수포자라는 잘못된 생각은 아주 작은 개념 하나를 놓치고 지나가버린 순간에 시작된 오해일 수 있습니다. 수학은 개념 간의 연속성과 연계성이 강하기 때문에 하나의 개념을 이해하지 못했을 때 뒤의 것도 연달아 이해하지 못하게 될 가능성이 크죠. 수포자라고 낙담하기 전에 먼저 내가 놓쳤던 작은 개념으로 돌아가서 다시 이해해보는 게 필요할 수도 있어요.

(Cover image : Photo by Volkan Olmez on Unsplash)



프로그래밍을 잘하려면 수학도 잘해야 할까?


프로그래밍을 어느 정도 하는 개발자라면 한 번쯤 수학 공부의 필요에 대해 생각해본 적이 있을 거예요. 처음 개발 공부를 시작하여 표면적인 것들을 익힐 때보다 더 깊숙이 파고들거나 응용하고자 할 때 컴퓨터과학의 원론이나 수학처럼 근본적인 부분에 대한 이해의 필요성을 느끼게 되니까요.


컴퓨터와 수학의 연관성은 근본적으로는 그 탄생 배경과 구성 요소로 이야기할 수 있습니다. 본래 컴퓨터는 '수'를 계산하기 위해 탄생했고, 우리 눈에 보이지 않지만 디지털 세계는 모든 것이 0과 1이라는 숫자로 이루어져 있습니다. 또한 프로그래밍 자체가 수학적인 논리 구조를 따르고 있을 뿐만 아니라 다양한 프로그래밍의 분야에서 수학의 개념을 사용하고 있어요.


한 가지 예를 들어볼까요?

10000 보다 작은 소수의 조합으로 이루어진 암호를 생성해주는 프로그램을 만든다고 해봅시다. 이 프로그램을 만들기 위해서는 소수의 리스트가 필요하겠죠. 처음 몇 자릿수까지는 쉽게 소수를 떠올릴 수 있을 거예요. [2, 3, 5, 7, 11, 13, 17, 19,... 97, 101, 103, 107, 109, 113,...] 

우리가 소수의 수학적 정의와 나머지 값에 대한 개념을 알고 있다면 어떤 수 n이 소수인지 아닌지 알기 위해서 2부터 n-1까지의 수로 n을 나누어서 나머지가 0인 경우가 없음을 보이는 방법을 사용할 거예요. 그런데 이 방법은 n이 커질수록 나눗셈을 해야 하는 횟수가 많아지기 때문에 점점 더 많은 시간이 듭니다. 그런데 만약에 '에라토스테네스의 체'라는 수학적 개념으로 접근한다면 소거법을 사용하여 더 효율적인 알고리즘으로 암호를 생성해주는 프로그램을 작성할 수 있어요.


(엘리스 코딩 실습 화면) 코딩으로 구한 10000 보다 작은 소수 리스트


물론 첫 번째 방법으로도 두 번째 방법으로도 프로그램을 만들 수 있다는 사실은 동일해요. 하지만 보다 복잡한 응용 프로그램을 만든다고 할 때, 그리고 간단한 프로그램을 만든다고 하더라도 마찬가지로, 여러분이라면 어떤 프로그램이 더 잘 만든 프로그램이라고 판단하시겠나요?


결론은 수학을 공부하지 않아도 프로그래밍을 하는 데에는 무리가 없지만 수학에 대한 이해가 뒷받침된다면 프로그래밍을 자유자재로 응용하고, 깊이 있게 할 수 있다는 것입니다. 역으로 잘 만든 프로그램 또한 수학적 사고에 기반한 프로그램이라고 할 수 있어요. 따라서 꽤 오랫동안 프로그래밍을 할 계획이라면 수학에 대해서 공부하는 것이 장기적으로 내 역량을 뒷받침하는 데에 큰 도움이 되겠죠!



수학적 지식이 특히 필요한 프로그래밍 분야


분야에 따라 수학 공부의 우선순위가 상대적으로 낮거나 더 높은 것이 있습니다. 예를 들어 데이터 사이언스 분야의 프로그래밍을 한다면 확률과 통계에 대해 기본적으로 알고 있어야 합니다. 또 만약 공간에 대해 다루는 게임 프로그래밍이나 VR/AR, 최근 급부상한 블록체인과 인공지능 분야의 프로그래머로 종사하고 싶은 분이라면 수학 공부는 필수라고 해도 과언이 아닐 거예요.


Photo by Franck V. on Unsplash / Photo by Lucrezia Carnelos on Unsplash


수학이 필요한 프로그래밍 분야에서 어떤 수학적 개념을 응용하게 되는지 간단하게 살펴보면 아래와 같습니다.


데이터 분석 - 확률 및 통계

컴퓨터 비전 - 선형대수, 기하학

인공지능, 머신러닝 - 선형대수, 미적분, 확률 및 통계, 최적화 문제

3D 프로그래밍 - 선형대수, 삼각함수, 공간 도형

암호학 및 블록체인 - 정수론, 알고리즘



수포자를 위한 프로그래밍 수학


하지만 당장에 공부해야 하는 언어나 기술도 산더미같이 많은데 수학을 공부한다는 건 좀 뜬구름 잡는 느낌이 들죠! 또는 공부를 하고 싶지만 무엇을 어떻게 시작할지 모르겠거나요. 그래서 수학 공부는 잠시 뒤로 미루어 둔 분 계신가요?

《수포자를 위한 프로그래밍 수학》은 프로그래밍을 하면서 수학 공부의 필요성을 느끼시는 분들이 어렵지 않게 수학적 개념을 기초부터 익힐 수 있는 과목입니다. 또한 프로그래밍 실습을 통해 직접 코딩해보면서 배운 내용을 확실하게 내 것으로 만들게 됩니다.

컴퓨터 과학의 근간이자 현대 암호학, 블록체인 개념에 필수적인 정수론에서부터 확률 및 통계, 선형대수까지 핵심 개념만 콕콕 집어 다룹니다. 수학 공부로 프로그래밍에 날개를 달고 싶은 분들이라면 꼭 수강해보세요! :-)


▶ 과목 정보 보기



커리큘럼

정수론 : 소수 - 컴퓨터 과학의 근간

수열 : 수학적 귀납법 - 알고리즘 기초 다지기

확률과 통계 : 경우의 수와 확률 - 데이터 분석 첫걸음

선형대수 : 벡터와 행렬 - 컴퓨터 비전의 세계

실력 확인 테스트





초보자도 가능한 실습형 코딩 수업!

언제나, 어디서나 코딩을 배우는 세상을 만들어 나갑니다.

- 엘리스 아카데미

- 엘리스 기관

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari