프로그래머와 수학
<수정 중 -- 살을 붙이는 중입니다>

공대 학부 과정 중에서 수학을 가장 덜 공부하는 곳은? 컴퓨터공학과가 아닐까 생각합니다. 전산학과도 크게 다르지 않은 것 같고요. 그게 업계와 학계의 간극이 크기 때문이라고 봅니다. 당연히 대학은 그 사이에서 어중간한 교육을 하게 되고요. 실제 업계에서 일하는 프로그래머 치고 자신이 대학에서 배운 수학을 써먹을 기회가 평생 몇 번이나 될까요. 반면 학계에서는 수학을 종종 쓰곤 합니다. 전공에 따라 다르긴 하지만 학계에 있는 사람들보다는 미적분, 통계, 행렬 등을 많이 쓰게 되죠. IEEE에 나온 논문인데, 북미지역 개발자에 대해 방대한 서베이를 한 결과, 대학에서 수강한 과목 중 현재 업계에서 일을 하는 데 도움이 되는 과목을 뽑아보라고 했더니, 수학(특히 대학 수학의 꽃이라고 불리는 미적분학)은 높은 순위를 달지 못했습니다.

정말 수학이 별 도움이 안되는 걸까요? (이 대목에서 저는 Numb3rs의 찰리 엡스 교수가 나타나서 흥분하며 절대 그렇지 않다는 말을 쏟아내는 장면을 상상합니다)

저는 이 글에서 수학은 프로그래머에게 도움이 될 뿐 아니라, 가장 가치있는 투자 중 하나이며, 또 도움이 되게 수학을 공부하는 방법, 그런 종류의 추천 서적이 있다는 이야기를 해보려고 합니다.



특정 컴퓨터 관련 지식이 얼마나 갈까? 만약 폰노이만식 컴퓨터가 종말을 고한다면? 오래 살아남는 것은 수학이다. 수학만큼 확실한 투자는 없다.

하지만 제대로 된 대상에 투자해야 한다. 미적분학은 모든 이공계 대학에서 교양처럼 가르친다. 정말 이것이 그렇게 중요한가? 컴퓨터 프로그래머에게 가장 가치있는 수학 분과는? 이산수학이다. 이것만큼 이득이 큰 것이 없다. 특히 이산수학은 수학적 사고력(Mathematical Reasoning)을 키워준다. 전산교육계에서도 전산학도에게 "수학"을 가르치는 것보다 "수학적 사고"를 가르치는 것이 중요하다는 바람이 불고 있다. (Dijkstra, Gries 등등의 수원도 언급)

하지만 그냥 이산수학 공부하면 다 되나? 그렇지 않다. 잘 배워야 한다. 이산수학을 어떻게 가르치냐에 따라 그 사람의 향후 프로그래밍 실력에 큰 차이가 생긴다는 연구 논문이 있다. 여러분도 이 방법을 활용하면 내공을 높힐 수 있다.

그렇다면 이산수학 이외의 것들은 다 필요 없나? 아니다. 중요하다. 하지만 어떤 것들이 존재하는지, 그 메뉴판을 익히는 것이 더 유용할지도 모른다. 나중에 필요하면 주문해 먹으면 되니까. 이런 방법을 사용할 때 유용한 것이 위키피디아이다. 매스 아틀라스도 있다. 또 수학 사전도 있다. 개인적으로는 하퍼콜린스 것을 추천한다. 휴대가 용이하고 평이하다. 시간 날 때마다 명칭은 들어봤으나 뭔지 잘 모르는 것들을 뽑아서 사전을 찾아본다. 화장실에서도 좋다.

이런식으로 상황적(situated) 수학적 사고를 핵심으로 하고, 여러 분과는 가볍게 훑으면서 공부하면 재미있게, 또 수월하게, 또 효과적으로 수학을 배울 수 있다. 수학은 꼭 어렵게 배워야만 하는가.

상황적 수학적 사고란 무엇인가.

자기 딸이 있는 중학교에서 대수학(algebra)을 가르치지 않아서, 하바드에서 수학철학을 공부했던 아버지가 직접 선생으로 나섰다. 매우 획기적인 방법으로. 일명 Algebra Project. 그 아버지는 학생들을 실제 세계로 데리고 나왔다. 보스턴 주변을 함께 다니면서 수학의 실용적 사례가 될만한 경험을 찾아다녔다. 예를 들면 지하철을 타면서 대수학의 개념을 익혔다.

학생 왈, "when you take a trip on the subway and learn about algebra what you're really doing is developing a new way of thinking. Instead of just trying to memorize these strange equations, you're busy relating the math to your own experiences. All of a sudden, you find math spilling over into other areas of your life."

성과는? 예전에는 주(state) 수학 시험에 한 반 전원이 탈락하는 것이 흔했지만, 딱 2년 후에는 55%가 합격하게 되었다. Algebra Project에 참여한 학생의 92%는 상위 수준의 수학 코스로 올라갔는데, 그 프로그램에 참여하지 않은 학생들은 그 비율의 절반 수준에 그친다.

수학에 문외한인 분들을 위해 추천하는 책, 활동, 영화 등. "박사가 사랑한 수식", "Numb3rs"(한 편 보고 인터넷의 보조자료로 문제 풀고 공부하기), 아인슈타인이 극찬한 수학 교양서적, 수학사 서적 등등등

(프로그래머를 위한) 이산수학 추천 서적들. 대략 4종 정도만 소개하고... 특히 퍼즐을 통해 배우는 이산수학 책이랑 Haskell로 배우는 이산수학 책 등.

(2탄 예고. 물리학 쉽게 공부하기)

--김창준
by 애자일컨설팅 | 2006/09/28 22:48 | 트랙백 | 덧글(17)
트랙백 주소 : http://agile.egloos.com/tb/2300866
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 친절어린이 at 2006/07/26 18:39
컴퓨터 공학과 학생으로서 수학이 필요할꺼란걸 알지만 잘 안되더라구요;;
그래서 그런지 다음 포스트가 기대가 됩니다..
Commented by 이한길 at 2006/07/26 19:21
미적분학, 공업수학(미분방정식), 선형대수학, 수치해석을 수강했었습니다. 하지만 실제로 그래픽스를 위해 선형대수학을 사용한것을 제외하면 수학을 직접적으로는 써본적이 없는 듯 합니다. 그래서가 아닐까요? 저도 기대가됩니다..
Commented by 퍼키 at 2006/07/26 20:50
저는 수학을 써먹으려고 신경을 써가면서 몇번 프로그래밍해본 결과, 이산수학의 recurruence쪽을 몇번 적용해본 적이 있었고, 무한수열과 테일러급수을 이용해본 적이 있었어요. (데이터 총합 같은 생각도 못했던 부분!) 수학적 개념의 존재를 몰랐다면, 전혀 더 최적의 방법이 있을 것이라고 상상도 못했을 것이라는 느낌을 받았구요. 단순한 전산학적인 개선방법과도 거의 O(n)이나 O(2^n)을 O(1)로 만들 정도로 강력한 방법이었고요..
Commented by 대나무 at 2006/07/26 20:58
컴공에서 그래픽스와 암호관련쪽은 그래도 수학없이는 힘들지요.
Commented by 애자일컨설팅 at 2006/07/26 20:59
[퍼키] 그렇지. 내가 하려는 이야기이기도 한데, 프로그래머에게 가장 도움이 되는 수학 분야 중 하나는 이산수학이며(미적분이나 선형대수보다), 프로그래머는 수학의 한 두 분야를 깊히 아는 것보다 어떤 강력한 수학적 도구들이 존재하는지 그 메뉴판을 아는 것이 도움이 많이 된다는 것. --김창준
Commented by 송우일 at 2006/07/26 23:00
Numb3rs는 요즘 재미있게 보는 드라마 중 하나입니다. 보다 보면 수학을 재미있게(학교 다닐 때는 끔찍했던 기억뿐이라) 다시 배웠으면 좋겠다는 생각이 듭니다.
Commented by 영록 at 2006/07/27 01:18
메뉴판, 공감. 언젠가 공학수학 가르치던 교수님이 공학수학의 내용을 다 배우고 기억하는 게 중요한 게 아니라 나중에 필요한 내용이 생기면 뭘 찾아봐야 하는지 아는 것이 중요하다는 말씀을 하셨죠. 일견 비슷한 이야기인 듯.
Commented by 태우 at 2006/07/27 11:12
컴퓨터과학은 사실 기본적으로 수학의 한 분야라고 봐도 됩니다. 컴퓨터의 이론적 근간을 이루는 튜링머신부터 시작해서 기본적으로 수학의 한 브랜치에서 나왔거든요. 저는 개인적으로 컴퓨터과학 전공하면서 필수수강 수업의 반은 수학과목이었었습니다 ^^;
Commented by jk군 at 2006/07/27 11:43
근본적으로 수의 계산으로부터 모든게 이루어 지는 컴퓨터를 공부하면서 수학을 이토록 배제하고도 성과를 이룰수 있는가? 라고 자문하면서 수학의 필요성을 찾으려 하였으나, 일부 특정 분야와 알고리즘을 제외하고는 잘 찾지못하겠더군요. 잔뜩 기대됩니다 ^^
Commented by NoBody at 2006/07/28 14:23
현업에 가장 도움이 되는 수학의 분야는 (엔지니어/ 비 엔지니어를 막론하고) 확률과 통계입니다. "예측"이라는 행위를 하는데 꼭 필요하지요.
프로그래밍이라고 분야를 줄이면 꼭 필요한 것은 [이산수학]이 맞습니다. 하지만, [이산수학]이라는 분야에 비해서 학부에서 가르치는 내용은 맛보기에 지나지 않습니다.
현업에 사고 방식에 도움이 되려면 [집합론]과 [정수론]이 도움이 됩니다.
Commented by 잘 놀자 at 2006/09/19 20:09
안녕하세요~. 혹시 언제 쯤 포스팅하실 예정이신지......많이 기다리고 있습니다.
Commented by 카페모카 at 2006/09/19 23:15
수치해석은 거의 행렬입니다.- _ -
Commented by 종소리 at 2006/10/05 19:24
김창준님 덕분에 Numb3rs 아마존에서 주문했습니다. 꼭 봐야겠네요. 보충된 글 계속 기다리겠습니다.
Commented by 개멍 at 2006/10/18 21:00
Steve Yegge 가 한 얘기와 비슷하군요. 역시 고수들은 통하는 것인가...
http://steve-yegge.blogspot.com/2006/03/math-for-programmers.html
Commented by 박건혁 at 2006/11/02 06:32
아인슈타인이 극찬한 수학 교양서적들 중에는 어떤것이 있나요?
Commented by 조동연 at 2007/01/07 14:44
Courant, Robbins, Stewart What Is Mathematics ? 2Ed Isbn 0195105192 이 책입니다.
Commented by 이수정 at 2007/09/10 09:25
전 물리학을 전공한 신입 프로그래머 입니다. ^^ 다음 포스트(2탄 물리학 쉽게 공부하기)도 기대하겠습니다. 좋은 글 감사합니다.

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >


Site Meter