Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Programmieren ist ein Kraftmultiplikator. Wir können Computerprogramme schreiben, um uns von lästigen manuellen Aufgaben zu befreien und die Forschung zu beschleunigen. Das Programmieren in einer beliebigen Sprache wird wahrscheinlich deine Produktivität steigern, aber jede Sprache hat unterschiedliche Lernkurven und Werkzeuge, die den Prozess des Programmierens verbessern oder erschweren.

Ein Sprichwort im Geschäftsleben besagt, dass du drei Möglichkeiten hast:

  1. Schnell

  2. Gut

  3. Günstig

Wähle zwei aus.

Wenn es um Programmiersprachen geht, ist Python eine gute Wahl: Es ist schnell, weil es ziemlich einfach zu erlernen und einen funktionierenden Prototyp einer Idee zu schreiben ist - es ist so ziemlich immer die erste Sprache, die ich zum Schreiben eines Programms verwende. Ich finde Python billig, weil meine Programme in der Regel auf Standardhardware wie meinem Laptop oder einer winzigen AWS-Instanz gut genug laufen. Allerdings würde ich behaupten, dass es nicht unbedingt einfach ist, mit Python gute Programme zu schreiben, weil die Sprache selbst ziemlich lax ist. Sie erlaubt es zum Beispiel, Zeichen und Zahlen in Operationen zu mischen, die das Programm zum Absturz bringen.

Dieses Buch wurde für angehende Bioinformatik-Programmierer/innen geschrieben, die die bewährten Methoden und Werkzeuge von Python kennenlernen möchten:

  • Seit Python 3.6 kannst du Typ-Hinweise hinzufügen, um z.B. anzugeben, dass eine Variable ein Typ wie eine Zahl oder eine Liste sein soll, und du kannst das Werkzeug mypy verwenden, um sicherzustellen, dass die Typen korrekt verwendet werden.

  • Test-Frameworks wie pytest können deinen Code mit guten und schlechten Daten testen, um sicherzustellen, dass er auf vorhersehbare Weise reagiert.

  • Tools wie pylint und flake8 können potenzielle Fehler und stilistische Probleme finden, die das Verständnis deiner Programme erschweren würden.

  • Das Modul argparse kann die Argumente deinerProgramme dokumentieren und validieren.

  • Das Python-Ökosystem ermöglicht es dir, Hunderte von bestehenden Modulen wie Biopython zu nutzen, um Programme zu verkürzen und zuverlässiger zu machen.

Wenn du diese Werkzeuge einzeln einsetzt, kannst du deine Programme verbessern, aber wenn du sie alle miteinander kombinierst, wird dein Code noch besser. Dieses Buch ist kein Lehrbuch über Bioinformatik an sich. Der Schwerpunkt liegt auf den Möglichkeiten, die Python bietet, um wissenschaftliche Programme zu schreiben, die reproduzierbar sind. Das heißt, ich zeige dir, wie du Programme entwickelst und testest, die bei gleichen Eingaben immer die gleichen Ergebnisse liefern. Die Bioinformatik ist übersättigt mit schlecht geschriebenen, undokumentierten Programmen, und mein Ziel ist es, diesen Trend umzukehren, ein Programm nach dem anderen.

Zu den Kriterien für die Reproduzierbarkeit des Programms gehören:

Parameter

Alle Programmparameter können als Laufzeitargumente festgelegt werden. Das bedeutet, dass es keine fest kodierten Werte gibt, die eine Änderung des Quellcodes erfordern würden, um das Verhalten des Programms zu ändern.

Dokumentation

Ein Programm sollte auf ein --help Argument reagieren, indem es die Parameter und die Verwendung ausgibt.

Testen

Du solltest in der Lage sein, eine Testsuite laufen zu lassen, die beweist, dass der Code einigeSpezifikationen erfüllt

Man könnte erwarten, dass dies logischerweise zu Programmen führt, die vielleicht korrekt sind, aber wie Edsger Dijkstra schon sagte: "Programmtests können verwendet werden, um das Vorhandensein von Fehlern zu zeigen, aber niemals, um ihre Abwesenheit zu zeigen!"

Die meisten Bioinformatikerinnen und Bioinformatiker sind entweder Wissenschaftler, die das Programmieren gelernt haben, oder Programmierer, die Biologie gelernt haben (oder Leute wie ich, die beides lernen mussten). Unabhängig davon, wie du zur Bioinformatik gekommen bist, möchte ich dir praktische Programmiertechniken zeigen, die dir helfen, schnell korrekte Programme zu schreiben. Ich fange damit an, wie du Programme schreibst, die ihre Argumente dokumentieren und validieren. Dann zeige ich dir, wie du Tests schreibst und ausführst, um sicherzustellen, dass die Programme tun, was sie vorgeben.

Das erste Kapitel zeigt dir zum Beispiel, wie du die Tetranukleotidhäufigkeit eines DNA-Strangs ermitteln kannst. Klingt ziemlich einfach, oder? Es ist eine triviale Idee, aber ich werde auf etwa 40 Seiten zeigen, wie ich dieses Programm strukturiere, dokumentiere und teste. Ich werde viel Zeit darauf verwenden, verschiedene Versionen des Programms zu schreiben und zu testen, damit ich viele Aspekte der Datenstrukturen, der Syntax, der Module und der Werkzeuge von Python erkunden kann.

Wer sollte das lesen?

Du solltest dieses Buch lesen, wenn dir die Kunst des Programmierens am Herzen liegt und du lernen willst, wie du Programme schreibst, die eine Dokumentation erstellen, ihre Parameter validieren, elegant fehlschlagen und zuverlässig funktionieren. Testen ist eine wichtige Fähigkeit, um deinen Code zu verstehen und seine Korrektheit zu überprüfen. Ich zeige dir, wie du die von mir geschriebenen Tests nutzen kannst und wie du Tests für deine Programme schreibst.

Um den größtmöglichen Nutzen aus diesem Buch zu ziehen, solltest du bereits ein solides Verständnis von Python haben. Ich baue auf den Fähigkeiten auf, die ich in Tiny Python Projects (Manning, 2020) vermittelt habe, wo ich zeige, wie man Python-Datenstrukturen wie Strings, Listen, Tupel, Wörterbücher, Mengen und benannte Tupel verwendet. Du musst kein Python-Experte sein, aber ich werde dich auf jeden Fall dazu bringen, einige fortgeschrittene Konzepte zu verstehen, die ich in diesem Buch vorstelle, wie z. B. Typen, reguläre Ausdrücke und Ideen zu Funktionen höherer Ordnung, sowie Tests und die Verwendung von Tools wie pylint, flake8, yapf und pytest, um Stil, Syntax und Korrektheit zu überprüfen. Ein bemerkenswerter Unterschied ist, dass ich für den gesamten Code in diesem Buch durchgängig Typ-Anmerkungen verwende und das Tool mypy nutze, um die korrekte Verwendung von Typen sicherzustellen.

Programmierstil: Warum ich OOP und Ausnahmen vermeide

Ich tendiere dazu, objektorientierte Programmierung (OOP) zu vermeiden. Wenn du nicht weißt, was OOP bedeutet, ist das in Ordnung. Python selbst ist eine OO-Sprache, und fast jedes Element, von einer Zeichenkette bis zu einer Menge, ist technisch gesehen ein Objekt mit internem Zustand und Methoden. Du wirst genug Objekte kennenlernen, um ein Gefühl dafür zu bekommen, was OOP bedeutet, aber die Programme, die ich dir vorstelle, werden größtenteils vermeiden, Objekte zur Darstellung von Ideen zu verwenden.

In Kapitel 1 wird gezeigt, wie man eine class verwendet, um eine komplexe Datenstruktur darzustellen.Die class ermöglicht es mir, eine Datenstruktur mit Typ-Anmerkungen zu definieren, so dass ich überprüfen kann, ob ich die Datentypen richtig verwende. Es ist hilfreich, ein wenig über OOP zu verstehen. Zum Beispiel definieren Klassen die Attribute eines Objekts und Klassen können Attribute von übergeordneten Klassen erben, aber das beschreibt im Wesentlichen die Grenzen dessen, wie und warum ich OOP in Python verwende. Wenn du das jetzt noch nicht ganz verstehst, mach dir keine Sorgen. Du wirst es verstehen, sobald du es siehst.

Anstelle von objektorientiertem Code zeige ich Programme, die fast ausschließlich aus Funktionen bestehen.Diese Funktionen sind auch insofern rein, als sie nur auf die Werte reagieren, die ihnen gegeben werden.Das heißt, reine Funktionen verlassen sich nie auf einen versteckten, veränderbaren Zustand wie globale Variablen, und sie geben immer dieselben Werte zurück, wenn sie dieselben Argumente haben. Außerdem hat jede Funktion einen zugehörigen Test, den ich ausführen kann, um zu überprüfen, ob sie sich vorhersehbar verhält. Ich bin der Meinung, dass dies zu kürzeren Programmen führt, die transparenter und einfacher zu testen sind als Lösungen, die mit OOP geschrieben wurden. Du magst anderer Meinung sein und bist natürlich herzlich eingeladen, deine Lösungen in dem von dir bevorzugten Programmierstil zu schreiben, solange sie die Tests bestehen. Die Dokumentation Python Functional Programming HOWTO liefert gute Argumente dafür, warum Python für funktionale Programmierung (FP) geeignet ist.

Schließlich vermeiden die Programme in diesem Buch auch die Verwendung von Ausnahmen, was meiner Meinung nach für kurze Programme, die du für den persönlichen Gebrauch schreibst, angemessen ist.Ausnahmen so zu verwalten, dass sie den Fluss eines Programms nicht unterbrechen, fügt eine weitere Ebene der Komplexität hinzu, die meiner Meinung nach dem Verständnis eines Programms abträglich ist. Ich bin im Allgemeinen unglücklich darüber, wie man in Python Funktionen schreibt, die Fehler zurückgeben. Viele Leute würden eine Ausnahme auslösen und einen try/catch Block mit den Fehlern umgehen lassen. Wenn ich das Gefühl habe, dass eine Ausnahme gerechtfertigt ist, entscheide ich mich oft dafür, sie nicht abzufangen und stattdessen das Programm abstürzen zu lassen. In dieser Hinsicht folge ich einer Idee von Joe Armstrong, dem Schöpfer der Sprache Erlang, der sagte: "Der Weg von Erlang ist es, den glücklichen Weg zu schreiben und nicht verwinkelte kleine Passagen voller Fehlerkorrekturcode."

Wenn du dich dafür entscheidest, Programme und Module für die Veröffentlichung zu schreiben, wirst du noch viel mehr über Ausnahmen und Fehlerbehandlung lernen müssen, aber das würde den Rahmen dieses Buches sprengen.

Struktur

Das Buch ist in zwei Hauptteile gegliedert: Der erste Teil behandelt 14 der Programmieraufgaben, die du auf der Rosalind.info-Website findest.1 Der zweite Teil zeigt kompliziertere Programme, die andere Muster oder Konzepte demonstrieren, die meiner Meinung nach in der Bioinformatik wichtig sind. Jedes Kapitel des Buches beschreibt eine Programmierherausforderung, die du schreiben sollst, und bietet eine Testsuite, mit der du feststellen kannst, ob du ein funktionierendes Programm geschrieben hast.

Obwohl das "Zen von Python" besagt, dass es einen - und vorzugsweise nur einen - offensichtlichen Weg geben sollte, glaube ich, dass man viel lernen kann, wenn man viele verschiedene Herangehensweisen an ein Problem ausprobiert.Perl war mein Einstieg in die Bioinformatik, und der Geist der Perl-Gemeinschaft "There's More Than One Way To Do It" (TMTOWTDI) schwingt immer noch bei mir mit. Ich verfolge in der Regel einen Themen- und Variationsansatz für jedes Kapitel und zeige viele Lösungen, um verschiedene Aspekte der Python-Syntax und Datenstrukturen zu erkunden.

Testgetriebene Entwicklung

Nicht nur das Testen selbst, sondern auch das Entwerfen von Tests ist eines der besten Mittel zur Fehlervermeidung. Die Überlegungen, die angestellt werden müssen, um einen nützlichen Test zu entwickeln, können Fehler aufdecken und beseitigen, bevor sie in den Code einfließen - ja, die Überlegungen zur Testentwicklung können Fehler in jeder Phase der Softwareentwicklung aufdecken und beseitigen, von der Konzeption über die Spezifikation und das Design bis hin zur Programmierung.

Boris Beizer, Software Testing Techniques (Thompson Computer Press)

Die Grundlage für alle meine Experimente sind Testsuiten, die ich ständig laufen lasse, um sicherzustellen, dass die Programme weiterhin korrekt funktionieren. Wann immer ich die Gelegenheit habe, versuche ich, testgetriebene Entwicklung (TDD) zu unterrichten, eine Idee, die in einem Buch mit diesem Titel von Kent Beck (Addison-Wesley, 2002) erklärt wird. TDD befürwortet das Schreiben von Tests für den Code , bevor der Code geschrieben wird. Der typische Zyklus beinhaltet Folgendes:

  1. Füge einen Test hinzu.

  2. Führe alle Tests durch und prüfe, ob der neue Test fehlschlägt.

  3. Schreibe den Code.

  4. Führe Tests durch.

  5. Refaktoriere den Code.

  6. Wiederholen.

Im GitHub-Repository des Buches findest du die Tests für jedes Programm, das du schreibst.Ich erkläre dir, wie du Tests ausführst und schreibst, und ich hoffe, dass du am Ende des Buches an den gesunden Menschenverstand und den grundsätzlichen Anstand von TDD glaubst. Ich hoffe, dass das Nachdenken über Tests als Erstes die Art und Weise verändern wird, wie du Programmieren verstehst und erforschst.

Verwenden der Kommandozeile und Installieren von Python

Meine Erfahrung in der Bioinformatik konzentrierte sich schon immer auf die Unix-Befehlszeile. Ein Großteil meiner täglichen Arbeit findet auf einer Art Linux-Server statt, auf dem ich bestehende Befehlszeilenprogramme mit Shell-Skripten, Perl und Python zusammenfüge. Auch wenn ich ein Programm oder eine Pipeline auf meinem Laptop schreibe und debugge, setze ich meine Tools oft auf einem HPC-Cluster ein, wo ein Zeitplannungsprogramm meine Programme asynchron ausführt, oft mitten in der Nacht oder am Wochenende, ohne dass ich sie beaufsichtigen oder eingreifen muss. Außerdem arbeite ich bei der Erstellung von Datenbanken und Websites sowie bei der Verwaltung von Servern ausschließlich über die Kommandozeile. Deshalb bin ich davon überzeugt, dass man diese Umgebung beherrschen muss, um in der Bioinformatik erfolgreich zu sein.

Ich habe einen Macintosh benutzt, um das gesamte Material für dieses Buch zu schreiben und zu testen, und macOS hat die Terminal-App, die du für eine Kommandozeile benutzen kannst.Ich habe alle Programme auch mit verschiedenen Linux-Distributionen getestet, und das GitHub-Repository enthält eine Anleitung, wie man eine virtuelle Linux-Maschine mit Docker benutzt. Außerdem habe ich alle Programme unter Windows 10 mit der Ubuntu-Distribution Windows Subsystem for Linux (WSL) Version 1 getestet.Ich empfehle Windows-Benutzern WSL, um eine echte Unix-Befehlszeile zu haben, aber auch Windows-Shells wie cmd.exe, PowerShell und Git Bash können für einige Programme ausreichend gut funktionieren.

Ich möchte dich ermutigen, integrierte Entwicklungsumgebungen (IDEs) wie VS Code, PyCharm oder Spyder auszuprobieren, um dir beim Schreiben, Ausführen und Testen deiner Programme zu helfen.Diese Tools integrieren Texteditoren, Hilfedokumentation und Terminals. Obwohl ich alle Programme, Tests und sogar dieses Buch mit dem vim Editor in einem Terminal geschrieben habe, würden die meisten Leute es wahrscheinlich vorziehen, zumindest einen moderneren Texteditor wie Sublime, TextMate oder Notepad++ zu verwenden.

Ich habe alle Beispiele mit den Python-Versionen 3.8.6 und 3.9.1 geschrieben und getestet.Einige Beispiele verwenden eine Python-Syntax, die es in Version 3.6 noch nicht gab. Python Version 2.x wird nicht mehr unterstützt und sollte nicht mehr verwendet werden. Ich tendiere dazu, die neueste Version von Python 3 von der Python-Download-Seite zu beziehen, aber ich habe auch mit der Python-Distribution Anaconda gute Erfahrungen gemacht. Vielleicht hast du einen Paketmanager wie apt auf Ubuntu oder brew auf dem Mac, mit dem du eine aktuelle Version installieren kannst, oder du baust aus dem Quellcode. Unabhängig von deiner Plattform und Installationsmethode empfehle ich dir, die neueste Version zu verwenden, da sich die Sprache ständig weiterentwickelt, meistens zum Besseren.

Ich habe mich aus mehreren Gründen dafür entschieden, die Programme als Kommandozeilenprogramme und nicht als Jupyter Notebooks zu präsentieren. Ich mag Notebooks für die Datenerforschung, aber der Quellcode für Notebooks wird in JavaScript Object Notation (JSON) und nicht als zeilenorientierter Text gespeichert. Das macht es sehr schwierig, mit Tools wie diff die Unterschiede zwischen zwei Notebooks zu finden. Außerdem können Notebooks nicht parametrisiert werden, d. h. ich kann keine Argumente von außerhalb des Programms übergeben, um das Verhalten zu ändern, sondern muss stattdessen den Quellcode selbst ändern. Das macht die Programme unflexibel und automatisierte Tests unmöglich. Ich möchte dich ermutigen, Notebooks zu erkunden, vor allem als interaktive Möglichkeit, Python auszuführen, aber ich werde mich darauf konzentrieren, wie man Kommandozeilenprogramme schreibt.

Den Code und die Tests bekommen

Der gesamte Code und die Tests sind im GitHub-Repository des Buches verfügbar. Du kannst das Programm Git (das du eventuell installieren musst) verwenden, um den Code mit dem folgenden Befehl auf deinen Computer zu kopieren.Dadurch wird auf deinem Computer ein neues Verzeichnis namens biofx_python mit dem Inhalt des Repositorys erstellt:

$ git clone https://github.com/kyclark/biofx_python

Wenn du gerne eine IDE verwendest, kannst du das Repository auch über diese Schnittstelle klonen, wie in Abbildung P-1 gezeigt.Viele IDEs können dir helfen, Projekte zu verwalten und Code zu schreiben, aber sie funktionieren alle unterschiedlich. Um die Dinge einfach zu halten, zeige ich dir, wie du die meisten Aufgaben über die Kommandozeile erledigst.

mpfb 0001
Abbildung P-1. Das PyCharm-Tool kann das GitHub-Repository direkt für dich klonen

Einige Tools, wie PyCharm, versuchen automatisch, eine virtuelle Umgebung im Projektverzeichnis zu erstellen. Auf diese Weise kannst du die Python-Version und die Module von anderen Projekten auf deinem Computer isolieren. Ob du virtuelle Umgebungen verwendest oder nicht, ist eine persönliche Vorliebe. Es ist keine Voraussetzung, sie zu verwenden.

Vielleicht ziehst du es vor, eine Kopie des Codes in deinem eigenen Account zu erstellen, damit du deine Änderungen nachverfolgen und deine Lösungen mit anderen teilen kannst. Das nennt man Forking, weil du dich von meinem Code trennst und deine Programme dem Repository hinzufügst.

Um mein GitHub-Repository zu forken, mache Folgendes:

  1. Erstelle ein Konto auf GitHub.com.

  2. Gehe zu https://github.com/kyclark/biofx_python.

  3. Klicke auf die Schaltfläche Fork in der oberen rechten Ecke (siehe Abbildung P-2), um eine Kopie des Repositorys in deinem Konto zu erstellen.

mpfb 0002
Abbildung P-2. Die Schaltfläche "Fork" in meinem GitHub-Repository erstellt eine Kopie des Codes in deinem Konto

Jetzt, wo du eine Kopie meines Codes in deinem Repository hast, kannst du Git verwenden, um den Code auf deinen Computer zu kopieren. Ersetze dabei YOUR_GITHUB_ID durch deine aktuelle GitHub ID:

$ git clone https://github.com/YOUR_GITHUB_ID/biofx_python

Es kann sein, dass ich das Repository aktualisiere, nachdem du deine Kopie erstellt hast. Wenn du diese Aktualisierungen erhalten möchtest, musst du Git so konfigurieren, dass mein Repository als Upstream-Quelle festgelegt wird. Dazu gehst du, nachdem du dein Repository auf deinen Computer geklont hast, in dein biofx_python-Verzeichnis:

$ cd biofx_python

Dann führe diesen Befehl aus:

$ git remote add upstream https://github.com/kyclark/biofx_python.git

Wann immer du dein Repository von meinem aus aktualisieren möchtest, kannst du diesen Befehl ausführen:

$ git pull upstream main

Module installieren

Du musst mehrere Python-Module und -Werkzeuge installieren. Ich habe eine Datei requirements.txt in die oberste Ebene des Repositorys eingefügt. In dieser Datei sind alle Module aufgelistet, die du brauchst, um die Programme in diesem Buch auszuführen. Manche IDEs erkennen diese Datei und bieten dir an, sie für dich zu installieren, oder du kannst den folgenden Befehl verwenden:

$ python3 -m pip install -r requirements.txt

Oder benutze das pip3 Werkzeug:

$ pip3 install -r requirements.txt

Manchmal beschwert sich pylint über einige der Variablennamen in den Programmen, und mypy macht einige Probleme, wenn du Module importierst, die keine Typ-Annotationen haben. Um diese Fehler zu vermeiden, kannst du in deinem Home-Verzeichnis Initialisierungsdateien erstellen, die diese Programme verwenden, um ihr Verhalten anzupassen. Im Stammverzeichnis des Quellcode-Repository gibt es Dateien namens pylintrc und mypy.ini, die du so in dein Home-Verzeichnis kopieren solltest:

$ cp pylintrc ~/.pylintrc
$ cp mypy.ini ~/.mypy.ini

Alternativ kannst du mit folgendem Befehl ein neues pylintrc erzeugen:

$ cd ~
$ pylint --generate-rcfile > .pylintrc

Du kannst diese Dateien ganz nach deinem Geschmack anpassen.

Installation des Programms new.py

Ich habe ein Python-Programm namens new.py geschrieben, das Python-Programme erstellt. So meta, ich weiß. Ich habe es für mich selbst geschrieben und dann an meine Schüler weitergegeben, weil ich denke, dass es ziemlich schwierig ist, mit dem Schreiben eines Programms von einem leeren Bildschirm aus zu beginnen. Das Programm new.py erstellt ein neues, gut strukturiertes Python-Programm, das das Modul argparse verwendet, um Kommandozeilenargumente zu interpretieren. Es sollte im vorangegangenen Abschnitt mit den Modulabhängigkeiten installiert worden sein. Wenn nicht, kannst du das Modul pip verwenden, um es zu installieren, etwa so:

$ python3 -m pip install new-py

Sie sollten nun in der Lage sein new.py ausführen und etwas wie das hier sehen:

$ new.py
usage: new.py [-h] [-n NAME] [-e EMAIL] [-p PURPOSE] [-t] [-f] [--version]
              program
new.py: error: the following arguments are required: program

In jeder Übung wird vorgeschlagen, dass du new.py verwendest, um mit dem Schreiben deiner neuen Programme zu beginnen. In Kapitel 1 wirst du zum Beispiel ein Programm namens dna.py im Verzeichnis 01_dna erstellen, und zwar so:

$ cd 01_dna/
$ new.py dna.py
Done, see new script "dna.py".

Wenn du dann das Programm ./dna.py --helpaufrufst, wirst du sehen, dass es eine Hilfedokumentation zur Verwendung des Programms generiert. Du solltest das Programm dna.py in deinem Editor öffnen, die Argumente ändern und deinen Code hinzufügen, um die Anforderungen des Programms und der Tests zu erfüllen.

Beachte, dass die Verwendung von new.py nicht zwingend erforderlich ist. Ich biete sie nur als Einstiegshilfe an. Ich beginne jedes meiner eigenen Programme auf diese Weise, aber auch wenn ich sie für nützlich halte, möchtest du vielleicht einen anderen Weg einschlagen. Solange deine Programme die Testsuiten bestehen, kannst du sie schreiben, wie du willst.

Warum habe ich dieses Buch geschrieben?

Richard Hamming war jahrzehntelang als Mathematiker und Forscher bei Bell Labs tätig.Er war dafür bekannt, dass er Leute aufsuchte, die er nicht kannte, und sie über ihre Forschung ausfragte. Dann fragte er sie, was ihrer Meinung nach die größten und drängendsten unbeantworteten Fragen auf ihrem Gebiet waren. Wenn ihre Antworten auf diese beiden Fragen nicht übereinstimmten, fragte er: "Warum arbeitest du dann nicht daran?"

Ich bin der Meinung, dass eines der drängendsten Probleme in der Bioinformatik darin besteht, dass ein Großteil der Software schlecht geschrieben ist und dass es an angemessener Dokumentation und Tests mangelt, wenn es überhaupt welche gibt. Ich möchte dir zeigen, dass es weniger schwierig ist, Typen und Tests sowie Linters und Formatierer zu verwenden, weil es sich im Laufe der Zeit als einfacher erweisen wird, neue Funktionen hinzuzufügen und mehr und bessere Software zu veröffentlichen. Du wirst die Gewissheit haben, dass dein Programm zumindest in gewissem Maße korrekt ist.

Zu diesem Zweck zeige ich bewährte Methoden der Softwareentwicklung auf. Obwohl ich Python als Medium verwende, gelten die Prinzipien für jede Sprache von C über R bis hin zu JavaScript. Das Wichtigste, was du aus diesem Buch lernen kannst, ist das Handwerk des Entwickelns, Testens, Dokumentierens, Veröffentlichens und Unterstützen von Software, damit wir alle gemeinsam das wissenschaftliche Rechnen voranbringen können.

Meine Karriere in der Bioinformatik ist das Ergebnis von Irrwegen und glücklichen Zufällen. Ich habe englische Literatur und Musik studiert und dann Mitte der 1990er Jahre angefangen, mit Datenbanken und HTML zu spielen und schließlich nebenbei das Programmieren gelernt. 2001 war ich ein guter Perl-Hacker geworden und bekam einen Job als Webentwickler bei Dr. Lincoln Stein, dem Autor mehrerer Perl-Module und Bücher am Cold Spring Harbor Laboratory. Er und meine Chefin, Dr. Doreen Ware, brachten mir geduldig genug Biologie bei, um die Programme zu verstehen, die sie geschrieben haben wollten. 13 Jahre lang arbeitete ich an einer vergleichenden Datenbank für Pflanzengenomik namens Gramene.org und lernte dabei eine ordentliche Menge Wissenschaft, während ich mich weiter mit Programmiersprachen und Informatik beschäftigte.

Lincoln setzte sich leidenschaftlich für die Weitergabe von Daten, Code und Bildung ein. Er startete den Kurs "Programming for Biology" am CSHL, einen zweiwöchigen Intensivkurs, in dem Unix-Befehlszeilen-, Perl-Programmier- und Bioinformatik-Kenntnisse vermittelt wurden. Der Kurs wird immer noch unterrichtet, allerdings jetzt in Python, und ich hatte mehrmals die Gelegenheit, als Lehrassistentin zu fungieren. Ich fand es immer lohnend, jemandem beim Erlernen von Fähigkeiten zu helfen, die er für seine Forschung nutzen kann.

Während meiner Zeit am CSHL lernte ich Bonnie Hurwitz kennen, die später an die University of Arizona (UA) ging, um dort zu promovieren. Als sie ihr neues Labor an der UA eröffnete, war ich ihr erster Mitarbeiter. Bonnie und ich arbeiteten mehrere Jahre zusammen, und das Unterrichten wurde zu einer meiner Lieblingsbeschäftigungen. Wie in Lincolns Kurs vermittelten wir Wissenschaftlern, die sich mit rechnergestützten Methoden beschäftigen wollten, grundlegende Programmierkenntnisse.

Einige der Materialien, die ich für diese Kurse geschrieben habe, bildeten die Grundlage für mein erstes Buch, Tiny Python Projects, in dem ich versuche, die wesentlichen Elemente der Python-Syntax zu vermitteln und zu zeigen, wie man Tests einsetzt, um sicherzustellen, dass die Programme korrekt und reproduzierbar sind - Elemente, die für die wissenschaftliche Programmierung entscheidend sind. Dieses Buch knüpft daran an und konzentriert sich auf die Elemente von Python, die dir helfen, Programme für die Biologie zu schreiben.

In diesem Buch verwendete Konventionen

In diesem Buch werden die folgenden typografischen Konventionen verwendet:

Kursiv

Zeigt neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen sowie Codons und DNA-Basen an.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Constant width bold

Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.

Constant width italic

Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.

Dieses Element steht für einen Tipp oder eine Anregung.

Dieses Element steht für einen allgemeinen Hinweis.

Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.

Code-Beispiele verwenden

Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://github.com/kyclark/biofx_python zum Download bereit .

Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Genehmigung erforderlich.

Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Ein Beispiel: "Mastering Python for Bioinformatics von Ken Youens-Clark (O'Reilly). Copyright 2021 Charles Kenneth Youens-Clark, 978-1-098-10088-9."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

O'Reilly Online Learning

Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.

Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter http://oreilly.com.

Wie du uns kontaktierst

Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Nord
  • Sebastopol, CA 95472
  • 800-998-9938 (in den Vereinigten Staaten oder Kanada)
  • 707-829-0515 (international oder lokal)
  • 707-829-0104 (Fax)

Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/mastering-bioinformatics-python aufrufen .

Schreib eine E-Mail an , um Kommentare oder technische Fragen zu diesem Buch zu stellen.

Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter http://oreilly.com.

Finde uns auf Facebook: http://facebook.com/oreilly

Folge uns auf Twitter: http://twitter.com/oreillymedia

Schau uns auf YouTube: http://www.youtube.com/oreillymedia

Danksagungen

Ich möchte mich bei den vielen Menschen bedanken, die dieses Buch rezensiert haben, darunter mein Redakteur Corbin Collins, das gesamte Produktionsteam, vor allem aber meine ProduktionsredakteurinCaitlin Ghegan, meine technischen Rezensenten Al Scherer, Brad Fulton, Bill Lubanovic,Rangarajan Janani und Joshua Orvis sowie die vielen anderen Personen, die sehr geschätztes Feedback gegeben haben, darunter Mark Henderson, Marc Bañuls Tornero und Dr. Scott Cain.

In meiner beruflichen Laufbahn hatte ich das große Glück, viele wunderbare Chefs, Vorgesetzte und Kollegen zu haben, die mir geholfen haben, mich weiterzuentwickeln und besser zu werden. Eric Thorsen war der erste, der erkannte, dass ich das Potenzial hatte, programmieren zu lernen, und er half mir, verschiedene Sprachen und Datenbanken sowie wichtige Lektionen über Vertrieb und Support zu lernen. Steve Reppucci war mein Chef bei boston.com und vermittelte mir ein viel tieferes Verständnis von Perl und Unix und wie man ein ehrlicher und umsichtiger Teamleiter ist. Lincoln Stein am CSHL ging das Risiko ein, jemanden einzustellen, der keine Ahnung von Biologie hatte, um in seinem Labor zu arbeiten, und er drängte mich dazu, Programme zu erstellen, die ich mir nicht vorstellen konnte. Dr. Doreen Ware brachte mir geduldig Biologie bei und drängte mich dazu, Führungsrollen zu übernehmen und zu veröffentlichen. Dr. Bonnie Hurwitz unterstützte mich über viele Jahre hinweg beim Lernen von Hochleistungsrechnern, weiteren Programmiersprachen, Mentoring, Unterrichten und Schreiben. In jeder Position hatte ich auch vieleKolleginnen und Kollegen, die mir genauso viel über das Programmieren wie über das Menschsein beigebracht haben, und ich danke allen, die mich auf meinem Weg unterstützt haben.

In meinem persönlichen Leben wäre ich nirgendwo ohne meine Familie, die mich liebt und unterstützt. Meine Eltern haben mich mein ganzes Leben lang unterstützt und ohne sie wäre ich sicher nicht der Mensch, der ich bin. Lori Kindler und ich sind seit 25 Jahren verheiratet und ich kann mir ein Leben ohne sie nicht vorstellen. Gemeinsam haben wir drei Kinder gezeugt, die eine unglaubliche Quelle der Freude und Herausforderung sind.

1 Benannt nach Rosalind Franklin, die für ihre Beiträge zur Entdeckung der DNA-Struktur den Nobelpreis hätte bekommen sollen.

Get Python für die Bioinformatik beherrschen now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.