Alle Schüler sollten Programmieren lernen
BBC-Kolumnist Bill Thompson findet: Nur wer Hardware und Software versteht, ist ein mündiger Bürger. Auch iPhones entsperren zu können, sei wichtig – wegen Apples Zensur.
Speziell:
Der Netzkritiker Howard Rheingold [...] plädiert dafür, den kritischen Umgang mit der eigenen Privatsphäre in sozialen Netzwerken wie Facebook in die Stundenpläne an Schulen aufzunehmen. Aber auch der Gebrauch von Blogs, Wikis und Suchmaschinen sowie das anschließende Verifizieren von Suchergebnissen gehören für ihn zur Allgemeinbildung [...]. [Er] verlangt sogar, dass ein Nutzer auch selbst programmieren kann.
Dieser These stimme ich voll und ganz zu! Man kann die moderne Technik nicht verantwortungsbewusst benutzen, wenn man nicht weiß, wie sie funktioniert! Natürlich braucht es dafür kein spezialisiertes Detailwissen, aber Grundkenntnisse über Aufbau und Funktionen von modernen Computern, Betriebssystemen, Kommunikationsnetzen (Internet, Mobilfunk) und Webseiten muss jeder Mensch besitzen, um noch selbstbestimmt entscheiden zu können, was er will und was er nicht will (z.B. indem man faktenfreie Werbung oder Nachrichtenbeiträge als solche entlarvt).
Das ist auch nichts neues: Mit der Freiheit, eigene Entscheidungen treffen zu können ging schon immer die Pflicht, sich dafür zu informieren einher. Das gilt sowohl ganz generisch für alle möglichen Arten von Entscheidungen, wie auch in diesem speziellen technikbezogenen Fall.
Ich nehme mal meinen jüngeren Bruder als Beispiel. Er spielt gerne Computerspiele, aber sobald es Probleme gibt, sobald mal etwas nicht funktioniert, oder eine Fehlermeldung auftaucht, oder er ein tolles neues Minecraft-Plugin gefunden hat, das nur eine englische Installationsanleitung in einem Forum bietet, ist er überfordert und bittet mich um Hilfe. Bisher waren das aber fast überwiegend Probleme, die man entweder durch zwei Minuten Googlen hätte lösen können, oder mit entsprechenden Grundkenntnissen per Trial-and-Error (wie das im übrigen jeder versierte “Computerfreak” macht, wenn man ihn um Hilfe bittet – man weiß nicht auswendig, welche Buttons man klicken muss, damit der Drucker wieder funktioniert, aber man liest, was auf dem Bildschirm steht, wendet Basiswissen an und probiert dann alle Alternativen in Reihenfolge der Einfachheit (Occams Razor) aus).
Und weils so schön passt: Natürlich ist Open-Source-Software auch in diesem Fall der Schlüssel zum Erfolg! Denn wo kann man lernen, wie und wieso ein bestimmtes Stück Software funktioniert – a) Proprietäre Software oder b) Freie Software?
Richtig, bei freier Software! Gerade heute morgen fragte mich ein Student in der DSEA-Übung, ob denn Java und Python intern effizient potenzieren würden. “Weiß ich nicht”, musste ich sagen, “aber ich kann ja mal recherchieren!”
And here we go:
- Java (OpenJDK7) hat die Klasse java.lang.Math die auf java.lang.StrictMath verweist, die die meisten Methoden als native Implementierungen kennzeichnet. Also schauen wir in den C-Code dazu: src/share/native/java/lang/StrictMath.c. Hier sehen wir, dass es sich um Funktionen aus einer fdlibm handelt, also schauen wir da mal rein: src/share/native/java/lang/fdlibm/src/e_pow.c.
Im Kommentar von Zeile 27-70 wird ausführlich dargelegt wie der Potenzierungsalgorithmus hier funktioniert und darunter sieht man es auch im Code. Wundervoll (dass wir es sehen können, der Code selbst ist eklig). - Python (CPython 2.7.2) hat Potenzierung eingebaut, wir müssen nur nach Floats und Longs unterscheiden: Objects/floatobject.c (Zeile 807 ff.) und Objects/longobject.c (Zeile 3376 ff.)
Die Float-Implementierung fängt zuerst eine Unmenge von Sonderfällen ab und ruft schlussendlich irgendwann die eingebaute C-Funktion pow auf. Die Long-Implementierung ist intelligenter und im Code ist sogar ein Paper zum verwendeten Algorithmus angegeben (Zeile 3507).
Also: Open Source for President!
Letzte Kommentare