developer tip

프로그래밍은 수학의 하위 집합입니까?

optionbox 2020. 11. 22. 19:23
반응형

프로그래밍은 수학의 하위 집합입니까?


나는 모든 프로그래밍이 실제로 수학의 하위 집합이라는 것을 여러 번 들었습니다. 어떤 사람들 은 OO가 그 뿌리에서 수학적으로 기반을두고 있다고 제안 하지만 몇 가지 명백한 예를 제외하고는 연결을 얻지 못합니다.

  • 귀납법을 사용하여 재귀 알고리즘을 증명합니다.
  • 공식적인 정확성 증명,
  • 기능적 언어,
  • 람다 미적분,
  • 점근 적 복잡성,
  • DFA, NFA, Turing Machines 및 일반적인 이론적 계산은
  • 상자에있는 모든 것이 바이너리라는 사실.

나는 수학이 프로그래밍에 매우 중요하다는 것을 알고 있지만,이 "서브셋"관점에서 어려움을 겪습니다. 수학의 하위 집합을 프로그래밍하는 방법은 무엇입니까?

충분히 강력한 연결이 있다면 엔터프라이즈 / OO 개발과 관련이있을 수있는 설명을 찾고 있습니다.


전반적으로, 수학은 논리의 공식적인 코드화이며 소프트웨어에서 우리가하는 일이기도합니다.

질문의 주제 목록은 수학적 문제로로드됩니다. 우리는 상당히 높은 추상화 수준에서 프로그래밍을 할 수 있으므로 원시 수학이 당신을 쳐다 보지 못할 수도 있습니다. 예를 들어 DFA를 언급했습니다. 수학을 몰라도 프로그램에서 정규 표현식을 사용할 수 있지만 좋은 정규 표현식 엔진을 설계하려는 경우에는 더 많은 수학이 필요합니다.

흥미로운 점을 지적한 것 같습니다. 프로그래밍은 예술이자 과학입니다. 많은 "무역 도구"가 있으며 단순히 프로그램을 작성하기 위해 앉아서 높은 수준의 수학을 많이 할 필요는 없습니다. 사실, 당신이 프로그래밍을 할 때, 당신은 많은 수학 이나 컴퓨터 과학 을하지 않습니다 .

수학이 나타나는 컴퓨터 과학의 어려운 문제를 풀기 시작할 때입니다. 당신이 더 깊게 갈수록, 그것은 더 낮은 수준의 추상화에서 더 많이 살게 될 것입니다.

또한 작업 할 필요는 없지만 더 많은 수학을 포함하는 프로그래밍 영역도 있습니다. 예를 들어, 공식적인 수학없이 언어를 배우고 일부 앱을 작성할 수 있지만, 일부 응용 수학 없이는 알고리즘 분석 에서 그다지 멀지 않습니다 .


알고리즘 등에 대한 추상적 인 사고가 필요하다는 점에서 수학입니다.
계획 일정, 결과물, 테스트를 포함 할 때 엔지니어링입니다.
결국 어떻게 될지 모를 때 예술입니다.


프로그래밍은 응용 수학에서 가장 어려운 분야 중 하나입니다. 가난한 수학자들은 순수한 수학자로 남아있는 것이 낫습니다.

--EW Dijkstra


네, 저는 대학에서 수학과 CS를 전공했습니다. 집합 A가 수학이고 집합 B가 CS이면 A가 B와 교차합니다. 하위 집합이 아닙니다.

컴퓨터 과학의 많은 아버지와 어머니가 Turing과 Dykstra와 같은 수학자 였다는 것은 의심 할 여지가 없습니다. 인터넷 창립자의 대부분은 수학, 물리학 또는 공학 박사였습니다. 컴퓨터 과학의 핵심 개념의 대부분은 수학에서 나왔지만 프로그래밍 행위는 실제로 수학이 아닙니다. 수학은 우리의 일상 생활에 도움이되지만 둘은 같지 않습니다.

그러나 컴퓨터 뒤에있는 원래의 추론은 사물을 잘 계산하는 것이 었습니다. 우리는 그렇게 짧은 시간에 거기에서 먼 길을 왔습니다.


프로그래밍에 대해서는 언급하지 않지만 아이디어는 여전히 관련이 있습니다.


아인슈타인은 1917 년 유명한 수학자로 알려졌습니다. 일반 대중이 마침내 물리학이 단지 응용 수학이 아니라는 것을 깨닫게 된 것은 히로시마 때가 아니 었습니다.

사람들이 어떤 것을 이해하지 못할 때, 그들은 그것을 그들이 이해하는 어떤 유형으로 이해하려고 노력합니다. 그들은 비유로 생각합니다. 프로그래밍은 수학, 공학, 과학, 예술, 공예, 건설 분야로 묘사되었습니다. 이들 중 어느 것도 완전히 거짓이 아닙니다. 이 모든 것에서 차용합니다. 진짜 문제는 프로그래밍 분야가 겨우 50 년 밖에되지 않았다는 것입니다. 사람들은 그것을 정신 분류에 통합하지 않았습니다.


여기에 많은 혼란이 있습니다.

우선, "프로그래밍"은 (현재) "컴퓨터 과학"과 같지 않습니다. Dijkstra가 자신을 "프로그래머"라고 불렀을 때 (약간 제목을 발명 한) 그는 CRUD 응용 프로그램을 펌핑하는 것이 아니라 실제로 응용 컴퓨터 과학을 수행했습니다. 그것이 우리를 혼동하지 않도록합시다. 오늘날, 비즈니스 환경에서 대부분의 프로그래머가하는 일과 컴퓨터 과학 사이에는 큰 차이가 있습니다.

이제 컴퓨터 과학이 수학의 한 분야라는 주장을 할 수 있습니다. 그러나 Knuth가 지적했듯이 (컴퓨터 과학에 대한 그의 선정 논문에서 수집 한 그의 논문 "컴퓨터 과학 및 수학과의 관계"에서 ) 수학은 컴퓨터 과학의 한 분야라고 주장 할 수도 있습니다.

사실, 나는 Knuth가 영역을 멋지게 배치했기 때문에 수학과 컴퓨터 과학의 관계에 대해 생각하는 모든 사람에게이 논문을 강력히 추천합니다.

그러나 원래의 질문으로 돌아 가기 위해, 실무자에게 "기업 / OO 개발"은 수학에서 꽤 멀리 떨어져 있습니다.하지만 이는 대부분 낮은 수준의 연산에 관련된 대부분의 심각한 수학이 추상화 되었기 때문입니다 (컴파일러에 의해 , 운영 체제, 명령어 세트 등). 마찬가지로, 내연 기관의 물리학에 대한 고급 지식은 자동차 운전에 필요하지 않습니다. 당연히 더 효율적인 차를 디자인하고 싶다면 ....


수학의 정의에 모든 형식의 형식 논리가 포함되고 프로그래밍이 코드에 존재하는 논리와 계산에 의해서만 정의되는 경우 프로그래밍은 수학 QED의 하위 집합입니다 .-)

그러나 이것은 그림이 단지 표면에 착색 된 안료를 두는 것이라고 말하는 것과 같습니다. 예술, 통찰력, 직관, 전체 창작 과정을 완전히 강화합니다.

음악은 같은 추론으로 수학의 하위 집합이라고 주장 할 수 있습니다.

프로그래밍은 수학의 일부가 아닙니다. 프로그래밍 수학의 하위 집합을 사용 하지만 수학 이외의 기술 / 재능도 필요합니다. [음악 작곡과 매우 유사 함]


면책 조항 : 저는 IT 컨설턴트로 일하며 주로 포털 및 아키텍처 관련 작업을 개발합니다. 저는 심리학 학위가 있습니다. 저는 대학에서 수학을 공부 한 적이 없습니다. 그리고 나는 내 일을 끝낸다. 그리고 일반적으로 좋습니다. 왜? 코드를 작성하기 위해 수학 ( '무거운'수학 항목에서와 같이)을 알 필요가 없다고 생각하기 때문입니다. 분석적 사고, 문제 해결 기술 및 높은 수준의 추상화가 필요합니다. 그러나 수학은 당신에게 그것을주지 않습니다. 비슷한 기술이 필요한 또 다른 분야입니다. 심리학 공부는 사용성 문제와 데이터 저장을 다룰 때 일상 업무에도 적용됩니다. 언어학 및 기호학도 역할을합니다.

하지만 잠깐, 아직 나를 불 태우지 마세요. 나는 컴퓨터에 수학이 전혀 필요하지 않다고 말하는 것이 아닙니다. 암호화 알고리즘 및 하드웨어 등을 설계 할 때 실제 수학 기술이 필요합니다.하지만 많은 프로그래머가 중간 / 낮은 수준의 언어로 작업하는 경우 ( 대부분의 미리 빌드 된 프레임 워크 및 API를 사용하는 C) 또는 상위 수준의 항목 (예 : C # 또는 Java), 푸리에 변환 또는 Huffman 트리 또는 Moebius 스트립의 수학적 원리를 실제로 이해할 필요가 없습니다. 그리고 그 위에 가치를 구축하겠습니다. 난 바보가 아니에요. 선형 및 지수 알고리즘과 데이터 구조 등의 차이점을 알고 있습니다. 퀵 정렬이나 멋진 새로운 비디오 압축 기술을 다시 작성하는 데 관심이 없습니다.


글쎄, 그 모든 것 말고 ...!

수학은 다음과 같은 프로그래밍의 여러 측면에 사용됩니다.

  • 효율적이고 스마트 한 알고리즘 생성
  • Big O 표기법 이해
  • 보안 (예 : RSA)
  • 더 많이 ... 프로그래밍은 살아 남기 위해 수학이 필요하다고 생각합니다. 그러나 나는 그것을 부분 집합이라고 부르지 않을 것입니다. 마치 불어 오는 유리가 물리학의 특성을 사용하는 것과 같지만 그 예술가들은 스스로를 물리학 자라고 부르지 않습니다.

우리가하는 모든 일의 기초는 수학입니다.

운 좋게도 우리는 수학 자체에 능숙 할 필요는 없습니다. 자동차를 운전하거나 비행기를 조종하기 위해 물리학을 이해할 필요가없는 것처럼 말입니다.


프로그래밍과 순수 수학의 차이점은 상태 개념입니다.

http://en.wikipedia.org/wiki/Dynamic_logic_(modal_logic)을 살펴보십시오 . 시간에 따라 변화하는 것들을 수학적으로 분석하는 방법입니다. 또한 Hoare 트리플은 프로그램의 입출력 동작을 공식화하는 방법입니다. 프로그램의 순차적 구성과 할당이 작동하는 방식을 다루는 몇 가지 공리를 가지면 시간에 따른 상태 변화를 수학적으로 엄격한 방식으로 완벽하게 처리 할 수 ​​있습니다.

당신이 알고있는 수학이 불충분하다면, 당신이 분석하고 싶은 것을 다룰 새로운 수학을 "발명"하십시오. Newton과 Leibniz는 분석 (미적분이라고도 함)을 위해 그것을했습니다. 계산과 프로그래밍을 위해하지 않을 이유가 없습니다.


I don't believe I've heard that programming is a subset of math. Even the link you provide is simply a proposed approach to programming (not claiming it's a subset of mathematics) and the wiki page has plenty of disagreements in it as well.

Programming requires (at least some) applied mathematics. Mathematics can be used to help describe and analyze programs and program fragments. Programming has a very close relationship with math and uses it and concepts from it heavily. But subset? no.

I'd love to see someone actually claim that it is one with some clear reasoning. I don't think I ever have

Just because you can use mathematics to reason about something does not imply that it is, ipso facto, a mathematical object. Mathematics is used to reason about internal combustion engines, radioactive decay and juggling patterns. Using mathematics is not doing mathematics.


I would say...

It's partly math, especially at the theoretical level. Imagine designing efficient searching/sorting/clustering/allocating/fooifying algorithms, that's all math... running the gamut from number theory to statistics.

It's partly engineering. Complex systems can rarely achieve ideal levels of performance and reliability, and software is no exception. A lot of software development is about achieving robustness in the face of unreliable hardware and (ahem) humans.

And it's partly art. Creative and idiosyncratic software design often comes up with great new ideas... like assembly language, multitasking operating systems, graphical user interfaces, dynamic languages, and the web.

Just my 2¢...


Math + art + logic


You can actually argue that math, in the form of logical proofs, is analogous to programming --

Check out the Curry-Howard correspondence. It's probably more the way a mathematician would look at things, but I think this is hitting the proverbial nail on the head.


Programming may have originally started as a quasi-subset of math, but the increasing complexity of the field over time has led to programming being the art and science of creating good abstractions for information processing and computation.

Programming does involve math, engineering, and an aesthetic sense for good design and implementation. Algorithms are an extension of mathematics, and the systems engineering side overlaps with other engineering disciplines to some degree. However, neither mathematics nor other engineering fields have the same level of need for complex, flexible, and yet understandable abstractions that can be used and adapted at so many different levels to solve new and evolving problems.

It is the need for useful, flexible, and dynamic abstractions which led first to the creation of function libraries, then class/component libraries, and in more recent years design patterns and service-oriented architectures. Although the latter have more of a design focus, they are a reaction to the increasing need to build high-level abstractional bridges between programming problems and solutions.

For all of these reasons, programming is neither a subset nor a superset of math. It is simply yet another field which uses math that has deeper roots in it than others do.


The topics you listed are topics in Theoretical Computer Science, and THAT is a branch of Pure Mathematics. Programming is an applied science which uses theoretical computer science. Programming itself isn't a branch of mathematics but the Lambda Calculus/theory of computation/formal logic/set theory etc that programming languages are based on is.

Also I completely disagree with Dijkstra. It's either self-congratulatory or Dijkstra is being misquoted/quoted out of context. Pure mathematics is a very very very difficult field. It is so enormously abstract that no branch of applied mathematics is comparable in difficulty. It is one field that requires enormous leaps of imagination. I did my first degree in computer science where I focused a lot on theoretical CS and applied areas like programming, OS, compilers. I also did a degree in Electrical Engineering - arguably the most difficult branch of engineering - and worked on difficult areas of applied mathematics like Maxwell's equations, control theory and partial differential equations in general. I've also done research in applied and pure mathematics, and to this day I find applied far easier. As for the pure mathematicians, they're a whole different breed.

Now there's a tendency for someone to study an year or two of calculus unhinged from application and conclude that pure mathematics is easy. They have no idea what they're talking about. Studying calculus or even topology unhinged from application does not give you any inkling of what a pure mathematician does. The task of actually proving those theorems are so profoundly difficult that I will defer to a computer scientist to point out the distinction: "If P = NP, then the world would be a profoundly different place than we usually assume it to be. There would be no special value in 'creative leaps,' no fundamental gap between solving a problem and recognizing the solution once it’s found. Everyone who could appreciate a symphony would be Mozart; everyone who could follow a step-by-step argument would be Gauss..." —Scott Aaronson, (Theoretical Computer Scientist, MIT)


I think mathematics provides a set of tools for programmers which they use at abstract level to solve real world problems.


I would say that programming is less about math than it used to be as we move up to 4th Generation Languages. Assembly is very much about math, C#, not so much. Thoughts?


If you just want the design specs handed out to you by your boss, then it's not much math but such a work isn't fun at all... However, coming up with how to do things does require mathematical ideas, at least things like abstraction, graphs, sometimes number theory stuffs and depending on the problems, calculus. Personally, more I've been involved with programming, more I see the mathematical side to it. However, most of the times IMO, you can just pick up the book from library and look up the basics of the thing you need to do but that requires some mathematical grasp upfront.

You really can't design "good" algorithms without understanding the maths behind it. Searching in google takes you only so far.


Programming is a too wide subject. Good software based not only on math (logic) but also on psychology, linguistics etc. Algorithms are part of math, but there are many other programming-related things besides algorithms.


As a mathematician, it is clear to me that Math is not equal to Programming but that the process which is used to solve problems in either discipline is extremely similar.

Solving a higher level mathematics questions requires analytical thinking, a toolbox of possible ways of solving problems, experience with the field, and some formalized ways of constructing your answer so that other mathematicians agree. If you find a particularly clever, abstract, or elegant way of solving a problem, you get Kudos from your fellow mathematicians. For particularly difficult math problems, you may solve the problem in stages, and codify your stage arguments using things called conjectures and proofs.

I think programming involves the same set of skills. In programming, the same set of principles applies to the solving and presenting of solutions to problems. When you have a partial solution to a programming dilemna, you include it as part of your personal library and use it as part of another bigger problem later. These skills seem very similar to the skills used in mathematics.

The major difference between Math and Programming is the latter has a lot more in common between different disciplines of programming than Math does. Two fields of mathematics can be very, very different in presentation and what is used to communicate the field. By contrast, programming structures, to me at least, look very similar in many different languages.


The difference between programming and pure mathematics is the concept of state. A program is a state machine that uses logic (maths) to transition between states. The actual logic used to transition between states is usually very simple, which is why being a math genius doesn't necessarily help you all that much as a programmer.


Part of the reason I'm a programmer is because I don't like math. I have no problem with math itself, and I'm fine with it conceptually, I just don't like doing calculations by hand. When I found I could tell a computer what the math problem is and let it do the calculating for me, a life-long passion and career was born.

To answer the question, according to my alma mater, math == programming since they allowed me to take Intro to C++ to fulfill my math requirement.

Edit: I should mention my degree is in telecommunications which, at the time, had only the standard liberal arts math requirement of one semester.


Math is the purest form of truth. Everything inherits from math.

Amen.


It's interesting to compare programming with music too. In UK, anyway, there are computing based undergrad university courses that will accept applicants on the bases of music qualifications as supposed to computing due to the logic, patterns, etc. involved.


Maths is powerful, programming is powerful, if maths is a subset of programming then it is equally true to state that programming is a subset of maths.

Maths is described using language, often written down. Therefore is maths a subset of writing too?

Historicly maths came before computer programming, but then lists and processes probably preceded maths, both of which could be equally thought of as mathematical or do with programming.

Cirtainly programming can be represented using maths, so there is some bases for it being true that programming is a sub-set of maths. However a computer program could also implement maths, representing information symbolically, as maths typically does when done on paper, including the infinite and only somewhat defined, from the fundamental axioms, as well as allowing higher level structures to be defined that use each other and other sorts of relationships beyond composition, supporting the drawing of diagrams and allowing the system to be expanded. Maths is equally a subset of programming.

While maths can represent structures such as words, maths is by design about numbers. Strings for example are more programmatic than mathematic.


It's half math, half man speak, duh.

참고URL : https://stackoverflow.com/questions/137550/is-programming-a-subset-of-math

반응형