Head of Storytelling, NZZ

Als Journalist programmieren lernen – eine Bilanz (und vielleicht eine Anleitung)

December 28, 2012 (updated on December 31, 2014)

#CodeYear

Read this article in English

Das Jahr ist zu Ende und mein #CodeYear-Fortschrittsbalken steht bei 100%. Ich kann nun, an Journalisten-Massstäben gemessen, programmieren. An Programmierer-Massstäben gemessen kann ich: nichts. Dieser Blick auf den grossen Kontext ist wichtig, aber keineswegs entmutigend. Im Gegenteil.

Ziel meines Projekts war nicht, mich anschliessend bei Facebook als Programmierer zu bewerben. Sondern meinen Erfahrungshorizont als Journalist zu erweitern, neue Möglichkeiten zu erschliessen und schlicht auch: mal wieder etwas ganz Neues zu lernen. Darum kann ich ohne zu zögern bilanzieren: Es hat sich gelohnt. Programmieren zu lernen ist bereichernd, ich empfehle es weiter. Gleichzeitig hat sich im Laufe des Projekts meine Antwort auf die Frage, ob Journalisten programmieren können sollten, verfeinert. Dazu aber später mehr.

Dieser Beitrag soll dokumentieren, wie mein «Programmier-Jahr» verlaufen ist, Schwierigkeiten aufzeigen, zentrale Erkenntnisse festhalten – und hoffentlich auf andere Journalistinnen und Journalisten motivierend wirken, es auch zu versuchen.

Das Projekt

Am 8. August 2011 habe ich öffentlich angekündigt, dass ich zu programmieren lernen werde. Meine Voraussetzungen: Ganz passable Kenntnisse im Umgang mit HTML und CSS und ein Faible für Mathematik und Logik (wer sich schon hier nicht mehr angesprochen fühlt: entscheidend waren diese Voraussetzungen nicht). Mit zwei Hauptproblemen war ich konfrontiert.

  1. Welches ist (für mich), der beste Weg, um einzusteigen?
  2. Was ist eigentlich mein Ziel?

Das Internet bietet heute Einsteigern nicht zu wenige, sondern zu viele verschiedene Möglichkeiten. Ich habe einige Tutorials gelesen, mir das Standardwerk «Java Script: The Definitive Guide» bestellt und einige Dutzend Videokurse von Treehouse absolviert. Nichts davon hat mir richtig zugesagt. Das Buch war zu abstrakt und zu kompliziert für einen absoluten Einsteiger, bei den Kursen von Treehouse hatte ich schnell das Gefühl, sie zu bestehen, obwohl nicht nicht alles wirklich verstanden habe. Abgesehen davon fehlte mir nach wie vor das fassbare Ziel.

Beide Probleme lösten sich schliesslich Ende 2011, als die Online-Lernplattform Codecademy das #CodeYear lancierte. Ich hatte nun ein Ziel (von dem ich zwar nicht genau wusste, wie es aussah, aber darauf vertrauen konnte, dass jemand sich etwas dabei überlegt hatte), eine klare Struktur (wöchentliche Lektionen) und die Hoffnung, nicht alleine da durch zu müssen (ja, ich schaue euch alle an, die ihr zum Jahreswechsel getweetet habt, ihr würdet beim #CodeYear mitmachen).

Learning 1: Setze dir ein Ziel und sprich immer wieder darüber. Den Druck wirst du gebrauchen können.

Der Einstieg ins #CodeYear

Programmieren zu lernen ist in vielerlei Hinsicht ähnlich wie eine neue Sprache zu lernen (was nicht erstaunlich ist: JavaScript, Python und Co. sind ja nichts anderes als Sprachen, um mit Computern zu kommunizieren). Entsprechend euphorisierend ist der Einstieg. Kaum losgelegt, kann man schon «Guten Tag» sagen console.log(“Hello World!”), auf Drei zählen 0,1,2 und sich ein Bier einschenken beer.full = true;

Codecademy gestaltet den Einstieg leicht und unterhaltsam. Man liest kurze Anleitungen und schreibt dann direkt Code in einen Editor. Schritt für Schritt wird man in diese neue Welt hineingeführt und hat gleichzeitig das Gefühl, bereits mittendrin zu sein (weil man eben nicht liest oder Videos schaut, sondern selber Zeile um Zeile programmiert).

Jeder Kurs ist in drei bis sechs Abschnitte unterteilt, diese wiederum in vier bis acht Programmierschritte. Die einzelnen Schritte sind klein genug, um nicht überfordert zu werden, in der Summe hat man aber jede Woche was Ordentliches programmiert, das sich nach Fortschritt anfühlt (die virtuellen Badges, die man sich verdient, tun ihren Teil dazu). Und es hat den für Berufstätige nicht zu unterschätzenden Vorteil, dass man jederzeit aussteigen und wieder einsteigen kann.

Learning 2: Als Lernplattform empfehle ich Codecademy. Im Januar startet das CodeYear 2013. Ein idealer Zeitpunkt, um einzusteigen.

Und dann nervt es unglaublich

Man sieht es meinen Badges an: Ende Januar habe ich aufgegeben. Das hatte einerseits damit zu tun, dass es sehr viel Disziplin braucht, sich neben 100% Arbeit noch zwei bis drei Stunden pro Woche freizuschaufeln, um am Computer Zeilen mit kryptischer Sprache zu füllen.

Es hatte aber noch mehr damit zu tun, dass sich das Erlernen einer Programmiersprache in einem Punkt wesentlich vom Lernen einer anderen Fremdsprache unterscheidet: Computer sind als Gegenüber verdammt unflexibel und erbarmungslos. Es reicht, eine }-Klammer am falschen Ort zu schliessen oder ein Semikolon zu vergessen, und die Kommunikation hakt.

Die ersten Wochen nach der ersten Euphorie sind darum nach meiner Erfahrung eine fiese Geduldsprobe. Die gefühlten Fortschritte sind minim, der Frust über bis auf ein Zeichen perfekt geschriebenen Code, der dann nicht funktioniert, riesig. Als würde man in einer Fremdsprache einen kompletten Dreigänger inklusive Getränke bestellen und der Kellner sagt «Nichts verstanden», bloss weil man den Namen des Weinguts falsch ausgesprochen hat (wenn ich’s mir so überlege, ist ein Kurzurlaub in Frankreich vielleicht eine gute Vorbereitung für das #CodeYear).

Learning 3: Die Wochen nach der Anfangseuphorie sind verdammt hart. Der Spass kommt aber wieder zurück.

Der zweite Anlauf

Ich brauchte bis im Juli, um mich wieder an die Sache heranzumachen. Hätte ich gewusst, dass der Einstieg deutlich leichter fällt und dass es nachher sehr schnell sehr viel besser wird, hätte ich nicht so lange gewartet. Ein paar Wochen Pause halte ich aber auch rückblickend nicht für verkehrt. Es hilft, die Grundprinzipien mit Variablen, Parametern, Funktionen und – ja, Satzzeichen – einsickern zu lassen. Und neue Frustrationstoleranz aufzubauen.

Beim Wiedereinstieg habe ich festgestellt, dass nicht nur vieles, was ich Anfang Jahr gelernt hatte, hängen geblieben war. Mehr noch, ich sah plötzlich vieles klarer, so dass ich in den kommenden Wochen sehr rasch voran kam.

Learning 4: Gönne dir nach dem ersten Scheitern ein paar Wochen Pause.

Github

Es war in erster Linie ein ironisches Statement, als ich mir im Juli einen Account bei Github (eine Art Social Network und Kollaborationsplattform für Programmierer) angelegt habe. Nach wie vor steht dort in meiner Beschreibung: «Journalist. Programming Toddler.»

Was ich mir tatsächlich von Github versprach: ein wenig ein Gespür für diese Community zu bekommen, die unsere ganze digitale Welt zum Laufen (und gelegentlich zum Abstürzen bringt) und die mit viel Engagement an Programmen arbeitet, die für den journalistische Arbeit wertvoll sind (siehe meine Sammlung auf Quora).

Wie sehr ich in den Monaten danach von Github und seiner Community würde profitieren können, ahnte ich jedoch nicht im Geringsten.

Learning 5: Lege dir ein Konto bei Github an. Und sei’s zunächst nur aus Selbstironie.

Das erste eigene Projekt

Am 7. Oktober hiess die Wochenaufgabe bei Codecademy: Programmiere dein erstes eigenes Projekt. Bisher war man Woche für Woche in kleinen Einzelschritten zu einem Endprodukt geleitet worden. Und nun war da ein leerer Editor und keine Anweisung, ausser: mach mal! Da war sie wieder, die Herausforderung, selber ein Ziel zu definieren. Bloss, dass es mir diesmal deutlich leichter fiel, dank einem klareren Verständnis davon, was Programmierung ist und was (mir) möglich ist. So entstand mein erstes selber programmiertes Tool, ein simpler Wordcounter.

Das erste Projekt ist eine Belohnung. Und eine Zäsur. Es fällt danach schwerer, sich wieder in die vorgegebenen Kursprogramme zu knien. Gleichzeitig weckt es die Lust, weitere, grössere Projekte in Angriff zu nehmen – mit der Gefahr, sich zu übernehmen. Ich habe beides gemacht: weiter brav Kurse durchgeackert und mir Projekte ausgedacht, die eigentlich nicht in meiner Liga waren.

Learning 6: Packe dein erstes eigenes Projekt an, sobald du das Gefühl hast, ein gewisses Mass an Kreativität einbringen zu können.

Ein Mentor IRL

Es gab im Verlauf des Jahres immer wieder Momente, in denen ich sehr froh war, jemanden zu haben,  der mir im direkten Gespräch Dinge erklären konnte, jemanden, dem ich viele dumme Fragen stellen konnte. Hannes Gassert hat sich glücklicherweise früh für meinen Effort, programmieren zu lernen, interessiert und mir wann immer nötig bereitwillig geholfen (du hast eine Flasche Wein bei mir gut). Er war es, der mir den lokalen Server auf dem Mac eingerichtet hat, der mir erklärt hat, wie Commits und Pull Requests auf Github funktionieren, und der mir Feedback zum (anfänglich natürlich fehlerhaften) Code für meinen Wordcounter gab.

Learning 7: Suche dir einen Programmierer, den du persönlich um Hilfe fragen kannst, wenn du nicht mehr weiter wisst.

Weitere Projekte und die entscheidende neue Dimension

Das erwähnte Projekt, bei dem ich mich (durchaus bewusst) übernommen habe, war Famous First Tweets. Ein einfaches Formular, um den ersten Tweet eines beliebigen Nutzers zu finden. Nichts, dass es nicht schon geben würde, aber etwas, um den Umfang mit Formularen weiter zu üben und um neu auch mit einer API zu arbeiten (inzwischen funktioniert Famous First Tweets nicht mehr, da Twitter mit seiner API restriktiver geworden).

Es war rückblickend das Projekt, bei dem ich realisiert habe, dass das etwas wird mit dem Programmieren. Vieles kam zusammen, was für das erfolgreiche Entwickeln von Code-Projekten wichtig ist:

  • Ich war in der Lage, die für das Gesamtprojekt notwendigen Einzelteile, d.h. Funktionen zu identifizieren
  • Ich war in der Lage, diese Funktionen zu skizzieren
  • Ich war in der Lage, das Projekt als Repository bei Github hochzuladen und so Kollaboration zu ermöglichen
  • Ich kannte die nötigen Schlüsselbegriffe, um nach Codebausteinen im Netz zu suchen
  • Ich verstand bestehende Codebausteine gut genug, um sie in mein Projekt einzubauen

Dass das Tool «Famous First Tweets» nun tatsächlich funktioniert, ist diesen Faktoren zu verdanken – und der Tatsache, dass ein mir davor nicht bekannter britischer Programmierer (thanks, Matt!) via Github jene Bausteine zum Tool beigesteuert hat, die mir zu kompliziert waren.

Seitdem sind weitere Projekte hinzugekommen, die ich alle unter labs.davidbauer.ch sammle. Die genannten Faktoren haben bei all diesen Projekten eine wesentliche Rolle gespielt (man muss die Programmier-Welt nicht neu erfinden, schon gar nicht, wenn auf sich auf diesem Niveau bewegt).

Learning 8: Irgendwann kommt alles zusammen. Ab dann ist vieles möglich.

Was ich anders machen würde

  • Mit Python statt mit JavaScript anfangen. Die Syntax von Python ist intuitiver.
  • Keine fünfmonatige Pause einlegen und früher mit eigenen Projekten anfangen.
  • Mir weniger Sorgen darüber machen, ob die Beispiele nun etwas mit Journalismus zu tun haben.
Learning 9: Verkrampfe dich nicht auf den journalistischen Nutzen. Der erschliesst sich früh genug.

Also, sollten Journalisten programmieren können?

Die Antwort ist Nein. Aber kein Nein im Sinne davon, dass Programmieren nicht etwas ist, was Journalisten tun sollten. Ein Nein, genauso wie nicht alle Journalisten gute Reportagen schreiben können müssen, wie nicht alle Journalisten eine gute Radiostimme haben müssen oder wie nicht alle Journalisten fotografieren können müssen.

Journalismus ist ein weites Feld und die verschiedenen Journalistinnen und Journalisten zeichnen sich je durch eine einzigartige Kombination von Fähigkeiten aus. Die Fähigkeit, zu programmieren, wird dabei zunehmend an Bedeutung gewinnen.

Mein eigener Blickwinkel darauf hat sich insofern etwas verändert, als ich inzwischen weniger direkt als Journalist arbeite, sondern Konzepte und Strategien entwickle, um Journalismus im digitalen Kontext bestmöglich zur Entfaltung zu bringen. Dabei zeigt sich immer deutlicher: (Platt)Form und Inhalt lassen sich nicht mehr isoliert voneinander betrachten, gute Geschichten fügen sich nicht einfach in ein vorhandenes System ein, sondern loten die Möglichkeiten der Technik aus.

Wer programmieren kann, ist dabei im Vorteil. Es geht dabei gar nicht darum, dass Journalisten plötzlich ihre Zeit mit Programmieren verbringen sollen. Wenn es ernst gilt, sind sowieso echte Programmierer gefragt. Aber wer ihre Sprache versteht, dem erschliesst sich eine zusätzliche Dimension an Kreativität, die ins Endprodukt einfliessen kann. Er hat eine Vorstellung davon, was theoretisch möglich ist und verfügt über das Vokabular, um mit Programmierern darüber zu sprechen. Und ja, das eine oder andere kleine Tool kann er vielleicht tatsächlich selber entwickeln – weil nicht in jeder Redaktion ein Programmierer sitzt oder dieser sicher nicht immer verfügbar ist.

Learning 10: Programmierkenntnisse sind ein Alleinstellungsmerkmal für Journalisten und ermöglichen es, über bestehende Formate hinaus zu denken.

Die Tools, die ich nutze

  • Codecademy: Zum Lernen
  • Github: Zum Beobachten und um Hilfe bei meinen Projekten zu erhalten
  • Coda2: Zum Schreiben von Code (Update 2014: inzwischen lieber Sublime)
  • Bootstrap: Zum raschen Aufziehen neuer Seiten
  • Mozilla Developer Network: Um Nachzuschauen, was ich ständig vergesse
  • Twitter: Zum Teilen von Projekten und um Inputs und Feedback zu erhalten
  • Google: Zum Suchen nach Codebausteinen und Antworten auf all die 1000 Fragen, die ich noch habe

Lektüreempfehlungen

These are great times for journalism. This is how I work:

Words

I grew up as a journalist of words. It remains one of my favourite means to tell stories. Chosen wisely, put in the correct order and structured well, words are as powerful as ever.

Code

When we build applications, when we report and present stories in novel ways, code is what drives them. Speak the language of computers, make them work for you.

LabsHow I Learnt to Code

Data

Call it data journalism, if you will. Numbers and data in general are a wonderful raw material to work with. I dig for stories and tell them in visually compelling ways.

Weekly Filet

The Weekly Filet is a compilation of the best pieces found on the web. Intriguing articles, stunning photographs, telling visualisations, excellent songs, smart videos. 5 recommended links, every Friday, free home-delivery.

Weeklyfilet.comWeekly Filet on Flipboard

Instacurate

Turn your Twitter timeline into a personalised news site, in an instant.

Try it nowInstacurate for Reddit

Dystopia Tracker

Explore predictions about the future and their realisations.

Open Dystopia Tracker

I write about technology and its effects on humans, markets and society.

My book, KurzbefehlReferat buchen

Portfolio

My work has appeared in The Guardian, Quartz, Spiegel Online, Das Magazin, Tages-Anzeiger, SonntagsZeitung, TagesWoche, among others.

Showcase | Show all

Get in touch

hello@davidbauer.ch

Find me on the web

Where to meet me in person

Usually Zürich
Regularly Basel