Als Titel wollte ich erst Wie lernt man Programmieren? nehmen, wollte dann aber auch niemanden enttäuschen, der sich anhand des Titels eine konstruktive Antwort erwartet. Andererseits ist ja eh klar, dass jede Frage, die in einem Titel gestellt wird, mit Nein beantwortet werden kann. Entsprechend könnte ich den Beitrag an dieser Stelle auch beenden.
Tatsächlich bewegen mich diese Frage immer mal wieder, im Moment wieder mehr. Auslöser war ein Artikel, den ich irgendwo aufgeschnappt habe, oder besser nur die Überschrift, die auch als Frage formuliert war und ich mir deshalb das Lesen des Artikels sparen konnte: Programmieren als Schulfach?
Mit der Beantwortung bin ich mir wirklich unsicher: einerseits hatte ich Informatik in der Schule und dort wurden in den drei Jahren zwei Programmiersprachen gelehrt: Pascal und Logo. Andererseits habe ich beide Sprachen jeweils in der ersten Woche nach dem Schulstart durch Lesen der Bücher gelernt. Danach konnten mir die Lehrer in Sachen Programmieren nicht wirklich was beibringen.
Das war aber auch noch die Zeit, in der ein Mathematik und ein Chemie-/Erdkundelehrer den Informatikunterricht gemacht haben. Es war äußerst toll, damals schon mit Logo-Technik und selbstgebastelten Ampel-Steuerung herumzuprogrammieren. Man muss auch bedenken, dass das die Zeit von Apple IIgs in den Klassenzimmern war.
Ich wollte damit auch gar nicht die Schule kritisieren, als vielmehr hervorheben, dass nicht die Schule mich zum Programmieren gebracht hat, sondern meine eigene Neugierde. Ich weiß nicht, was aus mir geworden wäre, wenn ich den C-64 zu Weihnachten bekommen hätte, statt mir ein Vierteljahr später vom Kommuniongeld einen C-16 mit BASIC-Lernkurs zu kaufen. Beim C-16 war ich angewiesen, aus Zeitschriften Listings abzutippen, oder eben mit dem BASIC-Lernkurs selbst was auf die Beine zu stellen.
Das war alles sehr erbärmlich, ich hatte aber in den Jahren darauf noch sehr viel Zeit, mich weiter mit der Materie zu beschäftigen. Das Programmieren hat mich dabei nie losgelassen, auch wenn ich irgendwie nie wirklich etwas sinnvolles programmieren konnte/durfte/sollte. Das änderte sich erst, als ich für die Firma, in der meine Mutter arbeitete, in meiner Freizeit neben der Schule eine Verwaltung für Kundendaten programmiert habe. Ich glaube, das war damals in Turbo-Pascal auf meinem ersten PC, einem 286er.
Während des Studiums und den Nebenjobs dort wurde das ganze Wissen extrem vertieft. In den Vorlesungen in der Theorie und während der Nebenjobs und Uni-Praktika in der Praxis. Aber erst bei meinem ersten Job bei einer AdServer-Firma habe ich überhaupt mit der Webentwicklung angefangen. Damals noch ausschließlich im Backend und in C/C++.
Irgendwann wurde es dann PHP und nach vielen Jahren richtiges PHP mit Frameworks wie CakePHP und schließlich Symfony. Wenn wir nun vor der Aufgabe stehen, Junior-Webentwickler einzustellen, bin ich mir sehr unsicher, was ich erwarten soll und darf.
Es gibt viele, die schon mal irgendwas mit PHP gemacht haben, oder eben mit WordPress irgendwelche Sachen gebastelt haben. Mit Programmieren hat das aber selten was zu tun. Trotzdem sind die Ergebnisse weiter als alles, was ich zu Beginn meiner Programmiererkarriere auf die Beine gestellt habe. Irgendwie sind die Voraussetzungen ganz anders. Ich habe verschiedene Sortieralgorithmen implementiert und ihre Komplexität abgeschätzt. Datenstrukturen wie einfach- und doppelt-verkettete Listen implementiert und die Komplexität von Aktionen wie Löschen und Einfügen abgeschätzt. Und das alles möchte ich nicht missen!
In den Aufgaben eines Webentwicklers wird aber wohl niemand mehr in die Verlegenheit kommen, einen Sortieralgorithmus selbst zu implementieren, oder sich Gedanken darüber machen zu müssen, wie denn nun genau das Array in der Sprache implementiert wurde, die man gerade nutzt.
Andererseits stelle ich auch bei Leuten, die sich schon mehrere Jahre mit Webentwicklung herumschlagen, fest, dass einige grundlegende Funktionalitäten gar nicht richtig verstanden wurden. Wobei nicht verstanden wahrscheinlich zu harsch ist – sie mussten sich einfach bislang noch nicht damit beschäftigen, da die Werkzeuge, die sie benutzen, die Thematik so weit abstrahieren, dass die Grundlagen komplett versteckt werden.
Ein von mir beliebtes Beispiel sind dabei Cookies: wie werden sie gesetzt und gelesen. Was genau passiert da? Da wird bei vielen schnell klar, dass selbst das Konzept von Request und Response noch gar nicht wirklich verinnerlicht wurde. In den meisten Fällen ist das auch tatsächlich gar nicht notwendig, aber wenn plötzlich „seltsame“ Dinge passieren, oder ein Feature Teste, ob ein User Cookies erlaubt nach mehreren Iterationen des Codes einfach nicht einwandfrei funktionieren will, dann sind die Grundlagen gefragt.
Wie aber bringt man so etwas bei? Ich habe schon häufig mit dem Gedanken gespielt, einen „Programmierkurs“ zu veröffentlichen. Es scheitert in erster Linie daran, dass ich nicht weiß, wie man einerseits genügend Wissen vermittelt und andererseits schnell Fortschritte aufweisen kann, damit es für die Schüler nicht zu langweilig wird.
Fängt man erst einmal nur mit PHP an und begnügt sich wochenlang mit einer Ausgabe in der Konsole? (Und nein, ich will jetzt keine Diskussion anfangen, welche Sprache für Anfänger die geeignetste ist.) Oder fängt man mit einem Framework wie Symfony an und zeigt parallel wie man mit Datenbanken arbeitet und zeigt die ersten Schritte in HTML, sowie HTTP, weil man ja direkt Ergebnisse im Browser sehen möchte?
Beides hat irgendwie seine Berechtigung: ich hätte Bauchschmerzen, jemanden nur Symfony beizubringen, ohne ihm/ihr beizubringen, was da genau in der Datenbank passiert und was der ganze Code bewirkt, der dort benutzt wird.
Allerdings hat es heutzutage ein PHP-Profi schwer, wenn er nicht auch weiß, wie Frameworks funktionieren und wie man damit recht schnell Webanwendungen erstellt. Ein reiner PHP-Profi wird wahrscheinlich erst einmal sein eigenes Framework implementieren – was aber wahrscheinlich genau der richtige Ansatz ist!
Genauso, wie man auf der Kunstakademie auch erst einmal lernen muss, wie man perspektivisch zeichnet und wie man Licht und Schatten richtig einsetzt, bevor man sich dann irgendwann mit abstrakter Kunst beschäftigt, genauso kann man die Vorteile eines PHP-Frameworks erst zu schätzen lernen, wenn man selbst an eigenen HTML-Seiten mit PHP-Code dazwischen verzweifelt ist.
Programmieren ist unglaublich komplex und auch wenn ich in den letzten 31 Jahren nicht jeden Tag oder jede Woche etwas dazu gelernt habe, dann aber doch mindestens jedes Jahr. Und diese Erfahrung können angehende Entwickler von heute gar nicht so schnell aufholen. Bei all den neuen Anforderungen müssen einfach irgendwelche Sachen auf der Strecke bleiben.
Deshalb sind die besten Programmierer solche, die die Demut mitbringen, dass sie nur an der Oberfläche kratzen. Ich kratze an vielen Stellen auch nur an der Oberfläche und lerne auch jetzt immer noch neue Sachen kennen, mit denen ich mich vorher noch nie beschäftigt hatte. Neben der Demut ist also auf jeden Fall auch noch Neugierde eine wichtige Eigenschaft. Den Rest kann man sich dann aneignen.
Alles in allem bin ich immer noch unsicher, ob man die Frage, ob man Programmieren lernen kann, mit Ja beantworten kann. Und ob es Sinn macht, das Fach in der Schule anzubieten. Vielleicht, um die wirklich demütigen und neugierigen potentiellen jungen Programmierer überhaupt mit der Materie vertraut zu machen. Ich glaube aber nicht, dass Programmieren so wichtig ist wie Mathematik, Lesen und Schreiben, oder Geschichte.