프로그래밍에서 수학의 비중

otaku의 이미지

수학하던 사람은 왜 이렇게 프로그래밍을 빨리 배우나요? 완전 천재네요. (피아노 고수였던 사람이 다른 악기도 쉽게 배우는 것처럼?) 그래서 요즘 수학에 대해 깊이 고민중 입니다. 요즘 보고 있는 책들도 수학과 관련된 프로그래밍 책이네요. 실제로 과거에도 수학을 하던 사람이 프로그램쪽으로 와서 성공한 경우가 상당히 많은 것 같습니다. 그리고 프로그래머로써 아주 높은 수준까지 오르기 위해서는 수학실력도 어느정도 필요한 것 같구요. 결국 프로그래밍도 수학의 다른 표현이라는 생각이 듭니다.

kldp분들은 수학공부 어떻게 하고 계신가요?

semmal의 이미지

프로그래밍 논문을 보다보면 대수학과 논리학에 대한 공부의 필요성을 자주 느끼게 됩니다.
또한 함수형 언어를 공부하다보면, 정수론과 집합론, 범주론에 관심을 가지게 됩니다.
3D 쪽을 보게되면 기하학과 해석학을 알아야겠다는 생각이 들지요.

문제는 필요성은 느끼는데, 공부하는 방법도 잘 모르겠고, 돌머리라 어찌어찌 해봐도 제대로 이해를 못한다는 거지요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

jeongheumjo의 이미지

일반 기업에서는 글쎄요... 전혀 필요 없지요..
수학이 필요한 코드는 이미 라이브러리에 다 들어가 있거든요.
현업에서는 그러한 라이브러리들을 사용만 합니다.
예를 들어 전문적인 비전 관련 개발을 하는 팀에서도 라이브러리는 OpenCV 같은 공개 라이브러리를 사용을 해요.
개발팀에서 하는 건 라이브러리를 시스템 프로그램에 잘 적용하는 작업이죠.
그러니까 대학원이나 극소수의 연구소같은데서 OpenCV 같은 라이브러리를 개발하는 개발자 혹은 연구원이 되려면 수학이 꼭 필요하지만,
99프로의 나머지 직업 프로그래머들은 수학 안씁니다.

수학 실력 쌓는 것과 프로그램 실력 쌓는 것은 별개인 것 같아요.

yoojioh의 이미지

수학을 공부하던 사람이 프로그래밍을 빨리 배우는 것은
프로그래밍에 필요한 논리가 수학을 공부하는데에 있어서 초특급필수여서 그런게 아닐까 합니다.

간단한 소팅 같은 것만 해도 수학적인 사고력이 받쳐주는 사람은 금방 배우는 걸 주위에서 많이 보았고,
저도 수학과에서 전산을 복수전공으로 추가하는데에 코딩에 시간이 더 걸리는 것을 제외하고는 많이 어려움이 없었던것 같아요.

그런데 위에 말씀하신대로 필드에서는
그런 툴을 개발하거나 새로운 알고리즘을 만들어내는 경우가 아니라면
그 내부를 이해하는데 더 도움이 될 뿐이지
라이브러리를 가져다가 사용하는데에 꼭 공부해야 하는건 아니라고 생각합니다.

Randomized QuickSort의 average complexity를 구하는 과정을 모르더라도 qsort 쓰면 잘 되니까요.

dn3li의 이미지

대학 또는 대학원의 컴퓨터 과학 학과 커리큘럼에 속한 교재들을 보면 수학 뿐만 아니라 또 다른 기본 과학 분야인 물리학, 화학 등을 왜 어릴 때 부터 선생님 또는 교수님들이 그토록 열심히 가르쳐 주셨는지 이해하실 수 있으실 겁니다.

수학하던 사람이 프로그래밍을 빨리 배우는 사례가 글 쓰신 분 주위에 계신 것 같은데, 역으로 학부때 부터 컴퓨터 과학만을 하시던 분이 수학 또는 물리학 분야로 옮겨서도 잘 하시는 박사 연구원 분들 또는 교수님들이 제 주위에 계십니다.

코드멍키 수준에서 수학은 몰라도 될지 모릅니다. 하지만 먼저 답변주신 분들 말씀처럼, 어느 정도 수준이상을 공부 또는 연구하려면 수학을 비롯한 기초 과학 지식은 필수 불가결 하다고 생각합니다. 아니 정말 그러합니다.
학부에서 컴퓨터 과학을 전공하신 분이라면, 학부 커리큘럼 가운데 오토마타나 인공지능 등과 같은 과목을 이수하셨다면 어느 정도 수준이상의 수학 지식이 필요함을 느끼실 수 있다고 생각합니다.

성인이시라면, 수학 지식을 늘릴 수 있는 가장 좋은 방법은 대학 또는 대학원 수업을 듣는 것이라고 생각합니다. 정식 입학을 하지 않고 성인들에게 학부 또는 대학원 수준의 수업을 제공하는 학교가 국내에 있는지는 모르겠습니다. 적어도 제가 다시는 대학원 그리고 대학교에는 없네요.
해외 특히 북미 지역 일부 대학에서는 웹을 통해서 강의를 들을 수 있는 서비스를 제공한다는 것을 몇해 전에 들어본 적이 있습니다. 하지만 직접 들어본적은 없습니다.

semmal의 이미지

수학의 힘을 과소평가하시는 분들이 많은 것 같은데 프로그램의 규모가 커지면 커질수록 수학은 중요해진다고 봅니다.
예를 들어서, OOP를 이용해서 모듈을 어떻게 설계하는 것이 좋은지 고민중이라고 해봅시다.
대수와 논리에 강하다면 어떻게 나누는 것이 적당한지 찾을 가능성이 훨씬 큽니다.
왜냐하면, 대수는 말 그대로 수를 대신해서 문자(프로그래밍 언어로 치자면 Object)를 다루는 학문이며, 논리 또한 것(Object)간의 관계로 부터 결론을 도출해내거나, 그 관계가 참인지(제대로 동작하는지) 가려낼 수 있는 학문이기 때문입니다.
게다가, 언어적인 측면만 돌아봐도 되돌기(recursion;재귀)는 수학적 귀납법을 바탕으로 하고 있고, Datatype은 따지고보면 집합론에 그 근본을 두고 있으며, Class는 약간 다르기는 하지만 범주론으로 해석할 수 있습니다.
좋은 설계는 결국 요약(Abstraction;추상)을 잘 쓰는 것이고, 이 요약은 본래 수학에서 출발한 것이므로 수학에 대해 이론적으로 깊은 이해를 하고 있을 수록 쓰기가 쉽다고 생각합니다.

문법이야 문법책 보면 되지 수학 필요 없지요.
코드분석이야 툴 쓰면 되지 수학 필요 없지요.
테트리스 게임 수준의 프로그램을 만들거라면 수학 필요 없지요.
있는 라이브러리 붙여서 쓴다면 수학 굳이 필요 없지요.

하지만 여러 모듈이 엮이고 꼬이는 큰 프로그램을 만들고, 이 프로그램을 만들면서 좋은 설계를 할거라면 수학에 대한 안목은 필수라고 봅니다.
프로그래밍 교재들이 왜 별 재미도 없는 명제(Proposition)나 공리(Axiom), 정리(Theorem)부터 들이대는지 깨달을 필요가 있다고 생각합니다.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

dalmagi의 이미지

얼마전까지 독학학위 전공중에서 수학과가 있었는데 인원이 적다는 이유로 폐지 당했습니다.

성인이 수학을 재공부하기 위해서 독학학위제가 아주 딱이라고 생각했는데, 이런거 보면 우리나라는 참 이해가 안됩니다.

---

화이팅(fighting) 말고 화이트닝(whitening) 하면 안되나요.

djinni의 이미지

일반 공대의 기본 과정에 들어간 수학만 제대로 이해해도 충분합니다.
그정도만 알아도 논문 이해하는데는 문제 없고요.
그 이상이 필요한 경우는 거의 없을듯.

이공계열 출신이면 예전에 배웠던 것을 복습해보면 좋을것 같네요
근데 저도 그때그때 필요할 때만 슬쩍 보고 마는 수준......

cwryu의 이미지

육상을 하던 사람이 축구를 잘 할 가능성은 매우 높지만 축구를 하는 모든 사람이 축구를 위해 육상을 배우지는 않죠. 뭔들 배워서 나쁜게 있겠냐마는, 굳이 프로그래밍 수준을 높이려고 대학 수준의 수학을 공부해야 되는지는 의문입니다.

저도 컴퓨터과학을 전공했고 필수로 여러 수학 과목을 들었지만 거기서 말하는 지식들이 오늘날 필요한 프로그래밍 능력에 필수라고 생각하지는 않습니다.

comafast의 이미지

컴퓨터의 기원, 프로그래밍 언어의 근간이 수학의 '기호논리학'에 있기 때문에
적응을 잘하는것이 아닐까합니다.

수학표기법 = 프로그래밍 언어
수학자의 두뇌 = 컴퓨터

이런식으로 무식한 추상화를 하면, SW공학에서 분업화에 의한 대량 생산과정을
수학자는 혼자서 처리합니다. 분석/설계/구현/테스트를 두뇌와 연필만으로 모두하는 것이죠

수년에서 수십년동안 수학을 공부한 사람의 경험, 통찰력, 고도의 추상화 능력은
컴퓨터과학 및 프로그래밍에서도 매우 유용합니다.
분석/설계 과정에서 RealWorld를 모델링하는 방법에서는 더더욱 중요하지 않을까 합니다.

수학은 필수라고 생각합니다. ㅠㅠ

niuzeta의 이미지


칼국수 만들 수 아는 요리사가 수제비 만들 수 있는 게 신기할 건 없지요(?)

...And all in war with Time for love of you,
As he takes from you, I engraft you new.

-Sonnet XV

...And all in war with Time for love of you,
As he takes from you, I engraft you new.

-Sonnet XV
전산계획설계사 지망 영문학과생

speed-racer의 이미지

수학과 프로그래밍은 추상적인 것을 자연언어가 아닌 독특한 언어로 명확하게 표현한다는 공통점이 있어서가 아닐까요. 수학 지식보다는 수학을 할 때 익히는 사고방식이 도움이 됩니다.