왜 수학잘하는사람은 프로그래밍을 잘한다 라는 흔한말이 나오게된거죠?

rkskekfk의 이미지

대부분 수학문제를 푸는것은 엄밀히말하면, 주어진상황을 주고
거기에 대해서, 머리속에 갖고있는 수학지식들[ex 정의,규칙(연산에 대한 교환법칙, 분배법칙), 정리 등]을 이용하여 주어진상황에대해 논리적으로 해석해내는게 다 잖아요.
(적어도 제가 푸는수학문제는 이런식으로 해석할 수 있습니다.
예를들어, 무한등비수열(x-3)^n이 수렴하도록 x범위 찾아라를
=> 무한등비수열(x-3)^n이 수렴한다는 상황이 있는데
이때 x범위는 뭐니?? 준상황에 대해 논리적으로 해석을하여 x범위 찾아라.)
어찌보면 '탐정놀이'하는거죠.
폐쇄됀 방A에 사람1,2가 있다. 이때 사람2가 누군가에 의해 죽었다. [준상황]
보이고자하는결론: 이때 사람2를 죽인사람은 뭐니??
너가 갖고잇는 지식으로 '준상황'에 대해 논리적으로 해석해서 사람2를 죽인사람을 찾아라.

근데 프로그래밍은
[프로그래밍에대해선 아주 기초적인거밖에 모릅니다만..]
수학문제푸는것과는 다르게, 어떤 목적을 달성하기위해 컴퓨터에게 이렇게 명령하고 명령하고 명령하고..라는식의 계획을 짜는거자나요.
근데 어떻게 수학 잘하는사람이 프로그래밍을 잘한다. 라는 흔한말이 있는건가요?
주어진상황에 대해 갖고있는 지식을가지고, 논리적으로 해석하는것과
어떤목적을 달성하기위해 주어진지식[누군가 만들어 놓은 함수[가령 include studio에 있는 printf함수], call 함수, if,else같은 명령어 등등]을 활용하여
컴퓨터 보고 이렇게 해라 저렇게해라 계획을 짜는것
은 분명 다른성질인데, 왜 수학 잘하는사람이 프로그래밍을 잘한다.라는말이 나오게된건가요?
여기서 수학잘하는사람은 단순히 수학지식이 많은사람을 말하는건 당연히 아닙니다..

그냥 궁금합니다. 암만 생각해도 서로 다르자나요.. 피아노연주하는거랑 프로그래밍하는거랑 다르듯이 수학하는거랑 프로그래밍하는거랑도 다르게보이는데

세벌의 이미지

단순히 남이 짜 놓은 것에 몇 글자만 바꾸는 정도의 프로그램 할 때는 수학적 논리적 지식이 그다지 필요하지 않을 수도 있습니다.
그러나, 좀 더 수준 높은 프로그램을 하려면 도움이 됩니다.

프로그래머들도 수준이 천차만별이지요.
1부터 10까지 더하기 하는 프로그램 짤 줄 아는 사람.
임의의 수가 주어지면 1부터 그 수까지 더하기 하는 프로그램 짤 줄 아는 사람.
어떤 복잡한 업무를 분석하여, 그에 따른 업무를 편하게 하기 위해 프로그램을 짤 줄 아는 사람 등등등.

snowall의 이미지

엄밀히 말해서 모든 프로그래밍 문제는 수학 문제입니다. (그 역은 아니지만.)

수학은 주어진 공리에서 시작해서 여러가지 정리를 증명하면서 발전하는데, 다음 정리를 증명하기 위해서 여러가지 이미 증명된 정리를 사용하게 되죠

프로그래밍도 몇가지 문법에서 시작해서 여러가지 함수를 만들고, 이 함수를 제대로 작동시키기 위한 잘 작동하는 다른 함수들을 사용합니다.

피할 수 있을때 즐겨라! http://melotopia.net/b

rkskekfk의 이미지

수학은 주어진 공리에서 시작해서 여러가지 정리를 증명하면서 발전하는데, 다음 정리를 증명하기 위해서 여러가지 이미 증명된 정리를 사용하게 되죠
프로그래밍도 몇가지 문법에서 시작해서 여러가지 함수를 만들고, 이 함수를 제대로 작동시키기 위한 잘 작동하는 다른 함수들을 사용합니다.

꼴은비슷해보일지몰라도, 그 내용은 영 딴판 아닌지요?
여러가지 정리를 증명한다. : main함수가 아닌 여러가지 함수를 만든다.
다음 정리를 위해 여러가지 증명된 정리를 사용한다. : 함수를 만드는데 {call 다른여러가지함수] 를 사용한다.

정리를 증명한다는게,
주어진공리에서, 어떤 수학적개념을 상상하고 그것을 정의해두면,
이제 그 정의한 것에 대해서 어떤 사실관계가 숨어있나를 찾아내는건데
ex), 행렬을 정의하고, 행렬의 덧셈을 정의했다면, 이 행렬의 덧셈에 대해서[준상황] 갖고있는 지식으로(실수의 덧셈의 대한 교환법칙,결합법칙), 일반적인 어떤사실관계를 찾아내서 행렬의 덧셈에 대한 교환법칙,결합법칙...
ex2) 유클리드5공리에서 시작해서 직각삼각형 을 정의했다면, 그 직각삼각형에 대해서[준상황] 갖고있는 지식(보조선이라는 '안경') 으로 일반적인 어떤사실관계를 찾아내면 피타고라스정리라는.....

즉 탐정놀이하는거죠..

그런데 여러가지 함수를 만든다.. 는 그게 아니고
그냥 갖고있는지식(명령문 문법, 누군가 만들어놓은 함수 등)으로 이래라 저래라 컴퓨터에게 순서대로 명령을 내리는과정이자나요.. 어찌보면 기획비스무리하달까;;

qiiiiiiiip의 이미지


수학의 아주 작은 부분과, 프로그래밍의 아주 작은 부분을
비교하면서 서로 다르다고 생각하시는 것 같네요..

프로그래밍의 세계도 UI가 많은 코딩도 있고, 시물레이션 코드도 있고, 커널코드도 있고,
엄청나게 넓은 범위를 다루죠..
수학이야 더 말할 필요도 없겠고요.. ( 수학자눈에는 모든게 수학으로 보일듯... )

그래도 두 분야가 공통으로 반드시 필요로 하는 자질이 있는데, 그 중 가장 중요한 것이
"논리"입니다.. ( 수학 그 자체가 논리죠.. )

논리적인 사고를 잘할 수 있어야만 수학도 잘하고, 프로그래밍도 잘 짭니다..

qiiiiiiiip의 이미지

전산학과의 많은 과목들이 수학과 직접적인 연관을 가지고 있죠..

이산수학이야 말할 필요도 없이 수학이고..
알고리즘이나 자료구조도 수학이 많이 필요하죠..

그밖에 집합,논리,선형대수,확통,최적화 등 수학의 많은 요소들이 깊이 사용될 수 밖에 없습니다..

snowall의 이미지

컴퓨터가 해결하는 모든 문제는 입력 n에 대해서 출력 f(n)을 만드는 문제입니다. 운영체제도 그런 일을 하고 있고 카트라이더도 그런 일을 하고 있죠.

수학은 반대로 입력 n에 대해서 f(n)이 가진 특성을 규명하는 문제를 해결하죠. 컴퓨터는 f(n)을 사람이 적절히 만들어 줄 수 있습니다. 문제는 f(n)이 우리가 원하는 바로 그놈인가하는 것인데, 그것을 증명하기 위해서 수학을 사용하게 됩니다. f(n)을 구성하는 보조 함수들이 올바르게 작동하고, 보조 함수들이 올바르게 작동하 때 f(n)이 원하는대로 작동하는 것을 증명한다면 f(n)은 우리가 원하는 함수가 되죠.(놀랍게도 이건 전산 문제가 아닌 수학 문제입니다.)

이건 순수하게 수학의 특성과 어떻게 연관되는것인지만 본 것이고, 앞에서 다른 분이 언급하신대로, 프로그램을 만들기 위한 여러 문제의 해결 방법이 수학에서 주어집니다. 포토샵에 들어가는 각종 필터들, 아바타를 만든 실감나는 컴퓨터 그래픽, 운영체제의 컴퓨터 자원관리, 등등 아주 많죠. 스타크래프트의 유닛들 움직이는 인공지능도 수학 문제예요. 요새 뜨고 있는 아이폰의 음성인식 시리도 그렇고.

프로그래밍을 잘하는 사람을 살펴보면 꽤 구조적으로 생각합니다. 수학자들도 그렇고. 프로그래머들이 수학을 안 좋아할 수는 있지만, 문제의 용어를 바꿔주면 잘 풀거예요. (아니면 어디에 답이 있는지 검색하거나)

예를 들어, 4차원 행렬의 고유값 구하는 문제는 어려울 수 있어도, 3차원 물체가 컴퓨터 그래픽으로 구현되었을 때 보는 위치와 각도를 바꾸면 어떻게 바뀌어야 하는지 구하는 문제는 쉽게 풀 수도 있죠. 둘은 같은 문제입니다.

피할 수 있을때 즐겨라! http://melotopia.net/b

february28의 이미지

님이 생각하는 기획 비스무리한 프로그램은 누구나 다하지만, 수학이나 더 심층적인 알고리즘은 아무나 사용못하니까 그런거 아니겠습니까..

--------------------------------------------------------------------------------
open source, open teaching, 천기누설이 꿈~ 은 개뿔...
--------------------------------------------------------------------------------

klutzy의 이미지

언급하신 수준의 프로그래밍은 수학이 아니라 '산수'에 대응해야 할 것 같습니다. 산수와 수학이 다르며 산수를 사용해서 수학 문제를 해결하듯, 단순히 프로그램 코드를 짜는 것과 '프로그래밍을 한다'는 것은 다릅니다.

cleansugar의 이미지

Predicting student performance in a beginning computer science class
http://dl.acm.org/citation.cfm?id=5701

"This study investigated the relationship between the student's grade in a beginning computer science course and their sex, age, high school and college academic performance, number of mathematics courses, and work experience. Standard measures of cognitive development, cognitive style, and personality factors were also given to 58 students in three sections of the beginning Pascal programming class. Significant relationships were found between the letter grade and the students' college grades, the number of hours worked and the number of high school mathematics classes. Both the Group Embedded Figures Test (GEFT) and the measure of Piagetian intellectual development stages were also significantly correlated with grade in the course. There was no relationship between grade and the personality type, as measured by the Myers-Briggs Type Indicator (MBTI); however, an interesting and distinctive personality profile was evident. "

Math proficiency: a key to success for computer science students
http://dl.acm.org/citation.cfm?id=358140

"A computer science aptitude predictor was administered to students enrolled in a first technical course in computer science to determine potential for success. The study revealed significant differences in the scoring between students who withdrew from the course and those students who did not. The causes for the differences all related to the students' mathematical background: high school performance, previous computer science education, and the number of college mathematics courses taken. "

컴퓨터 실력은 프로그래밍, 알고리듬, 관리, 하드웨어 등을 잘하냐로 나눌 수 있습니다.

이 중에서 전산과 성적은 고등학교 수학 성적과 비례한다고 합니다.

프로그래밍은 알고리듬을 다루는 수학적인 부분과 언어와 함수를 구사하는 언어적인 부분이 합쳐져 있습니다.

성공적인 소프트웨어는 그 소프트웨어가 얼마나 널리 오랫동안 복제되는가로 측정할 수 있다고 생각합니다.

코드가 얼마나 많은 컴퓨터에서 몇 년간 지속되는지를 말입니다.

그런데 저작권법, 특허란 제도 때문에 돈이라는 변수가 끼어있습니다.

우수한 코드도 가격이 비싸면 복제가 덜 되고 금방 단종되는 경우도 있고, 저질 코드도 싸면 복제가 잘 되는 등으로 왜곡합니다.

그밖에는 컴퓨터가 도구다 보니까 프로게이머나 디자이너, 작곡가가 잘 하는 컴퓨터 분야도 있겠지요.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

익명_사용자의 이미지

대학에서 수학이나 통계를 전공하는 학생들을 대상으로 프로그래밍을 가르쳐본 경험이 있습니다.
걔네들도 필수교양(??)그런식으로 컴터 1,2학년과목 몇개를
필수적으로 들어야하더군요.

수학적 사고는 어느정도의 필요조건일지언정 충분조건이 아닙니다.
따라서,
"수학잘하는 사람은 프로그래밍을 잘한다"는 잘못된 말입니다.

프로그래밍을 할때는 논리적인 사고를 하는것도 중요하지만
컴퓨터를 이해하며, 컴퓨터처럼 생각해야합니다.
특히, 제가 마치 컴퓨터인마냥 컴퓨터랑 교감(??)을 하며 코드를 짜야 좋은 프로그래머가 되는데

수학을 하는 친구들은, 컴퓨터는 그냥 계산기일뿐이고, 단지 수학적문제를 푸는데 집중을 합니다.
그러니, 그 친구들은 좋은코드나 좋은 디자인을 짜지 못하더군요. 알고리즘은 이해를 해도
컴퓨터를 이해하지 못하기에 생기는 문제들입니다.

그냥 정말 수학만 잘하고, 컴퓨터가 되어서 생각할줄모르기에 저는 수학잘하는 사람이 프로그래밍을 잘한다는 가정은 잘못되었다고 말합니다.

프로그래밍을 잘 하기위해선 수학적 사고가 필요합니다.
하지만, 프로그래머가 되기위해서는 컴퓨터처럼 생각하는것(컴퓨터적 사고방식)이
수학적 사고 방식보다 더 중요합니다.

수학적 사고방식은 프로그래머가 되기위한 어느정도의 최소한의 요구사항일뿐입니다.

xgate의 이미지

수학을 잘하면 반드시 프로그래밍을 잘하는건 아니지만,
프로그래머가 수학을 잘하면 유리한건 맞다고 생각합니다.

1부터 n까지 합을 구한다고 했을때..

int sum = 0;
for(int i=1; i<=n; i++) sum += i;

이렇게 구현하는 사람이 있을것이고

sum = (n*(n+1))/2;

이렇게 하는 사람이 있을텐데.

전자는 O(n), 후자는 O(1)이 되는데..
후자쪽이 수학적 사고가 더 좋다고 봐야하지않을까 합니다.