[math] 프로그래밍에 수학이 필요합니까? [닫은]

베테랑 프로그래머에게 고급 수학이 필요한지 대학 시절 친구와 토론했습니다. 그는 그것에 대해 격렬하게 반대하곤했습니다. 그는 프로그래머는 고등학교 나 대학 1 학년 수학의 기초적인 수학적 지식 만 필요하며, 거의 모든 프로그래밍 작업은 고급 수학 없이도 달성 할 수 있다고 말했습니다. 그러나 그는 알고리즘이 프로그래머에게 기본적이고 필수 자산이라고 주장했다.

내 입장은 모든 컴퓨터 과학의 발전은 거의 전적으로 수학의 발전에 의존했기 때문에 수학에 대한 철저한 지식은 프로그래머가 실제 도전적인 문제를 해결할 때 크게 도움이 될 것이라는 점이었습니다.

나는 여전히 주장의 어느 쪽이 옳은지 결정할 수 없습니다. 자신의 경험에서 자신의 입장을 말씀해 주시겠습니까?



답변

제시된대로 귀하의 질문에 답하려면 “아니요, 프로그래밍에 수학은 필요하지 않습니다”라고 말해야합니다. 그러나 다른 사람들이이 글에서 제안했듯이, 저는 수학을 이해하는 것과 “알고리즘 적으로 생각할 수있는”능력 사이에 상관 관계가 있다고 믿습니다. 즉, 수량, 과정, 관계 및 증명에 대해 추상적으로 생각할 수 있습니다.

저는 9 살 때부터 프로그래밍을 시작했고, 그 단계에서 많은 수학을 배웠다고 말할 수 없습니다. 그러나 약간의 노력으로 변수, for 루프, goto 문 (용서하세요, 저는 Vic 20 BASIC이었고 아직 Dijkstra를 읽지 않았습니다) 및 그래픽을 화면에 표시하기위한 기본 좌표 기하학을 이해할 수있었습니다. .

나는 결국 컴퓨터 과학 부전공으로 순수 수학에서 우등 학위를 마쳤습니다. 나는 주로 분석에 초점을 맞추었지만 꽤 많은 이산 수학, 수 이론, 논리 및 계산 가능성 이론을 공부했습니다. 통계, 확률 이론, 벡터 분석 및 선형 대수에서 얻은 몇 가지 아이디어를 프로그래밍에 적용 할 수있는 것 외에도 학부 과정에서 프로그래밍에 직접 적용 할 수있는 수학이 거의 없었으며 이후에했던 상업 및 연구 프로그래밍에 적용되었습니다.

그러나 저는 수학이 요구하는 공식적인 사고 방식, 즉 신중한 추론, 반례 검색, 공리적 토대 구축, 개념 간의 연결 찾기 등이 크고 복잡한 프로그래밍 프로젝트를 수행 할 때 엄청난 도움이되었다고 강력하게 믿습니다.

운동 선수가 자신의 스포츠를 위해 훈련하는 방식을 고려하십시오. 예를 들어, 축구 선수들은 훈련 시간의 대부분을 기본적인 축구 기술에 사용합니다. 그러나 일반적인 체력을 향상시키기 위해 체육관에서 자전거 나 로잉 머신을 사용하거나 웨이트 운동을하는 등의 시간을 보낼 수도 있습니다.

수학을 공부하는 것은 프로그래밍을위한 정신력과 체력을 향상시키기 위해 웨이트 트레이닝이나 교차 트레이닝에 비할 수 있습니다. 기본 프로그래밍 기술을 연습하는 것이 절대적으로 중요하지만 수학을 공부하는 것은 핵심 분석 능력을 향상시키는 놀라운 정신적 운동입니다.


답변

프로그래밍에 고급 수학이 필요하지 않을 수 있지만 (고급 수학 능력을 프로그래밍하지 않는 한) 프로그래밍과 수학의 사고 과정은 매우 유사합니다. 당신은 알려진 것들 (이전에 입증 된 이론들)의 기초로 시작하고 새로운 곳으로 가려고 노력합니다. 단계를 건너 뛸 수 없습니다. 단계를 건너 뛰면 빈칸을 채워야합니다. 둘을 엄청나게 비슷하게 만드는 비판적 사고 과정입니다.

또한 수학자와 프로그래머는 모두 초록에서 비판적으로 생각합니다. 실제 사물은 객체와 변수로 표현됩니다. 구체적에서 추상으로 번역하는 능력은 또한 두 분야를 연결합니다.

한 가지를 잘하면 다른 한 가지도 잘할 가능성이 매우 높습니다.


답변

컴퓨터 과학! = 프로그래밍

좋아요, 진지하게 저는 영어와 심리학을 전공하고 컴퓨터 과학을 전공 한 좋은 프로그래머와 나쁜 프로그래머를 알고 있습니다. 제가 개발자로서 존경하는 몇몇 유명한 사람들은 CS 배경이 없었습니다. 예를 들어 Larry Wall (Perl)은 언어 학자였습니다. 반면에 작업중인 도메인에 대해 아는 것이 도움이됩니다. 그러면 최소한 데이터가 적절한 지 확인하고 고객 / 사용자가 실제로 원하는 것을 드릴 다운하는 데 도움이 될 수 있기 때문입니다. 그리고 예, 계산 복잡성과 효율적인 데이터 구조 및 프로그램 정확성 문제가 있습니다. 그것은 당신이 컴퓨터 과학에서 배우는 것들이고 거의 모든 영역에서 아는 것이 유용하지만, 필요하지도 충분하지도 않습니다.


답변

내가 너에게 가장 먼저 말할 것 같아 그렇게수학 필요 . 다른 사람들이 말했듯이 수학은 개발의 특정 측면에서 그다지 중요하지 않지만 비판적 사고와 구조화 된 분석의 기본은 매우 중요합니다.

더구나 수학은 스케줄러, 최적화, 정렬, 프로토콜 관리 및 컴퓨터의 여러 다른 측면과 같은 것들에 들어가는 많은 기본 사항을 이해하는 데 중요합니다. 계산 수준에 포함 된 수학은 복잡하지 않지만 (대부분 고등학교 대수) 미적분을 통한 수학에 대한 확실한 이해가 큰 도움이 될 것이므로 이론과 응용은 매우 복잡 할 수 있습니다.

그것 없이는, 절대적으로 극복 할 수 있고, 수학에 대한 덜 철저한 지식이 당신을 방해하도록해서는 안되지만, 기회가 있거나 성향이 있다면 나는 가능한 한 많은 수학, 미적분학, 수치 이론, 선형을 공부할 것입니다 대수학, 조합 학, 실용적인 응용 프로그램 모두 광범위한 컴퓨터 과학에서 실용적이고 이론적 인 응용 프로그램을 모두 가지고 있습니다.

나는 울타리 양쪽에서 매우 성공한 사람들 (수학에 집중하지 않은 사람들과 물리학 또는 수학을 위해 학교에 다녔던 사람들)을 알고 있었지만 두 그룹 모두에서 수치 문제를 즐기고 알고리즘과 수학 이론에 대해 배우는 것을 즐겼습니다. .


답변

나는 수학 학위를 가지고 있지만 내 경력에서 수학을 한 번만 요구했던 것을 기억할 수 없습니다. 논리적 사고에 대한 내 마음을 훈련시키는 데 유용했지만 유체 역학, 양자 이론 또는 Markov Chains를 사용하여 코드를 작성하지 않았습니다. (마지막이 나올 가능성이 가장 높습니다.)

대부분의 LOB (기간 업무) 개발자는 대부분의 경우 고급 수학이 필요하지 않습니다. 때때로 삼각법을 아는 것이 도움이 될 수 있으며, 수학적으로 설명 된 알고리즘을 구현하기에 충분한 수학을 확실히 이해할 수있는 것이 중요 할 수 있지만 그 이상일까요? 아니.

대부분의 프로그래머는 컴퓨터 과학을 발전시키지 않고 응용 프로그램을 구축하고 있다는 사실을 잊지 마십시오. 나는 현대 자동차를 운전하기 위해 고급 엔지니어링을 알 필요가 없습니다. 비록 그 자동차가 고급 엔지니어링을 통해 거의 확실히 개선되었지만 .


답변

고급 논리 (이산) 수학이 실제로 도움이 될 수 있다고 주장합니다. 세트 이론과 함께. 일반적인 컴퓨터 프로그램을 다룰 때 이러한 분야는 많은 도움이 될 수 있습니다. 그러나 내가 대학에서 택한 다른 많은 수학은 미적분학이었는데, 내가 볼 수있는 한 사용이 매우 제한적이었습니다. 프로그래밍의 90 % (또는 이와 비슷한 것)가 매우 간단한 수학으로 비즈니스 앱을 수행하고 있기 때문에 대부분의 경우 수학 지식이 거의 없어도 성공할 수 있습니다. 그러나 부울 대수, 논리, 이산 수학 및 집합 이론을 잘 이해하면 실제로 다음 단계로 올라갈 수 있습니다.


답변

나는 여기 곡물에 반대하고 “예”라고 말할 것입니다

토목 공학에서 프로그래밍으로 전환합니다 (Concrete Sucks!). 나의 수학 배경은 일반적인 1 학년, 2 학년 및 3 학년 미적분 (Diff EQ, 볼륨 통합, 시리즈, 푸리에 및 라플라스 변환) 및 수치 분석 과정으로 구성됩니다.

저는 제 수학이 컴퓨터 프로그래밍을하기에 엄청나게 부족하다는 것을 알게되었습니다. 내가 놓친 이산 수학 및 논리의 전체 영역이 있으며, 방대한 교과서 라이브러리, Wikipedia 및 Wolfram 덕분에 생존합니다. 대부분의 고급 알고리즘은 고급 수학에 기반을두고 있으며, 광범위한 연구를하지 않고는 고급 알고리즘을 개발할 수 없습니다 (본질적으로 절반 과정의 작업에 해당). 저는 확실히 새로운 알고리즘을 생각 해낼 수 없습니다. 서있을 거인의 어깨와 같은 수학적 기초가 없습니다.