수학자에게 프로그래밍 소개 [닫기]


30

저는 현재 프로그래머이며 거의 16 세이며 컴퓨터 과학 학위 또는 전기 공학 학위와 관련된 것으로 경력을 좁혔습니다. 친구는 확실하지 않습니다.

그는 매우 수학에 관심과 매우 좋은이며, 나는 그가 프로그램을 즐길 것이라고 생각하지만 그는 (그것을 시도 할 의사가 아닙니다 편집 그가 입니다 시도 할 의사가 있지만, 전에 해본 적이있다). 수학 문제를 해결하거나 어떤 종류의 수학을 포함시키기 위해 프로그래밍에 익숙 할 수있는 언어 또는 도구에 대한 제안을 나에게 제안 할 수 있습니까?

그가 수학을 많이 즐기지 만 프로그래밍을 좋아한다고 생각하지만, 문제는 메모리 할당 등과 같은 입문 수준과 관련이없는 것들로 인해 그를 버리고 싶지 않다는 것입니다. 나는 그것이 매우 중요하다는 것을 알고 있지만 요점은 그가 수학으로 약간의 프로그래밍을 배우기를 원한다는 것입니다. 그가 관심이 있다면 프로그래밍으로 프로그래밍 학습을 시작할 수 있기를 바랍니다.

편집 : 그는 완전히 관심이 없다는 것이 아닙니다. 더 많은 정보를 얻지 못했기 때문에 이전에 적극적으로 지역을 탐험하지 않은 것입니다. 나는 그가 원하지 않는 일을하도록 강요하고 싶지 않다. 나는 이것을 프로그래밍에 대해 배울 수 있도록 약간의 추진력으로 본다. 그가 그것을 좋아하지 않는다면-충분히 공정하고, 나는 그것을 통제 할 수 없으며 원하지 않지만 그것을 즐기기를 원한다면-이 푸시는 옳았을 것입니다.


17
친구를 관심없는 방향으로 밀어 내고 싶은 이유는 무엇입니까?
HLGEM

3
기록을 위해, 내가 작업 한 많은 프로그래머들이 수학 학위를 가지고 있습니다. 게다가, 그들은 아주 좋습니다.
AngryBird

1
@HLGEM에 동의합니다. 누군가가 순수하고 이론적 인 수학으로 나를 밀면 나는 그것을 싫어합니다. 마찬가지로, 그 물건을 좋아하는 사람들은 지루한 응용 물건을 향해 밀면 그것을 싫어할 것입니다.
Job

4
당신은 16 살입니다. 당신은 프로그래머가 아니며, 프로그래밍을 한 학생입니다. 당신의 친구는 수학자가 아니며, 수학을 좋아하고 배우는 학생입니다. @ perl.j의 답변이 마음에 들지만, 이것에 대해 너무 많이 도달했다고 생각합니다.
Joel Etherton

2
@ perl.j : 누군가가 필요한 "주요 연구 분야"를 수학자가 아니라는 증거로 보여줄 수있을 때까지. 대학에서 수학을 전공하는 사람조차도 아직 수학자가 아닙니다.
Joel Etherton

답변:


60

수학 로고

"수학 같은"언어를 원한다면 Haskell은 가장 친한 친구입니다 (가장 친한 친구). 번거 로움없이 쉽게 새로운 기능을 만들 수 있습니다. 친구에게 줄 수있는 최고의 언어 추천입니다. 다음은 몇 가지 링크입니다.

매스 매 티카

볼프람의 수학 은 또 다른 관심사입니다.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

비싸지 만 그만한 가치가 있습니다. 다음은 몇 가지 링크입니다.

알고리즘

알고리즘 은 모든 프로그램에 중요하지만 친구가 언어에 익숙해지면 시작해야합니다. 더 많은 링크는 다음과 같습니다.

이것이 도움이되기를 바랍니다! 질문이나 의견이 있으시면 언제든지 의견을 보내주십시오! 그건 그렇고,이 모든 링크는 무료 리소스입니다. 인쇄 된 책을 원한다면 몇 가지 권장 사항이 있습니다. 의견을 남겨주세요!



2
저는 수학 전공자이며 수학 관점에서 Haskell을 최고로 추천 할 수 있습니다. 또한 대부분의 언어보다 훨씬 많은 이론적 인 내용을 읽는 것이 좋습니다.
테오 벨레 르

2
하스켈을 배우면 나중에 증거를 얻기에 적합한 의존형 언어 인 아그 다로 넘어갈 수 있습니다 .
Peter C

4
@ SK-logic 어떻게 그렇게 말할 수 있습니까? 수학은 새로운 논리 시스템을 배우고 그에 대한 추론에 관한 것입니다 (수학자 들이 튜링 머신을 발명 한 것을 잊지 마십시오 ). 당신은 솔직히 수학을 다룰 수있는 사람이 가변 돌연변이에 대한 생각을 다룰 수 없다고 생각합니까? 그리고 내 요점은 Haskell에서 가변 돌연변이만큼 간단한 것을 수행하려면 상점 모나드가 필요하다는 것입니다! 말도 안되는 것보다 쉽다고 말하는 것 x = x + 1.
JeremyKun

2
@Bean, 그것은 실제로 할당 문에 대한 나의 첫 반응이었습니다 (그리고 나는 그때 수학의 원시 선형 방정식 외에는 아무것도 알지 못했습니다). 그 이후로 나는 같은 반응을 반복해서 보았다. 필자는 이전에 프로그래밍 경험이없는 사람들에게 기능적 프로그래밍 개념을 도입하려고 노력하면서 점차 명령적인 부분으로 이동했습니다. 항상 쉬운 일이었고 "WTF?!?" 외형은 항상 명령 및 OOP 개념의 도입으로 시작되었습니다.
SK-logic

18

ML 패밀리 또는 Haskell의 함수형 프로그래밍 및 언어는 수학자의 마음에 잘 맞는 경향이 있습니다.


매우 사실입니다! 무한한 목록과 수학에 좋은 모든 것.

14

만약 그가 수학을 전공한다면 그는 C ++과 같은 저수준 언어가 아니라면, 그가하는 일에 따라 더 높은 수준의 수학과 메이플 이나 수학과 같은 언어에서 상당히 많은 프로그래밍을하게 될 것입니다.

또한 연구 분야에 따라 응용 수학 또는 정적 분석을 수행 할 수 있으며,이 두 가지 모두 상당한 양의 프로그래밍이 필요합니다. 그는 자신이 결정한 것에 관계없이 지금 프로그래밍에 익숙해지는 것이 좋습니다.


1
Sage ( sagemath.org )를 사용 하여 Python을 마음 속에 몰래 넣을 수도 있습니다 .
Anton Barkovsky

다음은 또 다른 고급 수학 관련 언어입니다. math.uiuc.edu/Macaulay2
RyanTM

나는 당신이 그에게 프로그래밍을 발견하도록 허용하는 것이 좋습니다. 그가 그것에 노출 될 때, 그는 수학적으로 특정한 언어로 무언가를해야하는 무언가를해야 할 것입니다. 그는 그것을 좋아하거나 싫어할 것입니다. 만약 이것이 일어날 때 그가 그것을 좋아한다면, 그는 자신에게 가장 적합한 언어를 선택할 수있을 것입니다. 관심을 보이지 않으면 친구를 도와서는 안됩니다. 그러면 친구를 버려야합니다.
Ramhound

12

하스켈에게 가르쳐 수학 에서처럼 생각할 수있는 언어입니다.

  • 함수는 입력을 출력에 매핑하는 것입니다.
  • 물건은 필요에 따라 평가됩니다
  • 타입 추론과 미친 타입 시스템
  • 편리한 구문
  • 훌륭한 커뮤니티 (예 : StackOverflow )
  • 모나드

Haskell을위한 최고의 튜토리얼 중 하나 인 http://learnyouahaskell.com 을 보여 주십시오.


11

수학을 공부 한 사람 (순수한 수학 학사 학위를 받았으며 방금 응용 수학 / 통계학 석사 학위를 취득한 사람)으로서 나중에 커리어에서 프로그래밍의 재미 / 실용성 / 중요성을 더욱 깨닫게되면서이 질문에 진심으로 감사드립니다. 나는 10 년 전에 당신과 같은 친구가 나를 프로그래밍으로 밀어 붙 였으면 좋겠다.

둘 다 Project Euler를 확인해야합니다 . 무엇입니까?

Project Euler는 해결해야 할 수학적인 통찰 이상의 것을 요구하는 일련의 도전적인 수학 / 컴퓨터 프로그래밍 문제입니다. 수학은 우아하고 효율적인 방법에 도달하는 데 도움이되지만 대부분의 문제를 해결하려면 컴퓨터와 프로그래밍 기술을 사용해야합니다.

언어 별 제안은 아니지만 프로그래밍을 시작하는 데 특히 동기 부여가 될 것입니다 (특히 이미 수학에 관심이있는 경우). 문제는 매우 쉽고 접근하기 쉽지만 빨리 까다 롭고 어렵습니다. 둘 다 즐길 수있는 좋은 도전과 동기 부여.

어떤 언어를 사용해야하는지에 대해 저는 수학 커뮤니티 내에서 훌륭하고 널리 사용되는 C ++, R, Matlab 및 Mathematica에 대한 경험이 있습니다. 그러나 더 구체적으로 말하면, 나는 수학에 매우 유용하지만 다른 것들만큼 수학에 제한되지 않는 Python배우는 것이 좋습니다. (나중에 더 많은 옵션을 원할 경우) 파이썬을 시작하는 것은 쉽지만 배울 것이 많습니다. 또한 다른 것과는 달리 무료입니다. C ++도 좋은 선택이지만 처음부터 더 많은 장애물이있을 수 있습니다.


Project Euler의 +2는 답변을 볼 때까지 주요 질문에 대한 주석으로 추가하려고했습니다. OP와 그의 친구는 분명히 이것에 합류해야합니다.
cobaltduck 2016 년

10
  • 수학자에게는 가장 큰 턴온은 알고리즘입니다. 당신의 친구는 파이썬 (친절한)으로 구현을 시작해야합니다.

  • MATLAB과 같은 숫자 형 컴퓨팅 환경은 매트릭스 조작, 함수 및 데이터 플롯, 알고리즘 구현에 유용합니다.


10

관심있는 수학 영역에 따라 다릅니다.

복잡한 대수 시스템을 통해 다양한 수학을 직접 프로그래밍 할 수 있으므로 하스켈을 선호 할 것입니다. ATS 는 옵션 일 수도 있습니다.

소개 튜토리얼과 알고리즘을위한 순전히 기능적인 데이터 구조를 위해 대단한 이익을 위해 Haskell을 배우는 것이 좋습니다 .

그가 Matrix Analysis, Differential Equations 또는 Dynamical Systems에 더 관심이 있다면 Matlab , NumPy 또는 Octave를 추천 합니다. APL은 Dyalog 를 통해 관심을 가질 수도 있습니다. 나는 그를 시작하지 않았지만. Numerical Recipes 는 C ++에서 알고리즘에 대한 좋은 가이드로 사용되도록 조정할 수 있습니다.

그가 통계를하고 싶다면 R 이 자연스런 선택입니다.


5

저는 수학을 전공하는 대학원생이며 컴퓨터 과학을 전공했습니다. 나는 수학에서 프로그래밍에 대한 수학의 응용을 탐구하는 수학 ∩ 프로그래밍 이라는 블로그를 운영 하고 있으며, 컴퓨터 과학의 수학이 아닌 부분은 대부분 건조하고 영감을 얻지 못한다는 것을 인정해야한다. 업계에서 경험 한 시스템 프로그래밍에 들어가는 어리석은 해킹).

다른 한편으로, 내 블로그에서는 얼굴 인식 (약간의 선형 대수), 암호화 방법, 튜링 머신 및 셀룰러 오토마타, 연쇄 살인범 활동 예측 모델, 검색 엔진 및 기타 여러 가지 수학적 개념과 같은 문제를 살펴 봅니다. . 가장 좋은 부분은 아이디어와 내 자신의 아이디어를 구현한다는 것입니다!

당신의 친구가 다른 사람들처럼 프로그래밍을 좋아하게하려면 정말 흥미로운 사람을 찾으십시오.계획. 그가 좋아하는 제품을 향해 노력하지 않으면 프로그래밍 측면은 달라지지 않을 것입니다. 언어에 관해서는 Mathematica, Racket (매우 친절하지만 여전히 강력한 Scheme 파생), Python 및 Haskell을 권장합니다. Mathematica는 아마도 자신의 수학 함수를 선택적으로 구현하고 Mathematica의 내장 라이브러리를 사용하여 프로젝트를 완료 할 수 있기 때문에 (예 : 푸리에 계수를 계산하는 함수를 작성한 다음 Mathematica를 사용하여 나머지 분석을 수행 할 수 있기 때문에) 최고 일 것입니다. 필터링, 이미지 생성 등). 통합과 같은 기본 주제조차도 매력적인 프로젝트 (다른 ​​직각 규칙, 몬테 카를로 통합, 대규모 데이터 세트를 통한 기계 학습으로의 부드러운 전환)를 제공합니다.

또한 수학을하지 않거나 수학 소프트웨어를 제안하는 언어를 사용하지 않은 사람들의 반응이 많은 것 같습니다. 사람들이 Haskell을 추천하는 이유는 가능한 한 범주 이론의 실제 구현에 가깝고 일부 기본 개념의 수학적 정의와 잘 맞기 때문입니다. 그러나 친구가 나이에 가까워지면 수학적으로 범주 이론을 준비하지 못합니다 (성숙은 대학원까지 거의 쓸모가 없으며 자신을 가르치기 어려워합니다). 첫 번째 언어로 Haskell은 가장 가파 릅니다.제안 된 언어의 학습 곡선 (아마도 Prolog가 더 가파름) 나는 Haskell을 사용하여 Javascript 컴파일러를 구현했으며 매우 아름다운 우아한 코드로 끝났지 만 변수 돌연변이와 같은 직관적 인 일을 위해서는 이미 사소한 모나드를 사용해야합니다.

Python과 Mathematica는 훨씬 친숙 할 것입니다. Mathematica는 모든 라이브러리가 멋진 문서와 함께 멋진 사용자 인터페이스로 패키지되어 있기 때문에 학습 곡선이 가장 얕습니다 (F1을 누르십시오!). 다른 한편으로, 고급 수학으로의 전환과 동시에 Haskell에 대한 소개를 제공하는 한 가지 책이 있습니다 (읽지 못함) . 긍정적 인 아마존 리뷰가있는 것 같으므로 확인하고 싶을 수도 있습니다. 그는 산업 분야를 원한다면 C # 및 Java와 같은 언어로 이동할 수 있지만 정글에 들어 가지 않아도 될 것입니다 (그리고 많은 산업 수학 분야는 순수한 Matlab입니다).

그러나 내가 말했듯이, 올바른 프로젝트를 배우면 프로젝트가 무엇이든간에 언어가 기쁨이됩니다.


3

친구가 형식적인 논리를 즐기고 인공 지능이 흥미로워지면 Prolog를 살펴볼 수 있습니다 .

이 언어를 사용하면 술어 (초기 가정, "사실") 및 추론 규칙 ( "상대 관계")을 기술 한 다음 질문을합니다.

그런 다음 프롤로그는 사라지고 주어진 사실과 관계 만 사용하여 질문에 대답 할 수 있는지 여부를 결정하고, 그렇다면 대답을 알려줍니다.

"톰은 고양이입니다"와 "모든 고양이는 동물입니다"라고 말하고 "톰은 동물입니까?" 그리고 당신은 "참"이라는 답을 얻게 될 것입니다.

또는 "알고있는 모든 동물을 나열"하도록 요청하면 단일 항목 목록 "tom"이 표시됩니다.

물론 구문은 그보다 약간 더 복잡하지만 일반적인 아이디어를 얻습니다.


프롤로그는 1 차 논리와 거의 비슷하지만 "비 확인"과 "거짓"을 구분할 방법이 없기 때문에 실제로 호환되지 않습니다. 어떤면에서는 깔끔한 언어이지만, 수학자에게 밀어 붙이고 프로그래밍 논리라고 부르지 않습니다.
David Thornley

당신은 단순히 부정을 테스트 할 수 있습니까?
Bill Michell

2

친구에게 시도해 보도록 권장하는 가장 좋은 방법은 프로그래밍 중이라는 사실에 대해 너무 많이 생각하지 않고 프로그래밍을 시작하도록하는 것일 수 있습니다.

그가 "프로그래밍"에 대해 더 많이 다룰 준비가되면, 같은 책에서 시작하여보다 수학적 기초로부터 프로그래밍을 배울 수 있습니다. 내가 가장 좋아하는 두 권의 책은 다음과 같습니다.

SICP는 MIT Press 웹 사이트 에서 자유롭게 볼 수 있습니다 .

친구가 수학적으로 기울어지면 Lisp는 어려움을 겪지 않으며 특별한 구문을 배울 필요가 없습니다. 나는 Lisp가 Haskell보다 배우기가 더 쉽다고 생각합니다.


1

나는 Haskell에 동의하지만, 실용적인 관점에서, 그는 또한 널리 사용되는 추상 기계에서 언어를 배워야합니다. 물론 JVM 언어 또는 .NET 언어를 의미합니다.

이 플랫폼에는 주력 언어보다 조금 더 흥미로운 언어가 있습니다. JVM에서 Clojure와 Scala를 살펴보십시오. .NET 플랫폼에서 F #을 살펴보십시오.

마이크로 소프트 리서치의 c.omega라는 .NET 언어도 있었는데 매우 흥미로 웠지만 연구 프로젝트 일뿐입니다.


1

Matlab은 일반적으로 수학 및 과학 프로그래밍에 사용됩니다. 배우기 어려운 스크립트 기반 언어이며 모든 메모리 문제는 사용자에게 숨겨져 있습니다.

소프트웨어 공학과 전기 공학을 컴퓨터 공학에 결합 할 수 있습니다.


0

친구가 프로그래밍을 시도하고 싶지 않다면 왜 문제를 강요 하려는지 알 수 없습니다. 프로그래머가되기위한 열쇠는 기꺼이 배우고 자한다고 생각합니다. 배우고 싶지 않다면 프로그래밍은 그에게 적합하지 않을 것입니다

그러나, 가장 좋은 방법은 작은 프로그램을 직접 만들어서 보여주는 것입니다. 아마도 그것의 일부를 미완성으로 남겨두고 당신이 그것을 끝내도록 도와 줄 수 있는지 알아보십시오. 나는 프로그램의 알고리즘과 논리가 구문을 작성하는 것보다 훨씬 흥미 롭다는 것을 알고 있으므로 아마도 프로그램의 논리를 도와달라고 요청하고 나서 코드를 보도록 지시하고 그것의 결과.

그가 소스 코드에 관심을 보이면 자신의 것을 작성하는 방법을 보여주십시오. 개인적으로 저는 배우기 쉽고 문서가 많으면 언어 자체는 중요하지 않다고 생각합니다.


0

파이썬을 중심으로 무료 수학 라이브러리와 커뮤니티가 구축되어 있습니다. 저는 "Sage"로 시작하겠습니다. 그는 이것을 사용하는 것을 즐기며 우연히 파이썬에서 프로그래밍을 배울 것입니다.


0

친구에게 다음과 같은 다른 변형을 보여 주어야한다고 생각합니다.

  • 기음
  • LISP / 구성표
  • 기본
  • 본쉘
  • 프롤로그

나는 C와 LISP가 좋은 출발점이라고 생각하며, 다른 언어가 다른 작업에 더 적합 할 수 있음을 보여줍니다. 나는 모든 것에 Haskell 또는 Erlang을 사용하는 것을 믿지 않습니다.

간단한 프로세서를위한 머신 코드 (또는 어셈블러)도 흥미로울 수 있습니다. 나는 항상 첫 C64 에서 기계 코드로 시작해서 기뻤습니다 . ( MOS 6510 ) "폐기"하는 데 제한된 시간을 가진 성인이되기 어려운 실습 경험.


동의하지 않아야합니다. 수학에 흥미가있는 어린 아이가 기계 코드에 끌리는 이유는 무엇입니까? 그리고 왜 C? 어셈블리는 프로세서에 대한 지식이 너무 많다고 가정합니다. C도 마찬가지로 포인터, 레지스터, 범위 지정, 유형과 같은 심각한 프로그래밍을 배우려는 사람에게 가장 적합한 많은 요구 사항을 만듭니다. 그러한 사람을위한 프로그래밍에 대한 첫 번째 소개의 경우 알고리즘이나 수학적 아이디어의 응용 (확률, 임의성, 시뮬레이션)에 중점을 둔 것이 훨씬 좋습니다. 파이썬, 리스프 / 포스, 기본 짝수. 본쉘 ??
Assad Ebrahim

0

나에게 프로그래밍은 "무언가?" 의문:

  • "나만의 웹 사이트를 만들고 싶습니다"HTML 등에 대해 배우십시오.

  • "방문 할 때마다이 웹 사이트에서 X를 클릭하거나 Y가 표시되는 것을 싫어합니다. 자동화 할 방법이 없습니까?" 따라서 북마크릿 또는 브라우저 확장 프로그램 작성에 대해 배웁니다.

  • "내 음악을 모두 카탈로그로 만들고 싶지만 내가 본 도구로는 내가 원하는 방식으로 작동하지 않습니다."데이터베이스에 대해 배웁니다.

  • "Math Club의 비용을 추적하고 싶습니다."따라서 스프레드 시트, 프로그래밍 매크로 또는 데이터베이스에 대해서도 배울 수 있습니다.

드라이브가 실제로 거기에 있기 위해서는 근본적인 문제가 그에게서 왔습니다 . 그가 해결하고자 하는 문제를 찾은 다음 솔루션을 자동화 / 프로그래밍 할 수있는 도구 / 언어 / 시스템을 선택하려고합니다.


-2

Haskell과 Mathematica는 제 생각에는 갈 길입니다. 대부분의 기능적 언어는 수학에도 좋습니다. 파이썬도 좋습니다 . 수학 문서를 확인하십시오 .

이 모듈은 항상 사용 가능합니다. C 표준에 의해 정의 된 수학 함수에 대한 액세스를 제공합니다.

이 함수는 복소수와 함께 사용할 수 없습니다. 복소수 지원이 필요한 경우 cmath 모듈 과 동일한 이름의 함수를 사용하십시오 . 대부분의 사용자는 복소수를 이해하는 데 필요한만큼 많은 수학을 배우기를 원하지 않기 때문에 복소수를 지원하는 함수와 그렇지 않은 함수의 구별. 복소수 결과 대신 예외를 수신하면 매개 변수로 사용 된 예상치 못한 복소수를 조기에 감지 할 수 있으므로 프로그래머는 처음에 생성 된 방법과 이유를 확인할 수 있습니다.

이 모듈에서 제공하는 기능은 다음과 같습니다.

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