Programmieren setzt nicht besonderes mathematisches Wissen oder spezielle Rechenkenntnisse voraus, wie viele argwöhnen. Am Anfang reicht die Beherrschung der vier Grundrechenarten.
Will man später größere Programme schreiben, wird man sich intensiver mit den Mitteln der Programmiersprache befassen. Dazu gehören z.B. logische und binäre Operatoren, aber auch grundlegende Kenntnisse der Betriebssysteme (Datei- und Speicherverwaltung, wichtige Formate).
Höhere mathematische Kenntnisse braucht man natürlich, wenn man ein Mathematikprogramm, 3D-Programme oder eine Tabellenkalkulation schreiben will etc. Dann sollte einem Vektor- und Matrizenrechnung sowie die Infinitesimalrechnung nicht fremd sein.
Unbedingt erforderlich zum Erlernen einer Programmiersprache ist hingegen
Speziell in der Programmierung benötigt man die Fähigkeit zum Denken in
Ein (zugegebenermaßen sehr triviales) Beispiel für logisches Denken: Wenn rote Flamingos Fisch fressen, und jedes Tier, das Fische frißt, auch Frösche frißt, fressen dann auch rote Flamingos Frösche?
Ein Programm soll eine Schleife zehn mal durchlaufen. Außerdem gibt es eine Variable x mit einem Anfangswert von Zehn. Bei jedem Schleifendurchlauf soll x um Eins erhöht, mit Zwei multipliziert und dann in Abhängigkeit vom Wert von x entweder GERADE oder UNGERADE auf dem Bildschirm ausgegeben werden. Wie oft erscheint die Meldung UNGERADE auf dem Bildschirm?
Eine Grundvoraussetzung für alle Rentenbezüge ist, daß der Versicherte eine Mindestanzahl an Jahren in die Rentenkasse eingezahlt (MIN gezahlt) hat. Darüber hinaus muß er entweder das Rentenalter erreicht (MIN alt) haben oder erwerbsunfähig (EU) oder berufsunfähig (BU) geworden sein. In einem Pseudocode schaut das in etwa so aus:
WENN person_will_rente DANN
(
WENN min_gezahlt UND ( min_alt ODER eu ODER bu ) DANN
zahle_rente
)
Frage: Welche Personen beziehen demnach keine Rente? Nur eine Antwort ist richtig:
„Was hat das mit Programmierung an sich zu tun?“, wird sich mancher fragen. Nun, Genau dieser Personenkreis wird in folgendem Ausschnitt eines Rentenberechnungsprogramms im ANDERENFALLS-Zweig adressiert:
WENN person_will_rente DANN
(
WENN min_gezahlt UND ( min_alt ODER eu ODER bu ) DANN
zahle_rente
ANDERENFALLS
drucke_ablehnung
)
„Ja und?“, kann man wieder fragen, „wird doch alles automatisch durch den ANDERENFALLS-Zweig abgedeckt. Wozu brauche ich diese logische Spielerei?“
Korrekt, bis hierher hätten wir uns diese Übung sparen können. Muß man aber den Personen, die keine Rente bekommen, je nach fehlender Rentenvoraussetzung auch noch unterschiedliche Ablehnungsbriefe schreiben, wird das Problem manifest.
Der Schreiber des nachfolgenden Beispiels hat sich nicht die Mühe gemacht, darüber nachzudenken, wer genau nun alles Ablehnungsschreiben bekommen soll. Er hat einfach alle vier Einzelgründe aufgeführt:
WENN person_will_rente DANN
(
WENN min_gezahlt UND ( min_alt ODER eu ODER bu ) DANN
zahle_rente
ANDERENFALLS
(
WENN NICHT min_gezahlt DANN
drucke_ablehnung_keine_kohle
WENN NICHT min_alt DANN
drucke_ablehnung_zu_jung
WENN NICHT bu DANN
drucke_ablehnung_zu_gesund
WENN NICHT eu DANN
drucke_ablehnung_immer_noch_zu_gesund
)
)
Was passiert nun? Man kann es sich denken:
Alle, die nicht mindestens min_gezahlt haben, bekommen schon mal ein Ablehnungsschreiben unter Angabe des korrekten Ablehnungsgrundes. So weit, so gut.
Alle, die nicht mindestens min_alt sind, bekommen ebf. ein Ablehnungsschreiben mit Bezug auf das zu junge Alter. Das Problem ist nur, wenn jemand einen Rentenantrag gestellt hat (und die Rentenversicherung den Grad seiner Behinderung als zu geringfügig für EU oder BU einstuft, und er ebf. zu jung ist für eine Altersrente), wird er äußerst verwundert sein zu erfahren, er sei abgelehnt auf Grund des zu jungen Alters: bei BU oder EU spielt nämlich das Alter keine Rolle! Der korrekte Vorgang wäre hier eine Ablehnung aufgrund mangelnden Alters (für die Altersrente) UND mangelnder Voraussetzungen für BU UND mangelnder Voraussetzungen für EU.
Das gleiche Dilemma findet sich natürlich bei drucke_ablehnung_zu_gesund und drucke_ablehnung_immer_noch_zu_gesund. Es sei an dieser Stelle dem Leser überlassen, den korrekten Algorithmus für die Ablehnungsbescheide zu finden – die obige Übung.
Beispiele wie dieses finden sich zu Dutzenden in jedem Gebiet. Sobald man anfängt, größere Mengen mit Kontrollstrukturen wie CASE oder IF zu modellieren, steht man vor diesem Problem.
Ein entschiedenes Jein. Nein, weil Intelligenz nicht gleich logischem Denken ist. Ja, weil es neben Erinnerungsvermögen, Merkvermögen, räumlichem und zeitlichem Vorstellungsvermögen, Abstraktionsfähigkeit, Assoziationsfähigkeit, Kreativität, „sozialer„ Intelligenz und etwa zwanzig weiteren Komponenten ein Bestandteil von Intelligenz ist. Aber: Es gibt Menschen, die sehr gut abstrahieren oder logisch denken können, und dennoch vom (auch fragwürdigen) IQ-Wert schlechter liegen als Menschen, die nur über ein geringes logisches Denken verfügen, aber dafür eine ausgezeichnete soziale Kompetenz aufweisen oder im multimedialen, künstlerischem oder allgemein kreativem Umfeld besonders gut sind (Graphiker, Designer etc.). Ein gutes Beispiel für erstere sind Theoretiker, die einem ganz hervorragend die 2. Ableitung von y = f(x) = 4/3 ln(x)3 herbeten können oder den logischen Term ¬ (a ∧ b ∨ c) vereinfachen können, aber sich praktisch nicht im Leben zurechtfinden.
Ich gehe sogar so weit, zu behaupten, logisches Denken ist dem Menschen zutiefst fremd. Mir ist es zumindestens völlig fremd. Menschen denken assoziativ und in Bildern. Logisches Denken impliziert maschinelles Denken. Manche können Deduktionsmechanismen der Form WENN-DANN gut „emulieren“, manche nicht.
Wer an solchen Logikspielen Gefallen findet, kann weitere logische Aufgaben ausprobieren.
Logisch-analytisches Denken kann man nur wenig erlernen; man hat es oder hat es nicht, aber „diszipliniertes“ Denken läßt sich erlernen. Für logische Reduktionen gibt es zudem Formeln (z.B. die Transformation nach de Morgan für obiges Beispiel), die einem z.T. das Denken abnehmen können. Darüber hinaus gibt eine Grenze, die durch das eigene Gehirn festgelegt ist.
Sehr gute Programmierer sind Künstler: nicht nur im Sinne von Können, sondern auch unter ästhetischen Kategorien. Ein sehr gut geschriebenes Programm ist meist auch ein Programm mit ästhetisch ansprechendem Quelltext: mit ausgewogenen Proportionen und klaren Strukturen. Es ist schön, soweit man so etwas von Quelltexten behaupten darf – auch wenn die Ästhetik eine sehr kühle und kristalline ist; manche würden sie blutleer nennen. Auch im Modellieren der Realität – nichts anderes ist Programmieren – steckt ein wenig Kunst, wie bei einem Bildhauer oder Maler auch, der die Natur abformt. Und je nach Persönlichkeit des „Erbauers“ wird die Realität ein wenig anders modelliert.
Begeisterung bzw. Motivation, eine Programmiersprache erlernen zu wollen? Das klingt selbstverständlich, ist es aber nicht. Ich hatte öfter Schüler, die intelligent waren, aber keine Lust hatten, sich mit der Sprache auseinander zu setzen („Das nehme ich so nebenbei mal mit, ich bin ohnehin so intelligent“). Ohne Motivation geht nichts, denn nur die Motivation treibt dich dazu an, zu üben. Und wie in den menschlichen Sprachen geht ohne Üben nichts. Auch ein Genie kann eine Programmiersprache nicht in wenigen Tagen lernen.
Die Motivation ist auch die Basis für
Aktives Entwickeln und Ausprobieren eigener Programme ist die Voraussetzung, daß man seine Kenntnisse weiterentwickelt. Wenn du wartest, daß immer der Lehrer vorbei kommt und sagt, ob du das Programm richtig geschrieben hast, dann stagnierst Du. Du wirst auf deinem Stuhl sitzen und dich fürchterlich langweilen. Nach meiner Erfahrung verfügen solche Menschen mit reiner passiver Erwartungshaltung auch über eine deutlich schlechtere soziale Kompetenz, d.h., sie tun sich im Leben auch schwerer, selbst etwas in die Hände zu nehmen und auf Menschen aktiv zuzugehen. Am besten ist es, sich einer Programmiersprache spielerisch zu nähern und sie einfach auszuprobieren.