Einführung in die Programmierung für einen Mathematiker [geschlossen]

30

Ich bin zur Zeit Programmierer, bin fast 16 Jahre alt und habe meine Karriere so ziemlich auf einen Abschluss in Informatik oder Elektrotechnik eingegrenzt (ich weiß, dass sie ganz anders sind, aber bei dieser Frage geht es um meinen Freund) Freund ist nicht so sicher.

Er interessierte sehr in Mathematik und ist sehr gut darin , und ich glaube , er Programmierung genießen würde , aber er ist nicht bereit , es zu versuchen ( edit er ist bereit , zu versuchen , aber noch nie zuvor getan). Kann mir jemand Vorschläge für eine Sprache oder ein Werkzeug geben, mit denen er (wie ich annehme) in der Programmierung experimentieren kann, um mathematische Probleme zu lösen oder eine Art von Mathematik zu beschäftigen?

Wie ich schon sagte, er mag Mathe sehr gern, aber ich glaube, er würde gerne programmieren. Das Problem ist, dass ich nicht möchte, dass er von den Dingen abgeschreckt wird, die auf einleitenden Ebenen wie Memory Allocation et al. Nicht relevant sind. Ich weiß, dass das sehr wichtig ist, aber der Punkt ist, dass ich möchte, dass er ein bisschen Programmieren mit Mathematik lernt. Wenn er interessiert genug ist, kann er hoffentlich anfangen, Programmieren als Programmieren zu lernen.

Bearbeiten: Es ist nicht so, dass er völlig uninteressiert ist - eher, dass er das Gebiet zuvor nicht aktiv erkundet hat, vielleicht weil er nicht darüber informiert ist. Ich würde ihn nicht zwingen wollen, etwas zu tun, was er nicht will. Ich sehe das eher als einen kleinen Schub, damit er etwas über das Programmieren lernen kann. Wenn er es nicht mag - fair genug, ich kann das nicht kontrollieren und will es nicht, aber wenn er es genießt - dann war dieser Push das Richtige.

ell
quelle
17
Warum willst du deinen Freund in eine Richtung bringen, die ihn nicht interessiert?
HLGEM
3
Viele der Programmierer, mit denen ich zusammengearbeitet habe, haben einen mathematischen Abschluss. Darüber hinaus sind sie ziemlich gut.
AngryBird
1
Ich stimme @HLGEM zu. Ich würde es hassen, wenn mich jemand zu reiner theoretischer Mathematik drängen würde. Ebenso würden diejenigen, die dieses Zeug mögen, es hassen, wenn sie in Richtung des langweiligen angewandten Materials getrieben würden.
Job
4
Um die Dinge aus einer Perspektive zu betrachten: Du bist 16. Du bist kein Programmierer, sondern ein Student, der programmiert hat. Ihr Freund ist kein Mathematiker, er ist ein Student, der Mathe mag (und etwas gelernt hat). Obwohl mir die Antwort von @ perl.j gefällt, denke ich, dass Sie bei dieser Frage möglicherweise zu weit gehen.
Joel Etherton
2
@ perl.j: Solange jemand nicht über den erforderlichen Abschluss verfügt, um das erforderliche "Hauptfach" als Nachweis zu erbringen, ist er kein Mathematiker. Sogar jemand an der Universität, dessen Hauptfach Mathematik ist, ist noch kein Mathematiker.
Joel Etherton

Antworten:

60

Math-Logo

Wenn Sie eine "mathematische" Sprache wollen, ist Haskell Ihr bester Freund (für Ihren besten Freund). Sie können mühelos neue Funktionen erstellen. Es ist die beste Sprachempfehlung, die ich Ihnen für Ihren Freund geben kann. Hier sind einige Links:

Mathematica

Wolframs Mathematica ist ein weiteres Interesse, das er möglicherweise hat.

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.

Obwohl es teuer ist, lohnt es sich. Hier sind einige Links:

Algorithmen

Algorithmen sind für jedes Programm wichtig, aber Ihr Kumpel sollte mit diesen beginnen, wenn er mit einer Sprache vertraut ist. Hier noch ein paar Links:

Hoffe das hilft! Wenn Sie Fragen oder Anregungen haben, können Sie diese gerne kommentieren! Übrigens sind alle diese Links zu freien Ressourcen. Wenn Sie ein gedrucktes Buch möchten, habe ich ein paar Empfehlungen, hinterlassen Sie einfach einen Kommentar!

dynamisch
quelle
2
Ich bin ein Mathe-Hauptfach und kann Haskell aus mathematischer Sicht als großartig empfehlen. Ich lese auch gerne einige der theoretischen Dinge, die dazu gehören, viel mehr als die meisten Sprachen.
Theo Belaire
2
Wenn er Haskell lernt, kann er später sogar zu Agda übergehen , einer abhängig geschriebenen Sprache, in der man Beweise anfertigen kann.
Peter C
4
@Sk-logic Wie kannst du das überhaupt sagen? In der Mathematik geht es darum, neue logische Systeme zu lernen und darüber nachzudenken (vergessen Sie nicht, dass die Mathematiker die Turing-Maschine erfunden haben ). Sie glauben ganz ehrlich, dass jemand, der mit Mathematik umgehen kann, mit der Idee der variablen Mutation nicht umgehen kann? Und mein Punkt ist, etwas so Einfaches wie variable Mutation in Haskell zu tun, erfordert eine Laden-Monade! Zu sagen, das ist einfacher als x = x + 1lächerlich.
JeremyKun
2
@Bean, das war eigentlich meine erste Reaktion auf eine Zuweisungsanweisung (und ich wusste damals noch nichts außer primitiven linearen Gleichungen aus der Mathematik). Seitdem habe ich immer wieder die gleiche Reaktion gesehen. Ich habe absichtlich versucht, funktionale Programmierkonzepte für diejenigen einzuführen, die noch keine Programmiererfahrung haben, und mich allmählich dem Imperativen zuzuwenden. Zuerst war es immer einfach und all das "WTF?!?" Das Aussehen begann immer erst mit der Einführung der Imperativ- und OOP-Konzepte.
SK-logic
18

Funktionale Programmierung und Sprachen in der ML-Familie oder in Haskell passen in der Regel recht gut zu den Vorstellungen der Mathematiker.

Ein Programmierer
quelle
Sehr richtig! Unendliche Listen und alles, was Mathematikern Spaß macht.
14

Wenn er ein Hauptfach in Mathematik ist, wird er ohne Zweifel eine Menge programmieren, wenn nicht in einfachen Sprachen wie C ++, dann in höheren mathematikspezifischen Sprachen wie Maple oder Mathematica, je nachdem, was er tut.

Abhängig von seinem Forschungsgebiet kann es auch vorkommen, dass er angewandte Mathematik oder statische Analyse betreibt, die beide einen erheblichen Programmieraufwand erfordern. Er sollte sich jetzt besser an das Programmieren gewöhnen, egal was er entscheidet.

Loch
quelle
1
Sie können auch versuchen, Python mit Sage ( sagemath.org ) in seinen Sinn zu bringen .
Anton Barkovsky
Hier ist eine weitere übergeordnete, mathematikspezifische Sprache: math.uiuc.edu/Macaulay2
RyanTM
Ich schlage vor, Sie erlauben ihm nur, die Programmierung zu entdecken. Wenn er dem ausgesetzt ist und er etwas tun muss, das ihn dazu zwingt, etwas in einer mathematisch spezifischen Sprache zu tun, wird er es entweder mögen oder hassen. Wenn es ihm gefällt, kann er die für ihn am besten geeigneten Sprachen auswählen. Es ist nicht so, dass Sie Ihrem Freund nicht helfen sollten, wenn er kein Interesse gezeigt hat, dann sollten Sie ihn fallen lassen.
Ramhound
12

Bring ihm Haskell bei. In dieser Sprache kann man wie in der Mathematik denken:

  • Eine Funktion ist etwas, das Eingaben auf Ausgaben abbildet
  • Sachen werden nach Bedarf ausgewertet
  • Typinferenz und ein verrücktes Typsystem
  • Bequeme Syntax
  • Tolle Community (zum Beispiel auf StackOverflow )
  • Monaden

Ich würde vorschlagen, dass Sie ihm http://learnyouahaskell.com zeigen , eines der besten Tutorials für Haskell.

FUZxxl
quelle
11

Als jemand, der Mathematik studiert hat (ich habe einen BS in reiner Mathematik und gerade meinen MS in Angewandter Mathematik / Statistik erhalten) und später den Spaß, die Praktikabilität und die Wichtigkeit des Programmierens in meiner Karriere erkannt hat, schätze ich diese Frage wirklich. Ich wünschte, ich hätte vor 10 Jahren einen Freund wie Sie, der mich zum Programmieren drängt.

Sie sollten beide Project Euler ausprobieren . Was ist es?

Project Euler ist eine Reihe herausfordernder mathematischer / Computerprogrammierungsprobleme, deren Lösung mehr als nur mathematische Einsichten erfordert. Obwohl Mathematik Ihnen hilft, elegante und effiziente Methoden zu finden, sind Computer- und Programmierkenntnisse erforderlich, um die meisten Probleme zu lösen.

Obwohl es sich nicht um einen sprachspezifischen Vorschlag handelt, ist er ein guter Anreiz für den Einstieg in die Programmierung (insbesondere, wenn bereits Interesse an Mathematik besteht). Die Probleme beginnen sehr einfach und zugänglich, werden aber schnell sehr knifflig und / oder schwierig. Eine gute Herausforderung und Motivation, die Sie wahrscheinlich beide genießen werden.

Was die zu verwendende Sprache betrifft, habe ich Erfahrung mit C ++, R, Matlab und Mathematica, die alle großartig sind und in der Mathe-Community weit verbreitet sind. Insbesondere empfehle ich dringend, Python zu lernen, das für die Mathematik sehr nützlich ist, sich aber nicht so auf die Mathematik beschränkt wie einige andere (für den Fall, dass er später im Leben mehr Optionen haben möchte). Es ist einfach, mit Python zu beginnen, aber es gibt eine Menge zu lernen. Es ist auch kostenlos im Gegensatz zu einigen anderen. C ++ könnte ebenfalls eine gute Wahl sein, könnte aber von Anfang an mehr Hürden haben.

bnjmn
quelle
+2 für Project Euler, wollte als Kommentar zur Hauptfrage hinzufügen, bis ich Ihre Antwort sah. OP und sein Freund sollten sich auf jeden Fall darauf einlassen.
Cobaltduck
10
  • Für Mathematiker ist der Algorithmus am aktivsten. Ihr Freund muss damit beginnen, sie in Python (es ist freundlich) zu implementieren.

  • Numerische Computerumgebungen wie MATLAB werden für Matrixmanipulationen, das Zeichnen von Funktionen und Daten und die Implementierung von Algorithmen nützlich sein.

SHOUBHIK BOSE
quelle
10

Es kommt auf den Bereich der Mathematik an, der ihn interessiert.

Wenn er sich mehr mit abstrakter Algebra oder Kombinatorik befasst, würde er wahrscheinlich Haskell mögen, da das komplexe Typensystem die direkte Programmierung einer Vielzahl von Mathematiken ermöglicht. ATS könnte auch eine Option sein.

Ich würde empfehlen, Sie ein Haskell für eine gute Einführung und rein funktionale Datenstrukturen für Algorithmen zu lernen .

Wenn er sich mehr für Matrixanalyse, Differentialgleichungen oder dynamische Systeme interessiert, würde ich Matlab , NumPy oder Octave empfehlen . APL ist über Dyalog möglicherweise auch von Interesse; obwohl ich ihn nicht damit anfangen würde. Numerische Rezepte können in C ++ als Leitfaden für Algorithmen verwendet werden.

Wenn er Statistik machen will, ist R die natürliche Wahl.

Weltingenieur
quelle
5

Ich habe einen Abschluss in Mathematik und einen Abschluss in Informatik. Ich führe ein Blog namens Math Math Programming, in dem ich mich mit Anwendungen der Mathematik zur Programmierung befasse (und umgekehrt), und ich muss zugeben, dass ich die meisten weniger mathematischen Aspekte der Informatik eher trocken und einfallslos finde (im Grunde meine Ablehnung von all die lächerlichen Hacks, die meiner Erfahrung in der Industrie nach in die Systemprogrammierung einfließen).

Auf der anderen Seite beschäftige ich mich in meinem Blog mit Problemen wie Gesichtserkennung (einiges an linearer Algebra), Verschlüsselungsmethoden, Turing-Maschinen und zellularen Automaten, Modellen zur Vorhersage der Aktivität von Serienmördern, Suchmaschinen und einer Reihe anderer mathematischer Konzepte . Das Beste daran ist, dass ich die Ideen umsetzen kann - und jede meiner eigenen!

Um Ihren Freund dazu zu bringen, das Programmieren zu lieben, wie es der Rest von uns tut, finden Sie ihn wirklich interessantProjekt. Der Programmieraspekt bleibt nicht bestehen, ohne auf ein Produkt hinzuarbeiten, das er schön findet. Als Sprachen empfehle ich Mathematica, Racket (ein sehr freundliches, aber immer noch mächtiges Schema-Derivat), Python und Haskell. Mathematica ist wahrscheinlich das Beste, weil er selektiv seine eigenen mathematischen Funktionen implementieren und die in Mathematica integrierten Bibliotheken verwenden kann, um das Projekt abzuschließen (z. B. eine Funktion schreiben, die Fourier-Koeffizienten berechnet, und dann Mathematica verwenden, um den Rest der Analyse durchzuführen, z B. Filterung, Bilderzeugung usw.). Selbst die Grundthemen wie Integration geben einige faszinierende Projekte (verschiedene Quadraturregeln, Monte Carlo Integration, ein sanfter Übergang in maschinelles Lernen mit großen Datenmengen).

Es scheint auch, dass viele Antworten von Leuten stammen, die keine Mathematik betreiben oder die Sprachen, die sie für mathematische Software vorschlagen, nicht verwendet haben. Der Grund, warum die Leute Haskell empfehlen, ist, dass es einer wörtlichen Implementierung der Kategorietheorie so nahe wie möglich kommt und gut zu einigen mathematischen Definitionen einiger grundlegender Konzepte passt. Aber wenn Ihr Freund Ihrem Alter nahe ist, ist er mathematisch nicht bereit für die Kategorietheorie (diese Reife ist bis zum Abschluss des Studiums mehr oder weniger nutzlos und schlecht, um sich selbst beizubringen), und als Muttersprache hat Haskell die steilsteLernkurve der vorgeschlagenen Sprachen (vielleicht ist Prolog steiler). Ich habe Haskell verwendet, um einen Javascript-Compiler zu implementieren, und ich habe ein sehr schönes, elegantes Stück Code erhalten, aber für intuitive Dinge wie variable Mutation muss man sich bereits in nichttrivialen Monaden versuchen.

Python und Mathematica werden viel freundlicher sein, und Mathematica hat die flachste Lernkurve, einfach weil alle Bibliotheken in einer netten Benutzeroberfläche mit einer großartigen Dokumentation zusammengefasst sind (drücken Sie einfach F1!). Andererseits gibt es ein Buch, von dem ich gehört habe (das ich aber nicht gelesen habe), das gleichzeitig einen Übergang zur fortgeschrittenen Mathematik und eine Einführung in Haskell bietet . Es scheint positive Amazon-Bewertungen zu haben, also solltest du es dir ansehen. Er kann auf Sprachen wie C # und Java aufsteigen, wenn er jemals Branchen-Sachen machen möchte, aber wahrscheinlicher ist, dass er nie in diesen Dschungel eintreten muss (und viele Branchen-Mathematik-Sachen sind sowieso Matlab-reine Sachen).

Aber wie gesagt, mit dem richtigen Projekt wird das Erlernen der Sprache zum Vergnügen, egal welches Projekt es ist.

JeremyKun
quelle
3

Wenn Ihr Freund formale Logik mag und künstliche Intelligenz interessant findet, könnte er sich gerne Prolog ansehen .

Mit dieser Sprache geben Sie Ihre Prädikate (Anfangsannahmen, "Fakten") und Inferenzregeln ("Beziehungen") an und stellen dann Fragen.

Prolog geht dann los und berechnet, ob die Frage nur mit den gegebenen Fakten und Beziehungen beantwortet werden kann, und wenn ja, gibt es die Antwort.

Also sagst du "Tom ist eine Katze" und "alle Katzen sind Tiere" und fragst "Ist Tom ein Tier?" und Sie erhalten die Antwort "wahr".

Oder Sie können ihn bitten, "alle Tiere aufzulisten, die Sie kennen", und Sie erhalten die Einzelpostenliste "tom".

Natürlich ist die Syntax etwas komplizierter, aber Sie haben eine allgemeine Vorstellung davon.

Bill Michell
quelle
Prolog ist frustrierend nahe an der Logik erster Ordnung, aber wirklich inkompatibel, da es keine Möglichkeit gibt, "unbewiesen" und "falsch" zu unterscheiden. In mancher Hinsicht ist es eine nette Sprache, aber ich würde sie keinem Mathematiker aufzwingen und als Programmierlogik bezeichnen.
David Thornley
Kannst du die Verneinung nicht einfach testen?
Bill Michell
2

Am besten ermutigen Sie Ihren Freund, es zu versuchen, indem Sie ihn mit dem Programmieren beginnen lassen, ohne zu viel darüber nachzudenken, dass er programmiert.

Sobald er bereit ist, sich mehr mit "Programmieren" zu befassen, können Sie beide mit demselben Buch beginnen und das Programmieren von einer mathematischeren Grundlage lernen. Zwei meiner aktuellen Lieblingsbücher sind:

SICP ist auf der MIT Press-Website frei einsehbar .

Wenn Ihr Freund mathematisch veranlagt ist, wird Lisp keine Schwierigkeiten bereiten und Sie müssen keine spezielle Syntax lernen. Ich denke, Lisp ist leichter zu lernen als Haskell.

The Programmer
quelle
1

Ich stimme dem Haskell zu, aber aus praktischer Sicht sollte er auch eine Sprache auf einer weit verbreiteten abstrakten Maschine lernen. Ich meine natürlich eine JVM-Sprache oder eine .NET-Sprache.

Es gibt Sprachen auf diesen Plattformen, die etwas interessanter sind als die Flaggschiff-Sprachen. Schauen Sie sich bei der JVM Clojure und Scala an. Schauen Sie sich auf der .NET-Plattform F # an.

Es gab auch eine .NET-Sprache von Microsoft Research namens c-omega, die sehr interessant war, aber nur ein Forschungsprojekt war.

Schmied
quelle
1

Matlab wird üblicherweise für mathematische und wissenschaftliche Programme verwendet. Es ist eine skriptbasierte Sprache, die nicht schwer zu erlernen ist. Alle Speicherprobleme sind dem Benutzer verborgen.

Software Engineering und Elektrotechnik können zu Computer Engineering zusammengefasst werden.

Danny Varod
quelle
0

Wenn Ihr Freund nicht bereit ist, es mit der Programmierung zu versuchen, verstehe ich nicht, warum Sie das Problem erzwingen möchten. Ich denke, ein Schlüssel zum Programmieren ist Lernbereitschaft, und wenn er nicht lernen will, ist Programmieren wahrscheinlich nichts für ihn

Abgesehen davon ist es am besten, selbst ein kleines Programm zu erstellen und es ihm vorzuführen. Vielleicht lassen Sie einige Teile davon unvollendet und sehen, ob Sie ihn dazu bringen können, Ihnen bei der Fertigstellung zu helfen. Ich weiß für mich, dass die Algorithmen und die Logik hinter einem Programm weitaus interessanter sind, als die Syntax zu schreiben. Versuchen Sie also vielleicht, ihn mit der Logik des Programms zu unterstützen, und dann gehen Sie und codieren Sie das Ding und lassen Sie ihn das sehen Ergebnisse davon.

Wenn er überhaupt Interesse am Quellcode zeigt, dann zeige ihm, wie man seine eigenen Sachen schreibt. Persönlich denke ich, dass die Sprache selbst keine Rolle spielt, solange sie leicht zu erlernen ist und eine Menge Dokumentation enthält.

Rachel
quelle
0

Um Python herum gibt es eine ganze kostenlose mathematische Bibliothek und Community. Ich würde mit "Sage" anfangen, er sollte wirklich Spaß daran haben und nebenbei Programmieren in Python lernen.

Bill K
quelle
0

Ich denke, Sie sollten Ihrem Freund einige verschiedene Varianten zeigen, wie:

  • C
  • LISP / Schema
  • BASIC
  • Borowski-Shell
  • Prolog

Ich denke, C und LISP sind gute Ausgangspunkte, um zu zeigen, dass verschiedene Sprachen für verschiedene Aufgaben besser geeignet sind. Ich glaube nicht daran, Haskell oder Erlang für alles zu verwenden.

Der Maschinencode (oder Assembler) für einen einfachen Prozessor könnte ebenfalls interessant sein. Ich war immer froh, dass ich bei meinem ersten C64 mit Maschinencode angefangen habe . ( MOS 6510 ) Praktische Erfahrung, die als Erwachsener mit begrenzter Zeit zum "Verschwenden" schwer zu bekommen ist.

MattBianco
quelle
Ich muss nicht zustimmen. Warum würde ein kleines Kind, das sich für Mathematik interessiert, für Maschinencode interessiert sein? Und warum C? Die Montage setzt viel zu viel Wissen über Prozessoren voraus. C stellt ebenfalls viele Anforderungen, die am besten jemandem überlassen bleiben, der ernsthaftes Programmieren lernen möchte: Zeiger, Register, Gültigkeitsbereiche, Typen. Eine erste Einführung in die Programmierung für eine solche Person, die sich auf Algorithmen oder Anwendungen mathematischer Ideen (Wahrscheinlichkeit, Zufälligkeit, Simulationen) konzentriert, ist viel besser. Python, Lisp / Forth, Basic sogar. Borowski-Muschel ?? Warum? ...
Assad Ebrahim
0

Für mich beginnt das Programmieren damit, "etwas zu tun", ein "Was wäre wenn?" Frage:

  • "Ich möchte meine eigene Website erstellen", also lernen Sie etwas über HTML usw.

  • "Ich hasse es, dass ich bei jedem Besuch auf dieser Website auf X klicken muss oder Y sehe. Gibt es keine Möglichkeit, dies zu automatisieren?" So erfahren Sie mehr über Lesezeichen oder das Schreiben von Browsererweiterungen.

  • "Ich möchte meine gesamte Musik katalogisieren und keines der Tools, die ich gesehen habe, funktioniert so, wie ich es möchte", damit Sie mehr über Datenbanken erfahren.

  • "Ich möchte die Ausgaben für meinen Math Club nachverfolgen", damit Sie mehr über Tabellenkalkulationen, Programmiermakros oder vielleicht sogar Datenbanken erfahren.

Damit der Antrieb wirklich da ist, muss das zugrunde liegende Problem von ihm kommen . Ich würde versuchen, ein Problem zu finden, das er lösen möchte, und dann ein Tool / eine Sprache / ein System auswählen, mit dem er die Lösung automatisieren / programmieren kann.

David Weinraub
quelle
-2

Meiner Meinung nach sind Haskell und Mathematica der richtige Weg. Die meisten funktionalen Sprachen sind auch gut für Mathematik. Python ist auch gut, lesen Sie die Mathe-Dokumentation .

Dieses Modul ist immer verfügbar. Es bietet Zugriff auf die in der C-Norm definierten mathematischen Funktionen.

Diese Funktionen können nicht mit komplexen Zahlen verwendet werden. Verwenden Sie die gleichnamigen Funktionen aus dem Cmath- Modul, wenn Sie Unterstützung für komplexe Zahlen benötigen. Die Unterscheidung zwischen Funktionen, die komplexe Zahlen unterstützen, und solchen, die nicht unterstützt werden, wird getroffen, da die meisten Benutzer nicht so viel Mathematik lernen möchten, wie zum Verstehen komplexer Zahlen erforderlich ist. Durch das Empfangen einer Ausnahme anstelle eines komplexen Ergebnisses kann die unerwartete komplexe Zahl, die als Parameter verwendet wird, früher erkannt werden, sodass der Programmierer bestimmen kann, wie und warum sie überhaupt generiert wurde.

Die folgenden Funktionen werden von diesem Modul bereitgestellt ...

Billjk
quelle