본문 바로가기
컴퓨터/전산, 그 외

프로그래머와 수학

by adnoctum 2009. 12. 22.


   이 글은 프로그래머에게 왜 수학이 중요한 것인가에 대한 첫 글이며, 그 이후 작성될, 중고등학교 수준의 기초적인 수학에서부터 대학 수학 정도까지의 수학적 내용들이 프로그램 작성시 어떻게 사용되는지를 보여 줄 예에 대한 글머리 정도 될 것이다. 만약 프로그래밍에서 수학 혹은 수학적 사고 방식이 적용된 예를 보고자 한다면 이 블로그의 카테고리 중 컴퓨터/수학이랑 의 글들을 보면 된다. 

   왜 프로그래머에게 수학은 중요한가. '수학적 사고'라 일컬어 지는 것은 무엇인가. 우리는, 이 두 사안에 대하여 명확한 예를 접함으로써 프로그래밍에 있어서 수학의 중요성을 알 수 있을까? 수학이 사용된 몇 가지 예를 나열한다고 해서 될 일은 아니다. 우선, 프로그래밍에 대한 생각부터 바꾸어야 할 것이다.

   HTML 은 프로그래밍인가? 많은 프로그래머들이 html 은 언어가 아니라고 생각한다. 그것은 왜인가? html 에는 논리의 흐름이 없기 때문이다. html 은 주로 '어떻게 보기 좋고 예쁜 웹페이지를 만들 것인가?' 에 대한 고민을 대상으로 삼는다. 이것은 mark-up language 의 근본 속성일 것이다. 소프트웨어도 마찬가지이다. 버튼 컨트롤을 둥그렇게 하거나 비트맵을 입히거나, 리스트 컨트롤의 특정 아이템은 노랑색으로 칠하도록 하는 일은 단지 부과적인 일에 불과하다. 그러한 것에는 결코 수학이 필요 없다. 당장 눈에 보이는 무엇인가를 보면서 배워 나가기를 좋아하는 우리는 C++의 상속에 대한 예로 멋진 virtual 함수의 개념을 접하려 하기보다는 당장 테트리스라도 하나 만드는 것을 좋아한다. 그러나 그렇게 GUI 를 다루고, 익히 잘 알려져 있는 절차를 따르는 일은 결코 프로그래밍이라 하기 힘들다. 그것은 그냥 잡기술에 불과하다. 그런 것에서는 수학이 필요 없다.

   컴퓨터, 좀 더 정확히, 프로그래밍이 필요한 이유는 무엇인가. 그것은 컴퓨터의 유일한 장점 두 가지, 빠르고 정확히 일을 처리하기 위한 것이며, 따라서 '데이터를 분석/처리/가공/표현' 하는 것이 진정한 프로그래밍이며, 이 때 진정 수학이 필요하게 된다. 쉽게 말해 그저 그런 변변한 툴 몇 개 만드는 것이 마치 프로그래밍의 전부인양 착각하면 수학을 사용하지 않을 가능성이 높다는 것이다. 그런 잔재주에는 수학이 별로 필요 없다.

   겉으로 보기에 멋져 보이는 GUI 코딩은 잔재주에 불과하며, 이런 것을 할 때는, outlier 를 선별하는 것도, 다항식으로 회귀시키는 것도, t-test 나 비모수통계학을 구현하는 것도, 미분방정식의 수치해석학적 해를 구해내는 것도, 10억 개의 데이터를 정렬해야 하는 것도 아니다. 그러나, 진정한 프로그래밍의 역할, 즉 데이터 분석과 표현을 하게 되면, 앞에 나열한 것들은 기본이요 그 이외의 수많은 수학/통계적인 기법들을 필요로 하게 된다.

   내가 볼 때, 프로그래머에게 수학은 큰 필요가 없다, 라 하는 경우는 주로 GUI 나 그 밖의 '표현'에 관한 일만을 주로 하는 경우로 보인다. 맞다, html 작업을 주로 하는 사람에게도 수학은 별로 필요 없다. 그러나, 데이터를 처리하고 분석해야 하는 경우, 필시 수학적 접근법을 필요로 하는 문제 상황을 만날 수밖에 없으며, 그 때 수학적 기초 지식과 사고력이 없다면, 자신이 현재 수학적 접근법을 사용해야 하는 상황에 처해 있다는 것조차 모른채 우두커니 앉아 있게 될 것이다. 수학을 모르면 수학을 어디에 사용할 수 있는지 모르는 것은 당연한 것이요, 그리하여 수학이 어디에 쓰이고 있는지도 모르는 것은 당연한 것이다. 이 글을 읽는 대부분의 사람들이, DNA를 합성시킬 수 있다는 사실을 모르기 때문에 DNA 합성 기술이 어디에 쓰이고 있는지 모르는 것과 마찬가지이다(PCR은 노벨상을 받은 작품이다).

   왜 수학이 프로그래머에게 필요한지 모르는가? 그것은, 첫째로 수학을 잘 모르기 때문이요, 둘째로 데이터를 처리하고 분석하는 프로그래밍을 해 본 적이 없기 때문이다. 그저 1000~2000 줄 정도 되는 작고 간단한, 외부 라이브러리로 도배가 된 작은 툴을 만들어 보는 것 정도의 간단한 프로그래밍만 해 보았기 때문일 것이다. GUI 프로그래밍에 혹하지 말고, 데이터를 분석/처리하는 일을 해보라. 왜 수학이 필요한지 알게 될 것이다. GUI 프로그래밍은 잔재주에 불과하다.

 

ps. 내가 이 블로그에 작성해 놓는, 다분히 MS-Windows 종속적인 코드들은, 할 때마다 MSDN을 찾아서 읽기 귀찮아서 적어 놓고 내가 참고하는 용도일 뿐이다. 난 linux 에서 더 많은 코딩을 하며, gui는 python 으로 cgi 짜서 C++로 작성/컴파일 된 실행파일을 python script 안에서 system call 해서 사용한다. 즉, 이 블로그에 GUI 코드는 기억하기 싫어허 기록해 놓는 것에 불과하다.





'컴퓨터 > 전산, 그 외' 카테고리의 다른 글

나의 친구 Segmentation fault  (0) 2010.06.04
프로그래머에게 겸손이란  (0) 2010.01.13
개인적인 코딩 규칙  (0) 2009.12.27
실행 메뉴 사용하기  (0) 2009.12.27
사소한 속도까지 신경쓰는 이유  (0) 2009.12.22