Computer sind doof. So richtig doof!
Also warum stellst du dich so an?
Seien wir doch ehrlich.
Was kannst du? Was kann ein Computer?
Okay, ein Computer ist brilliant darin eine Null von einer Eins zu unterscheiden und rasend schnell zu addieren. Aber sonst? Sonst nix auf dem Kasten.
Und du? Du kannst laufen, sprechen und denken. Vielleicht sogar singen und tanzen.
Gut, du musst schlafen, trinken, essen und du bekommst Magenschmerzen, wenn du zu viele Zwiebeln isst.
Aber hey! Nobody is perfect!
Ja, merkst du es? Du bist überlegen! Du bist der Boss.
Dein Computer macht was du ihm sagst.
Also warum ist Programmieren lernen so schwer?
Naja, ein Computer macht was du ihm sagst. Und zwar GENAU das und NUR das. Was allerdings nicht das sein muss was du willst.
Kompliziert?
Jepp! Lass mich das erklären.
Auch wenn du in einer modernen Programmiersprache nicht auf der Ebene von Nullen und Einsen kommunizierst, sondern „vermenschtlichte“ Anweisungen wie „solange (while) X gilt tue Y“ verwendest, ist der Sprachumfang doch sehr eingeschränkt.
Und genau das stellt uns vor große Herausforderungen.
Denn wir werden gezwungen komplexe Dinge in einfache leicht formulierbare Häppchen zu reduzieren.
Übrigens ist das auch der Grund dafür, weshalb du in Stellenausschreibungen für Softwareentwickler sehr oft die Forderungen nach analytischer Denkfähigkeit findest.
Hast du als Kind auch so gerne mit Legobausteinen gespielt?
Ich habe es geliebt!
Lego ist einfach! Du musst nur simple Plastikbausteine mit unterschiedlichen Farben zu dem Gebilde zusammenzusetzen, das du in deiner Fantasie klar und deutlich vor Augen hast.
Klingt einfach. Ist es auch! Aber eben nur bis zu einer gewissen Komplexität.
Ich empfehle dir einen Besuch im Legoland. Dort stehen Kunstwerke an deren Bau die meisten von uns wohl gescheitert wären. Und das obwohl wir das Prinzip des ineinander stecken von Legosteinen verstanden haben.
In einer Programmiersprache entsprechen die Legosteine den Grundkonzepten einer Programmiersprache wie Variablen, Funktionen und Kontrollstrukturen.
Wenn dich deine Freunde in Zukunft also Fragen was ein Programmierer den lieben langen Tag so macht, kannst du in Anlehnung an Benoit Mandelbrot sagen:
Die Aufgabe eines Programmierers ist es die Komplexität dieser Welt auf simple Regeln zu reduzieren.
Ähm, okay keine gute Idee, denn das ist uncool. Aber du könntest das Zitat mit Link auf diesen Artikel bei Facebook posten. 🙂
Aber warum ist das so schwierig?
Hast du schonmal versucht jemandem zu erklären wie man sich die Schuhe zu bindet?
Ganz schön kompliziert. Oder?
Obwohl sich jeder von uns mehrmals am Tag die Schuhe bindet, kommen wir ins Grübeln, wenn wir es z.B. einem Kind erklären wollen.
Das liegt daran das wir in Kapselungen denken und kommunizieren.
Das Schuhe binden ist ein Vorgang, welches in unserem Bewusstsein gespeichert ist, über dessen Komplexität wir uns nicht im klaren sind. Wir merken garnicht, dass es sich aus vielen kleinen hintereinander auszuführenden Einzelaktionen zusammensetzt.
Im Alltagsgebrauch ist das ein großer Vorteil, denn stell dir vor du müsstest dir jeden Morgen neu überlegen, wie du deine Schnürsenkel gebunden bekommst. Du würdest wohl niemals pünktlich auf der Arbeit sein.
Und genau so ist es auch beim Programmieren.
Wir können dankbar dafür sein, dass Java Methoden hat, die für uns das schreiben in Dateien übernehmen und uns vor allem vor den Details bewahren.
So musst du dich nicht jedes mal mit Dateisystemen auseinandersetzen, wenn du ein Programm schreiben willst, das Daten verarbeiten soll. Sonst würde jedes Projekt zu einer Lebensaufgabe werden.
Nur wenn du eine Funktion selber schreiben musst, dann bleibt dir nichts anderes übrig als der Sache auf den Grund zu gehen. Dann gibt es keine Abkürzungen.
Dann musst du ein weißes Blatt Papier mit Worten oder besser gesagt einen leeren Bildschirm mit Quellcode füllen.
Möchtest du ein Programm schreiben, das die Klausurergebnisse einer Klassenarbeit aus einer Datei ausliest und den Notendurchschnitt zurückliefert, dann bleibt dir nichts anderes übrig als dich mit den Details wie
- Dateiverarbeitung
- Zeichenkettenverarbeitung
- arithmetische Operatoren
auseinanderzusetzen und daraus eine Funktion berechneDurchschnitt
aufzubauen.
Gerade das ist eine große Hürde für Anfänger. Nicht weil du keine Antworten findest. Dafür gibt es Google. Nein, das Problem ist die richtigen Fragen zu stellen.
Um die Schuhe zu binden musst du wissen was ein Knoten ist. Aber wie sollte ein Kindergartenkind auf die Idee kommen nach einem Knoten zu fragen.
Hier sind dann die Eltern gefragt, die Ihrem Kind einen Knoten erklären.
Beim Programmieren kannst du natürlich auch deine Eltern fragen. 🙂 Aber wenn die nicht weiterwissen, kann ich dir die zahlreichen Tutorials, die es im Internet gibt ans Herz legen. Diese enthalten sämtliche Fragen, die du dir stellen und beantworten musst.
Die lieben Missverständnisse!
Eine weitere Schwierigkeit ist, dass wir es gewohnt sind Sprache im Alltag sehr ungenau zu verwenden.
Erst kürzlich bin ich über einen Informatiker-Witz gestolpert, den ich gerne zum besten gebe. Also hör gut zu. 🙂
Petra hat ihren Ehemann Paul, der Progammierer ist, gebeten, wenn er im Supermarkt ist Eier zu kaufen. Petra und Paul haben sich nie wieder gesehen.
Lachkrampf überlebt? Naja, ich gebe zu. Informatiker-Witze sind manchmal etwas humorkritisch.
Aber hast du gemerkt wo die Pointe sind?
Genau die Abbruchbedingung fehlt. Unser Scherz enthält eine Endlosschleife. Formulieren wir Petra’s Anweisungen in Programmcode. Ganz klar. Wir brauchen eine while
Schleife.
while(Paul im Supermarkt){ kaufe ein Ei! }
Nachdem Paul ein Ei gekauft hat befindet er sich noch immer im Supermarkt, weshalb die Schleife niemals endet.
Also, wie hätte Petras Anweisung lauten müssen, damit auch Paul es versteht und wieder nach Hause kommt?
Exakt, wir müssen konkreter werden.
Petra hat ihren Ehemann Paul, der Progammierer ist, gebeten, wenn er im Supermarkt ist 10 Eier zu kaufen und dann nach Hause zu gehen.
Schade der ganze Humor ist flöten gegangen. Aber dafür haben wir Petras Anweisung jetzt perfekt an Paul kommuniziert.
Genau das ist auch bei der Entwicklung von deinen Programmen notwendig. Du musst dich anpassen. Du musst spezifisch kommunizieren. Und zwar super spezifisch. Denn dein Rechner ist unfähig deine Anweisungen zu interpretieren und erst recht nicht in der Lage sie zu korrigieren.
Also merke: Das Programmieren verlangt nach über durchschnittlicher Präzision in unserer Kommunikation. Um diese Präzision zu erreichen musst du dir insbesondere im klaren darüber sein was du willst.
Naja, im wahren Leben ist Paul natürlich nicht so doof! Aber wir haben hier ein gutes Beispiel, in dem wir sehen wie wir gesagtes interpretieren und zumindest in diesem Fall auch korrigieren.
Dein Computer mach das natürlich nicht, denn du weißt ja bereits: Computer sind doof. So richtig doof!
Wie immer freue ich mich über deine Fragen im Kommentarbereich! Hat dir der Artikel gefallen? Dann folge uns doch am besten gleich auf Facebook!
David
17. Februar 2016 at 13:08Vielen Dank für den informativen und hilfreichen Beitrag.
Kim Peter
17. Februar 2016 at 13:59Hallo David, ich danke dir! Freue mich riesig über deinen Kommentar. Viele Grüße Kim
Lena
5. Juli 2017 at 12:58Super Beitrag!
Ich musste bei dem Witz echt einen Moment überlegen, obwohl mein Vater auch immer so etwas auf Lager hat. Und mein Info- Lehrer hat noch etwas im Angebot, was die Ungenauigkeit unserer Spreche verdeutlicht:
Das Mädchen steht vor dem Schaufenster eines Geschäfts und sieht ein rotes Fahrad. Sie möchte es haben.
Jetzt bin ich mal interessiert, wie viele von den Leuten, die das hier lesen darauf kommen, welche fünf(!!!) Bedeutungen das ES haben kann… Mein Info- Kurs hat eine halbe Stunde gerätselt bevor ein Junge mit Vorerfahrung und ich sie erlöst haben. 😀
Kim Peter
6. Juli 2017 at 10:32Hallo Lena, danke für das weitere Beispiel. Spontan bin ich ehrlich gesagt nur auf drei verschiedene Bedeutungen gekommen. Viele Grüße Kim
sebi
15. Mai 2018 at 18:21cool!
Choose a style: