우선 : 저는 수학자입니다. (수학에 대한 대가를받는 전문가) 전문가입니다. 나는 프로그래머가 아니다 . 나는 몇 가지 프로그래밍을하지만 Cargo Cult 다양성 ( https://tex.stackexchange.com/q/451/86에 대한 첫 번째 주석 및 내 응답 참조)을 수행하며 일반적 으로이 문제를 해결할 수있는 종류는 없습니다. 사이트 (실제로 TeX 대화방에서 링크를 본 후이 답변을 게시하기 위해 여기에 등록했습니다).
내 대답의 요약은 다음과 같습니다. 수학은 프로그래밍 입니다.
나는 최근에 수학 이외의 학생들에게 수학 과정을 가르쳐야했습니다. 그들은 프로그래밍 섹션이었습니다. 나는 이것이 환상적이라고 생각했다! 마침내 저는 기본 아이디어 를 이미 이해 하고 수학을위한 기초 툴킷을 이미 가지고있는 사람들에게 수학을 가르 칠 수있게되었습니다 . 실제로 얼마나 많은 사람들이 프로그램을 작성했는지 묻고 0과 1 사이의 답을 얻었을 때 나는 매우 실망했습니다.
계속하기 전에 몇 가지 사항을 명확히해야합니다. 프로그래밍과 직접 관련이있는 수학 영역이 있으며 알고리즘을 평가하고 언어를 분류하는 것과 관련이 있습니다. 나는 그것에 대해 이야기하고 있지 않습니다. 모든 수학을 컴퓨터가 평가할 수있는 공식 언어로 번역하려는 프로그램도 있습니다. 이것은 내가 말하고있는 것에 조금 더 가깝지만 그것에 초점을 맞추려면 내가 말하려는 주요 부분을 놓칠 것입니다. 내가하는 수학과하는 프로그래밍은 주제와 거의 관련이 없습니다. 그들 사이의 연결은 다른 수준에 있습니다.
시작하려는 곳은 주요 질문에 대한 의견입니다.
그것이 수학을하고 있다면, 모든 인간 활동은 수학의 한 형태입니다. 이 경우 수학이라는 단어는 하나의 활동을 다른 활동과 구별하는 데 사용할 수 없으므로 유용한 의미가 없습니다.
네, 수학을하고 있습니다. 그러나 "수학"은 여전히 유용한 단어입니다. 왜냐하면 노래에서 "이것은 당신이하는 것이 아니라 당신이하는 방식"이기 때문입니다. 나는 수학적인 방법으로 무언가 에 접근 할 때 수학을하고 있다고 말할 것 입니다. 때때로, 그것은 "하드 코어"수학입니다 : 정의의 공식화, 이론 증명. 때로는 그렇지 않습니다. 때로는 아이들이 철자 단어를 배울 수 있도록 바보 같은 작은 프로그램을 작성하고 있습니다.
이것이 내가 프로그래밍 할 때 수학이 도움이되는 것입니다.
추상화 이것은 아마도 수학에서 가장 중요한 양도 할 기술. 이것은 불필요한 모든 것을 제거하고 중요한 속성에 집중할 수있는 능력을 의미합니다.
관점 I 만 선택할 수 있다면 하나 내 모든 학생들이 배울 수 있었다 일을,이 그것을 것 : 문제에 맞게보기 사람 지점을 변경하는 기능. 우리는 일반적으로 기초 대수 변화 공식 (끔찍한 행렬과 끔찍한 합병증으로 이어짐)을 사용하여 선형 대수학에서 이것을 처리하지만 그보다 훨씬 더 적용 가능합니다. 마음에, 무언가가 한 방식으로 당신에게 제시 되었기 때문에, 그것이 당신이 그것을 사용하는 방식 일 필요는 없다는 생각입니다. 이것은 사물 자체에 대한 관점을 제시된 방식과 분리시킵니다. 이것은 매우 실용적 일 수 있습니다. 무엇인가 유용 하거나 효율적으로 만드는 것입니다. 벡터 목록이 있고 x 좌표 목록과 y 좌표 목록으로 저장하는 것이 더 효율적 이라면 그렇게하십시오 .
위에서부터 형태 대 기능 ; 일이 여러 가지 방법으로 제시 될 수 있다면 하나의 특정 프리젠 테이션는 말을 더 이상 공정하지 것. 그 노래를 다시 인용하기 위해 : "그것은 당신이 하는 것이 아닙니다 . 당신이 하는 일 이 중요합니다."
나는 계속할 수 있었지만 그것들은 떠오르는 사람들입니다.
지금까지 내가 작성한 것에 대해 (음의) 많은 반응이있을 것입니다. 하나는 "이것은 수학이 아닙니다, 그것은 좋은 의미입니다." (또는 나쁜 의미) "모든 인간 활동은 수학의 한 형태"라는 감정에 동의하는 위의 언급을 언급합니다. 또 다른 문제는 "이것은 문제의 수학의 유형이 아닙니다."입니다. 이것은 거의 사실입니다. 그리고 여기서 저는 "적어도 10 년 동안 수학을 건드리지 않았습니다"라고 말한 사람과 더 동정심을 가지고 있습니다. 물론 프로그램 을 작성할 때마다 수학을하고 있었기 때문에 10 년 동안 수학을 해왔습니다 . 그들은 그것을 깨닫지 못했습니다.
나는 실제로 내 프로그램에서 "실제 수학"을 사용합니다. 최근에 데이터에 적용해야 할 투영 및 기타 변환을 파악하기 위해 일부 수학을 사용하는 재미있는 3D 모양 탐색기를 코딩했습니다. 나는 실제로 자신이 쿼터니언을 코딩하는 것을 알기 위해 즐겁게 즐겼다! 그러나 물론 관련된 수학은 내가 일할 때하는 수학에 비해 사소한 것이 었습니다. "봉투 뒷면"물건이었습니다. 그런 종류의 수학, 나는 당신이 그것을 필요할 때 그것을 고르는 정서에 동의합니다. 그리고 당신이 Wikipedia에서 찾을 수있는 것보다 더 복잡한 것이 필요하다면, 당신을 위해 실제 수학자를 찾으십시오. 그러나 필요할 때 집어 올릴 수 있으려면 무언가를 배워야 합니다.. 그 일은 실제로 사용하는 것이 아닐 수도 있지만, 무언가가 나중에 인생에서 실제로 사용하는 것을 쉽게 찾을 수 있다는 것을 알게되었습니다. 당신이 배울 필요합니까 : 나는 코더에 동의하지 않을 경우 그래서는 어떤 혹시 사용하려는 경우 수학을 어떤 수학을하고 당신이 그것을 배울 필요가 수학적 측면에서 (그런데, 증명 정리를 의미하지 않는다).
마지막으로 "수학은 프로그래밍"입니다. 좋은 프로그래머가되는 것으로부터이 모든 것을 배울 수 있습니다. 당신이이 일을 배운다면, 당신은 우리가 벡터 공간에서의 벡터에 대해 이야기 할 때 다음이 클래스의 바로 인스턴스의 이해 때문에 훨씬 쉽게 수학을 발견 할 것이다 Vector
우리가 모든 것을 할 수 있다는 것을 의미 Vector
하지 않습니다에를 해당 예 : 더하기, 빼기, 크기 조절 등. 그렇기 때문에 프로그래머에게 수학을 가르치고 싶습니다. 그러나, 수학자로 말해서, 나는 말할 것이다 첫번째이 중 "추상"은 수학이 추상화를 추구하기 때문에 프로그래밍보다 수학에서 배우기가 더 쉽습니다. 우리가 어떤 행동을 볼 때마다 우리의 훈련은 항상 "그런 식으로 행동하게 만드는 것에 대해 무엇입니까? 내가 비슷한 다른 것을 취하면 같은 방식으로 행동합니까?"라고 묻는 것입니다. 그런 행동을 멈추기 위해 잃어야합니까? " (이것을 극단으로 가져 가면 "지네 수학"이 나옵니다. 용어를 찾으십시오). 그러나 우리는 (실제로) "실제"객체 (그것이 무엇이든)로 이것을하지 않습니다. 우리는 이미 추상화 된 것들로 이것을합니다.
이것은 오랫동안 지속되어 왔기 때문에 고전적인 수학자 농담 중 하나와 가까이 해 보겠습니다.
수학자와 물리학자는 모두 24 차원 공간과 관련된 새로운 모델에 관한 세미나에 참석했습니다. 그 후, 그들은 그것을 논의하고 물리학자는 다음과 같이 말했습니다. "정말 힘들었습니다. 24 차원 공간을 어떻게 시각화합니까?" 수학자는 "아, 쉬워요. n 차원 공간을 시각화 한 다음 n = 24로 설정하면됩니다."라고 대답했습니다.
추가 2012-03-2
이 답변에 대해 다양한 견해를 표현하는 의견이 상당히 많았습니다. 이것들은 이제 내가 내 대답에 그것들을 포함 시키거나 (또는 그들에게 응답하려고) 이해한다는 것에 대한 중재자에 의해 삭제되었습니다.
그러나 나는 할 수 있는지 확실하지 않습니다. 이 의견과이 페이지의 나머지 내용을 읽으면 수학이 실제로 무엇인지에 대한 큰 오해가 있다는 결론에 도달 할 수 있습니다. 또한 나는 그것을 설명 할만큼 유능하다고 생각하지 않습니다. 다행히 누군가 누군가 이미 Lockhart 's Lament에 연결 했으므로 이에 대한 설명을 연기하겠습니다. 나는 과학적 환경에서 자라면서 수학의 실험적 특성에 더 중점을 두었을 때 다르게 다르게 생각했을지 모르지만, 나는 그것을 더 잘 넣을 수는 없다고 생각한다 .
나는 아직도 무언가를 추가 할 수 있다고 생각합니다. 수학 이 무엇인지에 대한 오해뿐만 아니라 "수학을하는 것"이 무엇을 의미하는지에 대한 오해도 있습니다. 나는 거의 모순되는 두 가지 입장을 봅니다.
수학은 방정식과 공식에 관한 것입니다. 따라서 Wikipedia가 존재하기 때문에 그것을 연구 할 필요가 없습니다 (이것은 Diderot에 대한 Euler의 묵시적 도전 과 거의 반대입니다 ).
수학은 정리와 정의에 관한 것입니다. 따라서 프로그램이 아무것도 입증하지 않기 때문에 연구 할 필요가 없습니다 (이것은 좋아하는 오류를 여기에 삽입하는 것과 같은 오류입니다).
두 가지 입장이 서로 모순되는 동안, 그들은 같은 장소에있게됩니다. 프로그래머가 수학을 배우는 데는 아무 소용이 없습니다. 가장 확실한 것은 수학자가 아닙니다! 결국, 그들은 무엇에 대해 알고 있습니까? 프로그래머가 정말로 알아야 할 것은 Wikipedia에서 찾을 수 있거나 다른 사람을 막을 수 있습니다.
위에서 나는화물 컬트 프로그래머라고 설명했다. 나는 대부분의 당신에게 개인적인 킥킥 웃음을 가지고 내기를 걸었다. "그래, 나는 네 프로그램이 어떻게 생겼는지 안다. (난 당신이 생각 확신하지만 당신은 아마 조금 잘난척하는 뛰어난 느낌 나쁜 잘난척과 뛰어난 느낌에 대해).
위에서 설명한 것은 Cargo Cult Mathematics입니다.
그래서 수학이 어떻게 작동하는지 이해하기 위해 약간의 수학을 배워야한다고 말할 때, 나는 내가 쓴 코드를 보았을 때와 똑같은 이유로 말하고 있습니다. StackOverflow에서 코드 잘라 내기 및 붙여 넣기를 중단하고 올바르게 수행하는 방법에 대해 조금 배웠 으면 좋겠습니다. "
그러나 가장 중요한 것은 수학자에게 배워야한다는 것입니다. 왜 그래? 여기 비유가 있습니다. 내가 가장 능숙한 언어는 TeX입니다. (정말로 말해요!). 이제 TeX에 대해 조금 더 배우고 싶다고 가정하고 Don Knuth가 마을에 있으며 TeX에 대한 자습서를 제공하겠다고 제안했습니다. 아니면 그냥 Wikipedia에서 그것에 대해 읽을 수 있습니다. 아니면 Perl과 Larry Wall, 또는 C # (정확한가요?)과 Jon Skeet 일 것입니다. 이 사람들이 최고의 교사 는 아니지만 그들이 아는 한도 내에서 그것을 보충 할 것입니다!
이것이 바로 수학자 입니다. 우리는 실제 언어를 쓰고 사람들이 사용하는 라이브러리를 쓰는 사람들입니다. 물론, 당신은하지 않습니다 이 정리 (theorem)을 증명하는 방법을 알고 - 당신이 라이브러리를 작성하지 않을거야! 그러나 우리가 어떻게 생각하는지에 대해 조금 알고 있다면, 우리가 라이브러리를 우리가했던 방식대로 쓴 이유를 이해하는 데 도움이 될 수 있으며 그것을 이해하면 더 잘 활용할 수 있습니다.
록 키트의 애도를 언급하는 것처럼 위키 백과에서 방정식을 찾는 것과 Poincaré 추측을 증명하는 것 사이에는 중간 근거가 있습니다. "나는 예술에 대해 많이 모른다. 그리고 Monet이되고 "ANY"키는 어디에 있습니까? " 돈 크 누스 당신이 여전히 대학에 있다면, 당신은 그들의 지역의 전문가이고 어떤 이유로 든 당신에게 그것을 설명하기 위해 기꺼이 시간을 보내려는 사람들로부터 배울 수있는 놀라운 기회를 가지고 있습니다.
내가 조금 더 확장하고 싶었던 또 다른 요점은 프로그래머로서 조금 더 수학을 배우는 것을 두려워하지 않아야하는 이유였습니다. 딥 커넥션도 아니고 유용하지도 않습니다. 컴퓨터를 프로그래밍하는 능력은 수학 학습에 직접 도움이 될 수 있습니다. 몇 가지만 언급하고 싶습니다.
변수 이해 그래서 많은 사람들이 "자연수로 보자 ..."와 같은 간단한 진술로 혼란스러워합니다. 또는 "엡실론> 0"으로 설정하십시오. 수학에는 변수 의 범위 를 기억하는 것이 중요한 장소가 있습니다 . 이것들은 모두 프로그래밍에서 일반적입니다. 수학적 진술을 프로그램으로 번역하는 법을 배우면 무엇이 무엇인지 추적하는 것이 훨씬 쉽다는 것을 알게 될 것입니다.
증거의 본질. 테스트를 작성했거나 다른 사람이 사용할 프로그램을 작성한 경우 증명의 핵심을 이해합니다. 그렇게 할 때 , 사용자가 무엇을 넣든, 그것을 처리 할 수 있다는 것을 알아야 합니다 (여기에 필수 xkcd 참조를 삽입하십시오). 그게 다 증거입니다! 것을 시연 무엇이든 은 "사용자 / 우주"에두고는 문을 개최한다. 실험가들은 "정상적인 상황에서 작동한다면 사실"이라고 기댈 것이지만, 프로그래머들은 항상 Alt + G + Shift + ÅØÆ를 시도하여 그 결과를 보는 아이가 있다는 것을 알고 있습니다.
마른. 이것을 유감스럽게 생각하지만 죄송합니다. 우리는 수천 년 동안 "우리 자신을 반복하지 않았습니다". 그렇기 때문에 선반에 유클리드 요소의 사본이 있으며 여전히 유용합니다 .
그리고 더 있습니다. 프로그래밍에 대해 조금 더 알고 있다면 "프로그래머를위한 수학"이라는 책을 쓰겠습니다. "프로그래머가 알아야하는 수학"을 가르치는 것이 아니라 "모든 사람이 알아야하지만 프로그래머를 위해 최적화 된 수학" . 그러나 누군가가 나와 공동 작업을 제안하지 않는 한 프로그래밍에 대해 충분히 알지 못할 것입니다.
나는 거기에 두겠습니다. 아마도 내가 더 생각하면 내가 쓴 것을 바꿀 것입니다. 잘하면 나는 그것을 더 잘 설명 할 것입니다. 몇 달 안에 나는 그것의 일부에 동의하지 않을 수도 있습니다. 누군가가 더 이상 논쟁하거나 달리 언급하고 싶다면 여기에 언급하지 않는 것이 가장 좋습니다. 당신은 나를 어디에서 찾을 수 있는지 알고 있습니다.