Monthly Archives: Oktober 2012

Linkliste 00000011

Die Uni hat begonnen, die Ferien sind vorbei. Aber das macht überhaupt nichts, da ich ja neuerdings vom Institut für’s Lauern in Studienpunkten bezahlt werde.

Heute wäre dann der erste Teil des Experiments “Selbststudium” und ich habe bereits mein Zimmer aufgeräumt, neue Namensschilder an der Tür angebracht, für meine Mitbewohnerinnen Musik hochgeladen und eine E-Mail nach London geschrieben. Ein voller Erfolg und eigentlich könnte ich jetzt auch mal Feierabend machen, aber als typische Berliner kreative Workalkoholikerin und mach jetzt nochmal die dritte Linkliste. Viel Spaß damit!

Bret Victor hat ein wirklich wunderbares Essay darüber geschrieben, wie eine Lernumgebung für’s Programmieren aussehen kann bzw. sollte. Er bewirbt hier zwei Prämissen, zum einen sollte eine Lernumgebung nicht etwa Routinen vermitteln sondern die Lernenden zu einer Denkweise befähigen, die sie selbstständig zu Lösungen finden lässt, zum Anderen müssen ProgrammiererInnen das was sie ausführen sehen und verstehen können:

  • Programming is a way of thinking, not a rote skill. Learning about “for” loops is not learning to program, any more than learning about pencils is learning to draw.
  • People understand what they can see. If a programmer cannot see what a program is doing, she can’t understand it.
Thus, the goals of a programming system should be:
  • to support and encourage powerful ways of thinking
  • to enable programmers to see and understand the execution of their programs

Der Artikel lohnt sich wirklich, sowohl für Programmierende als auch Programmierlehrende und -lernende. Vielleicht können die ein oder Anderen daraus ein paar Tips mitnehmen, worauf sie beim Lehren achten müssen und Lernende können darauf basierend womöglich besser ihren Lernprozess analysieren und verbessern.
Um mal zu visualisieren, was ihn nervt an weniger guten Programmierkursen, ein schönes Bild aus seinem Artikel:

Ein neuer Python Course in da house! Die zwei lächelnden Herren aus dem Video das ein wenig awkward ist, haben eine neue Lernumgebung entwickelt, die Browser-basiert ist. Dabei liegt der Fokus vor allem darauf, dass interaktiv gelernt wird. Was auch immer das heißen mag. Aber die Vorschau sah recht simpel und schlank aus und im Verlaufe des Kurses werden unter Anderem auch Spiele programmiert. Außerdem geht es dabei nicht darum, Expertenprogrammierer heranzuzüchten, sondern die Grundlagen von Python auf unterhaltsame Art und Weise zu vermitteln. Oder, wie Scotty im Video so schön sagt:

When you’ve finished our course, we can’t promise that you will be a professional programmer. But you’ll definetely know enough to be dangerous!

Ich hab das selber noch nicht ausprobiert, könnte das aber durchaus mal probieren die nächsten Wochen. Über Erfahrungsberichte in den Kommentaren freue ich mich sehr!

Ein recht interessanter Artikel über die redundanten Prozesse in der Lebensrealität von Programmierenden:

for me, programming builds an acutely negative mindset over time. I’m always asking the question “what’s wrong with this?”

Das erste Mal, das ich ein ernsthaftes und gut erklärtes “Mimimi” aus dieser Ecke höre. Und das meine ich durchaus positiv. Mehr Kommentare gibt es dazu auf Hacker News.

Ein Spiel! Ein richtig hübsches, niedliches sogar. Ich war aber selbstverständlich zu ungeduldig (ja, ich nenne es “ungeduldig”), um besonders weit zu kommen. Vim ist ein Editor, genauer ein Programm zur Textbearbeitung, das von vielen Programmierenden verwendet wird, um Programme zu schreiben.Mit “Vim Adventures” kannst du spielerisch die Bedienung von vim erlernen. Danach kannst du dir vim installieren und bist von nun an Teil der Jahrtausende alten EDITOR WARS, die schon viele interessante Diskussionen dahin gerafft haben. Du kannst dir aber auch “emacs” installieren. Ich sag das aber nur, um nicht parteiisch zu wirken. Ich nutze schließlich immer noch “nano”… Das ist so als würden alle anderen mit X-Wings und Laserschwertern kämpfen, ich aber nur mit Löffeln und einem Kettcar, damit es sich nicht mal lohnt, mich überhaupt anzufeinden.

Hier werde ich neuerdings gefeaturetted. Danke dafür! Auch wenn ich immer noch stark dafür bin, dass eine “Technik”-Rubrik eingeführt wird. Gerade wenn es darum geht, weibliche Vorbilder ins Rampenlicht zu rücken. Ich denke, die Notwendigkeit von öffentlich sichtbaren Frauen in den traditionell eher männlich besetzten Fächern liegt auf der Hand und wurde zuletzt durch den Ada-Lovelace-Day wieder ins Gedächtnis gerufen. Und mir fallen auf Anhieb ein paar Persönlichkeiten ein, die in der Technik-Rubrik gut aufgehoben wären. Also an guten Beispielen mangelt es definitiv nicht ;)

Ich wollte das ja selber schreiben. Muss ich aber nicht, gibt’s schon. Ich betone bei Vorträgen, hier im Blog und in Gesprächen immer wieder, dass es sich lohnt, sich mit IRC (Internet Relay Chat) auseinanderzusetzen. Nicht zuletzt, hust, um meinen Chat (##fionalerntprogrammieren) zu joinen. Wo im Übrigen AnfängerInnen sehr gerne gesehen sind. Ich bin dort allerdings meist abends und Mittwochs bis Freitags ganztags online bzw. anwesend.

Diesen Freitag allerdings nicht, ich tauche nämlich als Urlauberin getarnt mit einem in Berlin basierten Spion zu Recherchezwecken für ein paar Tage in London ab, wo sich das Institut für “Digital Anthropology” befindet. Der erste und bisher weltweit einzige Master in Anthropologie mit einem Fokus auf Digitale Medien, wo die Studierenden u.A. auch Programmieren und Fotografieren lernen. Das sind ja Dinge, die mich zufällig auch beschäftigen…Dort treffe ich die Koordinatorin des Instituts um sie auszufragen und bin sehr gespannt, wie die Schnittstellen zwischen Informations- und Geisteswissenschaft hergestellt und erfasst werden. Außerdem habe ich vor das Science Museum zu besuchen, in dem sich gerade – I shit you not – eine Dauerausstellung über Turing befindet. Ich werde berichten.

Bleibt zu sagen: Keine Panik. Auch du bist Turing-vollständig.
Bis dann.

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.

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 104 Followern an