Aktuelle Probleme aus der Bio-Informatik selber lösen. Was sich zunächst unrealistisch oder mindestens schwierig anhört, wird durch das ROSALIND-Projekt für jeden möglich, der sich für eine Programmiersprache begeistern kann.
Das Projekt
Genauer genommen handelt es sich bei ROSALIND um eine Plattform, die bekannte Probleme aus der Bio-Informatik didaktisch gut aufbereitet zur Verfügung stellt. Alle Probleme sind eindeutig durch eine ID und eine Beschreibung gekennzeichnet. Zusätzlich wird auf der Übersichtsseite die Anzahl der bereits eingegangenen Lösungen und das Verhältnis von korrekten zu fehlerhaften Lösungsversuchen ausgegeben.
Genau hier liegt auch der tiefere Sinn von ROSALIND. Interessierte Entwickler beziehungsweise Entwicklerinnen können sich auf der Projektseite registrieren. Nach einem Login wird anschließend auf der Übersichtsseite angezeigt, welche Probleme schon gelöst wurden. Von dem Zeitpunkt an können pro Problem eigene Lösungen eingereicht werden. Mit welcher Programmiersprache diese erzeugt werden, bleibt einem selbst überlassen. Laut Projektseite wird zwar Python bevorzugt, das ist aber lediglich ein Hinweis und keine Empfehlung.
Das viele unterschiedliche Lösungswege in den unterschiedlichsten Programmiersprachen eingereicht werden zeigt sich, wenn ein Problem eigenständig gelöst wurde. Anschließend können Lösungen, zu denen auch der Quelltext mit eingereichte wurde, eingesehen werden. So zum Beispiel beim DNA-Problem, bei dem die unterschiedlichen Nukleotide eines DNA-Strangs gezählt werden sollen. Die Bandbreite der eingereichten Lösungen reicht von Ruby, Perl über C, Scala bis hin zu Java und C#. Auch Shellskripte, Texteditoren und selbst SQL werden zur Lösung einiger Probleme herangezogen. Das ist besonders für einfachere Aufgabenstellungen der Fall, bei dem es um simple Operationen auf Zeichenketten geht. Das eigene Profil oder die Baumansicht der Probleme verraten zu jeder Zeit, wie groß der eigenen Fortschritt ist. Die Baumansicht verrät zusätzlich, welche Probleme thematisch aufeinander aufbauen. Wurde ein Problem erfolgreich gelöst, wird nicht zwingend einfach das nächste Problem aus der Liste zur Bearbeitung freigegeben. Es ist auch möglich, dass mehrere Probleme bearbeitet werden können. Das erlaubt eine parallele Bearbeitung von mehreren Personen in einem Team oder das Springen zwischen Problemstellungen, falls partout die Lösung zu einem speziellen Problem nicht gelingen will.
Die Problemspezifikationen
Nun bin ich noch die Antwort auf die Frage schuldig, warum ich dieses Projekt hier vorstelle. Zum einen liegt das an meinem Schwerpunkt im Masterstudium, den ich auf die Bio-Medizinische Informatik gelegt habe. Mittlerweile bemerke ich, dass mein Interesse für diese Art der Fragestellungen immer größer wird. Mein größter Ansporn ist also sicherlich der Spaß an der Sache und die Möglichkeit, mir Wissen aus der Bio-Informatik anzueignen. Zum anderen eignen sich die Probleme auch hervorragend dazu, Methoden und Praktiken aus der Softwareentwicklung anzuwenden und zu vertiefen. Das liegt an der sehr guten Aufbereitung der Aufgabenstellungen.
Alle Probleme werden zunächst mit einer Beschreibung eingeleitet. Diese gibt einen oberflächlichen aber ausreichenden Abriss der Aufgabenstellung und der praktischen Relevanz des Problems. Anschließend wird eine mehr oder weniger formalisierte Problembeschreibung gegeben. Dazu gehört auch die Spezifikation von Eingabe- und Ausgabedaten. Anschießend ist genau klar, welche Eingaben das eigene Programm zu erwarten hat und welche Ausgaben erzeugt werden sollen. Das ist eine schöne Ausnahme zu vielen Beispielen aus der Praxis, wo diese Definitionen oft genug fehlen. Trotzdem setzt das ROSALIND-Projekt noch einen oben drauf. Zu jedem Problem werden zwei Datensätze mitgeliefert. Der erste beschreibt anhand eines Beispiels die Eingabe, der zweite die dazu passende Ausgabe. Für das bereits angesprochene DNA-Problem sieht das beispielsweise folgendermaßen aus.
Sample Dataset
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCT
CTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCSample Output
20 12 17 21
Für den beschriebenen DNA-Strang muss die selbst implementierte Methoden also die angegebene Ausgabe erzeugen. Das Format der Ausgabe muss dabei genau beachtet werden. In diesem Fall also vier ganze Zahlen, die jeweils durch ein Leerzeichen getrennt werden. Wird eine Lösung eingereicht, kann die berechnete Ausgabe entweder in ein Textfeld eingegeben oder eine Datei zum Hochladen ausgewählt werden. Der eigene Quelltext kann optional als Datei angegeben werden.
Geplante Implementierung
Dadurch eigenen sich alle Probleme des ROSALIND-Projekts sehr gut für die testgetriebene Entwicklung. Die Beispieldaten können für einen ersten Unit-Test verwendet werden. Anschließend ist die eigentliche Implementierung an der Reihe.
Mein Plan ist es, alle Probleme des ROSALIND-Projekts nach und nach zu lösen und die implementierten Algorithmen in einer Bibliothek zu vereinen. Das hat viele Trainingseffekte auf einmal. Im Bereich TDD, C#, Bio-Informatik sowie Algorithmen- und Softwaredesign. Wie gut ich dabei vorankomme, lässt sich jetzt noch schwer abschätzen. Das liegt natürlich an dem steigenden Niveau der Probleme, aber auch an meinem eh schon knappen Zeitbudget. Trotzdem bin ich momentan zuversichtlich, viele der Probleme lösen zu können, auch wenn es einige Zeit in Anspruch nehmen wird.
Die Lösungen werde ich hier veröffentlichen. Inklusive weiterer Informationen, was beim Lösen und Einreichen von Lösungen möglicherweise zu beachten ist.
[…] meinem vorherigen Blog-Artikel zum Thema ROSALIND habe ich einen kurzen Überblick über das Projekt und die Plattform gegeben. In […]