{"id":3042,"date":"2017-01-09T21:36:01","date_gmt":"2017-01-09T20:36:01","guid":{"rendered":"http:\/\/olbertz.de\/blog\/?p=3042"},"modified":"2017-01-09T21:36:01","modified_gmt":"2017-01-09T20:36:01","slug":"kann-man-programmieren-lernen","status":"publish","type":"post","link":"https:\/\/olbertz.de\/blog\/2017\/01\/09\/kann-man-programmieren-lernen\/","title":{"rendered":"Kann man Programmieren lernen?"},"content":{"rendered":"<p>\nAls Titel wollte ich erst <em>Wie lernt man Programmieren?<\/em> nehmen, wollte dann aber auch niemanden entt&#228;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 <em>Nein<\/em> beantwortet werden kann. Entsprechend k&#246;nnte ich den Beitrag an dieser Stelle auch beenden.\n<\/p>\n<p>\nTats&#228;chlich bewegen mich diese Frage immer mal wieder, im Moment wieder mehr. Ausl&#246;ser war ein Artikel, den ich irgendwo aufgeschnappt habe, oder besser nur die &#220;berschrift, die auch als Frage formuliert war und ich mir deshalb das Lesen des Artikels sparen konnte: <em>Programmieren als Schulfach?<\/em>\n<\/p>\n<p>\nMit 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&#252;cher gelernt. Danach konnten mir die Lehrer in Sachen Programmieren nicht wirklich was beibringen.\n<\/p>\n<p>\nDas war aber auch noch die Zeit, in der ein Mathematik und ein Chemie-\/Erdkundelehrer den Informatikunterricht gemacht haben. Es war &#228;u&#223;erst toll, damals schon mit Logo-Technik und selbstgebastelten Ampel-Steuerung herumzuprogrammieren. Man muss auch bedenken, dass das die Zeit von <a href=\"https:\/\/de.wikipedia.org\/wiki\/Apple_IIgs\">Apple IIgs<\/a> in den Klassenzimmern war.\n<\/p>\n<p>\nIch 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&#223; nicht, was aus mir geworden w&#228;re, wenn ich den C-64 zu Weihnachten bekommen h&#228;tte, statt mir ein Vierteljahr sp&#228;ter vom Kommuniongeld einen <a href=\"http:\/\/olbertz.de\/blog\/2008\/12\/18\/23-jahre-computererfahrung\/\">C-16 mit BASIC-Lernkurs<\/a> 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.\n<\/p>\n<p>\nDas war alles sehr erb&#228;rmlich, ich hatte aber in den Jahren darauf noch sehr viel Zeit, mich weiter mit der Materie zu besch&#228;ftigen. Das Programmieren hat mich dabei nie losgelassen, auch wenn ich irgendwie nie wirklich etwas sinnvolles programmieren konnte\/durfte\/sollte. Das &#228;nderte sich erst, als ich f&#252;r die Firma, in der meine Mutter arbeitete, in meiner Freizeit neben der Schule eine Verwaltung f&#252;r Kundendaten programmiert habe. Ich glaube, das war damals in Turbo-Pascal auf meinem ersten PC, einem 286er.\n<\/p>\n<p>\nW&#228;hrend des Studiums und den Nebenjobs dort wurde das ganze Wissen extrem vertieft. In den Vorlesungen in der Theorie und w&#228;hrend der Nebenjobs und Uni-Praktika in der Praxis. Aber erst bei meinem ersten Job bei einer AdServer-Firma habe ich &#252;berhaupt mit der Webentwicklung angefangen. Damals noch ausschlie&#223;lich im Backend und in C\/C++.\n<\/p>\n<p>\nIrgendwann wurde es dann PHP und nach vielen Jahren <em>richtiges<\/em> PHP mit Frameworks wie CakePHP und schlie&#223;lich Symfony. Wenn wir nun vor der Aufgabe stehen, <a href=\"https:\/\/pooliestudios.com\/jobs\/junior-webentwickler\/\">Junior-Webentwickler<\/a> einzustellen, bin ich mir sehr unsicher, was ich erwarten soll und darf.\n<\/p>\n<p>\nEs gibt viele, die schon mal <em>irgendwas mit PHP<\/em> 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&#228;t abgesch&#228;tzt. Datenstrukturen wie einfach- und doppelt-verkettete Listen implementiert und die Komplexit&#228;t von Aktionen wie L&#246;schen und Einf&#252;gen abgesch&#228;tzt. Und das alles m&#246;chte ich nicht missen!\n<\/p>\n<p>\nIn den Aufgaben eines Webentwicklers wird aber wohl niemand mehr in die Verlegenheit kommen, einen Sortieralgorithmus selbst zu implementieren, oder sich Gedanken dar&#252;ber machen zu m&#252;ssen, wie denn nun genau das Array in der Sprache implementiert wurde, die man gerade nutzt.\n<\/p>\n<p>\nAndererseits stelle ich auch bei Leuten, die sich schon mehrere Jahre mit Webentwicklung herumschlagen, fest, dass einige grundlegende Funktionalit&#228;ten gar nicht richtig verstanden wurden. Wobei <em>nicht verstanden<\/em> wahrscheinlich zu harsch ist &#8211; sie mussten sich einfach bislang noch nicht damit besch&#228;ftigen, da die Werkzeuge, die sie benutzen, die Thematik so weit abstrahieren, dass die Grundlagen komplett versteckt werden.\n<\/p>\n<p>\nEin 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&#228;llen ist das auch tats&#228;chlich gar nicht notwendig, aber wenn pl&#246;tzlich &#8222;seltsame&#8220; Dinge passieren, oder ein Feature <em>Teste, ob ein User Cookies erlaubt<\/em> nach mehreren Iterationen des Codes einfach nicht einwandfrei funktionieren will, dann sind die Grundlagen gefragt.\n<\/p>\n<p>\nWie aber bringt man so etwas bei? Ich habe schon h&#228;ufig mit dem Gedanken gespielt, einen &#8222;Programmierkurs&#8220; zu ver&#246;ffentlichen. Es scheitert in erster Linie daran, dass ich nicht wei&#223;, wie man einerseits gen&#252;gend Wissen vermittelt und andererseits schnell Fortschritte aufweisen kann, damit es f&#252;r die Sch&#252;ler nicht zu langweilig wird.\n<\/p>\n<p>\nF&#228;ngt man erst einmal nur mit PHP an und begn&#252;gt sich wochenlang mit einer Ausgabe in der Konsole? (Und nein, ich will jetzt keine Diskussion anfangen, welche Sprache f&#252;r Anf&#228;nger die geeignetste ist.) Oder f&#228;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&#246;chte?\n<\/p>\n<p>\nBeides hat irgendwie seine Berechtigung: ich h&#228;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.\n<\/p>\n<p>\nAllerdings hat es heutzutage ein PHP-Profi schwer, wenn er nicht auch wei&#223;, wie Frameworks funktionieren und wie man damit recht schnell Webanwendungen erstellt. Ein reiner PHP-Profi wird wahrscheinlich erst einmal sein eigenes Framework implementieren &#8211; was aber wahrscheinlich genau der richtige Ansatz ist!\n<\/p>\n<p>\nGenauso, 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&#228;ftigt, genauso kann man die Vorteile eines PHP-Frameworks erst zu sch&#228;tzen lernen, wenn man selbst an eigenen HTML-Seiten mit PHP-Code dazwischen verzweifelt ist.\n<\/p>\n<p>\nProgrammieren 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&#246;nnen angehende Entwickler von heute gar nicht so schnell aufholen. Bei all den neuen Anforderungen m&#252;ssen einfach irgendwelche Sachen auf der Strecke bleiben.\n<\/p>\n<p>\nDeshalb sind die besten Programmierer solche, die die Demut mitbringen, dass sie nur an der Oberfl&#228;che kratzen. Ich kratze an vielen Stellen auch nur an der Oberfl&#228;che und lerne auch jetzt immer noch neue Sachen kennen, mit denen ich mich vorher noch nie besch&#228;ftigt hatte. Neben der Demut ist also auf jeden Fall auch noch Neugierde eine wichtige Eigenschaft. Den Rest kann man sich dann aneignen.\n<\/p>\n<p>\nAlles in allem bin ich immer noch unsicher, ob man die Frage, ob man Programmieren lernen kann, mit <em>Ja<\/em> beantworten kann. Und ob es Sinn macht, das Fach in der Schule anzubieten. Vielleicht, um die wirklich dem&#252;tigen und neugierigen potentiellen jungen Programmierer &#252;berhaupt mit der Materie vertraut zu machen. Ich glaube aber nicht, dass Programmieren so wichtig ist wie Mathematik, Lesen und Schreiben, oder Geschichte.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Als Titel wollte ich erst Wie lernt man Programmieren? nehmen, wollte dann aber auch niemanden entt&#228;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 &hellip; <a href=\"https:\/\/olbertz.de\/blog\/2017\/01\/09\/kann-man-programmieren-lernen\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[74],"tags":[],"class_list":["post-3042","post","type-post","status-publish","format-standard","hentry","category-technik"],"_links":{"self":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/3042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/comments?post=3042"}],"version-history":[{"count":2,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/3042\/revisions"}],"predecessor-version":[{"id":3045,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/3042\/revisions\/3045"}],"wp:attachment":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/media?parent=3042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/categories?post=3042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/tags?post=3042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}