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.
Antworten:
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.
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!
quelle
x = x + 1
lächerlich.Funktionale Programmierung und Sprachen in der ML-Familie oder in Haskell passen in der Regel recht gut zu den Vorstellungen der Mathematiker.
quelle
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.
quelle
Bring ihm Haskell bei. In dieser Sprache kann man wie in der Mathematik denken:
Ich würde vorschlagen, dass Sie ihm http://learnyouahaskell.com zeigen , eines der besten Tutorials für Haskell.
quelle
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?
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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:
"Struktur und Interpretation von Computerprogrammen" SICP (Abelson / Sussman)
"Land of Lisp: Lerne in Lisp zu programmieren, ein Spiel nach dem anderen!" (Barski) , unterrichtet Programmierung durch Spielprogrammierungsübungen.
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Ich denke, Sie sollten Ihrem Freund einige verschiedene Varianten zeigen, wie:
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.
quelle
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.
quelle
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 .
quelle