Grundlagen der praktischen Programmierung von Dr. Erhard Henkes    Stand: 07.05.2004

Was ist eigentlich Programmierung? Es ist - einfach ausgedrückt - die Erstellung von Software für einen Rechner (Computer).
Was ist ein Computer? Computer sind Rechenanlagen, die Daten verarbeiten.

Diese Antworten sind nur begrenzt hilfreich. Man möchte die Zusammenhänge praktisch erfassen. Um die Grundlagen der Programmierung zu verstehen, werden wir uns zunächst mit zwei Beispielen beschäftigen: Turingmaschine und „DNS-Computer“. Die Turingmaschine stammt aus den dreißiger Jahren des letzten Jahrhunderts (1936) und wird bereits als theoretische Grundlage für Informatiker an der Hochschule gelehrt, während der "DNS-Computer" in den ersten Jahren des aktuellen Jahrhunderts durch die Arbeitsgruppe von Ehud Shapiro zur Blüte geführt wurde, aber immer noch in den Kinderschuhen steckt. Wir werden sehen, dass es hierbei um das Wechselspiel von vier Elementen geht: Input - Output und Software - Hardware

Turingmaschine

Alan M. Turing hat bereits 1936 die Lösung mathematischer Probleme durch eine Maschine für möglich gehalten, die nur drei Bestandteile enthält: Einen Schreib- Lese-Kopf, ein Schaltwerk und ein unendlich langes Speicherband. Das Speicherband muss in der Lage sein, pro Feld genau ein Zeichen des verwendeten Alphabetes oder ein Leerzeichen (Blank) zu speichern. Da ich davon ausgehe, dass Sie an einem modernen PC sitzen, werden wir eine Simulation einer Turingmaschine einsetzen. Beziehen Sie diese bitte von folgender Stelle:

http://www.gregor-buchholz.de/index.html?html/turing.shtml  (unten finden Sie die Version vom Mai 2004)

 



Anmerkung (29.10.2006):

neuer Link für die Simulation der Touringmaschine: http://www.joefox.de/index.php?key=turing (Version 2.2 von 2006)




Die Turingmaschine hat ein „Band“, an dem man linear entlang wandern kann. Hierbei gibt es einen kombinierten „Schreib-Lese-Kopf“. Diese Hardware ist hier als Software simuliert. Nachdem Sie sich mit dem prinzipiellen Aufbau der Maschine (unsere Hardware) vertraut gemacht haben, wollen Sie sicher etwas programmieren, also Software erstellen. Wir werden zunächst etwas sehr Einfaches programmieren, nämlich ein Programm, das zwei Zeichen sequentiell liest und dabei gegeneinander vertauscht. Wenn wir also ABBA eingeben (unser Input), soll BAAB resultieren (unser Output). Nun wie geht dies hier?

 

Wir definieren zunächst unser Alphabet: {A,B} (zulässige Menge der Zeichen)

Man gibt einfach A,B im Eingabefeld Alphabet ein.

 

Unter Eingabewort geben wir ABBA ein.

 


Sie sehen, dass sich die Matrix aus Zeichen (aus unserem Alfabet plus das Blank #) und „Zuständen“ erweitert hat. Dort müssen wir unser Programm eingeben (Feld anklicken und Return drücken). Der Anfangszustand ist Z01, das Ende ist erreicht, wenn im Zustand Z01 das Zeichen # (steht für Blank) gelesen wird. Gehen wir schrittweise vor: Wenn das gelesene Zeichen ein A ist, soll ein B geschrieben werden bzw. umgekehrt. Zusätzlich bewegen wir den Schreib-Lese-Kopf eine Position weiter. Das wird wie folgt codiert:

 

  

 

Nach vier Schritten ist die Endkonfiguration Z01,# erreicht und unser String bezüglich A und B vertauscht:

 


 

In diesem Beispiel haben wir nur einen Zustand verwendet. Anders sieht es bei dem im Download mitgelieferten Beispiel zur Addition zweier Binärzahlen aus. Hier verwendet man 12 Zustände und vier Zeichen.

 


 

Um eins und eins zu addieren, benötigt man in diesem Programm 16 Schritte:

 


 

„Alles was überhaupt berechenbar ist, ist schon mit der Turingmaschine berechenbar!“ (Church)

Eine interessante Hypothese. Wenn Sie mehr über die Turingmaschine erfahren möchten, lesen Sie z.B. hier weiter:

http://www.matheprisma.uni-wuppertal.de/Module/Turing/

 

Unsere aktuellen PC’s sind um vieles komplexer als die Turingmaschine. Dennoch ist es eine gute Übung, diese Maschine für einfache Aufgaben einzusetzen, denn gerade jetzt wird diese grundlegende „Maschine“ mittels DNS nachgebaut. 

 

 

DNS-Computer

 

Dies ist ein faszinierendes neues Gebiet. Spätere Generationen werden darauf bestimmt mit gleichem Grundlageninteresse schauen wie auf die Turingmaschine.

Auch hier gibt es Zustände und Zeichen in Form von Nukleotid-Code. Input (Daten) und Software werden hier von DNS gebildet, während die Hardware ein Enzym ist. Die Software-DNS verarbeitet Input-DNS, in dem sie ein Enzym namens Fok-I an sich bindet und damit die Input-DNS zerschneidet. Je nach „sticky end“ (freie DNS-Stränge, hier vier Basen) finden sich die richtigen Partner-Moleküle, um durch chemische Umwandlung von einem Zustand in den nächsten überzugehen. Das Enzym Fok-I stellt auch die Energieversorgung des „DNS-Computers“ sicher. Wird die DNS aufgetrennt, lösen sich Bindungen. Darin gespeicherte Energie wird als Wärme freigesetzt. Dadurch kommt der Rechner ohne den biochemischen Brennstoff ATP oder andere externe Energiequellen aus.

 

http://www.keren-hayessod.de/israel-nachrichten/news/computer.htm

http://nano.ivcon.org/modules.php?name=News&file=article&sid=759

http://www.heise.de/newsticker/meldung/print/46956

http://www.wisdom.weizmann.ac.il/~kobi/

 

Der Schlüssel-Mechanismus des „DNS-Rechners“ ist in folgender Darstellung von Shapiro und Benenson gut zu erfassen:


 

aus: DNA molecule provides a computing machine with both data and fuel

Yaakov Benenson, Rivka Adar, Tamar Paz-Elizur, Zvi Livneh, and Ehud Shapiro

Departments of Computer Science and Applied Mathematics and Biological Chemistry, Weizmann Institute of Science, Rehovot 76100, Israel

Edited by Peter B. Dervan, California Institute of Technology, Pasadena, CA, and approved January 13, 2003 (received for review September 17, 2002)

 

 

In Bildteil E sieht man die wesentlichen Schritte: Ein Hardware-Software-Komplex muss bezüglich der “sticky ends” zusammen finden. Dann schlägt die Nuklease Fok-I zu und spaltet einen Teil des Input-Moleküls ab. Damit erhält man ein neues Molekül. Dies entspricht bei der Turingmaschine einem Schritt, der den Übergang von einer Zustand-/Zeichen-Kombination zur anderen umfasst. Zuletzt verbleibt ein Output-Molekül, das sozusagen das Resultat der „Berechnung“ darstellt. Der Vorteil des DNS-Rechners ist seine einfach zu realisierende Parallelität, der Nachteil seine niedrige Geschwindigkeit im Einzelschritt (z.Z. bei 20 Sekunden).

 


(Darstellung ebenfalls aus obiger Quelle)

 

Ein der Turingmaschine analoger Ablauf ist oben dargestellt.

 

Damit haben Shapiro, Benenson et. al. den kleinsten biologischen Rechner hergestellt:

 


 

 

Neben Hardware - Software, Input - Output findet sich noch ein weiteres wichtiges Element, nämlich die Speicherung von Informationen, bei der Turingmaschine das nach beiden Seiten „unendliche“ Band, bei dem DNS-Rechner die DNS-Moleküle, die bei passender Software-DNS als Input-DNS bzw. bei nicht-passender Software-DNS als Output-DNS dienen.

 

Zur Zeit zielt man darauf ab, die Output-DNS als „maskiertes“ Medikament z.B. gegen Krebszellen einzusetzen.

 

Ist es nicht faszinierend, wie unterschiedlich die Ausprägungen von „Rechenmaschinen“ sein können?