Skip to main content
main-content

Über dieses Buch

Das Buch bietet eine umfassende und praxisorientierte Einführung in die wesentlichen Grundlagen und Konzepte der Informatik. Es umfasst den Stoff, der typischerweise in den ersten Semestern eines Informatikstudiums vermittelt wird, vertieft Zusammenhänge, die darüber hinausgehen und macht sie verständlich. Die Themenauswahl orientiert sich an der langfristigen Relevanz für die praktische Anwendung. Praxisnah und aktuell werden die Inhalte für Studierende der Informatik und verwandter Studiengänge sowie für im Beruf stehende Praktiker vermittelt.

Für die vorliegende Auflage wurde der gesamte Inhalt überarbeitet und es kam ein neues Kapitel zum Thema maschinelles Lernen mit neuronalen Netzen dazu.

Inhaltsverzeichnis

Frontmatter

Kapitel 1. Einführung

Zusammenfassung
Der Begriff Informatik stammt ursprünglich aus einer Veröffentlichung von Karl Steinbuch aus dem Jahr 1957 [Ste57]. In der deutschen Sprache verbreitet hat er sich erst seit 1968 auf Vorschlag des damaligen Forschungsministers Gerhard Stoltenberg, in Anlehnung an den 1962 von dem französischen Ingenieur Philippe Dreyfus geprägten Begriff informatique. Im englischen Sprachraum spricht man meist von Computer Science, also „Computer-Wissenschaft“. Der Begriff Informatics ist ebenfalls geläufig, wird aber gewöhnlich etwas umfassender verwendet, beispielsweise auch für die Informationsverarbeitung in biologischen oder sozialen Systemen. DasWort Informatik vereinigt die Begriffe Information und Automation, bedeutet also in etwa automatische Informationsverarbeitung. In einem Lexikon-Eintrag heißt es [Cla06].
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 2. Nachricht und Information

Zusammenfassung
„Nachricht“ und „Information“ sind zentrale Begriffe der Informatik, die intuitiv sowie aus der Erfahrung heraus vertraut sind. Während man eine „Nachricht“ als etwas Konkretes begreifen kann, ist dies mit der darin enthaltenen Information jedoch nicht ohne weiteres möglich.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 3. Codierung

Zusammenfassung
Wesentlich bei der Speicherung und Übertragung von Nachrichten ist eine dem Problem angepasste Darstellung der Nachricht. Gegeben seien ein Nachrichtenraum A* (die Quelle) über einem Alphabet A = {a1, a2, . . . , an} und ein Nachrichtenraum B* (das Ziel) über einem Alphabet B = {b1, b2, . . . , bm}. Eine umkehrbar eindeutige Abbildung von A* in B* (es braucht also nicht die gesamte Menge B* erfasst zu werden) heißt Codierung C [Ber74, Ham87, Wil99]. Es ist zu beachten, dass CB* gilt, dass also C eine Teilmenge von B* ist. In Abb. 3.1 ist diese Beziehung skizziert.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 4. Verschlüsselung

Zusammenfassung
Zu allen Zeiten strebte man danach, Informationen zuverlässig und vertraulich über unsichere Kanäle zu senden. Übermittelt beispielsweise Alice eine unverschlüsselte Nachricht an Bob, so könnte eine unbefugte Person, vielleicht Cleo (oft auch Mallory), diese Nachricht abfangen, mitlesen und eventuell auch unbemerkt verändern. Cleo könnte sogar eine erfundene Nachricht an Bob senden und vorgeben, Alice zu sein. Um den Nachrichtenaustausch sicherer zu gestalten, kann man Nachrichten verschlüsseln, d. h. so codieren, dass die darin enthaltene Information verborgen ist und dass die Decodierung ohne den Schlüssel sehr schwierig, im Idealfall sogar unmöglich ist.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 5. Computerhardware und Maschinensprache

Zusammenfassung
Die wesentlichen Komponenten von Rechenanlagen bzw. Computern (siehe Kap. 1.3) sind die Zentraleinheit (Central Processing Unit, CPU), der Speicher (Memory) für Programme und Daten, Peripheriegeräte sowie Busse zur Verbindung der Komponenten. Diese bestehen im Wesentlichen aus elektronischen Schaltungen mit komplexen integrierten Schaltkreisen (Chips) die ihrerseits aus Transistoren und weiteren Bauelementen aufgebaut sind.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 6. Rechnerarchitektur

Zusammenfassung
Computer sind im Wesentlichen aus den in Kap. 5 vorgestellten Einzelkomponenten aufgebaut. Abhängig vom Anwendungsgebiet gibt es verschiedene Faktoren, die den Entwurf der Hardware eines Computers beeinflussen: Stückpreis, die Rechenleistung (z. B. durchgeführte Befehle pro Sekunde), die Leistung der Ein- und Ausgabegeräte (Datenmenge pro Sekunde), die Zuverlässigkeit, der Stromverbrauch sowie die Abwärme. Diese Faktoren sind in den Anwendungsfeldern verschieden stark gewichtet. Exemplarisch werden hier mehrere Anwendungsfelder vorgestellt.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 7. Rechnernetze

Zusammenfassung
Rechnernetze sind allgegenwärtig: Jedes Smartphone ist meistens mit dem Internet verbunden. Die meisten Haushalte verfügen über ein eigenes WLAN, über das die Tablet-Computer, Fernseher und andere Unterhaltungselektronik untereinander und mit dem Internet kommunizieren. Zunehmend ist auch die Gebäudetechnik darüber erreichbar, beispielsweise die Beleuchtung, die Sicherheitstechnik oder die Regelung der Heizung. Zunehmend befindet sich jeder Haushaltsgegenstand im Internet-of-Things.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 8. Betriebssysteme

Zusammenfassung
Die Bedienung und Programmierung von Computern ist auf Maschinenebene unanschaulich und kompliziert. Insbesondere der Datenaustausch zwischen Speicher, Prozessor und Peripherie kann sich aufwendig gestalten. Letztlich müssen ja auch so profane Details programmiert werden, wie die Bewegung des Schreib-/Lesekopfes eines Festplatten-Laufwerks. Die Hauptaufgabe von Betriebssystemen (Operating Systems) ist die Verwaltung der Hardware-Betriebsmittel (CPU-Zeit, Hauptspeicher, Dateien, etc.) des Computers oder Smartphones sowie die Entlastung des Benutzers durch Übernahme von Standardfunktionen, beispielsweise zur Druckersteuerung, Datenspeicherung oder Tastaturabfrage.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 9. Höhere Programmiersprachen und C

Zusammenfassung
Das bei den ersten Computern erforderliche Programmieren in der binär codierten Maschinensprache des betreffenden Mikroprozessors war äußerst mühsam. Daher hat man schon bald gut merkbare Abkürzungen (mnemonische Codes) für die erforderlichen Operationen verwendet. So entstanden die in Kap. 5.5 erläuterten Assemblersprachen als die ersten maschinennahen Sprachen. Die Übertragung in ein lauffähiges Maschinenprogramm erfolgt durch ein als Assembler bezeichnetes Hilfsprogramm. Trotz der Einführung von frei wählbaren Namen, Makros und Unterprogrammen blieb die Programmierung sehr mühsam und zeitraubend. Die resultierenden Programme sind meist lang, unübersichtlich und für alle außer (vielleicht) den Autor schwer zu durchschauen. Das liegt daran, dass viele Sprachelemente spezifisch für die verwendete Maschine sind, aber mit dem gerade zu bearbeitenden Problem nichts zu tun haben und insofern vom Programmierer früher oder später als Ballast empfunden werden. Man hat daher schon bald nach der Einführung der ersten elektronischen Rechenanlagen ab ca. 1950 problemorientierte Sprachen entwickelt, die den Benutzer von rechnerspezifischen Details abschirmen. Diese Sprachen sind formalisiert, aber der menschlichen Denk- und Ausdrucksweise angepasst, beispielsweise durch enge Anlehnung an die Schreibweise mathematischer Formeln. Je nachdem wie weit diese Anpassung getrieben wird, spricht man gelegentlich von höheren oder niederen Sprachen.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 10. Objektorientierte Programmiersprachen und Java

Zusammenfassung
Mitte der 1960er Jahre begann die Entwicklung der ersten objektorientierten Sprache durch J. O. Dahl und K. Nygaard in Norwegen. Die entstandene Sprache Simula hatte das Ziel Simulationen programmieren zu können, z. B. von physikalischen Prozessen. Simula 67 war die erste auf verschiedenen Großrechnern verfügbare Version dieser Sprache.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 11. Automatentheorie und formale Sprachen

Zusammenfassung
Unter einem Automaten (automaton) stellt man sich eine Maschine vor, die ihr Verhalten bis zu einem gewissen Grade selbst steuert [Hop11]. Dies könnte beispielsweise ein Kaffeeautomat sein, der in Abhängigkeit von der Produktauswahl durch Drücken von Tasten das gewählte Getränk ausgibt oder auch eine Fehlermeldung, falls der Wasser- oder Kaffeevorrat ausgegangen ist. Für wissenschaftliche Anwendungen ist eine mathematische Präzisierung dieses Begriffs erforderlich.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 12. Algorithmen – Berechenbarkeit und Komplexität

Zusammenfassung
In den vorigen Kapiteln wurde gezeigt, dass die durch einen Computer zu bearbeitenden Aufgaben durch eine endliche Folge elementarer Anweisungen beschrieben werden müssen, und zwar letztlich in Maschinensprache. Eine solche Beschreibung, wie eine Aufgabe auszuführen ist, bezeichnet man als Algorithmus. Der Begriff Algorithmus leitet sich vom Namen des arabischen Gelehrten Al Chwarizmi ab, der um 820 lebte.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 13. Suchen und Sortieren

Zusammenfassung
Dieses Kapitel behandelt zwei der grundlegendsten Verfahren der Informatik, nämlich das Suchen und Sortieren von Daten. Zur Vertiefung wird auf die einschlägige Literatur verwiesen, z. B. [Knu98, Ott17, Sed11, Cor09, Sol17, Pom08, Wir00].
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 14. Datenstrukturen, Bäume und Graphen

Zusammenfassung
Seit sich die strukturierte Programmierung als Strategie bei der Software-Entwicklung durchzusetzen begann (Dijkstra und Hoare, ca. 1970), ging man daran, Programme nach mathematischen Grundsätzen zu analysieren. Im Vordergrund stand dabei zunächst die Struktur und Komplexität der durch Programme dargestellten Algorithmen. Da große und komplexe Programme aber oft auch große und komplexe Datenstrukturen beinhalten, wurde bald deutlich, dass die Methodik des Programmierens Algorithmen und Datenstrukturen gemeinsam betrachten muss.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 15. Software-Engineering

Zusammenfassung
Im Jahr 1997 schlug erstmalig ein Computer namens Deep Blue (IBM) einen amtierenden Schachweltmeister unter Turnierbedingungen [Dee]. Herr Kasparov hat eigentlich nicht gegen den Computer verloren. Er verlor gegen die vielen Ingenieure, welche die Schach-Software programmiert haben [Wei13]. Weigelt stellt mit diesem schönen Beispiel klar, dass hinter den vielen Systemen, die wir heute verwenden, letztlich Ingenieure stehen, welche in diese Systeme ihre willkürliche Sicht der Dinge mehr oder weniger gut programmiert haben.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 16. Datenbanken

Zusammenfassung
Daten sind wertvoll und langlebig: Die Daten über die Lebensversicherung oder den Telefonanschluss eines Kunden existieren eventuell über einen Zeitraum von mehr als 50 Jahren hinweg. Damit arbeitet eine heutige Software mit Daten, die z. B. im Jahre 1964 erfasst wurden. Keine Versicherung und kein Telekommunikationsunternehmen könnte es sich leisten, die Daten aller Kunden neu erfassen zu lassen. Sind die notwendigen Daten nicht verfügbar, kann die Versicherungs- oder Telekom-Software nicht oder nicht richtig funktionieren. Dieses Kapitel beschreibt, wie Daten über einen längeren Zeitraum hinweg sicher und konsistent gespeichert werden können. Dies geschieht heute in der Regel mithilfe von relationalen Datenbankmanagement-Systemen (DBMS). Möglich ist es natürlich nach wie vor, die Daten in einfachen Dateien abzulegen und diese mit einem selbst geschriebenen Programm zu lesen und zu schreiben.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 17. Anwendungsprogrammierung im Internet

Zusammenfassung
Benutzer von Internet-Anwendungen sind räumlich verteilt, teilweise weltweit. Daten dieser Systeme werden aber zentral an einer oder an wenigen Stellen verwaltet, auch um diese konsistent zu halten. Ein System, das dieses Zusammenspiel von verteilten Benutzern aber zentral verwalteten Daten unterstützt, ist ein Client-Server-System. Die Benutzer haben die verteilten Clients und greifen auf einen oder wenige zentrale Server zu. Typische Server sind die Server eines DBMS, Webserver oder Mailserver.
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Kapitel 18. Maschinelles Lernen: Deep Learning mit neuronalen Netzen

Zusammenfassung
Dieses Kapitel bietet eine kurze Einführung in das immer populärer werdende Gebiet des maschinellen Lernens, mit Fokus auf neuronalen Netzen. Maschinelles Lernen ist ein Teilgebiet der künstlichen Intelligenz (KI), das sich mit Algorithmen befasst, mit denen auf Basis von Beispielen (Trainingsdaten) erwünschtes Verhalten automatisiert vom System erlernt werden kann. Dies ist ein sehr weites Feld, weswegen hier nur auf Grundlagen eingegangen werden kann. Zur Vertiefung bietet sich einschlägige Literatur an: Ein Klassiker zur Einführung in die künstliche Intelligenz ist das Buch von Russel und Norvig [Rus10]. Neuere Entwicklungen im Bereich des maschinellen Lernens sind dort allerdings bisher nicht abgedeckt. Moderner ist [Ert16]. Ebenfalls breit aufgestellt, aber mit einem Schwerpunkt auf Anwendungen in Computerspielen ist [Mil19].
Hartmut Ernst, Jochen Schmidt, Gerd Beneken

Backmatter

Weitere Informationen

Premium Partner

    Bildnachweise