Daten, Werte, Informationen

Wer sich an eine Programmiersprache heranwagt, tut gut zu wissen, womit er arbeitet. Wie in jedem Prozess gibt es beim Programmieren Rohmaterial, das mit geeigneten Werkzeugen zu einem gewünschten Ergebnis verarbeitet wird. Das Rohmaterial in der Informatik ist durch die Begriffe Daten, Werte und Informationen zu beschreiben. Jeder dieser Begriffe wird oft fälschlicherweise als Synonym für die anderen verwendet. Auf dieser Seite wird erklärt, was unter den Bezeichnungen zu verstehen ist, wie sie in einer Programmiersprache anzutreffen sind, und wie man in der Programmierung damit umgeht.

Bedeutung der Begriffe

Elektrischer Strom wurde lange Zeit als reinen Energielieferanten betrachtet: Er wird durch Generatoren erzeugt, durch Leitungen transportiert und in Widerständen wie Glühbirnen verbraucht. Dieses Konstrukt wird zusammengefasst unter dem Namen Elektrik. Im Gegensatz dazu behandelt die Elektronik die Nutzung einer messbaren Grösse des Stroms, beispielsweise die Stromstärke.

In einem Prozessor eines modernen Computers werden anhand der Stromstärke zwei Zustände definiert, bei denen entweder mehr oder weniger Strom als eine bestimmte Schwelle fliesst. Diese beiden Zustände Strom und Nicht-Strom definieren die Basiseinheit Bit eines modernen Computers, wobei die Zustände besser bekannt sind als 1 und 0. Durch eine Aufreihung mehrerer Bits entstehen kombinierte Zustände: Acht Bits zusammen ergeben ein Byte, womit 256 verschiedene Zustände möglich sind, mehr Bits ergeben dementsprechend mehr Zustände. Alles, was mittels eines Zustands dargestellt werden kann, nennt man Daten (im Singular: ein Datum).

Ein Prozessor weiss jedoch nicht, wie man die Daten zu handhaben hat. Ob das Datum 11001000 nun die positive Zahl 200 representiert oder die negative Zahl -56, hat für einen Prozessor keine Relevanz, er arbeitet stets mit reinen Daten. Zu Zeiten des Assemblers war es somit der Programmierer, der den Prozessor anweisen musste, welche Manipulationen er ausführen soll, damit die Daten korrekt verarbeitet werden (dazumal nannte man dies EDV = elektronische Datenverarbeitung). Bei C und C++ übernimmt diese Arbeit der Compiler, allerdings muss der Programmierer dem Compiler nebst den Daten mitteilen, wie sie strukturell zu interpretieren sind. Dies nennt man einen Wert: Daten mit einer strukturellen Interpretation. In C und C++ wird die strukturelle Intperpretation durch einen Typ festgelegt.

Der Code für einen Wert wird somit von einem Compiler aufgrund seines Typs je nachdem anders gesetzt. Da in C und C++ sämtliche Werte einen Typ zugewiesen bekommen, kann der Programmierer sich auf die Werte konzentrieren und muss sich keine Gedanken über deren Speicherung als Daten machen. Es obliegt jedoch nach wie vor dem Programmierer, die Werte korrekt miteinander in Verbindung zu setzen, ihnen eine Bedeutung zu geben. Die Zahl 200 könnte die Anzahl Elemente in einem Array darstellen oder die Zählvariable einer Schleife. Ein Wert mit einer Bedeutung nennt man eine Information. Der Umgang mit Informationen nennt man Informatik, oder auf Englisch Information-Technology (IT).

Daten

Von Daten spricht man in der modernen Informatik hauptsächlich, wenn es darum geht, Daten einzulesen oder auszugeben. Intuitiv hat sich in der Programmierung über die Jahre ein Verständnis entwickelt, dass Daten einen Fluss beschreiben, von der Eingabe über die Verarbeitung bis zur Ausgabe. Genauer gesagt bedeutet dies, dass Daten in einzelnen, hintereinandergehängten Modulen jeweils eingelesen werden, dann aufgrund dieser Daten ein bestimmter Code ausgeführt wird und danach (neue) Ergebnis-Daten ausgegeben werden, welche von dem darauffolgenden Modul wieder eingelesen werden, und so weiter und so fort.

Jede Software liest auf die eine oder andere Art Daten ein und gibt sie genauso auf die eine oder andere Art wieder aus. Dies kann beispielsweise mittels dem Auslesen und Schreiben einer Datei passieren, durch Abfrage der Tastatur oder auch durch Kommunikation mit dem Netzwerk. Ein Betriebssystem hat unter anderem die Aufgabe, für all diese Arten Ein- und Ausgabeschnittstellen bereitzustellen, was als Interface bezeichnet wird. Dem Programmierer wird schlussendlich eine abstrakte Ein- und Ausgabeschnittstelle präsentiert, welche auf die jeweils benötigte Art Daten einliest oder ausgibt, ohne dass der Programmierer sich darum kümmern muss. Er muss nur noch definieren, wie die Daten strukturiert sind und sie in verwendbare Werte umgewandelt werden können.

Werte

Sobald die Struktur von Daten bekannt ist, kann man mit ihnen arbeiten, mit den Werten rechnen. Hier erschliesst sich die wahre Bedeutung des Wortes Computer: To compute = rechnen. Ein Computer ist gemacht, um mathematische Berechnungen auszuführen. In C und C++ wird die Bearbeitung von Werten mittels Operatoren verwirklicht. Jeder Operator (beispielsweise eine Addition) nimmt eine bestimmte Anzahl an Eingabewerten (Parametern), führt eine Verarbeitung aus und gibt einen Wert zurück. Die Ausgabe dieser Berechnung ist wiederum ein Wert, also ein Datum mit Typ. Dies bedeutet, dass jeder Operator selbst wieder als Eingabewert fungieren kann.

Durch Hintereinanderreihung oder Verschachtelung von Operatoren können beliebig komplexe Programmteile entstehen. Ein solch komplexes Gebilde bildet somit eine funktionale Einheit, die aus Eingabeparametern eine Ausgabe erzeugt, die das gewünschtes Ergebnis representiert. Ein solches Konstrukt wird Funktion genannt. In C und C++ wird ein Funktionsaufruf selbst auch als Operator behandelt, denn auch eine Funktion nimmt Eingabewerte, führt eine (komplexe) Verarbeitung aus und gibt einen Wert zurück.

Informationen

Betrachtet man einen Computer nur als Werkzeug, das mathematische Funktionen ausführen kann, so würde man nicht nur sehr schnell die Lust verlieren, sondern auch bald an Grenzen stossen. Gibt man mathematischen Werten jedoch eine Bedeutung, so stehen unbegrenzte Möglichkeiten offen. Die Art und Weise, wie man Werte miteinander verknüpft, wie Funktionen zusammenspielen und was dabei als Ausgabe entsteht, entscheidet darüber, ob man beispielsweise ein Analyseprogramm geschrieben hat, ein Computerspiel oder eine Robotersteuerung.

Aufgrund der Bedeutung eines Wertes kann der Programmablauf gesteuert werden, was hier allgemein als Kontrollstruktur bezeichnet wird. Bedingungen und Schleifen weisen den Prozessor an, je nach Information einen Programmteil nicht oder mehrfach auszuführen. Um Werten eine Information zu geben, werden in der Programmierung zusammengehörige Werte als Informationseinheiten deklariert und Funktionen geschrieben, welche diese Einheiten aufgrund der spezifischen Bedeutung umwandeln. In der objektorientierten Programmierung mit C++ werden die Funktionen selbst sogar als Teil der Informationseinheit deklariert, was zusammen als eine Klasse bezeichnet wird und eine Informationseinheit als Objekt oder Instanz der Klasse.

Umgang mit Daten, Werten und Informationen

Daten können nur durch Wissen ihres Typs und ihrer Bedeutung in Werte und Informationen umgewandelt werden. Sobald man weiss, wie die Daten gegliedert sind, in welchem Format sie gespeichert sind (In-Formation), können Informationen ermittelt werden. Sehr häufig weiss man dies bei Daten jedoch nicht, somit könnte eine Datei Text enthalten, sie könnte aber auch ein Bild enthalten, vielleicht beschreibt die Datei sogar ein ausführbares Programm. Das Problem, dass man im Voraus nicht weiss, um was für Daten es sich handelt, beschäftigt seit jeher die Entwickler. Es gibt eine unüberblickbare Menge an Datenformaten und innerhalb eines Formates oftmals sehr viele Versionen.

Um sich in der Vielzahl der Datenspeicherung zurechtzufinden, wurden mit der Zeit einige Formate standartisiert. Das wichtigste Beispiel für einen Programmierer ist ASCII (American Standard Code for Information Interchange). ASCII wird oftmals als einfaches Text-Format gehalten, ist jedoch bis heute das einzige zum grössten Teil zuverlässige standartisierte Format. Vereinfacht gesagt ordnet ASCII jedem möglichen Zustand eines Bytes einen Buchstaben zu (genaueres kann man hier nachlesen). Erst durch die Definition einer solchen Interpretation eines Datums kann mit Werten gearbeitet werden.

Was genau ein Wert für eine Bedeutung hat, ist dem Programmierer überlassen. Dies bedeutet zum einen eine totale Freiheit, zum anderen jedoch wird dem Programmierer die Verantwortung übertragen, mit den Informationen so umzugehen, wie es gewünscht ist. Es gibt hierfür in C und C++ eine grosse Zahl an vorgefertigten Funktionen (in sogenannten Bibliotheken), welche alle einen ganz bestimmten Zweck erfüllen. Der Programmierer muss nun die passenden Funktionen finden und sie zu einem eigenen Programm zusammensetzen.