좀 오래되고 지극히 개인적인 사례지만 갤 이름이 수잘갤이니 적어본다.
원래 고등학교 때 미적분 배울 때는, '함수 f(x)의 정적분'을
「1. 관심을 갖는 독립변수의 범위에 한해서, 그 범위를 여러개의 구간으로 쪼개준다.
2. 그리고 각 구간마다 '(함숫값)(구간의 길이)'를 계산하여 결과값들을 구해준다.
3. 그리고 구간 하나당 하나가 나오는 그 결과값들을 모두 더해준다.
4. 그리고 나서 마지막 단계로, 구간을 쪼개는 횟수에다가 무한대로 향하는 극한을 취해준다'」
이렇게 배우잖아?
근데 예전에 대학교 입학했을 새내기 때 프로그래밍 과목 중 과제에서 C로 실수함수 미분, 정적분을 구현하는게 있었음.
(다항함수든 삼각함수든 뭐든간에 double MyFun(double); 이런 식으로 MyFunc라는 R→R 함수는 이미 제공된 상황에서)
그런데 이걸 직접해보면 저렇게 고등학교나 대학교 수학과목에서 정적분을 배웠듯이 '마지막에 극한을 취해준다' 같은 관점이 아니라,
애초에 첫 단계인 독립변수의 구간을 쪼개주는 단계때부터, dx=0.0001 이런 식으로 구간 길이를 정하고 그냥 첫단계부터 바로 구간을 수도 없이 여러개(그러나 그래봤자 유한개)로 쪼개버리거든?
근데 그렇게 프로그램 짜서 돌려도 이론값이랑 일치하는 결과가 나옴.
그래서 저 과제를 하고 나서부터, 머리속에서 정적분을 바라보는 관점이 하나 더 추가가 됐음. '마지막 단계로 극한을 취한다' 라는 관점 대신, 그냥 '처음부터 구간을 아주 잘게잘게 유한개로 쪼개준다' 라는 방식으로 바라볼 수 있는 관점이 생겼어.
사실 '어떤 함수 f(x)의 극한을 취한다' 라는 행동이 함수가 복잡할 경우 사칙연산처럼 머리속에서 직관적으로 이루어지는 연산은 아니잖아? 엡실론 델타 배우고 나더라도 '특정 조건을 만족하는 어떤 실수가 존재한다 or 존재하지 않는다의 여부'로 따지게 되니 여전히 덧셈 뺄셈만큼 직관적이진 않고.
근데 저렇게 정적분을 생각할 때 극한을 취한다라는 과정을 머리속에서 제거해버리고 '처음부터 잘개 쪼갠다'라고 바라보게 되면 정적분이 그냥 유한개 항의 합이 되어버리니까, 수열의 급수처럼 초등학생도 이해할 수 있는 단순 덧셈 연산이 되어버림.
그래서 정적분만 나오면 그 과정을 직관적으로 이해하는데 도움이 많이 됐던것 같음.
예를들어 확률에서 연속확률변수의 평균 분산 표준편차를 PDF로 정의할 때 그 과정을 이산확률변수의 PMF랑 연관 시켜서 대응시키는 방식으로 교과서에서 서술하는데, 저런 방식으로 생각하면 이해가 잘되더라고.
그리고 벡터 칼큘러스에서 면적분이랑 선적분 배울 때도 도움 받았던 느낌. 함수공간 내적 적분으로 정의하는것도 그냥 당연해지고.
그래서 내 생각에는 대학교 때보다는 특히 고등학교 때 저런거 한번 해보면 도움 많이 될거라 생각해. 직접 해보면 파이썬으로는 10분도 채 안걸리는데 얻는 건 그보다는 클테니까.
반대로 수학이 프로그래밍에 도움이 되는 사례는 당연한 보편적 상식으로 여겨지잖아? 근데 반대 케이스는 개인적인 썰이 없었어서 한 번 풀어봤음. 오늘도 좋은 하루 되라 얘들아
게임 프로그래머로서 공감이 가네
개인적으로 수학공부를 위한 프로그래밍을 고민중인데 혹시 더 얘기할 생각 있으면 답글좀
질문안받나요
반대로 엿먹었던 사례: 프로그래밍에서 =는 왼쪽에서 오른쪽으로 정의되는 것임에 반면 수학은 왼쪽과 오른쪽이 같은, 즉 reflexive한 관계임을 인지하지 못하면 개같이 고생함
그래서 수학에서도 대학교서부턴 := 이랑 = 구별해서 쓰잖아. 대입은 := 로 동치관계는 = 로.
ㅇㅈㅋㅋ