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.
Weshalb sollte man Programmieren nicht lernen können? Nicht erlernbar ist doch letztlich nur das, was man sich nicht erarbeiten kann, sondern „hat“, weil man dafür „geboren“ ist – oder eben nicht: Genie, Begabung, Talent. Das scheint mir gerade für den Bereich der Programmierung oder Webentwicklung doch eher fernliegend zu sein, und selbst im Bereich der Kunst kann man zumindest das zugrundeliegende Handwerk erlernen: damit wird man zwar vielleicht kein van Gogh oder Goethe, kann aber durchaus Gebrauchsgrafiken und -texte produzieren.
Fraglos wird nicht jeder ein guter „Programmierer“ ( im weiteren Sinne, der auch Webentwicklung, Softwaredesign pp. erfasst), und mancher es vielleicht auch nie, weil er die Konzepte einfach nicht erfasst – das gilt für Ärzte, Musiker, Schreiner, Juristen, Maler, Architekten oder Berufskraftfahrer aber letztlich in gleicher Weise.
Ich würde übrigens den Großteil des Beitrags unterschreiben wollen – nur scheint mir die in der Überschrift gestellte Frage nicht so recht zum Inhalt zu passen. :-)
„Alles in allem bin ich immer noch unsicher, ob man die Frage, ob man Programmieren lernen kann, mit Ja beantworten kann. “
Irgendwie kann ich nicht nachvollziehen, weshalb du bei der Beantwortung dieser Frage unschlüssig bist. Kannst du das vielleicht etwas näher erläutern?
Danke für euer Feedback! In der Tat sind da noch einige Fragen offen und ein paar Sachen nicht zu Ende gedacht.
Ich mache gewöhnlich auch eine Unterscheidung zwischen „Programmieren“ und „Entwickeln“. Programmieren ist dann eher das einfache Umsetzen von fertigen Konzepten. Bei klassischen Handwerksberufen ist so etwas vielleicht mit den Arbeiten zu vergleichen, die man einen Lehrling machen lassen würde: es wird alles genau geplant und vorgegeben und man muss „sein“ Handwerk nur noch anwenden.
Ich glaube schon, dass man solche Programmierarbeiten erlernen kann.
Die darüberhinaus gehenden Fähigkeiten kann man sicherlich versuchen zu lehren, ich bin mir aber eben unsicher, ob wirklich jeder diese Sachen lernen kann. Vielleicht kann man das mit dem Spielen eines Musikinstrumentes vergleichen: nicht jeder ist musikalisch, hat Taktgefühl und ähnliches und wird sich deshalb so schwer damit tun ein Musikinstrument wirklich zu beherrschen (und nicht nur einmal im Jahr ein Weihnachtslied vorspielen), dass er es aufgibt.
Das sind alles Vermutungen und sollen mich und andere Entwickler jetzt gar nicht mal als so besondere Menschen dastehen lassen. Wenn ich mir aber die Leute anschaue, mit denen ich zu tun hatte und die tatsächlich Programmierer/Entwickler werden wollten/sein wollten, ist da irgendwie eine sehr große Lücke zwischen dem, was sie fachlich angeboten haben und dem, was ich erwartet hätte.
An der Stelle kommt dann der ganze Einschau aus dem Blogpost, wie komplex die Webentwicklung heute doch geworden ist. Denn vielleicht ist es ja so, dass ich etwas erwartet habe, was realistisch gar nicht zu erfüllen ist von Leuten, die vielleicht gerade mal drei oder vier Jahre im Job sind und sich davor vielleicht ebenso lange in ihrer Freizeit mit Webentwicklung beschäftigt haben.
Ich erinnere mich noch gut daran, wie ich bei meinem BASIC-Lernkurs an „Dim“s also Arrays verzweifelt bin, weil ich das Konzept erst nicht verstanden habe. Und wie unstrukturiert ich mich angestellt habe, als ich dann ein Quiz-Spiel mit mehreren Fragen programmieren wollte. Ich weiß aber leider nicht mehr, wie meine weiteren Entwicklungsschritte dann aussahen um davon überzeugt zu sein, dass das wirklich jeder hätte lernen können, wenn er nur gewollt hätte.
Ich möchte nur gleichzeitig auch wissen, wie ich Kollegen bei der Weiterentwicklung helfen kann und was für Anforderungen ich realistischerweise an Bewerber stellen kann.
Vielleicht wird somit mein Gedankenwirrwarr etwas klarer, bzw. welche Gedankengänge sich hinter all dem Verbergen, was tatsächlich nicht in erster Linie mit der Frage zu tun hat, ob man Programmieren lernen kann.
Vor diesem Hintergrund, würde ich die Frage, ob man Programmieren (im Gegensatz zu Entwickeln) lernen kann, schon mit Ja beantworten, Daniel. Ob es aber wirklich ein Schulfach sein muss, da bin ich immer noch skeptisch.
Danke für deine Erläuterungen. Ich finde es interessant, wie du zwischen „Programmieren“ und „Entwickeln“ unterscheidest. Ich selbst mache zwar auch diesen Unterschied, doch für mich besteht der Unterschied darin, auf welcher Ebene Probleme gelöst werden: Ein Programmierer löst Probleme im Code, wohingegen ein Entwickler die Probleme auf einer abstrakteren Ebene (Stichwort UML) löst und die Lösungen dann auf den Code anwendet.
Was du beschreibst, ist für mich eher die Entwicklung auf dem Spektrum vom Anfänger zum Experten (resp. „Entwickler“ in diesem Fall). Und wie weit jemand auf diesem Spektrum kommt, hängt von verschiedenen Faktoren ab. Ein wichtiger Faktor ist sicher, wie stark das persönliche Stärken/Schwächen-Profil einerseits mit den Anforderungen des Programmierens/Entwickelns an sich korrespondiert, und andererseits mit dem Kontext (Lehrer, Programmiersprache, Fachgebiet, usw.). Von daher würde ich die Frage, ob jeder das „Entwickeln“ lernen kann, mit theoretisch ja, praktisch jedoch nein, beantworten.
Dieses Gefühl der Verzweiflung bzgl. der Arrays kenne ich, wobei es sich nicht aufs Programmieren beschränkt, ich kenne dieses Gefühl z.B. auch vom Lösen von Matheaufgaben, wo ich mich manchmal stundenlang mit einer Aufgabe beschäftigt habe. Ich denke, dies gehört einfach zum Lernprozess.
Bezüglich Programmieren in der Schule bin ich ein Befürworter. Jedoch nicht nur als eigenes Fach, sondern voll integriert in die anderen Fächer wie Mathe, Biologie, Zeichnen, Musik. Analog zum Lesen und Schreiben, Fähigkeiten, die ja auch in den meisten anderen Fächern gebraucht werden, aber ebenso noch separat, im Deutschunterricht, vertieft werden.