2014 hätte ich Python gesagt. 2017 glaube ich von ganzem Herzen, dass die Sprache, in der die Studenten unterrichten, Julia ist.
Beim Unterrichten geht es immer um einen Kompromiss. Einerseits möchten Sie etwas auswählen, das so einfach ist, dass es leicht zu erfassen ist. Aber zweitens möchten Sie etwas lehren, das Ausdauer hat, dh etwas, das mit Ihnen wachsen kann. Die gängigen dynamischen Sprachen (Python / MATLAB / R) fallen alle leicht in Kategorie 1, da sie nicht über einen Kesselcode verfügen und es einfach ist, einen Interpreter zu öffnen und Code auszuspucken, während C / C ++ / Fortran in die zweite Kategorie fällt Die Sprachen, mit denen die leistungsfähige Kernsoftware der heutigen Welt geschrieben wurde.
Es gibt jedoch Probleme bei der Verwendung einer Sprache, die die andere Kategorie nicht vollständig erfasst. Wenn Sie eine Sprache wie Python verwenden, werden Dinge wie Typen und Integer-Überlauf auf angenehme Weise abstrahiert. Das ist gut, um im ersten Semester Informatik zu unterrichten, aber da Sie immer tiefer in die Arbeitsweise von Python eintauchen möchten, ist die Sprache von Python zu weit entfernt vom zugrunde liegenden Metall, um ein gutes Lehrmittel zu sein. Aber C / C ++ / Fortran (oder Java ... Ich habe zuerst Java gelernt ...) haben alle so hohe Startkosten, dass es am schwierigsten ist zu lernen, wie man Header einrichtet und main
kompiliert, was vom tatsächlichen Erlernen des Programmierens ablenkt .
Tritt ein Julia. Wenn Sie Julia zum ersten Mal verwenden, können Sie die gesamte Idee von Typen abstrahieren und wie MATLAB oder Python verwenden. Aber wenn Sie mehr lernen möchten, steckt in der Sprache ein "Kaninchenbau" voller Tiefe. Da es sich in Wirklichkeit um eine Abstraktionsschicht handelt, die auf einem Typsystem + Mehrfachversand über LLVM basiert, ist dies im Wesentlichen "eine einfache Möglichkeit, statisch kompilierten Code zu schreiben" (und typstabile Funktionen können tatsächlich statisch kompiliert werden). Dies bedeutet, dass auf die Details von C / C ++ ebenfalls zugegriffen werden kann. Sie können lernen, wie Sie einfache Schleifen und Funktionen ohne Boilerplate-Code schreiben und dann in die Funktionszeiger graben. Mit den Metaprogrammierungsfunktionen von Julia können Sie direkt auf den AST zugreifen, und es gibt Makros, die jeden Teil der Kompilierungskette darstellen. Als Lisp ist es auch für funktionale Programmierstile zugänglich. Und es verfügt über viele parallele Rechenfunktionen. Ideen wie parametrische Typisierung und Typstabilität sind in Julia ziemlich einzigartig und tief verwurzelt.
Wenn Sie die Programmiersprachen selbst lernen möchten, können Sie die Schritte zur Kompilierung anhand @code_lowered
derer lernen, um festzustellen , was eine Senkung ist. Sehen Sie sich das typisierte AST mit @code_typed
, das LLVM IR mit @code_llvm
und schließlich den nativen Assembler-Code mit an @code_native
. Dies kann verwendet werden, um zu zeigen, wie hoch die Kosten für dynamische Variablen sind und wie das "variable Boxen" genau funktioniert. In diesem Blogbeitrag wird gezeigt, wie diese Introspection-Tools verwendet werden können, um zu lehren, wie Compiler-Optimierungen durchgeführt werden können / nicht.
Es gibt nicht nur Ideen für Informatik und Softwaretechnik zu erforschen, sondern auch reichhaltige mathematische Ideen. Da die Hauptbibliotheken von Julia im Hinblick auf die generische Typisierung geschrieben wurden, ist es trivial, matrixfreie Operatoren zu erstellen und mit IterativeSolvers.jl GMRES mit diesen durchzuführen. Sie können Introspection-Tools verwenden @which
, um genau zu zeigen, wie etwas implementiert wurde. Wie funktioniert das zum Beispiel \
?
@which rand(10,10)\rand(10)
#\(A::AbstractArray{T,2} where T, B::Union{AbstractArray{T,1}, AbstractArray{T,2}} where T) in Base.LinAlg at linalg\generic.jl:805
Das zeigt mir direkt die Definition von \ . Es ist in Julia implementiert, sodass jemand, der Julia kennt, den Algorithmus und seine Funktionsweise durch Identifizieren von Matrixuntertypen und Spezialisieren, wenn möglich, erlernen kann (Zurückgreifen auf die Gaußsche Eliminierung). Da Julias Code MIT-lizenziert ist (und fast alle Pakete MIT-lizenziert sind), können die Schüler diese Ideen in ihrem eigenen Code (mit Namensnennung) verwenden (wenn der Code GPL-lizenziert ist, wie dies bei den meisten MATLAB- und R-Paketen der Fall ist). Sie müssen vorsichtig mit Lizenzproblemen sein!).
Da der Sprachkern aus einer sehr aktiven Open-Source-Community besteht, gibt es auch eine umfangreiche Ressource zur Geschichte der Sprachentwicklung: die Github-Themen . Verstehen Sie Sprachfragen, wie z. B., was eine Matrix wirklich transponiert? kann sehr aufschlussreich sein, um diese mathematischen Objekte genauer zu verstehen.
Aber zum Schluss möchten Sie Ihren Schülern beibringen, wie man schafft. Leider bedeutet das Erlernen von Python oder R nicht unbedingt, dass Sie das Zeug dazu haben, Python / R zu entwickeln, da die meisten der weit verbreiteten und gut optimierten Pakete eine erhebliche Menge an C / C ++ / Fortran-Code enthalten um Leistung zu erhalten. Damit diese Schüler einen Beitrag zum wissenschaftlichen Ökosystem dieser Sprachen leisten können, müssen sie irgendwann eine andere Sprache lernen. Während das nicht ganz schrecklich ist, ist es jetzt, da Julia existiert, suboptimal. Da die typstabile Julia die Geschwindigkeit von C / Fortran erreichen kann, handelt es sich bei den meisten Paketen im Julia-Ökosystem um reinen Julia-Code. Julia lernen heißt, man hat gelernt, Julia zu entwickeln. Und da Base Julia auch meistens Julia-Code ist (nur ein paar Primitive und der Parser nicht),
Das heißt, es gibt einige Nachteile bei der Auswahl von Julia. Zum einen ist es viel neuer als diese anderen Sprachen und daher etwas knapper in Bezug auf Ressourcen. Sie müssen sich eine Menge Lehrmittel selbst einfallen lassen oder Ressourcen im Web nutzen, die auf der Julia-Website aufgelistet sind . Außerdem sind die Sprachdetails noch nicht ganz geklärt, obwohl 1.0 in Kürze (Ende 2017) veröffentlicht wird. Und es ist auch sehr wahrscheinlich, dass Sie, die potenzielle Lehrerin eines Julia-Kurses, selbst nicht so viel Erfahrung mit der Sprache haben. Dies sind jedoch die Probleme, die mit der Zeit verschwinden, während die Vorteile von Julia, die ich oben erwähnte, für die Sprachen selbst wesentlich zentraler sind.