Welche Sprache soll ich für die Informatik lernen?


11

Ich bin völlig neu in der Computerwissenschaft und suche einen guten Ausgangspunkt.

Ich verstehe, dass es keine objektiv beste Sprache gibt, aber ich möchte eine Sprache lernen, die eine unbestreitbar starke und herausragende Präsenz in Bezug auf die Computerwissenschaft hat - eine Sprache, die als außergewöhnlich fähig und effizient gilt.

Zu Beginn neigte ich zur Modellierung in Bezug auf Atombindungen und Wechselwirkungen, wobei grafische Darstellungen / Simulationen erforderlich waren.

Sind einige Sprachen in einigen Bereichen besser als in anderen (dh Physik vs. reine Mathematik)? Oder basiert die Auswahl einer Sprache auf anderen Faktoren?

Ich habe gehört, wie der Name Fortran viel herumgeworfen wurde.

Vorschläge?


1
C ++ und Fortran sind bekannte Sprachen in der Community. In letzter Zeit ist ein Anstieg der Verwendung dynamischer Sprachen zu verzeichnen. Oft wählen Sie Ihre Bibliothek und nicht Ihre Sprache.
vanCompute

9
Ich erinnere mich an das Sprichwort, dass echte Programmierer Fortran in jeder Sprache schreiben können.
Hardmath

1
Hier ist eine sehr ähnliche Frage mit vielen Antworten: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík

1
"Ich verstehe, dass es keine objektiv beste Sprache gibt" - genau, warum also nicht lernen, sprachunabhängig zu sein, damit Sie in jeder Sprache schreiben können, die auf Sie geworfen wird?
JM

2
Sie müssen Englisch beherrschen. Ohne sie kommen Sie in Computational Science nicht weiter.
Johannes

Antworten:


15

Meistens kommt es auf die numerischen Bibliotheken an, die Ihnen zur Verfügung stehen, um Ihre Aufgabe zu erfüllen. In C / C ++ ist eine große Anzahl numerischer Bibliotheken implementiert, aber Low-Level-Sprachen sind nicht die besten, um schnell Prototypen zu erstellen.

Ich denke, um schnell zu einer Lösung zu gelangen, würde ich die Verwendung von Matlab oder Mathematica empfehlen. Sie haben ein großes Toolset und sind sehr hochwertig. Höchstwahrscheinlich wird Ihre Implementierung dort nicht für den Produktionseinsatz skaliert, aber es könnte ein guter Spielplatz sein, um verschiedene Methoden auszuprobieren. Sobald Sie einen Weg kennen, können Sie immer etwas in C / C ++ effizienter implementieren.


4
Viele Menschen - sowohl innerhalb als auch außerhalb der Wissenschaft - vertrauen Code nicht wirklich, es sei denn, er verfügt über mindestens eine minimale automatisierte Testsuite. Ich weiß nicht, wie die Werkzeuge für solche Dinge in Matlab und Mathematica aussehen, aber es gibt einige nette Pakete für mehr Mainstream-Sprachen wie Python und C ++.
cjordan1

3
MATLAB hat MATLAB xUnit, aber Python und C ++ haben mehr (und meiner Meinung nach bessere) Testsuiten.
Geoff Oxberry

24

Python!

  1. Beginnen Sie direkt mit der Numpy- Bibliothek, kleinen Skripten und der interaktiven ipython- Shell.
  2. Mit zahlreichen kostenlosen Büchern und Tutorials können Sie sich weiterentwickeln .
  3. Werden Sie produktiver, indem Sie scipy als Frontend für leistungsstarke numerische Routinen und matplotlib zur Visualisierung verwenden
  4. Nutzen Sie gut entwickelte und leistungsstarke Module für das wissenschaftliche Rechnen wie Krypy , FeNiCS und viele andere
  5. Beachten Sie, dass der reibungslose Übergang zwischen flacher und objektorientierter Programmierung und die inhärente Modularität von Python die Handhabung größerer Projekte vereinfachen.
  6. Machen Sie Ihren Code so schnell wie C oder Fortran, indem Sie wichtige Teile in Cython einfach neu schreiben . Sie können auch problemlos Routinen einschließen, die in Fortran oder C geschrieben wurden .

Dies umschreibt, was meiner Meinung nach der beste Weg ist, um ein Problem im wissenschaftlichen Rechnen anzugehen. Beginnen Sie damit, das Problem in den Griff zu bekommen, indem Sie mit Spielzeugbeispielen in kleinen Skripten herumspielen. Werden Sie systematischer und richten Sie eine Code-Suite ein. Dann lass deinen Code funktionieren !!! Führen Sie schließlich bei Bedarf eine Codeoptimierung durch. Erfinden Sie das Rad nicht neu und optimieren Sie es nicht vorzeitig.

(Zusätzliche Vorteile: Python ist kostenlos - keine Lizenzprobleme, große Community, z. B. Stackoverflow, Module für eine gute Programmierung als Unit-Test oder Protokollierung ...)




5

Fortran: Matlab-artig, einfach zu erlernen und zu verwenden und schnell produktiv, aber nur gut für numerisches Rechnen

C ++: Schwer zu beherrschen (wird Jahre dauern), aber viel außerhalb des numerischen Rechnens verwendet (Arbeitsplatzsicherheit)

Python: Heutzutage viel empfohlen, aber zu langsam für nicht triviale Arbeit. Sie müssen alle Ihre zugrunde liegenden rechenintensiven Kernel in C schreiben und sie dann von Python aus aufrufen, was bedeutet, dass Sie (mindestens) zwei Sprachen lernen müssen


1
Ich würde argumentieren, dass die Lernkurve für Fortran und C ++ etwas ähnlich ist. Ich habe in beiden Bereichen genügend Fähigkeiten erworben, um das einfachere Ende von Problemen innerhalb weniger Monate zu lösen, die jeweils aus Java, Matlab und C # stammen. Abhängig davon, welche Sprachen jemand kennt, könnte ich sehen, dass C ++ viel einfacher zu lernen ist als fortran, da die meisten großen Codes in datierten Versionen geschrieben sind.
Godric Seer

@Godric: Mit ~ 600 Seiten ist der Fortran 2008-Standard weniger als die Hälfte von C ++ 11 (~ 1300 Seiten)
stali

1
@stali, ja, aber zum Beispiel arbeite ich mit ungefähr einer Viertelmillion Zeilen Legacy-Code, der in Fortran77 geschrieben wurde. Also musste ich den Stil von 77 lernen, um damit arbeiten zu können, 90-95, um wartbare Änderungen daran vorzunehmen (da gemeinsame Blöcke grausam sind), und dann '08, um nicht über ein Jahrzehnt in der Vergangenheit hängen zu bleiben. Fortran ist zwar eine alte Sprache, hat aber in den letzten Jahrzehnten enorme Veränderungen erfahren. Wenn Sie nicht bei Null anfangen, ist es nicht trivial, sein Erbe zu lernen.
Godric Seer

2
Ich würde der Aussage nicht zustimmen, dass Python "zu langsam für nicht triviale Arbeit" ist. In der Tat, wenn Sie Ihre Matrix-Vektor-Multiplikationen (und dergleichen) rein in Python schreiben, werden Sie eine schlechte Zeit haben. Die Abstraktion zu einigen effizienteren Sprachen wurde jedoch bereits für Sie durchgeführt: NumPy, Scipy haben wahrscheinlich alles, was Sie jemals brauchen werden. Oder eines der anderen 50.000 Pakete.
Nico Schlömer

1
@ NicoSchlömer Ich würde "zu langsam für nicht triviale Arbeit" zustimmen. Meine Simulation in Python (Numpy / Scipy) ist ungefähr 10x langsamer als der gleiche Code in der Fortran90-Version. Ich empfehle Fortran90 oder C ++.
Fronthem

4

Kurze Antwort
Erfahren Sie mehr über die Grundlagen von objektorientiertem Code durch Python und lernen Sie die Grundlagen der Informatik durch C. Wenn Sie mit diesen beiden anderen Sprachen zumindest ziemlich einverstanden sind, lernen Sie C ++, da Sie in C ++ so ziemlich alles können und lassen Sie es schnell laufen (obwohl das Schreiben ewig dauert).

Längere Antwort
Also, hier ist die Sache: Für Ihr erstes Projekt sind Sie in einem Labor, das an einem anderen Code arbeitet. In diesem Fall wählen sie die Programmiersprache. Was ich persönlich irgendwie toll finde!

Ich meine, als Anfänger wirst du deinen Arsch für eine Weile nicht wirklich von deinem Ellbogen kennen, und besonders wenn du nicht weißt, was du tust, kann das Lernen des Programmierens entsetzlich sein. Daher ist es gut, die Struktur und die Grenzen zu haben, die sich aus der Arbeit am Code eines anderen ergeben, und es ist gut, die Motivation und Aufregung zu haben, die nur aus der Arbeit an einem echten Projekt resultieren können.

Unabhängig von der Sprache, die Ihr Labor verwendet (insbesondere wenn es sich um Matlab handelt), sollten Sie wahrscheinlich Python, C und C ++ lernen. Insbesondere wenn Sie nicht aus der Informatik stammen, MÜSSEN Sie Kernighans und Ritchies "The C Programming Language" lesen. Es ist 35 Jahre alt und vermittelt den deutlichen Eindruck, dass seine Autoren auf Lochkarten programmiert haben, aber es ist der seltenste Vogel: ein zeitloses Informatikbuch. Es wird viele Dinge viel klarer machen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.