Datenfeldstudien

Dank des zärtlichen, solidarischen Drucks, den die Featurette neuerdings auf mich ausübt, sollte ich nicht allzu lange den nächsten Blogpost vor mir herschieben. (Vielen Dank nochmal, Kadda!)
Allerdings lässt sich das, was ich mitteilen möchte und zukünftig wohl auch werde eher schwer in die bisherigen Kategorien einordnen. Es ist viel geschehen, aber statt eure Reader mit 10 kleinen Posts zu füttern, arbeite ich jetzt einfach die Themen in einem Post ab.

Als Erstes der Leistungsnachweis, Freunde und Freundinnen der Leistungsgesellschaft! Wie steht es um C? Die letzten Kapitel, die ich durchgearbeitet habe handelten von Feldern, Zeichenketten (Kapitel 7 aus „C – Programmieren von Anfang an“, Erlenkötter) und Variablen und Konstanten (Kapitel 8).

Datenfelder

Durch Datenfelder (engl. arrays) lassen sich Variablen definieren, unter deren Namen mehrere Werte gespeichert sind. Zum Beispiel

double temperatur[31]

für die Temperaturwerte eines Monats. Ich kann natürlich auch für die Temperaturdurchschnittsformal august1+august2+august3…usw. schreiben, weil ich z.B. den August ganz besonders mag. Ich kann aber auch so ein Feld verwenden und mir und allen LeserInnen wertvolle Augustzeit schenken. Hier wurden 31 Plätze für Zeichen des Typs double reserviert. Allerdings rufe ich den Wert des 03. Augusts (Der Geburtstag von Martin Sheen, Martha Stewart und vermutlich vielen mehr) mit august[2] auf, da selbstverständlich die erste Indexnummer in C bei 0 beginnt.

Zeichenketten sind auch ein Datenfeld, allerdings vom Typ char und sie speichern Texte. Wenn ich im Programm die User dazu auffordere, ihr Lieblingswort einzugeben, kann ich mit der Funktion „gets“ den Satz in das Datenfeld einfügen. Das sieht dann bspw. so aus:

#include <stdio.h>
#include <string.h>                                                  /*(1)/

main()
{
        char wort[20];                                                /*(2)/   
        printf("\nGuten Morgen Tim, was ist dein Lieblingswort?\n");
        gets(wort);                                                  /*(3)/ 
        printf("\n%s", wort);                                        /*(4)/ 
}

(1) Die Datei string.h wird benötigt, sobald Funktionen zur Verarbeitung von Zeichenketten eingesetzt werden.
(2) Hier werden 20 Zeichen reserviert für den Text, der eingelesen werden soll. Wenn ich aber tatsächlich ein Wort mit 20 Zeichen eingeben möchte, z.B. „Amphetaminmissbrauch“, müsste ich 21 Zeichen reservieren, da ein Platz für die reserviert ist.
(3) Die Funktion gets liest den eingegebenen Satz und gibt in in das Datenfeld ein. Außerdem kümmert sie sich um die winkende Null.
(4) Unschwer zu erkennen, dass %s der Plathalter für die Zeichenketten, also „strings“ ist.

Das Zeichenfeld hat jetzt vier Zeichen gespeichert:

 0    1    2    3    4
 E    p    i    ḱ    "\ 0"

Das Programm gibt aber nur so viele Zeichen aus, bis es die binäre Null am Ende findet.
/‘ Dieses Beispiel beruht auf einer wahren Geschichte. /

Es gibt noch weitere Funktionen mit denen die Zeichenketten kopiert, verknüpft und verglichen werden können. Eine schöne Übersicht gibt es hier.

Variablen Vol. 9000

Im Achten Kapitel wird nochmal das Thema Variablen aufgegriffen. Die Grunddatentypen char, int, float und double können durch die Modifizierer unsigned, signed, short und long deklariert werden. Manchmal ist das notwendig, wenn die Datentypen für eine bestimmte Aufgabe zugeschnitten werden müssen.
Als Beispiel: Der Unterschied zwischen einem signed char und einem unsigned char liegt in den Bereichen von Minimalwert bis Maximalwert. Der Minimalwert von einem signed char liegt bei -128 und der Maximalwert bei 127. Bei einem unsigned char erstreckt sich die Bandbreite von 0 bis 255. Allerdings nimmt der Compiler standardmäßig an, dass die Typen vorzeichenbehaftet sind, deswegen reicht auch char ohne Modifizierer von -128 bis 127.

Weiterhin weist der Autor im Kapitel darauf hin, dass man bei der Bildung von geschweiften Klammern darauf achten muss, dass sie die Gültigkeit von Variablen einschränken. Wird eine Variabel innerhalb der Klammer definiert, so gilt diese Definition auch nur dort. Außerhalb muss sie erneut deklariert werden. Eine Variable, die nur innerhalb einer Funktion verwendet wird, und daher innerhalb der zugehörigen geschweiften Klammern deklariert wird, ist eine lokale Variable. Wird sie allerdings außerhalb der Funktion. bspw. ganz am Anfang des Programms definiert, so ist sie eine globale Variable und behält ihren Wert auch zwischen den Funktionsaufrufen bei.

Also lokal:

——————————-

function()
{
       int x;
       blablatudiestudas;
}

——————————

Und global:

—————————–

int x;
function()
{
       blablatudiestudas;
}

————————–

Wie weiter im Quelltext?

Sehr viel weiter bin ich noch nicht im Buch gekommen und habe damit etwa die Hälfte durchgearbeitet. Die nächsten Kapitel handeln vom Präprozessor, Pointern, Kommandozeilenparametern und davon, wie ich Dateien in C verwende. Die möchte ich gerne noch durchlesen, werde sie aber nicht ganz so gründlich durcharbeiten wie die vorherigen Kapitel. Dann ist es nach anderthalb Monaten Verspätung auch endlich Zeit für Python.

Es mag noch ein wenig verfrüht für ein Resümee sein, aber so richtig zufrieden bin ich nicht mit dem Ergebnis des C-Abschnitts meiner Programmier-Genese. Ich habe das Gefühl, zu wenig gelernt zu haben, um wirklich in C programmieren zu können. In den bisherigen Kapiteln konnte ich die meisten Übungsaufgaben recht schnell lösen. Aber im letzten Kapitel stand ich vor einer Wand, als ich versuchte, mir Programme zu überlegen, mit denen ich die eigentlich relativ leichten Aufgaben lösen könnte. Das war recht frustrierend und führte zu den üblichen Gedanken in Richtung „Ach, Programmieren und ich, naja“. Vielleicht wäre das anders verlaufen, wenn ich enger mit Plom und Erlehmann zusammengearbeitet hätte und ich mehr Fragen gestellt hätte, als mein Unwissen so im Raum stehen zu lassen.

Aber es gibt auch gute Gründe, weswegen Frustration eigentlich abwegig ist.
Zum Einen war das Programmieren in C auch nicht mein erklärtes Ziel. Meine Absicht war es nach wie vor, eher ein Gespür dafür zu bekommen, was C eigentlich ist.  Ich hoffe einfach, dass der nächste Abschnitt Python mir in demselben Maße leichter fallen wird, wie es C nach Assembler tat. Und dass ich nächstes Jahr mehr Zeit habe, um mein C-Wissen zu vertiefen. Aber ein wenig Zeit habe ich ja noch, um das C-Wissen bspw. in einer praktischen Anwendung zu vertiefen und zu überprüfen.

Speaking of „Zeit„. Ein weiterer Grund, weswegen es mir legitim vorkommt, mir die Defizite nachzusehen ist, dass ich in den vier Monaten nicht jeden Tag Programmieren konnte. Zwar hatte ich Semesterferien, aber die Programmier-Lerneinheiten waren immer etwas, was ich zwischen etliche andere Dinge schieben musste. Es war also weniger ein Freie-Zeit-Füllen, als eine Beschäftigung, für die anderen Dingen Zeit entzogen wurde.
Aber diese anderen Dinge waren nicht nur so computerlose Hobbys wie Band und Hausarbeiten, sondern auch die Lektüre von Büchern, die durchaus etwas mit Computer zu tun haben. Neben dem Buch „Theorien des Internets“ habe ich auch „Computerphilosophie“ begonnen. Und das ist etwas, was ich auch zuletzt bei einem Vortrag in der „Open Tech School“ angesprochen und betont habe – das Programmierenlernen hat nicht nur etwas mit dem Aneignen von spezifischer Syntax einer Programmiersprache zu tun. Es eröffnet auch den Zugang zu Themenkomplexen, die vorher wenig naheliegend und unangetastet blieben. Dadurch beschäftige ich mich plötzlich auch mit Netztechnologie, Netztheorie, Konzepten von Berechenbarkeit, Formaler Logik undundund… Dabei bleibt es nicht nur bei der Erkenntnis, dass es doch irgendwie notwendig ist, den ganzen Kram endlich mal zu verstehen, ich interessiere mich auch brennend dafür! Das hätte ich vor einem Jahr, als ich mit meinem Ethnologiestudium vor allem mit meinem Selbstverständnis als Fotografin begann, nicht gedacht…

Speaking of „Uni„. Mir graute es bis vor Kurzem noch ziemlich vor dem Beginn des Semesters. Nicht wenige Tage meiner Semesterferien begannen um 9 Uhr und endeten um Mitternacht, viele Absätze der Lektürenotizen später. Zwischendurch hörte ich Podcasts zur Netzpolitik, las Artikel auf Hacker News, diskutierte mit vielen tollen Menschen über das Programmierenlernen (naja, meistens läuft es doch darauf hinaus, dass ich besoffen den Assembler-Ansatz verteidigen muss) und bereitete Vorträge für ProgrammieranfängerInnen vor. Wie kriege ich das unter bei 22 Seminarstunden plus täglich ca. 4-8 Stunden Lektüre der Texte, Referate, etc.?
Aber der schöne Nebeneffekt des Ganzen ist, dass ich mich zumindest im Uni-Kontext nach und nach zu einer Expertin gemausert habe. Das sagt natürlich auch viel über mein Institut aus, aber es birgt für mich vor allem die Chance, auf das Vertrauen meiner DozentInnen zu setzen und ihre Unterstützung zu erhalten. Die Europäische Ethnologie als Gesellschaftswissenschaft, die sich vor allem mit der Alltagskultur auseinandersetzt, bietet eine Infrastruktur, die mir intellektuelle Grundlagen, Methoden und eine Plattform zur Kommunikation vermittelt, ohne dass ich dabei von meinen eigenen Interessen abrücken müsste. Gerade das Erlernen einer Kulturwissenschaft und die parallele Beschäftigung mit Themen aus der Informationswissenschaft schafft eine Schnittstelle, die m.E. viel zu selten hergestellt wird. Und mit dieser Meinung stehe ich sicher nicht alleine da.
Und es ist auch sicher die Stärke eines kleinen Instituts, wo auch Studierende mit Namen gegrüßt werden, dass ich ein Gespräch mit einem Dozenten führen kann, um mein Projekt, meine Interessen und meine Bedürfnisse an das Studium zu besprechen. Und im Endeffekt Zeit und Punkte für meine Arbeit an FLP aushandeln kann🙂 Was eine riesengroße Erleichterung ist. Denn es gibt doch einen großen Unterschied zwischen Zeit nehmen müssen oder Zeit haben. Ich werde also die nächsten Monate einen oder zwei Tage die Woche zur Verfügung haben um mich mit dem ganzen Kram zu beschäftigten, theoretisch und praktisch. Insofern werden die nächsten Blogposts öfter Mal abgesehen von Code auch theoretische Überlegungen beinhalten, wenn ein Text sich anbietet, entsprechend kontextualisiert zu werden. Das Buch „Technogene Nähe“, das ich als nächstes lesen werde, wird sicher noch ein paar Mal Erwähnung finden…

Bleibt zu erwähnen, dass heute der Ada-Lovelace-Day ist. Ada Lovelace gilt als die erste Programmiererin bzw. programmierende Person überhaupt. Wenn ihr es bis hier unten geschafft habt, schaut euch mal diese Seite an. Es geht um die Sichtbarkeit von Frauen in den MINT-Bereichen und damit um weibliche Vorbilder, die in Mathematik, Informatik, Naturwissenschaften und Technik tätig waren.
Soweit also der Stand. Coole Sache das Alles. Ich bin selber gespannt darauf, worin die Zusammenführung von Ethnologie und Programmieren fruchten kann. Und wie das wird, wenn ich auf diesem Blog in Zukunft auch mal als Ethnologin schreibe. An Gedanken mangelt es zumindest nicht.

%d Bloggern gefällt das: