수학은 프로그래밍과 어떤 관련이 있습니까? [닫은]


89

방금 소프트웨어 개발 학위를 받았습니다. 지금 우리는 기본 Java와 같은 것으로 시작하고 있습니다. (그래서 맨 아래부터 말할 수 있습니다.) Java에서 "Hello World"를 수행하는 방법을 아는 것 외에는 프로그래밍 경험이 없습니다.

나는 수학이 코딩과 관련이 있다는 것을 계속 듣고 있지만 어떻게됩니까? 수학과 프로그래밍이 서로 어떻게 연관되거나 서로 의존 하는가를 보여주는 일반적인 예는 무엇입니까?

나는 내 질문이 모호하다는 것을 사과한다. 나는 코드 원숭이 학생으로 들어서고있는 세상의 종류에 대해 대략 생각하기 시작했다.


49
프로그래밍 수학입니다. en.wikipedia.org/wiki/Discrete_mathematics
SK-logic

25
@ 데이브, 그래서 나는 대답이 아닌 의견에 링크를주었습니다.
SK-logic

7
@FiascoLabs는 언어 구조와 논리도 수학의 하위 영역입니다. 프로그래밍은 수학에만 적용되는 것이 아닙니다.
SK-logic

19
관련이없는 메모에서 Java로 시작하는 것이 "하단부터"아닙니다.
Matt H

5
@CharlesE. 그랜트, 많은 수학 학생들이 똑같이합니다 (그리고 여전히 시험을 통과합니다).
SK-logic

답변:


137

우선 : 저는 수학자입니다. (수학에 대한 대가를받는 전문가) 전문가입니다. 나는 프로그래머가 아니다 . 나는 몇 가지 프로그래밍을하지만 Cargo Cult 다양성 ( https://tex.stackexchange.com/q/451/86에 대한 첫 번째 주석 및 내 응답 참조)을 수행하며 일반적 으로이 문제를 해결할 수있는 종류는 없습니다. 사이트 (실제로 TeX 대화방에서 링크를 본 후이 답변을 게시하기 위해 여기에 등록했습니다).

내 대답의 요약은 다음과 같습니다. 수학은 프로그래밍 입니다.

나는 최근에 수학 이외의 학생들에게 수학 과정을 가르쳐야했습니다. 그들은 프로그래밍 섹션이었습니다. 나는 이것이 환상적이라고 생각했다! 마침내 저는 기본 아이디어 를 이미 이해 하고 수학을위한 기초 툴킷을 이미 가지고있는 사람들에게 수학을 가르 칠 수있게되었습니다 . 실제로 얼마나 많은 사람들이 프로그램을 작성했는지 묻고 0과 1 사이의 답을 얻었을 때 나는 매우 실망했습니다.

계속하기 전에 몇 가지 사항을 명확히해야합니다. 프로그래밍과 직접 관련이있는 수학 영역이 있으며 알고리즘을 평가하고 언어를 분류하는 것과 관련이 있습니다. 나는 그것에 대해 이야기하고 있지 않습니다. 모든 수학을 컴퓨터가 평가할 수있는 공식 언어로 번역하려는 프로그램도 있습니다. 이것은 내가 말하고있는 것에 조금 더 가깝지만 그것에 초점을 맞추려면 내가 말하려는 주요 부분을 놓칠 것입니다. 내가하는 수학과하는 프로그래밍은 주제와 거의 관련이 없습니다. 그들 사이의 연결은 다른 수준에 있습니다.

시작하려는 곳은 주요 질문에 대한 의견입니다.

그것이 수학을하고 있다면, 모든 인간 활동은 수학의 한 형태입니다. 이 경우 수학이라는 단어는 하나의 활동을 다른 활동과 구별하는 데 사용할 수 없으므로 유용한 의미가 없습니다.

네, 수학을하고 있습니다. 그러나 "수학"은 여전히 ​​유용한 단어입니다. 왜냐하면 노래에서 "이것은 당신이하는 것이 아니라 당신이하는 방식"이기 때문입니다. 나는 수학적인 방법으로 무언가 접근 할 때 수학을하고 있다고 말할 입니다. 때때로, 그것은 "하드 코어"수학입니다 : 정의의 공식화, 이론 증명. 때로는 그렇지 않습니다. 때로는 아이들이 철자 단어를 배울 수 있도록 바보 같은 작은 프로그램을 작성하고 있습니다.

이것이 내가 프로그래밍 할 때 수학이 도움이되는 것입니다.

  1. 추상화 이것은 아마도 수학에서 가장 중요한 양도 할 기술. 이것은 불필요한 모든 것을 제거하고 중요한 속성에 집중할 수있는 능력을 의미합니다.

  2. 관점 I 만 선택할 수 있다면 하나 내 모든 학생들이 배울 수 있었다 일을,이 그것을 것 : 문제에 맞게보기 사람 지점을 변경하는 기능. 우리는 일반적으로 기초 대수 변화 공식 (끔찍한 행렬과 끔찍한 합병증으로 이어짐)을 사용하여 선형 대수학에서 이것을 처리하지만 그보다 훨씬 더 적용 가능합니다. 마음에, 무언가가 한 방식으로 당신에게 제시 되었기 때문에, 그것이 당신이 그것을 사용하는 방식 일 필요는 없다는 생각입니다. 이것은 사물 자체에 대한 관점을 제시된 방식과 분리시킵니다. 이것은 매우 실용적 일 수 있습니다. 무엇인가 유용 하거나 효율적으로 만드는 것입니다. 벡터 목록이 있고 x 좌표 목록과 y 좌표 목록으로 저장하는 것이 더 효율적 이라면 그렇게하십시오 .

  3. 위에서부터 형태 대 기능 ; 일이 여러 가지 방법으로 제시 될 수 있다면 하나의 특정 프리젠 테이션는 말을 더 이상 공정하지 것. 그 노래를 다시 인용하기 위해 : "그것은 당신이 하는 것이 아닙니다 . 당신이 하는 이 중요합니다."

나는 계속할 수 있었지만 그것들은 떠오르는 사람들입니다.

지금까지 내가 작성한 것에 대해 (음의) 많은 반응이있을 것입니다. 하나는 "이것은 수학이 아닙니다, 그것은 좋은 의미입니다." (또는 나쁜 의미) "모든 인간 활동은 수학의 한 형태"라는 감정에 동의하는 위의 언급을 언급합니다. 또 다른 문제는 "이것은 문제의 수학의 유형이 아닙니다."입니다. 이것은 거의 사실입니다. 그리고 여기서 저는 "적어도 10 년 동안 수학을 건드리지 않았습니다"라고 말한 사람과 더 동정심을 가지고 있습니다. 물론 프로그램 을 작성할 때마다 수학을하고 있었기 때문에 10 년 동안 수학을 해왔습니다 . 그들은 그것을 깨닫지 못했습니다.

나는 실제로 내 프로그램에서 "실제 수학"을 사용합니다. 최근에 데이터에 적용해야 할 투영 및 기타 변환을 파악하기 위해 일부 수학을 사용하는 재미있는 3D 모양 탐색기를 코딩했습니다. 나는 실제로 자신이 쿼터니언을 코딩하는 것을 알기 위해 즐겁게 즐겼다! 그러나 물론 관련된 수학은 내가 일할 때하는 수학에 비해 사소한 것이 었습니다. "봉투 뒷면"물건이었습니다. 그런 종류의 수학, 나는 당신이 그것을 필요할 때 그것을 고르는 정서에 동의합니다. 그리고 당신이 Wikipedia에서 찾을 수있는 것보다 더 복잡한 것이 필요하다면, 당신을 위해 실제 수학자를 찾으십시오. 그러나 필요할 때 집어 올릴 있으려면 무언가를 배워야 합니다.. 그 일은 실제로 사용하는 것이 아닐 수도 있지만, 무언가가 나중에 인생에서 실제로 사용하는 것을 쉽게 찾을 수 있다는 것을 알게되었습니다. 당신이 배울 필요합니까 : 나는 코더에 동의하지 않을 경우 그래서는 어떤 혹시 사용하려는 경우 수학을 어떤 수학을하고 당신이 그것을 배울 필요가 수학적 측면에서 (그런데, 증명 정리를 의미하지 않는다).

마지막으로 "수학은 프로그래밍"입니다. 좋은 프로그래머가되는 것으로부터이 모든 것을 배울 수 있습니다. 당신이이 일을 배운다면, 당신은 우리가 벡터 공간에서의 벡터에 대해 이야기 할 때 다음이 클래스의 바로 인스턴스의 이해 때문에 훨씬 쉽게 수학을 발견 할 것이다 Vector우리가 모든 것을 할 수 있다는 것을 의미 Vector하지 않습니다에를 해당 예 : 더하기, 빼기, 크기 조절 등. 그렇기 때문에 프로그래머에게 수학을 가르치고 싶습니다. 그러나, 수학자로 말해서, 나는 말할 것이다 첫번째이 중 "추상"은 수학이 추상화를 추구하기 때문에 프로그래밍보다 수학에서 배우기가 더 쉽습니다. 우리가 어떤 행동을 볼 때마다 우리의 훈련은 항상 "그런 식으로 행동하게 만드는 것에 대해 무엇입니까? 내가 비슷한 다른 것을 취하면 같은 방식으로 행동합니까?"라고 묻는 것입니다. 그런 행동을 멈추기 위해 잃어야합니까? " (이것을 극단으로 가져 가면 "지네 수학"이 나옵니다. 용어를 찾으십시오). 그러나 우리는 (실제로) "실제"객체 (그것이 무엇이든)로 이것을하지 않습니다. 우리는 이미 추상화 된 것들로 이것을합니다.

이것은 오랫동안 지속되어 왔기 때문에 고전적인 수학자 농담 중 하나와 가까이 해 보겠습니다.

수학자와 물리학자는 모두 24 차원 공간과 관련된 새로운 모델에 관한 세미나에 참석했습니다. 그 후, 그들은 그것을 논의하고 물리학자는 다음과 같이 말했습니다. "정말 힘들었습니다. 24 차원 공간을 어떻게 시각화합니까?" 수학자는 "아, 쉬워요. n 차원 공간을 시각화 한 다음 n = 24로 설정하면됩니다."라고 대답했습니다.


추가 2012-03-2

이 답변에 대해 다양한 견해를 표현하는 의견이 상당히 많았습니다. 이것들은 이제 내가 내 대답에 그것들을 포함 시키거나 (또는 ​​그들에게 응답하려고) 이해한다는 것에 대한 중재자에 의해 삭제되었습니다.

그러나 나는 할 수 있는지 확실하지 않습니다. 이 의견과이 페이지의 나머지 내용을 읽으면 수학이 실제로 무엇인지에 대한 큰 오해가 있다는 결론에 도달 할 수 있습니다. 또한 나는 그것을 설명 할만큼 유능하다고 생각하지 않습니다. 다행히 누군가 누군가 이미 Lockhart 's Lament에 연결 했으므로 이에 대한 설명을 연기하겠습니다. 나는 과학적 환경에서 자라면서 수학의 실험적 특성에 더 중점을 두었을 때 다르게 다르게 생각했을지 모르지만, 나는 그것을 더 잘 넣을 수는 없다고 생각한다 .

나는 아직도 무언가를 추가 할 수 있다고 생각합니다. 수학 무엇인지에 대한 오해뿐만 아니라 "수학을하는 것"이 ​​무엇을 의미하는지에 대한 오해도 있습니다. 나는 거의 모순되는 두 가지 입장을 봅니다.

  1. 수학은 방정식과 공식에 관한 것입니다. 따라서 Wikipedia가 존재하기 때문에 그것을 연구 할 필요가 없습니다 (이것은 Diderot에 대한 Euler의 묵시적 도전 과 거의 반대입니다 ).

  2. 수학은 정리와 정의에 관한 것입니다. 따라서 프로그램이 아무것도 입증하지 않기 때문에 연구 할 필요가 없습니다 (이것은 좋아하는 오류를 여기에 삽입하는 것과 같은 오류입니다).

두 가지 입장이 서로 모순되는 동안, 그들은 같은 장소에있게됩니다. 프로그래머가 수학을 배우는 데는 아무 소용이 없습니다. 가장 확실한 것은 수학자가 아닙니다! 결국, 그들은 무엇에 대해 알고 있습니까? 프로그래머가 정말로 알아야 할 것은 Wikipedia에서 찾을 수 있거나 다른 사람을 막을 수 있습니다.

위에서 나는화물 컬트 프로그래머라고 설명했다. 나는 대부분의 당신에게 개인적인 킥킥 웃음을 가지고 내기를 걸었다. "그래, 나는 네 프로그램이 어떻게 생겼는지 안다. (난 당신이 생각 확신하지만 당신은 아마 조금 잘난척하는 뛰어난 느낌 나쁜 잘난척과 뛰어난 느낌에 대해).

위에서 설명한 것은 Cargo Cult Mathematics입니다.

그래서 수학이 어떻게 작동하는지 이해하기 위해 약간의 수학을 배워야한다고 말할 때, 나는 내가 쓴 코드를 보았을 때와 똑같은 이유로 말하고 있습니다. StackOverflow에서 코드 잘라 내기 및 붙여 넣기를 중단하고 올바르게 수행하는 방법에 대해 조금 배웠 으면 좋겠습니다. "

그러나 가장 중요한 것은 수학자에게 배워야한다는 것입니다. 왜 그래? 여기 비유가 있습니다. 내가 가장 능숙한 언어는 TeX입니다. (정말로 말해요!). 이제 TeX에 대해 조금 더 배우고 싶다고 가정하고 Don Knuth가 마을에 있으며 TeX에 대한 자습서를 제공하겠다고 제안했습니다. 아니면 그냥 Wikipedia에서 그것에 대해 읽을 수 있습니다. 아니면 Perl과 Larry Wall, 또는 C # (정확한가요?)과 Jon Skeet 일 것입니다. 이 사람들이 최고의 교사 는 아니지만 그들이 아는 한도 내에서 그것을 보충 할 것입니다!

이것이 바로 수학자 입니다. 우리는 실제 언어를 쓰고 사람들이 사용하는 라이브러리를 쓰는 사람들입니다. 물론, 당신은하지 않습니다 정리 (theorem)을 증명하는 방법을 알고 - 당신이 라이브러리를 작성하지 않을거야! 그러나 우리가 어떻게 생각하는지에 대해 조금 알고 있다면, 우리가 라이브러리를 우리가했던 방식대로 쓴 이유를 이해하는 데 도움이 될 수 있으며 그것을 이해하면 더 잘 활용할 수 있습니다.

록 키트의 애도를 언급하는 것처럼 위키 백과에서 방정식을 찾는 것과 Poincaré 추측을 증명하는 것 사이에는 중간 근거가 있습니다. "나는 예술에 대해 많이 모른다. 그리고 Monet이되고 "ANY"키는 어디에 있습니까? " 돈 크 누스 당신이 여전히 대학에 있다면, 당신은 그들의 지역의 전문가이고 어떤 이유로 든 당신에게 그것을 설명하기 위해 기꺼이 시간을 보내려는 사람들로부터 배울 수있는 놀라운 기회를 가지고 있습니다.


내가 조금 더 확장하고 싶었던 또 다른 요점은 프로그래머로서 조금 더 수학을 배우는 것을 두려워하지 않아야하는 이유였습니다. 딥 커넥션도 아니고 유용하지도 않습니다. 컴퓨터를 프로그래밍하는 능력은 수학 학습에 직접 도움이 될 수 있습니다. 몇 가지만 언급하고 싶습니다.

  1. 변수 이해 그래서 많은 사람들이 "자연수로 보자 ..."와 같은 간단한 진술로 혼란스러워합니다. 또는 "엡실론> 0"으로 설정하십시오. 수학에는 변수 의 범위 를 기억하는 것이 중요한 장소가 있습니다 . 이것들은 모두 프로그래밍에서 일반적입니다. 수학적 진술을 프로그램으로 번역하는 법을 배우면 무엇이 무엇인지 추적하는 것이 훨씬 쉽다는 것을 알게 될 것입니다.

  2. 증거의 본질. 테스트를 작성했거나 다른 사람이 사용할 프로그램을 작성한 경우 증명의 핵심을 이해합니다. 그렇게 할 때 , 사용자가 무엇을 넣든, 그것을 처리 할 수 있다는 것을 알아야 합니다 (여기에 필수 xkcd 참조를 삽입하십시오). 그게 다 증거입니다! 것을 시연 무엇이든 은 "사용자 / 우주"에두고는 문을 개최한다. 실험가들은 "정상적인 상황에서 작동한다면 사실"이라고 기댈 것이지만, 프로그래머들은 항상 Alt + G + Shift + ÅØÆ를 시도하여 그 결과를 보는 아이가 있다는 것을 알고 있습니다.

  3. 마른. 이것을 유감스럽게 생각하지만 죄송합니다. 우리는 수천 년 동안 "우리 자신을 반복하지 않았습니다". 그렇기 때문에 선반에 유클리드 요소의 사본이 있으며 여전히 유용합니다 .

그리고 더 있습니다. 프로그래밍에 대해 조금 더 알고 있다면 "프로그래머를위한 수학"이라는 책을 쓰겠습니다. "프로그래머가 알아야하는 수학"을 가르치는 것이 아니라 "모든 사람이 알아야하지만 프로그래머를 위해 최적화 된 수학" . 그러나 누군가가 나와 공동 작업을 제안하지 않는 한 프로그래밍에 대해 충분히 알지 못할 것입니다.


나는 거기에 두겠습니다. 아마도 내가 더 생각하면 내가 쓴 것을 바꿀 것입니다. 잘하면 나는 그것을 더 잘 설명 할 것입니다. 몇 달 안에 나는 그것의 일부에 동의하지 않을 수도 있습니다. 누군가가 더 이상 논쟁하거나 달리 언급하고 싶다면 여기에 언급하지 않는 것이 가장 좋습니다. 당신은 나를 어디에서 찾을 수 있는지 알고 있습니다.


19
이것은 내가 SE에서 읽은 최고의 답변 중 하나입니다. BTW, 거기에 있다 "프로그래머를위한 수학"의 웅대 한 책; 그것을 콘크리트 수학 이라고 하며 TeX의 저자 인 Donald Knuth가 공동 집필했습니다. 방금 사본을 받았는데 환상적입니다. 나는 당신의 반대 인 것 같습니다. 수학 수업에서 개념을 이해하는 가장 좋은 방법은 나를 위해 프로그램을 작성하는 것입니다. 물론, 나는 손으로 회전 계산을하는 대신 프로그램 을 사용 하고 싶었고 수학 교사는 좋아하지 않았습니다.
Jason Lewis

친구, +100
베리 브라운

2
이것을 공표하기 위해 등록
leo

바로 그거죠. 수학이 가르치는 분석적 사고 없이는 잘 프로그래밍 할 수 없습니다.
Fiasco Labs

1
프로그래밍 수학에 대한 좋은 책이 있습니까 (수학적 프로그래밍).
qed

27

그들은 아니에요 밀접하게 관련. 프로그래밍의 경우 수학, 특히 알고리즘 성능과 관련된 분기에 대해 아는 것이 중요하지만 간단한 사실은 싱글턴이 끔찍한 나쁜 아이디어라는 것을 알려주는 수학 분기가 없다는 것입니다. 또는 컴포지션에 대한 상속을 선호 할 때, 또는 실제로 유연성을 필요로하는지, 반복하지 않을 것인지, 그리고 수십 가지의 다른 핵심 프로그래밍 필요성.

수학 프로그램이하는 일을 표현할 수 있지만, 가장 잘 유지되고 인간이 읽을 수 있고 실행 가능한 방법을 말할 수는 없습니다.


6
1) 싱글 톤 자체에는 아무런 문제가 없습니다. 2) 알고리즘 정보 이론, 공식 언어 및 표기 의미론은 어떤 이유로 관심이있는 간단한 것들과 직접 관련이 있습니다 (프로그래밍에는 그다지 중요하지 않습니다) 일반적으로).
SK-logic

19
당신의 경험은 다소 제한적이어야합니다. 싱글 톤은 도메인 모델의 일부인 한 필요하고 피할 수 없습니다. 도메인 모델을 구축하는 방법은 수학적인 문제입니다. 그리고 그렇습니다. 공식 언어 이론에 무지한 사람들은 끔찍한 모델과 끔찍한 언어를 만들고 있습니다.
SK-logic

10
@ dave : 그 방법의 위험은 아무리 어리석은 사람이라도 강렬하게 다른 사람을 말함으로써 합리적이고 합리적인 위치에서 벗어날 수 있다는 것입니다. 평균을 취하는 것은 인수를 평가하는 데 유용한 대체물이 아닙니다.
Michael Borgwardt

4
@ SK-logic : 두 사람이 단순히 "Singleton"이 무엇인지에 대한 다른 개념에 대해 이야기하고있을 가능성이 있습니까? SK-logic은 시스템에서 특정 개체의 인스턴스를 하나만 갖는 추상적 인 아이디어에 대해 이야기하는 것 같습니다. 때로는 정확히 필요한 것입니다. 불행히도이 추상 개념은 공개 정적 팩토리 메소드를 갖는 끔찍한 나쁜 구현 세부 사항과 밀접한 관련이 있습니다 .GoF 책은 그러한 싱글 톤에 액세스하는 방법의 예를 보여 주었기 때문입니다.
Michael Borgwardt

5
더 이상은 토의 하지 마십시오 Singtons
mattnz의

20

수학과 프로그래밍은 두 가지 방식으로 관련됩니다.

하나는 수학이 컴퓨터 프로그램에 대해 추론하는 데 사용될 수 있다는 것입니다. "입력 데이터가 변경 될 때 프로그램 실행 시간이 어떻게 변경됩니까?", "프로그램이 내 문제에 대한 답을 찾을 수 있습니까?", "프로그램이 가능한 한 효율적입니까? ","프로그램을 더 빨리 만들거나 메모리를 적게 사용하려면 어떻게 프로그램을 다시 정렬해야합니까? ". 일반적으로 계산 이론, 알고리즘 설계 및 컴퓨터 언어 설계에 대한 상위 부서 과정에서 이와 같은 주제를 다룹니다.

수학과 프로그램이 관련된 두 번째 방법은 프로그래밍이 수학 문제를 해결하는 데 사용된다는 것입니다. 이것은 "일반적인 삶"의 많은 문제가 실제로 수학 문제로 다시 변환 된 다음 컴퓨터에서 해결 될 수 있기 때문에 중요합니다. 이러한 종류의 주제는 거의 모든 과정에서, 특히 이산 수학 및 수학 모델링 과정에서 어느 정도까지 나타납니다.


수학은 프로그램이 답을 찾도록 보장 할 수 없습니다. 그것은 Halting Problem을 해결하는 것이 불가능합니다.
DeadMG

6
@DeadMG 임의의 프로그램에서는 불가능합니다. 주어진 프로그램은 경우에 따라 종료되거나 종료되지 않는 것으로 입증 될 수 있습니다.
Luc Danton

6
@DeadMG, 이것이 Halting 문제에 대한 일반적인 오해입니다. 중지 문제는 특정 프로그램이 중지되었는지 여부를 증명할 수 없다고 말하지 않으며, 모든 프로그램에 적용하여 중지 여부를 결정하는 단일 알고리즘이나 증거가 없다고 말합니다. 예를 들어 en.wikipedia.org/wiki/Halting_problemprogrammers.stackexchange.com/questions/125882/…를 참조하십시오 .
Charles E. Grant

아야 그럼 내 실수 바보 투표 잠금 ... 게시물을 편집 할 수 있도록 게시물을 편집 할 수 있다면?
DeadMG

4
@DeadMG, 당신은 일반적인 프로그래밍 작업의 대부분은 튜링 완전한 언어를 필요로하지 않는 사실을 알고있는 모든 ? 나머지 경우에는 거의 항상 특수한 중지 증거가 있습니다.
SK-logic

12

컴퓨터 과학에 수학 교육이 중요한 두 가지 예는 다음과 같습니다.

1) 관계형 미적분 이 사용되는 관계형 데이터베이스 .

관계형 미적분은 데이터베이스에 대한 관계형 모델의 일부이며 데이터베이스 쿼리를 지정하는 선언적 방법을 제공하는 두 개의 미적분, 튜플 관계형 미적분 및 도메인 관계형 미적분으로 구성됩니다. 이는 관계형 모델의 일부이지만 쿼리를 지정하기위한보다 절차적인 방법을 제공하는 관계형 대수와 대조됩니다.

관계형 대수는 일부 샘플 북을 제공하는 서점의 전화 번호와 이름을 검색하기 위해 다음 단계를 제안 할 수 있습니다.

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

관계형 미적분학은 설명적이고 선언적인 방식을 공식화합니다.

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

일부 샘플 북.

관계 대수와 관계 미적분학은 본질적으로 논리적으로 동일합니다. 대수적 표현의 경우 미적분학에 동등한 표현이 있으며 그 반대도 마찬가지입니다. 이 결과를 Codd의 정리라고합니다.

다음 영역은 인공 지능 (AI)과 기계 학습 입니다.

이것들이 어떻게 사용되는지에 대한 예는 udacity의 클래스 CS 373 : PROGRAMMING A ROBOTIC CAR을 살펴보십시오 .

설명 : AI의 최고 전문가 중 한 명이 강의하는이 수업은 확률 론적 추론, 컴퓨터 비전, 머신 러닝 및 계획 등 로봇 공학에 중점을 둔 인공 지능의 기본 방법을 알려줍니다. 광범위한 프로그래밍 예제 및 과제는 자율 주행 자동차 제작의 맥락에서 이러한 방법을 적용합니다. 비디오를 통해 현장의 주요 연구 실험실을 방문하고 Stanford와 Google에서 자율 주행 자동차를 제작하는 과학자 및 엔지니어를 만나십시오.

전제 조건 : 강사는 프로그래밍에 대한 확실한 지식을 갖고 모든 프로그래밍은 Python으로 이루어집니다. 확률과 선형 대수에 대한 지식이 도움이 될 것입니다.

1 주차 :

파티클 필터를 사용한 확률 자동차 위치 파악의 기초

2 주차 :

가우스 및 연속 확률 칼만 필터로 다른 차량 추적

3 주차 :

이미지 처리 및 기계 학습 센서 데이터에서 물체 찾기

4 주차 :

계획 및 검색 A * 검색으로 운전할 위치 결정 동적 프로그래밍으로 최적 경로 찾기

5 주차 :

PID로 조향 및 속도 제어

6 주차 :

모든 것을 하나로 모으기 자율 주행 자동차 프로그래밍

7 주차 :

지식을 테스트하는 기말 시험 시험


나는 이것이 AI의 영역에 속한다고 생각하지만 대부분의 사람들은 그 용어가 사용될 때 하늘 그림에 마음에이 파이를 가지고 있습니다. 어쨌든, 현실 세계를 시뮬레이션하는 거의 모든 프로그램은 거의 항상 고급 수학의 형태를 요구합니다. 또한 센서가있는 시스템은 거의 항상 어떤 형태의 고급 수학이 필요합니다.
덩크

11

과학적 응용 프로그램 개발, 게임 프로그래밍, 실시간 시스템, 시뮬레이션 시스템 및 이러한 응용 프로그램을 위해서는 수학이 필요합니다. 결국 프로그래밍은 수학과 과학을 사용하여 문제를 해결합니다. 반면, 데이터베이스에 사용자 정보를 등록하기 위해 사용자 정보를 캡처하는 응용 프로그램을 프로그래밍하는 데는 높은 수준의 수학이 필요하지 않습니다. 그럼에도 불구하고 모든 프로그래머는 기본 수 이론, 대수, 기본 집합 이론 및 기본 수치 분석의 이점을 누릴 수 있습니다.

수학 실무자 측면에서 수학의 다른 주제 (다른 많은 과학 분야)는 프로그래밍의 이점을 크게 누릴 수 있습니다.


동의한다. 나는 많은 엔터프라이즈 개발을하고 있으며, 스스로 도움이 될 수 있다는 것을 아는 것이 좋지만 많은 고급 수학을 사용할 필요가 없다는 것을 알았습니다. 모든 프로그래머는 적어도 미적분학 1을 취해야한다고 말하고 싶습니다. 다른 유형의 프로그램은 푸리에 변환, 통계 모델 및 3D 프로그래밍에서 행렬을 자주 사용합니다.
Makotosan 2019

@Makotosan, 귀하의 의견에 감사드립니다. 그러나 프로그래머가 가진 짧은 시간을 감안할 때 수학은 매우 흥미로워 서 실제로 생산성을 높이는 데 최선을 다합니다. 추가 정보는 여유가있는 사람들에게 사치가됩니다.
NoChance

저는 재무를 이해하는 것이 Excel 개발자에게 중요한 것과 마찬가지로 수학은 프로그램에 필요한 도메인 지식이라고 생각합니다.
sixtyfootersdude

9

나는 무엇보다도 생각 과정유사성이 두 가지를 너무 비슷하게 보이게합니다.

예를 들어 둘 다 매우 논리적입니다. 동일한 단계 또는 동일한 공식을 따르는 경우 항상 동일한 결과가 나타납니다. 예를 들어, 1+1항상 동일한 것 2, 그리고 set a = 1수단 a(당신이 다른 무언가로 설정 될 때까지) 항상 1이됩니다

다른 예로 공간적으로 생각할 필요가 있습니다. 수학에서, 나는 종종 머리에 숫자를 붙잡고 내가하고있는 것을 시각화해야한다는 것을 알았습니다. 아주 간단한 예를 들어, 뭔가 좋아하는 그래서 나는 수학 문제를 무너 뜨리는 것이 13x13된다 13x10 + 13x3나의 뇌가 작동하기에 훨씬 용이하다, 나는 것을 추적 할 필요가 13x10=130 + 13x3=39그래서 130+39 = 169. 보이지 않는 것을 시각화하거나 문제를 더 작은 문제로 나누는 이와 동일한 기능이 종종 프로그래밍에 적용됩니다.

따라서 수학 계산은 숫자로 계산하는 것으로 정의되는 수학적 배경이 필요하지 않지만 수학 문제를 해결할 때 사용하는 것과 비슷한 사고 과정과 이해가 필요하다고 생각합니다.


그리고 일부 기본 수학은 체계적이고 논리적 인 문제 해결 과정을 얻는 일반적인 디딤돌입니다. 더 이상 학교에서 가르치지 않는 언어 구조는 또 다른 디딤돌입니다. 컴파일러에 파서가 있고 코드 구조를 더 잘 파싱하고주의를 기울일수록 더 잘 프로그래밍 할 수있는 이유가 있습니다.
Fiasco Labs

5

지금까지 미적분학삼각법의 요소를 배웠다고 가정 합니다. 그리고 당신은 그것을 수학 이라고 부릅니다 . 그것은 한 쌍의 다리를 "인간"이라고 부르는 것과 같습니다.

미적분학은 프로그래밍과 거의 관련이 없으며 물리 및 공학과 더 밀접한 관련이 있습니다. 게임 엔진에는 물리학이 필요 하고 통계 분석에는 미적분학이 필요 합니다 . (통계 분석은 인정하기에 편한 것보다 더 많은 일자리를 유도합니다)

우리에게 미적분학은 프로그래밍을 실제 세계와 관련시키는 것에 관한 것입니다. 전산 미적분학 은 그 관계가 지금까지 얼마나 나빠지는지를 연구하는 지점입니다. (스포일러 : 꽤 나 빠지고 있지만 무기한으로 확인할 수 있습니다 )

삼각법은 상자에 들어있는 미친 잭입니다. 최소한 기대할 때 나오는 신호 분석 , 오디오 생성 및 기타 많은 것들이 그것에 의존합니다.

Algebra 101Logic 101으로 가서 Leibniz Pascal의 역사를 연구하십시오. 많은 의심이 사라질 것입니다. (수학에 대한 당신의 정의는 영원히 변할 것입니다)


4

프로그래밍은 많은 전통적인 학문 분야를 뛰어 넘습니다.

우리가 컴퓨터에 요구하는 것은 크런치 번호이기 때문에 수학, 특히 응용 수학 은 프로그래밍에 중요합니다. 수치 적 방법과 계산을 효율적이고 적절하게 적용하는 방법을 이해하는 것은 많은 프로그래머가 매일하는 일 중 하나입니다.


4

다음은 컴퓨팅 문제 (특히 인터넷 도메인)를 해결하는 데 수학을 만난 실제적인 내용입니다.

  1. 검색 엔진은 데이터를 검색하기 위해 벡터 미적분을 사용합니다.
  2. 행렬 분해는 감성 분석과 같은 많은 것들에 사용될 수 있습니다.
  3. 작성하는 코드의 복잡성을 파악하려면 미적분학, 요약을 알아야합니다.
  4. 확률은 확률 적 정보 검색 / 검색에 많이 사용됩니다
  5. Naive Bayes 정리는 예측 분석에 사용됩니다.
  6. 분류 문제를 해결하기 위해 머신 러닝에서 다시 사용되는 SVM이라는 개념에 대해서는 하이퍼 플레인 등의 정보를 알아야합니다.
  7. 자연어 처리 작업을 수행하려면 Entropy를 이해해야합니다.
  8. 검색 엔진이 사용하는 잠재 시맨틱 인덱싱 / 주성분 분석은 행렬 대수에 크게 의존합니다. & 곧......

3

귀하의 질문에 대한 문제는 "수학"과 "프로그래밍"이 매우 넓고 심도있는 과목으로, 평생 동안 마스터 할 수있는 것보다 더 많은 것을 알아야합니다 (과장 없음). 저는 개인적으로 수학 석사 학위를 받았습니다. 대학에 다니는 동안, 내가 배우는 것이 많을수록 동료들에 비해 알지 못하는 것처럼 보였다. 몇 년 동안 내가 덜 똑똑해 졌다고 느꼈습니다. 내가 교수님의 논문을 여러 교수들에게 발표했을 때, 그들 대부분은 내가 공부 한 것에 익숙하지 않은 것 같았다.

마찬가지로 저는 현재 데이터베이스 기반 웹 응용 프로그램 개발자입니다. 임베디드 어셈블러 언어 프로그래밍을하는 사람과 저를 비교해 보면 우리를 두 명의 유능한 전문가로 생각할 수도 있지만, 우리 모두가 "프로그래머"라고해도 매우 다른 전문 지식을 갖게 될 것입니다.

신입생 미적분학을 넘어서 고등 수학에 대한 연구를 진행함에 따라 수학은 프로그램을 할 때 도움이 될 추상 추론에 대한 규율을 주입한다는 것을 알게 될 것입니다. 나는 당신이 프로그래밍 할 때 추상적 관심사를 다룰 것이기 때문에이 훈련은 매우 중요하다고 생각합니다.

물론, 신입생 프로그래밍에서는 포인터 산술에 대해 배우게 될 것입니다. 이 개념을 설명하기 위해 간단한 프로그램을 작성하고 컴퓨터가 사용자의 의지에 어떻게 영향을 미치는지 이해합니다. 그러나 초록에서 포인터 산술이 어떻게 작동하는지 배우는 것이 실제 프로그램에서 포인터를 사용하는 데 좋지 않습니다. 10K 줄의 코드를 엉망으로 만들고 포인터 산술을 약간 변경해야 할 때 매우 추상적 인 수준으로 추론하여 변경 사항이 어떻게 영향을 미치는지에 대한 다양한 우려의 균형을 맞추기위한 전략적 결정을 내릴 수 있어야합니다 코드.

프로그래머는 여러 가지 우려 중에서 코드의 "가독성", 코드 성능, 결과 프로그램의 사용 편의성 간의 균형을 유지해야합니다. 이러한 문제의 균형을 맞추기 위해 매우 추상적 인 비교를 할 수 있어야합니다. 매일 이러한 비교를 많이 할 것입니다. 나는 시간 관리에 대해 시작조차하지 못했습니다. 당신은 자신이하는 일이 정시에 업무를 수행하는 능력에 영향을 미칠 가능성에 대해 추상적으로 추론 할 것이며, 다시 한 번, 매일 업무에 영향을 미칠 많은 결정을 내릴 것입니다.

마지막으로, 오래된 방법론과 관행이 계속 사용되지 않으면 서 새로운 아이디어와 개념을 동화 할 수 있도록 철학적 원칙을 유지해야합니다. 다시 한번, 당신은 오는 아이디어를 평가하고 당신이 이미 알고있는 것과 추상적으로 비교할 수 있어야합니다.

요컨대, 대부분의 사람들이 알고 있듯이 프로그래밍은 수학과 관련이 없습니다. 대부분의 사람들은 그것을 알고 있습니다. 하지만 추상적 인 수준에서 보면 공통점이 많습니다.


나는 특히 "우리 대부분이 알고있는"부분을 좋아한다. 여기에서 대부분의 답변을 읽는 데 어려움이 있습니다. "왼손"은 "오른손"이 무엇을하는지 알지 못합니다.
루프 스페이스

"왼손은 오른손이 무엇을하는지 모른다"고 요약합니다. OP는 자바로 "맨 아래부터 시작"하고 있다고 말했다. 자바 프로그래밍 종류의 그 볼트를 가공 반대로, 철물점에서 볼트에서 뭔가 목재를 구축하고 (더 어셈블러 프로그래밍처럼 될 것이다) 목재로 라이브 나무를 만드는 것과 같다
쌀 밀가루 쿠키

2

수학은 입방 방정식을 설명합니다.

알고리즘은 해당 입방 방정식을 해결하는 방법을 설명합니다.

기계가 실행할 수있는 방식으로 알고리즘을 구성하는 것은 프로그래밍 입니다.

컴퓨터 과학은 알고리즘의 이론적 시간 / 공간 효율성, 오차 범위 등을 분석하는 것입니다.이 정도는 수학의 한 부분으로 간주 될 수 있습니다. 그러나 컴퓨터 과학과 프로그래밍은 실제로 같은 것은 아닙니다. 훌륭한 프로그래머가 되려면 컴퓨터 과학에 기초를 두는 것이 중요합니다. 개발 한 알고리즘에 대한 디자인과 추론을 향상시키는 데 도움이되기 때문입니다. 그러나 요구 사항은 아닙니다.

좋은 프로그래머는 좋은 수학자가 아닐 수도 있고, 그렇지 않은 경우도 있습니다. 그들은 별도의 식별 가능한 기술입니다.


3
도메인에 따라 다릅니다. 프로그래머가되고 싶다면 수학을 알 필요가 없습니다. 비즈니스의 핵심 부분이 되려면 (여러 도메인에서) 도메인 문제에 대한 해결책을 제시 할 수 있어야합니다. 매우 빈번한 수학적 배경을 통해서만 이러한 솔루션을 도출 할 수 있습니다. 특정 수학 분야의 전문가가 될 필요는 없지만 다양한 수학을 적용하는 방법을 알아야 수학이 특정 시점의 특정 문제를 해결할 수있는 방법을 파악할 수 있습니다.
Dunk

2

나는 실제 문제가 포스터의 수학적 이해력이 부족한 몇 년 동안 포럼 유형에 관한 많은 질문을 보았습니다. 예를 들어, 대수학의 기초가 좋은 사람은 당신이 0으로 나눌 수 없다는 것을 이해합니다. 그러나 나는 포스터가 그것을 이해하지 못한 곳에서 많은 질문을 보았고 기본적으로 "당신은 0으로 나눌 수 없다"는 오류 메시지를 이해하지 못했습니다. 포스터가 기본 논리를 이해하지 못한다는 것이 분명한 많은 질문을 보았습니다. 부울 대수의 개념이 명확하게 이해되지 않는 곳에서 너무 많은 질문을 보았습니다.

수학 교과서를 작성하지 않거나 수학 교과서에서와 같이 방정식을 직접 풀 었다고해서 그 뒤에있는 개념을 이해할 필요는 없습니다. 우연히도, 수년간의 업무 경험에서, 나는 수학을 제대로 이해 한 나쁜 프로그래머를 만나지 않았습니다.

일부 분야에서는 게임 프로그래밍, 통계 프로그래밍, 재무 프로그래밍, 일부 임베디드 시스템과 같은 많은 수학을 직접 사용합니다. 이러한 경우 중 일부에서 요구 사항에 필요한 방정식이 제공되고 때로는 그렇지 않은 경우도 있습니다. 그러나 방정식이 주어 졌을 때에도 해당 방정식을 프로그래밍 코드로 올바르게 변환하려면 먼저 방정식을 이해해야합니다.

기본 CRUD 응용 프로그램에서 기본 대수만으로도 얻을 수 있지만 가장 흥미로운 문제와 고급 작업의 대부분은 수학 이해와 관련이 있습니다. 왜 수학을 깊이 배우지 않음으로써 처음부터 자신을 제한하고 싶습니까?


2

즉시 생각 나는 두 가지 예는 다음과 같습니다.

함수 -출력 변수를 생성하기 위해 변환을 입력 변수에 적용한다는 아이디어는 수학에 뿌리를두고 있습니다. 함수 주위 전달하는 개념 으로 더욱 더 다른 함수 파라미터. 일반적으로, 프로그래밍과 관련된 추상적 사고의 개념은 수학과 매우 유사합니다.

bitMasks- 문제를 해결하기위한이 일반적인 프로그래밍 방식은 개념을 파악하기 위해 최소한 부울 대수에 대한 기본적인 이해가 필요합니다.


1

프로그래머 관점에서 : 수학은 프로그래밍의 일부입니다.

프로그래밍에 적용되는 수학 :

프로그래밍에서 컬렉션 (배열, 목록, 맵 등)을 다룰 때 실제 수학 구현의 구현을 다루게됩니다.

수학없는 프로그래밍 :

그렇게 println("Hello World")하면 화면상의 위치, 문자열 길이 등을 계산하는 데 일부 수학이 사용된다는 사실은 실제로 관련이 없습니다.

수학 프로그래밍 사용하기 :

프로그래밍 언어로 수학과 물리학을 구현하면 컴퓨터 지원 설계와 같은 것들이 가능해집니다.


수학과 프로그래밍에 관련된 것들이 교차합니다. 어느 쪽도 다른 쪽의 적절한 부분 집합이 아닙니다. 더 많은 수학을 알고 있다면 그 사실을 알게 될 것입니다. 벤 다이어그램을 그리고 각 영역에서 아이템을 찾을 수 있는지 봅시다. 대수는 수학 관련 및 프로그래밍 관련입니다. 객체 지향 프로그래밍의 원리는 수학과 엄격하게 관련이 없지만 수학은 추상화이므로 추상화입니다. 이산 수학은 통계와 마찬가지로 프로그래머에게 매우 유용합니다. 미적분학은 거의 대부분의 프로그래머에게 거의 나타나지 않지만 30 년 안에는 저에게 결코 없습니다.
Warren P

0

프로그래밍은 대개 수학적 모델 인 모델을 기반으로합니다.

모기지 계산기를 만드는 예를 들어 보겠습니다. 이를 위해서는 관심사가 무엇인지, 복합재가 무엇인지 등을 알아야합니다. 기본 수학을 이해하지 못하면 다른 사람 이 해당 정보를 제공해야합니다. 일반적으로 모든 일을하는 것은 프로그래머의 일입니다. 필요한 경우 언제든지 도움을 요청할 수 있습니다.

수학에는 프로그래밍에 널리 사용되는 간단한 개념이 있습니다. 예를 들어, 표현식, 방정식, 변수는 프로그래밍에 많이 사용됩니다. 당신이 수학에서 그것을 얻지 못하면, 당신은 최고의 프로그래머가 아닐 수도 있습니다.

강력한 수학을 사용하면 작업 할 모형을 더 많이 만들 수 있습니다. 그것은 궁극적으로 당신을 더 나은 프로그래머로 만듭니다. 예를 들어, 프로젝트 중 하나에서 2 차 방정식을 그리려고 할 수 있습니다. 이렇게하면 수학에 능숙하기 때문에 더 많은 것을 배울 수 있습니다. 또는 당신은 원의 영역을 찾아 더 많은 경험을 제공하는 프로그램을 작성합니다.

짧은 교직 경력에서 학생들이 수학 배경이 없으면 재정 문제를 겪을 때 거의 잃어버린 것으로 나타났습니다. 그들이 모델에 대해 잃어버린 경우, 언어 자체를 배우는 것이 더 어려워지고 정직하게 매우 좌절됩니다.


3
누군가 재정 문제를 해결할 수 있는지 여부는 해당 영역에서 유능한 지 여부는 프로그래밍 적성과 거의 관련이 없습니다. 나는 머리 위로 다가오는 많은 수학을 포함하는 신호 처리 소프트웨어로 작업합니다. 제 직업은 수학을하는 것이 아니라, 전문 지식 영역에 프로그래밍이없는 수학자와 공학자가 만든 것을 좋은 소프트웨어로 바꾸는 것입니다. 그것이 도메인 이기 때문 입니다.
Blrfl

대부분의 실제 분야에서 두 가지는 분리되어 있습니다. 누군가 모델을 가지고 있고 누군가가이를 프로그래밍해야합니다. 네 맞습니다. 그러나 처음부터 프로그래밍을 배우려면 수학을 알아야합니다. 그렇지 않으면 어려울 것입니다. 변수, 표현 및 다른 수학적 특성에 대해 알아야합니다. 최적화 팀과 협력했습니다. 그들은 솔버를 연구하고있었습니다. 그들이 수학에 대한 지식이 없다면, 결코 그 일을 해 본 적이 없었을 것입니다. 나는 학습의 관점에서 대답하고 그가 프로그래밍에 들어가는 새로운 학습 자라는 것을 알고 있습니다.
없음

학습의 관점에서 수학 배경을 갖는 것이 필수적입니다. 그렇지 않으면 다른 학습은 배우지 않을 것입니다.
없음

솔버는 수학 영역 문제이므로, 수학에 대한 이해가 문제를 해결해야한다는 이유가됩니다. 나는 프로그래밍에 관련된 수학적 개념 이 없다고 말하지는 않지만 @DeadMG가 그의 대답에서 지적했듯이 수학이 절대적으로 도움이되지 않는 과정의 매우 실용적인 측면이 많이 있습니다.
Blrfl

1
@Birfl, DeadMG는 약간 무지합니다 (그리고 거의 항상 잘못되었습니다). 수학은 항상 모든 "부드러운"영역에서 도움이 될 것입니다. 심리학은 수학에 크게 의존합니다. 사회학은 훨씬 더 수학적입니다. 그리고 시스템 설계의 경우, 의미론 (이산 수학)에 대한 배경 지식이 없으면 시스템을 건드리지 않는 것이 좋습니다. 프로그래밍에는 수학이 아닌 측면이 없습니다. GUI 디자인 및 CRUD 코딩이 포함되어 있습니다.
SK-logic

0

컴퓨터 과학의 이론적 기초 (프로그래밍 그 이상)는 본질적으로 수학적입니다. 계산의 정의에서부터 알고리즘의 분석 및 표현, 프로그래밍 언어의 사양에 이르기까지 모든 것은 광범위한 수학에 기반을두고 있습니다. 관련된 수학 종류에 대한 자세한 내용은 이 Wikipedia 페이지 를 참조하십시오 .

당신이하고 싶은 모든 것이 슬링 코드인지 알 필요가 없습니다. 응용 수학이 진행되는 한, 심각한 숫자 처리 기술 (상세한 물리적 시뮬레이션, 신호 분석, 재무 분석 및 예측 등)이 필요한 분야에 들어 가지 않는 한 기본 대수보다 더 많은 것을 사용하지 않을 것입니다 매일 매일.


0

어떤 종류의 프로그래밍을 하느냐에 따라 정직하게 결정됩니다.

약간의 논리로 가벼운 웹 앱을 만드는 경우 많은 학위가 필요한 고급 수학 클래스가 필요하지 않을 수 있습니다. 약간 더 많은 프로세서가 필요한 작업을 수행하는 경우 더 많은 수학이 필요합니다. 모든 종류의 과학 분야에서 일하고 있다면 계산 기준을 항상 유지하고 싶을 것입니다.

수학이 필요한 또 다른 장소는 게임을 작성하는 것입니다. 두 번째로 대각선으로 이동하려면 신중한 계산을 시작하여 NE로 블록으로 이동하면 가속되는 문자로 끝나지 않아야합니다.

즉, 반드시 수학을 배우고 프로그래밍을 배울 필요는 없습니다. 프로그래밍을 배우고 고급 수학을 배우는 것은 완벽하게 유효합니다. Calc 또는 Trig 클래스에 발을 들여 놓기 전에 코딩을 시작했으며 정상적으로 작동했습니다. 고급 수학을 배우기 시작했을 때 펜과 종이로 할 수있는 것보다 빠른 스크립트로 변수를 변경하여 주제를 더 많이 탐색 할 수 있기 때문에 코딩이 실제로 도움이되었다는 것을 알았습니다.


게임에 대한 삼각법 및 벡터 수학을 알아야합니다.
Alan B

물론. 하지만 마감일을 지키지 않는 한, 게임을하는 것이 고등학교에서 잊어 버린 수학을 다시 배울 수있는 좋은 방법이라는 것도 알게되었습니다.
kcunning

0

나는 결코 수학 전문가가 아닙니다! 나는 HS 지오메트리에서 잘 해냈다. 프로그래밍과 지오메트리가 매우 비슷하다는 것을 알았습니다. 부울 논리는 내 마음에 기하학적 증거와 잘 연결되어 있습니다.

그런 다음 모듈러스 연산자를 사용하여 행에 몇 개의 열이 있는지 제어 할 수 있다는 것을 아는 것과 같은 것은 거의 없습니다.

저는 훌륭한 수학자 인 친구 (또는 동료 / 컨설턴트)를 가진 훌륭한 프로그래머라는 아이디어를 강력히 선호합니다.

분명히 두 스킬 셋을 모두 가지고 있다면 축복을 받으십시오!


0

간단한 답변; 수학은 당신을 빨리 만듭니다 . 물론 코딩 문제를 google / se / wikipedia로 해결할 수는 있지만 충분한 수학을 수행 할 필요는 없습니다 . 믿거 나 말거나 , 제대로 훈련 된 인간의 두뇌는 google보다 빠릅니다 . 또한 수학이 많을수록 google / se / wiki가 제공하는 결과를 더 빨리 이해할 수 있으며 사람들이 말하는 내용을 이해하기 위해 드릴 다운해야 할 필요성이 줄어 듭니다. 프로그래밍 문제를 해결하는 과정에서 어쨌든 수학을 배우게되지만 수학에 집중하면 훨씬 더 효율적인 과정이 될 것입니다.

귀하의 질문은 공식 음악 훈련이 필요한 이유를 묻는 록 음악가와 비슷합니다. 그것없이 성공할 수 있습니까? 확실한. 당신이 그것으로 가면 그것은 당신을 훨씬 더 나쁜 것입니까? 물론.

약간 더 복잡한 대답-수학자와 프로그래머가 "솔루션"이라는 단어를 사용하는 경우 ( 즉 , 문제가 아니라 방정식, 즉 "뿌리"가 아님)-그들은 거의 같은 의미입니다. 수학 문제 해결을 배우면 프로그래밍 문제 해결을 배우는 데 도움이됩니다.

BTW-그리고 어떤 사람에게도 위법이 없습니다.-훌륭한 프로그래머라고 말하지만 수학을 싫어하는 사람은 빅 팻 거짓말 쟁이입니다. 그들은 나쁜 hs 또는 대학 강사에 의해 공식적인 수학을 중단했고 그 이후로 그들은 "수학에 능숙하지 않다"고 느꼈습니다. 학습 장애가없는 사람 (즉, OO 언어를 배울 수있는 사람)은 Sophomore Calculus를 포함하여 모든 것을 수행 할 수 있습니다.


0

수학과 프로그래밍의 99 %는 거의 공통점이 없습니다. 수학은 훌륭한 프로그래머 일 필요는 없습니다. 나는 선형 대수학의 미적분학 I, II, III 요소를 포함한 여러 대학 수준의 수학 과정을 수강했습니다.

저는 10 년 넘게 소프트웨어 엔지니어였으며 기본 수학 이상의 것을 사용할 필요는 거의 없었습니다. 수학이 필요한 경우에는 그래픽 및 기타 영역과 같은 일부 예외가 있습니다. 그러나 프로그래밍 및 소프트웨어 엔지니어링의 99 %에는 수학이 필요하지 않습니다. 논리적 사고, 알고리즘, OOP, 기능, 분해 문제 등이 필요합니다.


0

1) 프로그래밍을 배우면서 기술 용어 (즉, 알고리즘)를 접하게됩니다. 알고리즘을 분석하려면 다항식, 로그 및 지수 함수의 특성에 대한 아이디어가 있어야합니다.

2) 컴퓨터 과학 응용 프로그램을 기반으로, 의미있는 솔루션을 작성하려면 이산 수학과 연속 수학에 대한 아이디어가 있어야합니다. 다음과 같은 과정을 통해 더 많은 것을 이해할 수 있습니다.

---> 컴퓨터 과학을위한 수학

---> 매트릭스 코딩 : 컴퓨터 과학 응용 프로그램을 통한 선형 대수 .

초보자를 위해, 나는 같은 동적으로 입력 된 언어의 느낌이 python/가 scheme프로그램에 대한 첫 번째 최고의 언어입니다. Java/ 와 같은 정적 유형 언어 C++는 시작하기에 가장 좋지 않습니다. "MIT / UOC-Berkeley / Stanford"에서 공개 한 Opencourseware는 일반 대학 커리큘럼보다 더 잘 안내 할 수 있습니다. 나는 당신을 내기했다 !!!


-1

개인적으로 말하면 관련된 프로그래밍 수준에 달려 있습니다. 프로그래밍 알고리즘과 관련된 데이터 모델과 이들 사이의 상관 관계. 예를 들어 : "Hello World"를 출력하는 프로그램을 작성하기 위해 고등 수학에 익숙한 사람이 필요하지 않습니다. 수학적 참여 수준은 프로그래밍 방식으로 해결해야하는 문제의 복잡성 수준에 따라 달라집니다.


-2

단지 내 경험, 더 이상 :
나는 수학자가 아닙니다. 나는 천재가 아니고, 단지 autodidact입니다.
... 수년이 지난 지금 직감으로 일하는 것보다

먼저
C, C ++, 재미를 위해, Java 는 업무를 위해 처음부터 Pick (죽은 시스템)을 처음부터 배웠습니다 (종이 문서와 샘플 만 포함) .

당신이 그것에 대해 말했듯이, 나는이 언어를 배우는 것이 수학 문제가 아니라 (기본 / 미니멀리스트 대수가 도움이 되더라도) 논리적 인 것이라고 말할 수 있습니다 .

이제 Eclipse와 같은 많은 도구가 도움을주고 수정합니다. 52 개의 예약어만으로 원하는 작업 에 집중 해야 합니다.

따라서 언어를 좋아한다면 Java 프로젝트를 선택하고 패턴 디자인, UML을 연구하고 JVM을 이해하고 Bigloo 및 Scala와 함께 사용하는 방법을 10,000 시간 동안 반복해서 이해하십시오.

Java에 대한 경험은 유급 일자리를 제공하고 산업 대형 프로젝트에서 오랜 시간 동안 제공하며 수학이 아닌 정보를 제공 할 수 있기 때문에 다른 환경으로 전환 할 수 있습니다 .

언어 (단어, 의미, 개념 및 의미론, 온톨로지와 같은 숨겨져있는 논리적 과학)를 이해하는 것이 인간의 삶에있어 좋은 목표라면, 지금부터 시작할 수 있습니다 .

그렇지 않으면 다른 방법으로 실험하십시오.


클로드 안부


다시, 아래 게시물을 참조하십시오. 당신은 수학을하고 있습니다, 당신은 그것을 인정하지 않기로 선택합니다.
jamesson

1
나는 보았지만 라틴어, 철학, 언어 ...의 논리에 대해 이야기 할 때 -1 ^ n을 가진 학생 (특수가 아닌 기초를 알고있는 학생)의 수학적 관심에 관한 첫 번째 질문에 대한 다른 게시물도 발견했습니다. 생명. 수학은 마음이 너무 제한되어 주변의 삶을 이해하지 않고 모든 것이 등식되지 않고 뉴턴이 사과에 의해 주어진 직감으로 시작한다는 것을 잊지 않고 거부됩니까? 아마도 다른 세계에 마음을 여는 것이 중재자 일 것입니다. 가능하면 토론의 양쪽을 풍성하게 할 것입니다. 그럼에도 불구하고 나는 글을 쓸 때 조심해야한다.
cl-r

-2

누군가 머리 위의 손톱을 거의 때렸습니다. 프로그래밍은 수학입니다. 보다 구체적으로, 프로그래밍은 계산 이론 또는 재귀 이론 이라고하는 수학적 논리의 한 가지입니다 .

다른 형식의 수학, 특히 공식 언어와 오토마타 이론이 직접 관여합니다. 패턴 일치에 사용되는 정규식과 프로그래밍 언어를 설명하고 구문 분석하는 데 사용되는 공식 문법을 설명합니다.

프로그래밍이 수학이 아니라고 말하는 사람은 알고리즘이나 다른 기본 수학에 대한 특허를 획득하여 이익을 얻고 자하는 "지적 재산"최대 주의자처럼 자신이 말하는 것을 알지 못하거나 지나친 동기를가집니다. 사실 또는 발견.

수학 프로그래밍에 대한 몇 가지 참고 자료 및 당신이 말하는 것을 모르는 추론 :

프로그램은 증명입니다 : 19 세기 논리 및 21 세기 컴퓨팅

프로그램은 증명 : Lambda 미적분학의 모델과 유형

위키 백과의 카레 하워드 통신 기사

컴퓨터 과학에서 논리의 비정상적인 효과에

논리의 불합리한 효과

그렇습니다. 수학적 논리의 "논리적"부분에는 무겁지만 수학은 일반적으로 몇 가지 공리이며 그 논리 결과는 1 차 논리를 통해 개발 된 것으로 인정됩니다.

달리 말하고 돈을 위해 "IP"최대 주의자가되는 한 :

미국에서 알고리즘을 특허하는 방법 . 알고리즘은 특허를받을 수 없지만, 알고리즘으로 지칭하지 않음으로써 알고리즘에 대한 특허가 부여됩니다. 웹에서 그 모순을 지적하거나 설명하려고 시도하는 많은 자료를 찾는 것은 어렵지 않습니다.


6
마지막에 광고 홈의 경우 -1입니다.
Charles E. Grant

@charles ad hominem은 누구를 상대로? 원래 포스터? 나는 특허에 대한 요점이 통찰력이 있다고 생각합니다 (더 나은 표현이 가능하더라도).
gcbenison 2015 년

@gcbenison, "프로그래밍은 수학이 아니라고 말하는 사람은 ... 또는 초 극적인 동기가있다"는 고전적인 가정주의 공격이다. 나는 당신이 나쁜 사람이기 때문에 당신의 주장에 대답 할 필요가 없다. 프로그래밍이 수학이라고 생각하지 않기 때문에 자극적 이며 소프트웨어 특허가 혐오 스럽다고 생각합니다. Applied Math에는 MS가 있지만, 내가 말하는 내용을 알고 있는지 여부는 확실히 논쟁의 여지가 있습니다.
Charles E. Grant

@commentators : 감사합니다. 나는 그 행동들이 다른 사람들에게 전가 된 불행으로 인해 무시되기 때문에 사용합니다. --- Bruce Ediger에게 : 의심의 여지가있는 성찰이 진행되고 있습니다.
cl-r

@ cl-r : SCO 안티-리눅스 캠페인, nature.com/news/ 와 같은 매우 구체적인 예를 생각하고있었습니다. 우리가 프로그래머로서 변호사가 수학을 변호사의 이익으로 정의하도록한다면, 우리는 모든 문명에 큰 혼란을 안겨줍니다 .
Bruce Ediger

-2

수학은 프로그래밍과 관련이 있습니다. 예를 들어 게임 프로그래밍에서는 물리학에 matyhs를 사용하고 모든 것을 더 적게 수행해야합니다. 자바로 플레이어의 x 위치를 이동하려면 당신은 할 것 int x = x + speed * deltaTime또는 int x = x - speed * deltaTime그러나 당신은 너무 고급 물건에 이동할 수 있습니다 즉, 기본 수학이라고 말할 수 있습니다. Elo Algorithm이라는 체스 플레이어를 평가하는 알고리즘이 있습니다.

이것은 Elo 알고리즘 설명입니다

여전히 이것이 기본이라고 생각한다면 이것을 시도하십시오. 출생일, 월, 연도를받을 때 나이를 어떻게 계산합니까? 올해에서 출생 연도를 뺀 다음이 달보다 작거나 1을 뺀 것이 아닌지 확인하십시오.

어려운 일이고 좋은 수학이라는 것은 마술이 아닙니다.


-4

좋아, 아마 이것에 대해 많은 투표를 할 것이지만, 프로그래밍과 수학은 완전히 관련이없는 두 가지입니다. 덧셈, 곱셈 및 기본 논리 연산과 같은 기본 사항 만 알고있는 놀라운 개발자가 될 수 있습니다.

대부분의 개발자는 전문 경력 중에 단일 방정식을 풀지 않으며 큰 O 표기법과 같은 것을 수학적으로도 파악할 수 있습니다. 당신은 물건에 대해 생각하고, 머리에 약간의 비트가 뒤집힌 것을 상상하고, 누군가가 로그와 힘이 무엇인지 설명하면 물건이 어떤 큰 O인지 알 수 있습니다.

때로는 수학을 단순하게 만들거나 무언가를 증명 한 것을 자랑스러워 할 수 있습니다. 프로그래밍의 의미를 이산 수학 등으로 명명함으로써 수학 영역으로 프로그래밍의 의미를 확장 할 수 있지만 많은 미분 방정식과 적분을 배우고, 이를 증명하는 방법은 IMHO가 프로그래머로서 성공하기 위해 무엇을해야하는지에 대한 최고의 아이디어는 아닙니다.

적어도 나는 10 년 동안 수학을 다루지 않았고, 항상 수학 교수들과 논쟁을 벌였으며, 실시간 렌더링을위한 수학이 필요할 때, 이론을 증명하지 않고 프로그래머의 관점에서 모든 것을 배웠습니다. 나를 위해 "수학을 모른다면 좋은 프로그래머가 될 수 없습니다"라는 의견을 머릿속에 넣는 수학 교수들에 비해 간단하고 이해하기 쉬웠습니다. 물론 할 수 있습니다!

나는 이제 수학적인 것들을 알고 있으므로 모든 로그의 미분과 물건을 가진 수학 배경 프로그래머와 대화 할 수 있지만 그 이유만으로 그들이 희미 해지지 않도록 할 수 있습니다. 그 시간은 99.9 % 나 쓸모가 없기 때문에 프로그래머 입장에서 볼 때 1000 배 더 효과적으로 배울 수 있습니다.

프로그래머는 프로그래밍 언어 + 프레임 워크 + 모범 사례를 익히려면 5 년 이상이 필요합니다. 지상에서 왜 정리를 증명하는 법을 배워야합니까? 수학 학생은 수학 일을하고 프로그래머는 그 일을하게됩니다. 그것이 작동하는 방식입니다.


8
아이는 엄마에게 그가 자라서 백만장 자 야구 선수가 될 수학 코즈가 필요하지 않다고 말합니다. 그의 엄마는 "수백만을 세려면 수학이 필요하다"고 말합니다.
Nav

2
죄송합니다. 동의하지 않습니다. 수학을 공부하면 논리적으로 생각하는 방법을 배울 수 있습니다. 논리적으로 생각할 수 없다면, 확장 할 수없는 코드 만 있으면됩니다. 나는 당신이 수학이나 수학과 같은 전문가가되어야한다고 말하거나 일상 생활에서 사용해서는 안됩니다. 그러나 실제 프로그래밍 문제를 해결하려면이를 연구해야합니다.
jmort253

2
@ jmort253 : 수학을 공부한다고해서 논리적으로 생각하는 사람이되지는 않습니다. 그것은 당신의 마음에 연결되어 있거나 아닌 것입니다. 나는 학교 이후로 수학을 싫어했지만 나는 매우 논리적 인 사람입니다. 프로그래밍은 수학이 아니고 10 년 이상 시스템 프로그래밍에 종사하고 있으며 100 % 확신을 가지고이를 알 수 있으며 웹 개발이나 SQL 관리에있어 더 적은 수학을 기대할 수 있습니다. 당신의 임무는 새로운 수학적 이론을 개발하는 것이 아니라, 가장 효율적인 알고리즘과 컨테이너를 사용하여 제한된 자원을 사용하여 물건을 유지 보수 가능한 방식으로 작동시키는 것입니다.
Coder

2
@Nav : 모든 사람에게 기본 수학, x 및 y의 방정식까지 의미가 있습니다. 그러나 수백만을 세는 것은 일반적으로 회계사와 변호사가하는 일입니다. 그렇지 않으면 선언으로 무언가를해야하고 모든 것을 느슨하게 해야하는 주법을 놓칠 수 있기 때문입니다. 당신은 무슨 일이 일어나고 있는지 이해하기에 충분히 똑똑해야하지만 일단 무언가를 능가하면 체육관에서 몸매를 유지하면서 정확하고 빠르며 정시에 제 시간에 일을하는 전문 서비스를 사용하는 것이 더 비용 효율적입니다. 그 하드 톱 톱 5 자리를 유지합니다.
Coder

10
수학은 방정식을 푸는 과정이 아닙니다. 지금까지 본 유일한 수학이 학교에서 가르치는 수학이라면 실제 수학을 본 적이 없습니다 .
doppelgreener
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.