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


117

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

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

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


7
나는 10 년 후 수학 교사에게 전화를 걸어 평생 고급 수학을 사용한 적이 없다고 말했다. 딕 움직여, 알아,하지만 좋은 질문이야! 하나 추가.
Chris McCall


이 질문에 가장 많이 득표 한 답변을 참조하십시오 .
Boris Stitnicky 2013 년

오히려. 닫기, 이것은 프로그래머에게 마이그레이션되어야합니다.
크리스 Cudmore

답변:


111

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

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

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

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

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

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


6
수학은 정신력을위한 웨이트 트레이닝 일뿐 만 아니라 새로운 문제와 해결책의 문을 열어 준다고 덧붙이고 싶습니다 . 예를 들어, 이미지 처리 인턴쉽 동안 PDE에 대한 철저한 이해 없이는 노이즈 제거 알고리즘을 구현할 방법이 없습니다. 결과 코드는 간단하지만 매우 정확했습니다. 그리고 수학은 우리를 거기에있게했습니다. 더욱 놀라운 것은이 공식의 아름다움입니다. 하나의 작은 PDE 표현식은 몇 페이지의 코드로 변환 될 수 있습니다. 초기 공식 없이는 어떻게 끝날지 알기 어렵습니다.

수학은되지 필요한 프로그램이 있기 때문에, 프로그래밍 입니다 수학 . 좋은 수학 일 수도 있고 나쁜 수학 일 수도 있지만 (오랑우탄의 긴 호출을 Ook 언어 로 음역 할 때처럼 ), 프로그래머가 someting의 객체 모델을 설계 할 때마다 ze은 (보통 무의식적으로) 수학 행위를 수행합니다. 다시 말하지만, 프로그래밍을 위해 수학 책을 읽을 필요는 없지만 프로그래밍이 수학이라는 사실과 (유클리드가 말했듯이) 왕도는 없다는 사실에 변화가 없습니다.
Boris Stitnicky 2013 년

56

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

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

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


그래서 십자말 풀이를 많이하거나 스크래블을하는 사람이 그렇지 않은 사람보다 프로그래밍을 잘할 가능성이 더 높다고 말할 수 있습니다. 관계는 엄격한 의존성보다는 가능성에 관한 것 같습니다.
Liam

수학 문제 해결의 엄격함과 규율은 프로그래밍으로 해석됩니다. 문제를 해체하고 먼저 명백한 방향에서 접근 한 다음 두 분야에서 더 창의적인 방향으로 접근 할 수있는 능력이 있어야합니다.
Bramha Ghosh

4
제가 존경하는 두 명의 훌륭한 프로그래머는 컴퓨터 과학을 공부하지 않았고 오히려 수학자로서 훈련을 받았으며 직업 경로를 바꿨습니다 : Miguel de Icaza와 Alexander Stepanov. 그건 그렇고, Stepanov는 수학을 공부하는 동안 "공리로 시작하지 않고 공리로 납니다"라고 말했습니다. : D
Joe Pineda

@Liam-패턴 매칭과 단기적으로 메모리에있는 것들을 저글링하는 것입니다. 두 활동 모두 이러한 기술이 필요합니다.
jcolebrand 2010

+1 "하나를 잘하면 다른 하나도 잘할 가능성이 매우 높습니다."
Thorbjørn Ravn Andersen

39

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

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


12
제가 들었던 최고의 인용문은 "컴퓨터 과학은 천문학이 망원경에 관한 것보다 컴퓨터에 관한 것이 아닙니다."라고 생각합니다. (Dijkstra)
tloach

5
나는 stackoverflow.com이 기본적 으로이 한 줄짜리 답변 유형을 극복하기 위해 만들어 졌다고 생각하지만,이 쓸모없는 답변을 정상에 올린 같은 생각을 가진 15 명의 사람들이 있습니다. 나는 당신과 개인적인 것이 없지만 당신의 대답을 "불쾌감을주는"것으로 표시했습니다. 적어도 나에게는 그렇습니다.
simsim

2
@simsim : 사람들이 CS 학위가 프로그래밍에 관한 것이라고 생각하는 것이 불쾌합니다.
tloach

3
@simsim : Joel과 Jeff가이 웹 사이트를 만들 때 염두에 둔 것이 중요하지 않습니다. 프로그래머가 서로 돕는 커뮤니티를 만드는 것이 전부입니다. 나는 David의 짧은 대답이 옳다고 생각합니다. +1
Scottie T

@ Scottie : "프로그래머가 서로 돕는 커뮤니티를 만드는 것"이라면 포럼과 메일 링리스트로 충분했을 것입니다. 내 대답이 조금 거칠었을 수도 있지만, 물론 편집하기 전에 15 명의 사용자가 완전히 단서가없는 "답변"에 투표하는 것을 보는 것은 놀랍습니다. :-)
simsim

29

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

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

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

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


두 번째입니다. 그것 없이는 견딜 수 있지만-자신의 결정을 후회할까요? 적당히 흥미 진진하거나 도전적인 직업을 가질 것으로 기대한다면, 당신이 습득 한 수학 기술은 확실히 당신을 도울 것입니다.
Andras Vass

그럴 수 있지! GrayWizardx 및 기타 : 독학 자로서 독서 자료 측면에서 무엇을 권장합니까? 나는 어렸을 때 수학을 배운 살인적으로 나쁜 방식으로 인해 크게 꺼졌다. 나는 다른 곳에 비난하고 싶지 않지만 수학은 악의적으로 제시되었습니다. 이제 사용할 시간입니다. 여기에 설명 된 수학 (미적분, 선형 대수, 이산 수학 등)을 혼자서 배우는 것이 얼마나 쉬운가요? 이 접근 방식에 권장되는 특정 교과서 세트가 있습니까? 대학 학위는 더 이상 선택 사항이 아닙니다!
Emmel

1
@Emmel, 저는 Barnes and Noble에서 "The Manga guide to Math"와 "The Manga guide to Calculus"를 실제로 보았고, 저번에 "Complete Idiots Guide to Linear Algebra"를 본 적이 있습니다. 실제 자료에 관해서는 (학생 등을위한) 훌륭한 수학 웹 사이트가 있지만 그 중 몇 개가 아직 주변에 있는지 잘 모르겠습니다. 내가 가끔하는 일 중 하나는 커뮤니티 칼리지에 가서 수학 수업을 "감사"(합격 / 불합격)하고 재교육을받는 것입니다. Havent는 5 ~ 6 년 만에 해냈지만 지난번에는 꽤 도움이되었습니다.
GrayWizardx

26

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

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

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


나는 당신이 말한 대부분에 동의하지만 프로그래밍의 많은 측면이 일반적인 수학 원리를 이해함으로써 현저하게 쉬울 수 있다고 말할 수 없습니까? 때때로 어떤 것에 대한 공식은 같은 값에 도달하는 알고리즘보다 프로그래밍하기 훨씬 쉽습니다. 그 공식을 아는 한
BenAlabaster

@balabaster : 가끔-하지만 그렇게 자주 발생하지 않는다고 말하고 싶습니다. 마찬가지로 공식을 사용하기 위해 미리 알 필요가 없습니다. 인 능력 당신이 그들을 볼 때 공식을 이해할 수 있지만, 거의 IMO 정도 수준의 수학 자체를 필요가 없습니다 그래서 수학에서하는 것은 좋다.
Jon Skeet

11
수학 학위? 그럼 당신은 그것이 단지 숫자가 아니라는 것을 압니다. 나는 두 개의 수학 학위를 가지고 있으며, 그 내용을 자주 사용합니다 : 논리를 분석 / 단순화하기위한 부울 대수, DSL 구성을위한 자동 / 언어 이론, big-O 성능 분석을위한 대수 등
joel.neely

14

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


14

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

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

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


일반 프로그래머가 실제로 작성하는 기본 알고리즘은 몇 개입니까? 프로그래밍 작업의 80 %는 기본 대수 이상의 수학을 포함하지 않습니다.
dbkk

@dbkk : 평균적인 프로그래머의 가장 일반적인 작업은 일부 도메인의 "비즈니스 논리"인 개체 모델의 디자인입니다. 그리고 그러한 과정은 일반적으로 작업을 수행하는 사람들에 의해 반영되지는 않지만 수학에 지나지 않습니다.
Boris Stitnicky 2013 년

14

그것은 당신이하는 일에 달려 있습니다. 3D 프로그래밍을 많이한다면 3D 지오메트리에 대한 지식이 반드시 필요합니다. 동의하지 않습니까? ;-) JPG와 같은 새로운 이미지 형식이나 MP3와 같은 새로운 오디오 형식을 만들고 싶다면 코사인 또는 푸리에 변환을 이해할 수없는 경우에도 손실이 발생하는 대부분의 압축이 기반으로하는 기본입니다. . 수학을 잘 알고 있으면 다른 많은 문제를 더 잘 해결할 수 있습니다.

많은 수학이 필요하지 않은 다른 프로그래밍 작업도 많이 있습니다.


13

주제가이 글을 올릴만큼 매력적이라고 ​​생각되면 계속해서 학습을 시작하십시오. 나머지는 자연스럽게 올 것입니다.


9

예, 고급 수학이 필요하지 않습니다. 상용 프로그램을 프로그래밍하는 경우 기성 소프트웨어입니다.

그러나 다음과 같은 하드 코어 항목을 다룰 때 :

  • 로봇을 제어하기위한 궤적 계산
  • 불확실성과 자동 추론을 지원하는 AI와 유사한 애플리케이션 생성
  • 3D 모션 및 그래픽으로 재생

고급 수학 지식이 도움이 될 수 있습니다. 그리고 그것은 "이 세상 밖의"문제가 아닙니다.

나는 사무실에 필요한 종이의 양을 "예측"하기 위해 소프트웨어를 만들어야했다 (그리고 값을 근사화하는 가장 좋은 방법을 찾는 것은 지옥이었다).

하지만 고급 기능을 사용할 때 길을 잃기 쉽기 때문에 조심해야합니다. 올바르게 표시하기 위해 동적 메뉴의 상태를 저장하기 위해 Turing을 사용하는 제 친구가 있습니다. 그는 상상력이 너무 멀었다.


파일을 압축하거나 MP3 파일을 편집하는 것과 같은 것들을 추가 할 수 있으며, 웹 사이트를 함께 던지기보다는 실제로 컴퓨터가하는 일을 이해해야하는 모든 것을 추가 할 수 있습니다.
tloach

4
이 작업을 위해 튜링을 어떻게 사용 했습니까? 위자 보드 또는 선임?
Jared Updike 2011 년

8

어떤 유형의 프로그래밍?

상업적 경험에서 나는 고급 수학이 필요하지 않았지만 이것은 당신이 속한 분야에 크게 의존합니다.

컴퓨터 그래픽에는 많은 양의 고급 수학이 필요합니다. 많은 학술 컴퓨터 프로그래밍에는 고급 수학이 필요합니다.

그래서 수학을 잘하는 사람과 프로그래밍을 잘하는 사람 사이에 상관 관계가있는 경향이 있습니다.

이 깔끔한 답변이 도움이 되었기를 바랍니다.


6

일부 분야의 개발자에게는 수학이 필요하지만 다른 분야에서는 거의 쓸모가 없습니다.

게임 개발자이고 물리학을 많이 사용해야한다면 수학에 대한 이해가 중요합니다. 고급 시각적 컨트롤로 작업하는 경우 지오메트리 없이는 많은 작업을 수행 할 수 없습니다. 재무 계산을 할 계획이라면 통계에 대한 확실한 지식을 갖추는 것이 정말 도움이 될 것입니다.

반면에 지난 5 년 동안 저는 수학이 전혀 필요하지 않은 프로젝트가 2 ~ 3 개 밖에 없었습니다. 이 중 Google 검색이 도움이되지 않는 경우는 단 1 회 발생했습니다.

하루가 끝나면 재무 계산조차도 고객이 귀하를 위해 수행하는 일이며 구현할 공식을 제공하는 경우가 많습니다.

따라서 '응용 소프트웨어'비즈니스에 종사하는 경우 수학 학위를 사용하지 않을 가능성이 높습니다. 당신이 학문적 소프트웨어에 있다면 수학이 중요합니다.


"게임 개발자"에게 "시뮬레이션 개발자"를 추가합니다. 나는 쿼터니언이 나에게 어떻게 작용하는지 설명 할 수있을만큼 충분히 발전된 수학 책을 찾아서 죽은 리코 킹 알고리즘을 적절하게 코딩 할 수있게하려고 마을 곳곳을 운전하던 93 년을 기억합니다. 오늘 인터넷을 주셔서 감사합니다!
TED

6

나는 Chris와 동의합니다. 나는 또한 "예"라고 말할 것입니다. 그러나 이것은 위에서 언급 한 시장에 따라 다릅니다. 일상적인 작업에 도움이되는 기본적인 "기성품"응용 프로그램이나 작성 도구를 만드는 경우 수학은 그다지 중요하지 않습니다.

맞춤형 소프트웨어 솔루션을 엔지니어링하려면 많은 문제 해결과 비판적 사고가 필요합니다. 수학 배경이있을 때 가장 확실히 강화되는 기술. 저는 컴퓨터 공학 학위를 가지고 수학을 부전공했고, 제가 지금있는 이유에 대한 모든 수학 지향적 배경을 인정합니다.

그것은 내 2 센트입니다. 위의 내용을 읽어 보면 많은 사람들이 동의하지 않을 것임을 알 수 있습니다. 나는 모든 사람들이 수학 배경 없이는 그러한 기술을 가질 수 없다고 말하는 것이 아니라 단순히 기술이 그러한 배경을 갖는 부작용이며 소프트웨어에 긍정적 인 영향을 미칠 수 있다고 말하고 있습니다.


6

제 경험상 수학은 프로그래밍에 필요합니다. 당신은 그것에서 벗어날 수 없습니다. 프로그래밍의 전체는 수학을 기반으로합니다.

문제는 흑백이 아니라 더 다채 롭습니다. 문제는 수학이 필요한지 아닌지가 아니라 얼마나 많은가입니다. 수학 수준이 높을수록 더 많은 도구가 제공되고 다른 경로로 마음이 열릴 것입니다.

예를 들어 덧셈과 뺄셈 만 알고있는 경우 프로그래밍 할 수 있습니다. 곱셈이 필요한 경우 많은 덧셈을 수행해야합니다. 곱셈은 ​​반복적 인 덧셈을 단순화합니다. 대수를 사용하면 수학을 프로그램에 구현하기 전에 단순화 할 수 있습니다. 선형 대수는 이미지 변환을위한 도구를 제공합니다. Boolean Algebra는 이러한 모든 if진술 을 줄이는 메커니즘을 제공 합니다.

그리고 수학, 논리 및 철학의 형제를 잊지 마십시오. 논리는 case또는switch 문장 . 철학은 당신이 수정하는 코드를 작성한 사람의 생각을 이해하는 데 도움이 될 것입니다.

예, 프로그램을 작성하는 데 많은 수학이 필요하지 않습니다. 일부 프로그램은 다른 프로그램보다 더 많은 수학이 필요할 수 있습니다. 더 많은 수학 지식은 덜 이해하는 사람들보다 당신에게 유리합니다. 이시기에 사람들은 일자리를 얻기 위해 얻을 수있는 모든 이점이 필요합니다.


6

저는 8 년 동안 전문적으로 프로그래밍을 해왔고 12 살 때부터 취미 생활을했습니다.

수학은 필요하지 않고 논리는 필요합니다. 수학은 끔찍하게 도움이됩니다. 필요하지 않다고 말하는 것은 사람을 죽이기 위해 총은 필요하지 않으며 칼을 사용할 수 있다고 말하는 것과 같습니다. 글쎄, 사실이지만 그 총은 훨씬 쉽게 만듭니다.

이미 충족해야 할 최소한의 몇 가지가 있습니다. 기본적인 대수식과 표기법, 일반적인 컴퓨터 등가물을 알아야합니다. 예를 들어 지수가 무엇인지 (3에서 3의 3은 27), 일반적인 컴퓨터 표현은 3 ^ 3입니다. 대수에 대한 일반적인 표기법은 언어마다 다르지만 대부분은 다소 통일 된 방법론을 사용합니다. 다른 사람들 (당신을 쳐다 보는 LISP)은 그렇지 않습니다. 작업 순서도 알아야합니다.

알고리즘 적 사고를 이해해야합니다. 먼저 이것은이 계산에 사용되는 이것을 생성합니다. 당신이 이것을 이해하거나 이해하지 못할 가능성이 있으며, 당신이 그것을 이해하지 못한다면 점프하는 것은 상당히 어려운 장애물입니다. 나는 이것이 당신이 '얻는'것이고 실제로 배울 수있는 것이 아니라는 것을 발견했습니다. 반대로 어떤 사람들은 예술을 '얻지'않습니다. 그들은 화가가되어서는 안됩니다. 또한 CS 커리큘럼에서 이것이 작동하지 않는 이유를 알 수없는 학생들이있었습니다. x = z + w; z = 3; y = 5; 덧셈을 이해하지 못하는 것이 아니라 명확한 표현의 요구 사항을 파악하지 못하고 있다는 것입니다. 그들이 이해한다면 컴퓨터도 그래야 하지요? 위의 세 줄에서 무엇이 잘못되었는지 알 수 없다면 프로그래머가되지 마십시오.

마지막으로, 프로그래밍 영역에서 수학이 무엇인지 알아야합니다. 회계 소프트웨어는 기본 대수에서 멈출 수 있습니다. 물리학을 프로그래밍하는 경우 3 차원 기하학 (Euclidean)의 물리학 (느슨하게)과 수학을 알아야합니다. 아키텍처 소프트웨어를 프로그래밍하는 경우 삼각법을 알아야합니다.

하지만 이것은 수학보다 더 멀어집니다. 프로그래밍하는 도메인이 무엇이든 기본 사항을 제대로 이해해야합니다. 언어 분석 소프트웨어를 프로그래밍하는 경우 확률, 통계, 문법 이론 (다국어) 등을 알아야합니다.

종종 특정 도메인은 관련이 없다고 생각하는 지식이 필요하거나 그로부터 이익을 얻을 수 있습니다. 예를 들어, 오디오 소프트웨어를 프로그래밍하는 경우 파형을 처리하려면 실제로 삼각법을 알아야합니다.

크기도 변화합니다. 1000 개 항목의 재무 데이터 세트를 정렬하는 경우 큰 문제가 아닙니다. 그러나 레코드가 천만 개라면 실제로 벡터 수학을 알고 이진 수준에서 정렬하는 방법을 깊이 이해하면 큰 이점을 얻을 수 있습니다 (시스템이 알파벳순으로 정렬하는 방법은 무엇입니까? 'a'가 'b보다 작은 지 어떻게 알 수 있습니까? '?)

프로그래머로서 일반적인 지식 기반이 폭발 할 것임을 알게 될 것입니다. 각 프로젝트는 프로그래밍의 직접적인 영역 밖에서 더 많은 학습을 필요로하기 때문입니다. 자기 학습에 대해 비꼬거나 게으르고 기본적으로 '숙제'를하는 데 일주일에 10 시간 이상을 보내는 것을 좋아하지 않는다면 프로그래머가되지 마십시오.

사고 연습을 좋아한다면 배우기를 좋아한다면 계산기없이 수학 같은 추상적 인 것을 생각할 수 있고 스케치 패드없이 디자인 할 수 있다면 삶과 취미에 대한 폭 넓은 취향을 가지고 있다면 자기 비판적이고 버릴 수 있다면 ' 마음에 드는 아이디어를 완성하고 싶다면 프로그래머가 되십시오. 이 결정은 수학이 아니라 논리적으로 생각하고 배우는 능력에 근거합니다. 이것이 중요한 것입니다. 수학은 부산물 일뿐입니다.


5

물론 어떤 종류의 프로그래머가되고 싶은지 또는 고용주가 원하는 프로그래머의 종류에 따라 다릅니다. 미적분과 대수는 필수 요소라고 생각합니다. 통계 및 선형 프로그래밍은 실제로 서류 가방에 넣을 수있는 좋은 도구입니다. 분석 (미분, 적분, 함수 ...) 없이도 수행 할 수 있습니다. 그러나 일이 어떻게 작동하는지 알고 싶다면 (예를 들어, 전자 공학 또는 사소하지 않은 알고리즘) "고급"수학은 어디에도없이 가지 않는 것이 좋습니다.


5

제가 수행 한 프로그래밍의 대부분은 전자기학, 양자 역학 및 구조 역학과 같은 연구를위한 물리학 시뮬레이션을 포함합니다. 문제 영역에는 고급 수학이 연관되어 있기 때문에 고급 수학을 사용하지 않고는 문제를 해결하기가 어려울 것입니다.

그래서 당신의 질문에 대한 대답은-당신이하려는 일에 달려 있습니다.


5

새로운 프로그래밍 언어를 작성하려면 고급 수학 지식이 중요합니다. 또는 자체 알고리즘을 작성해야합니다.

그러나 웹 사이트에서 보험 처리 애플리케이션에 이르기까지 대부분의 일상적인 프로그래밍에는 기본적인 수학 만 필요 합니다.


5

견고한 수학적 (단순한 산술이 아님) 또는 논리 배경을 가진 사람은 알고리즘, 변수 사용, 조건부 추론 및 데이터 구조에 잘 대처할 것입니다.

  • 모든 사람이 UI를 디자인 할 수있는 것은 아닙니다.
  • 모든 사람이 효율적인 코드를 만들 수있는 것은 아닙니다.
  • 모든 사람이 명확하게 설명하고 문서화 할 수있는 것은 아닙니다.
  • 모든 사람이 좋은 알고리즘을 수행 할 수있는 것은 아닙니다.

수학은 한 지점까지 도움이 될 것입니다.


5

나는 고급 수학 지식이 좋은 프로그래머에게 필수라고 생각하지 않지만 개인적인 경험을 바탕으로 고급 수학을 더 잘 이해하는 프로그래머도 더 나은 프로그래머가된다고 생각합니다. 이것은 단순히 더 논리적 인 마음 때문일 ​​수도 있고, 수학적 문제를 해결 한 경험으로 인해 더 논리적 인 전망 때문일 수도 있습니다.


5

수학의 기본 개념은 알고리즘의 고안, 이해, 구현 및 사용입니다. 당신이 수학을 할 수 없다면 그것은 당신이 이런 일을 할 수 없기 때문이고, 이런 일을 할 수 없다면 당신은 효과적인 프로그래머가 될 수 없습니다.

일반적인 프로그래밍 작업에는 특정 수학적 지식이 필요하지 않을 수 있지만 (예 : 3D 그래픽 또는 물리 시뮬레이션과 같은 작업을 수행하지 않는 한 벡터 대수 및 미적분은 필요하지 않을 것입니다), 기본 기술은 동일하고 능력이 부족합니다. 한 도메인에서 다른 도메인의 능력 부족과 일치합니다.


5

수학은 프로그램을 만들기위한 도구 상자입니다. Cormen의 알고리즘 소개를 추천합니다. 더 많은 "수학적인"물건을 다룹니다.

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

저는 높은 수학이 좋은 프로그래머가되기위한 필수 조건이라고 생각하지 않습니다. 항상 그렇듯이 코딩하는 것에 달려 있습니다.

물론 3D 그래픽 프로그래밍을하고 있다면 행렬과 물건이 필요합니다. 비즈니스 소프트웨어의 작성자로서 통계 수학이 필요할 것입니다.

그러나 거의 10 년 동안 (그리고 또 다른 10 년 아마추어) 전문 프로그래머가되는 것은 내가 정기적으로 필요한 것이 아닙니다. 모든 경우의 약 99.8 %에서 일부 지능적인 조합에서 더하기, 빼기, 나누기 및 곱하기입니다. 대부분의 경우 수학이 아니라 알고리즘에 관한 것입니다.


4

대부분의 프로그래머에게 고등 수학을 배우는 것은 단순히 한 단계에서 다른 것으로 이동하기 위해 논리적으로 사고하도록 두뇌를 구부리기 때문에 중요합니다.

그러나 프로그래밍 작업은 고등학교 수학 이상의 것을 필요로하는 작업이 거의 없습니다. 선형 대수를 한 번 사용했습니다. 미적분을 사용한 적이 없습니다. 나는 매일 대수를 사용합니다.


4

수학적 지식은 그래픽 디자인 기술, 퍼즐 해결 능력, 직업 윤리 및 기타 기술 및 특성과 마찬가지로 프로그래머에게 종종 유용합니다. 프로그래머가 잘할 수있는 모든 것에 능숙한 프로그래머는 거의 없습니다. 나는 "당신이 { 여기에 좋아하는 프로그래밍 능력을 삽입 할 수 없다면 당신은 진정한 프로그래머가 아닙니다 } 입니다.

하지만 저는 수학을 할 수없는 프로그래머를 조심할 것입니다. 그림을 못 그리는 사람보다 더.


4

나는 그것이 당신이하려는 일에 정말로 달려 있다고 생각하지만 IMHO, CS 및 OS 이론은 여기서 수학보다 더 중요하며 실제로 관련된 수학 만 필요합니다.

예를 들어, 최신 OS의 많은 스케줄러를 뒷받침하는 스케줄링 이론 및 최적화에 대한 많은 CS 배경이 있습니다. 그것은 매우 복잡한 것은 아니지만 약간의 수학이 필요한 것의 예입니다.

하지만 솔직히 대부분의 경우 수학이 필요하지 않습니다. 필요한 것은 정신적 OR / AND 능력과 같은 기본 2와 16에서 사고하는 능력을 배우는 것입니다. 예를 들어, 바이트가 있고 해당 바이트 내에 2 개의 3 비트 필드와 2 개의 낭비되는 비트가있는 경우, 바이트 값이 11과 같을 때 어떤 필드가 활성화되어 있는지 알면 사용하는 것보다 약간 더 빠르게 작업을 수행 할 수 있습니다. 펜과 종이.


큐잉 이론을 공부 한 적이 있습니까? 개발자가 하나를 선택하게 만드는 메모리 관리자와 통계 모델을 연구 한 적이 있습니까? 나는 당신의 대답의 정면에 반드시 동의하지 않지만 당신의 지나치게 단순화했습니다.
San Jacinto

@San : 내가 지나치게 단순화하고 있다고 확신하지만 대부분의 시스템 개발자는이 수준에서 이러한 것들을 알 필요가 없다고 생각합니다. 나는 처음 두 학위에서 기본 수준에서 공부했고 박사 과정에서 약간 더 깊이 공부했지만 그것은 내 장점이 아니기 때문에 전문가에게 맡기는 것을 선호합니다. 내가 아는 OS 사람들은 나를 놀라게하는 수학 기술을 가지고 있었다.
Uri

아주 타당하다고 생각합니다. 시스템 프로그래밍과 OS 프로그래밍을 구별 할 필요가 있다고 생각합니다. 촘촘하게 짜여진 개념이지만 그럼에도 불구하고 다릅니다.
San Jacinto

4

저는 예비 대수 수업에 들어갔을 때 프로그래밍을 시작했습니다. 그래서 수학이 그다지 중요하다고 말하지는 않겠지 만, 특정 유형의 프로그래밍, 특히 기능적에는 도움이 될 수 있습니다.

나는 아직 이산 수학을 배우지 않았지만,이 수업에서 가르치는 수학 표기법으로 작성된 프로그래밍과 관련된 많은 이론적 인 것들을 봅니다.

또한 모든 밑수, 특히 밑수 2, 8 및 16을 계산하는 방법을 알고 있는지 확인하십시오.

또한 저에게 몇 가지 개념을 제공 한 수업 중 하나는이 사전 프로그래밍 수업이었습니다. 우리는 합집합, 교차점, 그리고 그 모든 행복한 것들을 배웠고 그것은 비트 수학과 거의 똑같습니다. 그리고 우리는 부울 논리를 매우 많이 다루었습니다. 제가 가장 유용하다고 생각한 것은 복잡한 부울 구문을 줄이는 방법을 배웠을 때였습니다. 이것은 매우 편리했습니다.

(x|y) & (x|z) & (x|foo)

단순화 할 수 있습니다

x | (y & z & foo)

이전에는 잘 이해하지 못했습니다.


4

글쎄, 당신은 많은 응답을 생성했지만 나는 그것들을 모두 읽지 않았습니다. 저는 이것에 대해 중간에 있습니다. 프로그래머가되기 위해 수학이 필요하지는 않습니다. Linux의 어셈블러 대 장치 드라이버는 다른 것보다 복잡하지 않으며 수학도 필요하지 않습니다.

어떤 식 으로든 모양이나 형태로 수학 수업을 듣거나 통과 할 필요가 없습니다.

프로그래밍에 대한 문제 해결 사고 방식이 수학 솔루션의 사고 방식과 매우 유사하며 결과적으로 수학이 쉽게 올 수 있다는 데 동의합니다. 또는 반대로 수학이 어렵다면 프로그래밍이 어려울 수 있습니다. 수업이나 학위 또는 종이나 트로피가 필요하지 않습니다.

이제 머리 나 종이에서 또는 계산기를 사용하여 16 진수에서 2 진수로 빠르게 변환 할 수 없다면 어려움을 겪을 것입니다. 네트워킹 및 타이밍과 관련된 기타 작업을 수행하려는 경우 커널 드라이버가 자주 수행하지만 반드시 수행해야하는 것은 아닙니다. 당신은 어려움을 겪을 것입니다. 나는 속도 계산, 초당 비트, 초당 바이트, 작업을 수행하는 데 필요한 메모리 양 등으로 어려움을 겪는 수학 학위 및 / 또는 컴퓨터 과학 및 / 또는 공학 학위를 가진 매우 긴 목록의 사람들을 알고 있습니다. 어느 정도는 어떤 사람들은 가지고 있고 다른 사람들은 노력해야하는 일종의 요령으로 간주 될 수 있습니다.

내 결론은 의지력을 믿는다는 것입니다. 여러분이 할 수 있고 뜻하는 것을 배우고 싶다면 그렇게 간단합니다. 당신은 수업을 들거나 많은 돈을 쓸 필요가 없습니다. 예를 들어 리눅스와 qemu는 당신을 꽤 오랫동안 바쁘게 만들 수 있습니다. 다른 asm 언어 등등. 커널 개발, 임베디드 등을위한 크래시 가능한 환경입니다. , 그러나 나는 당신이 원치 않으면 도망쳐 서 수업을 들어야한다고 생각하지 않습니다. ee 수업, cs 수업, 수학 수업을 듣고 싶다면 ..


이것은 화염 미끼가 아니라 현실입니다. 프로그래밍 관점에서 디지털 전자 및 소프트웨어 엔지니어링에 대해 알아야 할 모든 것을 요약 할 수 있습니다. 0, 1 및 또는 아닙니다. 그 다섯 가지가 디지털 전자 장치와 모든 프로그램이 작동하는 것입니다. 빠른 낸드 게이트의 큰 상자로 무엇이든 만들 수 있습니다.
old_timer

4

수학이 필요합니다. 프로그래밍은 수학에 지나지 않습니다. 이론 물리학의 발견은 수학적 해법으로 설명되지 않는 한 실용적 (적용 가능한) 함축이되지 않습니다. 컴퓨터에서, 특히 프로그래밍 언어에서 해석 할 수없는 경우 계산적으로 해결할 수 없습니다. 따라서 특정 문제를 해결하기 위해 다양한 언어가 설계되었습니다. 그러나 Java, C, C ++와 같은 범용 및 광범위한 프로그래밍 언어의 경우 대부분의 프로그래밍 작업에는 데이터베이스, 텍스트 파일에서 값 추출, Windows (데스크톱, 웹)에 저장, 조작과 같은 동일한 문제에 대한 반복적 인 (연속적인) 솔루션이 포함됩니다. 동일한 값, 때로는 유사한 장치 (다른 브랜드 이름, 다른 포트 및 골칫거리)에서 일부 데이터에 액세스하는 등 단일 방법 이상을 포함하지 않는 경우


3

IMO, 당신은 아마도 분야에 대한 많은 지식이 없어도 수학에 대한 적성이 필요할 것입니다. 따라서 수학을 잘하는 데 필요한 것은 프로그래밍을 잘하는 데 필요한 것과 비슷합니다.

그러나 일반적으로 일상적인 프로그래밍에서 어떤 종류의 고급 수학을 마지막으로 사용한 때가 기억 나지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.