{"id":1113,"date":"2012-06-23T15:26:02","date_gmt":"2012-06-23T15:26:02","guid":{"rendered":"http:\/\/phaidon.philo.at\/qu\/?p=1113"},"modified":"2018-11-18T10:48:54","modified_gmt":"2018-11-18T10:48:54","slug":"rechnen-und-denken","status":"publish","type":"post","link":"https:\/\/quatsch.philo.at\/?p=1113","title":{"rendered":"Rechnen und Denken"},"content":{"rendered":"<p>K\u00f6nnen Computer denken?<\/p>\n<p><a href=\"http:\/\/phaidon.philo.at\/qu\/wp-content\/uploads\/2012\/06\/220px-Turing_Test_version_3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1114\" src=\"http:\/\/phaidon.philo.at\/qu\/wp-content\/uploads\/2012\/06\/220px-Turing_Test_version_3.png\" alt=\"\" width=\"123\" height=\"157\" \/><\/a><\/p>\n<p>Ein im Jahr 1950 von Alan Turing entwickelter Test versucht diese Frage durch ein spezielles Setting zu normieren: Es gibt 3 Spieler A, B und C. Spielerin C ist ein Mensch und muss auf Basis eines Frage- und Antwortspiels \u00fcber einen limitierten Kanal herausfinden, wer Mensch und was Computer ist. Kann C das nicht, muss sie davon ausgehen, dass auch Computer denken k\u00f6nnen (oder vorsichtig formuliert: C stellt fest, dass sie beim Output von denkenden Wesen und von Computern \u00fcber diesen Kanal keinen feststellbaren qualitativen Unterschied erkennen kann).<\/p>\n<p>W\u00fcrde C ausschlie\u00dflich die <a href=\"http:\/\/img5.fotos-hochladen.net\/uploads\/humans0n6piqvbj5.jpg\">Meldungen zu ihrem Geburtstag<\/a> auf Facebook einem Turing-Test unterziehen, k\u00f6nnte sie sie zu dem Schluss gelangen, dass ein Gro\u00dfteil ihrer &#8220;Freunde&#8221; sich wie einfallslose Maschinen verhalten, jedoch mehr Rechtschreibfehler machen.<\/p>\n<p><a href=\"http:\/\/audiothek.philo.at\/media\/alan-turin-zum-kennenlernen\">Der Streit ist vorprogrammiert<\/a>, wenn es um die Unterscheidung von Simulation und echtem, menschlichen Verhalten geht. Als ob wir ignorierten, dass die Tricks der Simulation von unserem eigenen Wunsch ausgehen, uns selbst zu \u00fcberraschen, zu t\u00e4uschen oder zu entlasten. Die zum Leben erwachte, verselbst\u00e4ndigte Maschine <a href=\"http:\/\/news.nationalgeographic.com\/news\/2005\/06\/0610_050610_robot.html\">ist von uns selbst angetrieben<\/a>.<\/p>\n<p>Zum 100. Geburtstag von Alan Turing schiebe ich den Turing-Test zur Seite. Zum Vorschein kommen die Turing-Maschine und die Frage nach der Relevanz in Informatikforschung und Softwareverwendung.<!--more--><\/p>\n<p><strong>Die Turingmaschine und die Grenzen der Softwareanalyse<\/strong><\/p>\n<p>Die Turingmaschine ist ein Gedankenexperiment, in dem einen fiktive Maschine Zeichen auf einem Band manipuliert. Es gibt vier Operationen: Der bewegliche Schreib-\/Lesekopf kann sich nach links und rechts bewegen sowie ein Zeichen an der aktuellen Position lesen bzw. \u00fcberschreiben. Wann welche Operation ausgef\u00fchrt wird, wird durch den aktuellen Zustand und einer Tabelle mit Regeln der folgenden Art bestimmt: Wenn Zustand x, dann wechsle in Zustand y und f\u00fchre Operation z aus. Auf diese Art l\u00e4sst sich jeder Algorithmus beschreiben und analysieren. Das Prinzip ist bis heute dasselbe geblieben, sodass man (mit gen\u00fcgend Geduld und Platz) jeden Algorithmus als Turingmaschine beschreiben k\u00f6nnte.<\/p>\n<p>Turing hat mit Hilfe einer fiktiven Maschine die Grundlagen der Berechenbarkeitstheorie stark gepr\u00e4gt. Beispielsweise hat er mit dem sogenannten Halteproblem gezeigt, dass es kein Verfahren, also kein Programm, gibt mit dem wir f\u00fcr ein <em>beliebiges<\/em> Programm p feststellen k\u00f6nnen, ob p zu einem Ende gelangt. Es stellt sich heraus, dass alle interessanten Eigenschaften von p nicht hinreichend von Programmen entschieden werden k\u00f6nnen.<\/p>\n<p>Software die wir im Alltag verwenden sind Betriebssysteme, Internet-Browser, Textverarbeitungsprogramme. Diese sind zunehmend un\u00fcbersichtlich geworden. Microsoft Windows XP basiert auf 45 Millionen Zeilen Programmcode. Obwohl wir jedes Snippet Programmcode von Microsoft Windows analysieren k\u00f6nnten, reicht unsere Lebenszeit nicht aus, jede Zeile zu analysieren. Im Unterschied dazu ist es m\u00f6glich, ein Buch und unter Umst\u00e4nden sogar das ganze Lebenswerk von Niklas Luhmann zu lesen.<\/p>\n<p>Motiviert durch zunehemende Komplexit\u00e4t und Un\u00fcbersichtlichkeit von Software nimmt die Informatikforschung zwar die Ergebnisse von Turing hin, versucht aber trotzdem, Verfahren zu entwickeln, die Eigenschaften von Programmen extrahieren. Die Art und Weise, mit Hilfe eines Programms Eigenschaften eines anderen Programms festzustellen, wird in der aktuellen Informatikforschung <em>Softwareanalyse<\/em> genannt, wobei zwischen statischer und dynamischer Softwareanalyse unterschieden wird. W\u00e4hrend dynamische Softwareanalyse das Programm w\u00e4hrend es l\u00e4uft (&#8220;zur Laufzeit&#8221;) mit Hilfe eines Analyseprogramms analysiert, betrachtet statische Analyse nur den Programmcode und \u00a0die Struktur desselben. Die Ergebnisse von Turing bilden die \u00e4u\u00dfersten theoretischen Grenzen vor allem der statischen Softwareanalyse.<\/p>\n<p>Was mich ausgehend von Turing interessiert ist die Komplexit\u00e4t heutiger Software. Ich betrachte also nicht Text zum Zwecke der Kommunikation sondern Programmcode zum Zwecke der automatischen Abarbeitung von Aufgaben. Dabei sind zwei Dimensionen zu betrachten, durch die sich verstehen l\u00e4sst, warum Software die Eigenschaft hat, un\u00fcbersichtlich zu werden. Eine dritte Dimension weist auf die materielle Abh\u00e4ngigkeit von (noch so verschachtelter) Software hin. Unter Ber\u00fccksichtigung dieser Dimension kann die Tendenz zur Komplexit\u00e4tssteigerung von Software sowohl ausgenutzt, als auch gebremst und gedreht werden, was der Softwareanalystin zumindest lokale \u00dcbersichtlichkeiten er\u00f6ffnet.<\/p>\n<p><strong>R\u00e4umliche Dimension &#8211; Software als Labyrinth<\/strong><\/p>\n<p>Abh\u00e4ngig von den konkreten Eingabewerten einer Software, durchwandert der Computer einen von vielen m\u00f6glichen Pfade durch die Software. Die Gesamtheit der m\u00f6glichen Pfade bildet ein Labyrinth, genauer ein geflechtartiges Gebilde (&#8220;control-flow graph&#8221;). Die Anzahl der m\u00f6glichen Pfade w\u00e4chst exponentiell mit der Anzahl an Verzweigungen des Geflechts, d.h. praktisch: Je mehr Zeilen ein Programm hat, desto mehr m\u00f6gliche Pfade hat es in der Regel.<\/p>\n<p><a href=\"http:\/\/phaidon.philo.at\/qu\/wp-content\/uploads\/2012\/06\/labyrinth.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-1116\" src=\"http:\/\/phaidon.philo.at\/qu\/wp-content\/uploads\/2012\/06\/labyrinth.png\" alt=\"\" width=\"154\" height=\"160\" \/><\/a><\/p>\n<p>Obwohl jede Instruktion, jedes Pfadst\u00fcck, pr\u00e4zise definierte Effekte bewirkt, gelingt es uns rein syntaktisch nicht, all jene Wege zu finden, die die gew\u00fcnschten Eigenschaften erf\u00fcllt, ohne den Weg tats\u00e4chlich zu gehen. Denn nicht alle Eigenschaften sind direkt aus den Instruktionen abzuleiten, manche ergeben sich erst zur Laufzeit. Dies ist ein Grund, weswegen pragmatische Softwareentwicklerinnen davon ausgehen, dass viele Fehler erst nach der Publikation der Software gefunden werden. Sie rechnen manchmal damit, dass selbst kleine \u00c4nderungen in einer unscheinbaren Routine zu unvorhergesehenen Folgen (z.B. Abst\u00fcrzen) f\u00fchren k\u00f6nnen. Die Betrachtung eines Ausschnitts des Programmcodes ist keine Garantie daf\u00fcr, dass man ihren Einfluss auf das Gesamtverhalten des Systems verstanden hat.<\/p>\n<p>Sowohl Menschen als auch Maschinen gelangen durch Explosion der M\u00f6glichkeiten an ihre Grenzen.<\/p>\n<p><strong>Zeitliche Dimension &#8211; Software lebt<\/strong><\/p>\n<p>Selbst wenn wir f\u00fcr wichtige Programme die labyrinth-artige Struktur von Software in den Griff bekommen und durch Austesten, manuelle Code-Reviews oder ann\u00e4herungsweise Softwareanalyse Fehlfunktionen finden k\u00f6nnen, ist weiters zu betrachten, dass Software st\u00e4ndig in Bearbeitung ist.<\/p>\n<p>Eine Referenzversion des Betriebssystems Linux kann schon nach 2 Wochen <a href=\"http:\/\/vimeo.com\/7113066\">an zentralen Stellen von der Entwicklergemeinschaft modifiziert<\/a> sein. Die Analyse hinkt aktiven Codeprojekten hinterher, da diese st\u00e4ndig &#8220;work in progress&#8221; sind.<\/p>\n<p>Software ist nat\u00fcrlicher geworden, durch unsere kontinuierliche Partizipation an ihr.<\/p>\n<p><strong>Materielle Dimension &#8211; Software l\u00e4uft auf Hardware<\/strong><\/p>\n<p>Die letzten beiden Dimensionen betrachten die Sph\u00e4re von Software isoliert von der Hardware auf der sie letztlich l\u00e4uft. Gerade jetzt, wo Software in voller Bl\u00fcte steht und High-Level-Programmiersprachen direkten Hardwarezugriff vermeiden, k\u00f6nnte man \u00fcbersehen, dass unsere elektronischen Ger\u00e4te auf hoch-standardisierten Bauteilen beruhen. Anders gesagt: Nur wenn die Hardware mitspielt,\u00a0 d.h. Millionen von Transistoren, Speicherkondensatoren, etc. sich entsprechend ihrer Spezifikation verhalten, folgt ein Computer den formalen Instruktionen der Softwareentwicklerin.<\/p>\n<p>Um physikalischen Ausf\u00e4llen tempor\u00e4r zu entgehen, setzt man etwa in gro\u00dfen Rechenzentren auf Virtualisierung ganzer Rechner. Eine virtuelle Maschine ist ein St\u00fcck Software, das mit einer physikalischen Maschine funktional \u00e4quivalent ist. Programme, die in der virtuellen Maschine laufen, merken keinen Unterschied. Sie verhalten sich, als ob sie direkt mit dem Speicher und Prozessor der physikalischen Maschine arbeiten. Tats\u00e4chlich spielt eine Software die Rolle einer physikalischen Maschine und vermittelt die Interaktion zwischen Software und Hardware. Der dadurch entstandene Spielraum kann produktiv genutzt werden.<\/p>\n<p>Was \u00e4ndert Virtualisierung an der Tatsache, dass am Ende der Kette von Softwarekomponenten eine physikalische Maschine stehen muss? Nicht viel, aber doch Entscheidendes. Die Vermittlungsfunktion einer virtuellen Maschine f\u00fchrt zu einer Abkapselung mit vielen Vorteilen. Virtuelle Maschinen k\u00f6nnen bequem im Netzwerk transferiert werden, sodass man Rechenkraft (computational power) besser nutzen kann. Bei h\u00f6herer Auslastung werden virtuelle Maschinen automatisch auf weitere physikalische Maschinen kopiert, um Engp\u00e4sse zu vermeiden. Man erh\u00e4lt also programmatische Kontrolle \u00fcber das Verhalten von Rechnern (siehe z.B. <a href=\"https:\/\/aws.amazon.com\/de\/ec2\/\">Amazon Elastic Compute Cloud<\/a>).<\/p>\n<p>Das Verh\u00e4ltnis zwischen physikalischer und virtueller Maschine \u00e4hnelt dem zwischen Turingmaschine (TM) und Universeller Turingmaschine (UTM).<\/p>\n<ul>\n<li>W\u00e4hrend die Turingmaschine f\u00fcr genau ein Programm ausgelegt ist, kann eine UTM das Programm einer jeden beliebigen TM abarbeiten. Sowohl UTM als auch TM basieren auf den vier Operationen (Links,Rechts,Lesen,Schreiben).<\/li>\n<li>Am Grundprinzip eines Rechners \u00e4ndert Virtualisierung nichts. Man ben\u00f6tigt weiterhin einen (oder mehrere) Prozessor sowie Arbeitsspeicher. Doch durch Virtualisierung k\u00f6nnen beliebige Rechner so wie andere Programme verwaltet werden.<\/li>\n<li>So gesehen ist eine virtuelle Maschine die Aufhebung einer physikalischen Maschine: (1) Sie <em>unterbricht<\/em> den Direktkontakt von Software mit den physikalischen Bauteilen durch eine Vermittlungsebene. (2) Sie <em>beh\u00e4lt<\/em> den Bezug zur physikalischen Maschine, da sie selbst ihre Funktion nur mit Hilfe der physikalischen Maschine erf\u00fcllen kann. (3) Sie <em>wertet<\/em> die M\u00f6glichkeiten, die durch eine einzige physikalische Maschine entstehen <em>auf<\/em>. So lassen sich auf einem handels\u00fcblichen PC parallel ein Smartphone, ein alter Commodore64 und ein PC mit einem Macintosh-Betriebssystem betreiben.<\/li>\n<\/ul>\n<p><strong>Stelze, Hochstand, Flug<\/strong><\/p>\n<p>Die <a href=\"http:\/\/audiothek.philo.at\/media\/alan-turin-zum-kennenlernen\">diesj\u00e4hrige Jahresversammlung der \u00d6sterreichischen Computergesellschaft<\/a> wurde Alan Turing gewidmet. Dort fand sich die Aussage &#8220;Es gibt einen R\u00fccksto\u00dfeffekt von der Materie ins Allgemeine&#8221;.<\/p>\n<p>Die &#8220;Bezwingung&#8221; der Natur durch Technik besteht darin, dass wir auf Stelzen gehen. Dadurch erscheinen wir gr\u00f6\u00dfer, doch bewirkt der Abstand zum Boden, dass wir sensibler f\u00fcr Unebenheiten werden. Wenn man beim Stelzen-gehen zu Boden f\u00e4llt, f\u00e4llt man h\u00e4rter. Ich m\u00f6chte daher nicht von Bezwingung, sondern von Konzentration der Natur durch Technik sprechen. So nutzen etwa Computer die Eigenschaften von spezifischen Materialien (Silizium, <a href=\"https:\/\/de.wikipedia.org\/wiki\/Metalle_der_Seltenen_Erden\">Metalle der seltenen Erden<\/a>), um gew\u00fcnschte Effekte zu erzielen. Durch die allt\u00e4gliche Verwendung von elektronischen Ger\u00e4ten sind wir auf spezifische Eigenschaften von Materialien angewiesen. (Ein Emmentaler besitzt diese Eigenschaften nicht.)<\/p>\n<p>Die Virtualisierung macht einerseits das Vorhandensein von physikalischen Maschinen zur Gewohnheit und verst\u00e4rkt daher unseren Bedarf an Materialien mit speziellen Eigenschaften (Eine Aufhebung ist auch eine Best\u00e4tigung.) Andererseits ist die Vermittlungsrolle einer virtuellen Maschine ein Gewinn an \u00dcbersichtlichkeit, was zur\u00fcck zur Softwareanalyse f\u00fchrt. Denn virtuelle Maschinen k\u00f6nnen nicht nur zur \u00f6konomischen Verwaltung von Rechenkraft eingesetzt werden, sondern auch zum Aufzeichnen der Interaktionen zwischen Software und Hardware. Als ob die physikalische Maschine ein Zoo und die virtuelle Maschine ein Gehege mit Hochstand w\u00e4re. W\u00e4hrend sich die zu untersuchende Software wie \u00fcblich verh\u00e4lt, kann man Teile der labyrinthischen Binnenstruktur sowie Auswirkungen einzelner Instruktionen auf das Gesamtverhalten des Systems analysieren.<\/p>\n<p>Virtualisierung, d.h. Aufhebung der Interaktion zwischen Software und Hardware, tr\u00e4gt zum Aufbau zus\u00e4tzlicher Komplexit\u00e4t bei (macht also global gesehen die Sache softwareseitig un\u00fcbersichtlicher), andererseits kann man diese Komplexit\u00e4t f\u00fcr lokale \u00dcbersichten nutzen. Vielleicht verh\u00e4lt es sich mit dem <em>Nach<\/em>denken \u00e4hnlich:<\/p>\n<ul>\n<li>Wir schweben nicht \u00fcber der Welt mit einem unbegrenzten Blick.<\/li>\n<li>Ein gut gebauter Hochstand hilft uns, \u00fcber lokale Dynamiken klar zu werden.<\/li>\n<li>Das Bauen des Hochstand und das Heraufklettern setzen zus\u00e4tzliche Dynamiken frei, die jedoch nicht im Fokus der Aufmerksamkeit stehen (au\u00dfer der Hochstand beginnt zu wackeln).<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Am heutigen 100. Geburtstag von Alan Turing schiebe ich den Turing-Test erst einmal zur Seite. Die Turing-Maschine sowie Niklas Luhmann kommen zum Vorschein. Was mich ausgehend von Turing und Luhmann interessiert ist die Komplexit\u00e4t heutiger Software. Dabei sind zwei Dimensionen zu betrachten, durch die sich verstehen l\u00e4sst, warum Software die Eigenschaft hat, un\u00fcbersichtlich zu werden. Eine dritte Dimension weist auf die materielle Abh\u00e4ngigkeit von (noch so verschachtelter) Software hin, durch welche die uners\u00e4ttliche Ausdifferenzierung sowohl ausgenutzt, als auch gebremst und gedreht wird und au\u00dferdem der Softwareanalystin zumindest lokale \u00dcbersichtlichkeiten er\u00f6ffnet.<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[19,37,62,162,179,190,194],"class_list":["post-1113","post","type-post","status-publish","format-standard","hentry","category-medienphilosophie","tag-analyse","tag-berechnung","tag-denken","tag-softwareanalyse","tag-turing","tag-vermittlung","tag-virtualisierung"],"_links":{"self":[{"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=\/wp\/v2\/posts\/1113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1113"}],"version-history":[{"count":1,"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=\/wp\/v2\/posts\/1113\/revisions"}],"predecessor-version":[{"id":2265,"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=\/wp\/v2\/posts\/1113\/revisions\/2265"}],"wp:attachment":[{"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/quatsch.philo.at\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}