Zur Zeit versuche ich zu erheben, welche Qualität in der Bioinformatik publizierte Software tatsächlich hat. Rein subjektiv hat sich in den letzten 10 Jahren wenig verändert. Das ich meine Zweifel habe, ob die Qualität gut ist, dürfte Euch schon aufgefallen sein (ich denke nicht, dass alles schlecht ist!). Andere haben prinzipielle Bedenken, in Hinblick auf die Qualität wissenschaftlicher Software. Doch behaupten kann man viel. Es gilt erst einmal Daten zu sammeln.
Zum Glück haben das Andere zu einem Teilaspekt schon getan. In diesem, etwas längeren, Artikel möchte ich das aufgreifen. Achtung: Es können hier nicht alle wichtigen Aspekte berücksichtigt werden. Bitte berücksichtigt das in der Diskussion.
Noch eine Kleinigkeit vorweg
Ab und an halte ich Kurse zur Nutzung unserer Cluster. Manche der Teilnehmenden (Studierende ab Bachelor- oder Masterniveau, DoktorandInnen, PostDocs, GastwissenschaftlerInnen, ProfessorInnen, etc. – aus allen Fachbereichen), wissen bis zu dem Zeitpunkt nicht, was ein “Compiler” eigentlich ist. Da stelle mer uns jetzt janz dumm, und sagen so: Ein Compiler, das ist ein Programm, dass Code in (hoffentlich) optimierte Befehle für einen Computer verständlich übersetzt, so dass ein ausführbares Programm herauskommt. Interpreter sind eigentlich ganz ähnlich wie Compiler: Sie legen den Programmtext nicht übersetzt ab (als “Programm”), sondern interpretieren bei jeder Ausführung aufs Neue. — Das soll erst einmal reichen. Wenn Interesse besteht kann ich mal mehr über die Funktionsweise von Compilern oder Interpretern schreiben (aber irgendwie denke ich das ist Teil des Informatikstudiums und wird wenige interessieren).
Doch was ist der Unterschied?
Erst einmal: Kompilierte* Programme können prinzipiell schnellere Ausführung garantieren als interpretierte Programme (oft auch Skripte genannt), weil die Compiler ja a) bereits für den Computer übersetzt haben und b) auch in der Lage sind manche Optimierungen während des Kompilierschrittes einzubringen. Interpreter kennen für diesen Zweck just in time compiler, diese übersetzen und optimieren das Programm (oft auch nur Teile) zur Laufzeit. Theoretisch benötigt ein kompiliertes Programm auch weniger Arbeitsspeicher als eine gleichförmige Lösung, die für einen Interpreter geschrieben wurde: Der Interpreter benötigt an sich schon Speicherplatz und die internen Datenstrukturen sind oft komplexer, während die kompilierten Sprachen sehr genaue Kontrolle über den Speicher erlauben.
Interpretierte Sprachen sind nicht nur in der Bioinformatik, nicht nur irgendwo in der wissenschaftlichen Programmierung, sondern allgemein beliebt. Ein Grund ist der read-eval-print loop (REPL): Man kann interaktiv programmieren und sieht das Ergebnis unmittelbar, ohne jedenfalls den Umweg über einen Compiler. Hinzu kommt im wissenschaftlichen Bereich, dass interpretierte Sprachen i. d. R. auch Bibliotheken an Bord haben, die gute wissenschaftliche Darstellungen (auch “Plots”) ermöglichen. Und Visualisierung ist wichtig!
Wie wirkt sich das im wissenschaftlichen Alltag aus?
Mir geht es um die Qualität wissenschaftlicher Software, insbesondere in der Bioinformatik, da kann ich meinen Vergleich auf die beliebtesten Sprachen in der Bioinformatik beschränken:
Interpretierte Sprachen, also Programmiersprachen, die ein Interpreter zur Ausführung gegeben werden, sind u. a.:
Compilierte Sprachen, also Programmiersprachen, deren Code erst durch einen Compiler übersetzt werden muss, um ein ausführbares Programm zu erhalten, sind u. a.:
- C
- C++
- und seid Neustem gehört auch Rust in die Liste der beliebteren Sprachen in der Bioinformatik, aber da weiß ich nicht, ob der Trend anhalten wird.
Vielleicht kennt Ihr die eine oder andere Sprache und fragt: Und die Shell, z. B. bash? Die ist fraglos wichtig – auf Anwender und Entwicklerseite, aber darin werden keine Anwenderprogramme für WissenschaftlerInnen geschrieben. Und Java? Ist irgendwie ein Zwitter: Mit Aufkommen des “just in time” Compilers in der Java-Virtual Machine (VM) wird nicht mehr “nur” interpretiert, doch andererseits gibt es kein ohne Java-VM ausführbares Programm. Die Veröffentlichung, auf die ich mich beziehe, hatte das Ziel Programmiersprachen in der Bioinformatik zu vergleichen. Sie ist immerhin schon 10 Jahre alt und listet zusätzlich C#, aber die Sprache ist mir egal, weil ich unter Linux arbeite (HPC cluster arbeiten z. Zt. ausschließlich unter Linux und zusätzliche Laufzeitumgebungen, wie mono, machen die Software nicht schneller oder leichter zu nutzen). Und Rust nicht nicht aufgeführt, man kann nicht alles haben. (Wenn jemand eine aktuellere / bessere Veröffentlichung kennt: Her damit!) Hierbei greife ich mal zwei Abbildungen heraus:
Kommentare (50)