Home
„Selected Programming Assignments“
Ausgewählte Programmieraufgaben
Herzlich Willkommen auf meiner Homepage!
„Macht Programmieren Spaß?“
Die Antwort auf diese Frage kann sehr unterschiedlich ausfallen, zum Beispiel „Meine Güte, der Arme! Muss er sich das denn wirklich antun?“. Frederick P. Brooks ist in seinem Buch „The Mythical Man-Month“ (dt. „Vom Mythos des Mann-Monats“, Mitp-Verlag, 2003), immer noch eines der Standardwerke der Software-Branche, zu einem deutlich anderen Schluss gekommen. In den einleitenden Absätzen schreibt er:
„Warum macht Programmieren Spaß? […] Zuerst ist da die schiere Freude an der Herstellung von Dingen an sich. Wie ein Kind sich an seinem Sandkuchen erfreut, so delektieren Erwachsene sich am Zusammenbau aller möglichen Dinge, besonders an denen von ihnen selbst erdachten. […] Der programmierte Computer verfügt über die ganze Faszination eines Flipper-Automaten oder des Mechanismus einer Musikbox – nur, dass er das Nonplusultra der technischen Entwicklung darstellt. […] Der Programmierer, wie auch der Dichter, arbeitet kaum im Bereich des stofflich Fassbaren. Aus dem Nichts baut er sich Luftschlösser, ist kreativ aus dem Einsatz, seiner Vorstellungskraft heraus. Wenige Medien gewähren dem kreativen Menschen ein solches Maß an Flexibilität, sind so leicht zu be- und überarbeiten, erlauben so willig die Realisierung großer konzeptueller Strukturen. […]Ein Programm kann Ergebnisse ausdrucken lassen, Grafiken anfertigen, Geräusche erzeugen, Maschinenteile in Bewegung setzen. Die Zauberkunst aus Mythos und Legende ist zu unserer Zeit Wirklichkeit geworden. Man gibt über eine Tastatur die richtige Zauberformel ein und ein Bildschirm wird lebendig, Dinge erscheinen, die es nie vorher gegeben hat und geben konnte. Schließlich und endlich bereitet das Programmieren Freude, weil es unsere innersten kreativen Bedürfnisse befriedigt und Sinne anspricht, die wir mit allen Menschen gemeinsam haben.“
Die Faszination des Programmierens ist also durchaus vielschichtigerer Natur, als es auf den ersten Blick zu scheinen vermag. Für Außenstehende sind diese Beobachtungen möglicherweise nicht einfach nachzuvollziehen. In meinem Fall kann man nun nicht gerade behaupten, dass ich zu den Außenstehenden zähle. Bereits als Student der Informatik (im Nebenfach) erlag ich der Faszination des Programmierens und begann mit der Entwicklung kleinerer Anwendungen auf Computern der ersten Stunde wie etwa einem Kontron Büro-System KBS Z80. Da dieser Rechner nur in den Labors der Universität zugänglich war, schaffte ich mir für zu Hause einen Apple II Rechner mit zusätzlicher Z80-Prozessorkarte an, um das Betriebssystem CP/M (Control Program for Microprocessors) nutzen zu können. CP/M steht für eine Reihe von Betriebssystemen, die ab ca. 1974 von der Firma Digital Research Inc. entwickelt wurden.
Als Programmiersprache kam auf diesen Rechnern Turbo Pascal mit einer integrierten Entwicklungsumgebung zum Einsatz, einem Konzept, das zum damaligen Zeitpunkt noch recht neu war. Assembler spielte in jenen Tagen ebenfalls eine Rolle. Die standardisierten Funktionen des hardwareunabhängigen BDOS (Basic Disk Operating System) konnte man unter Verwendung des Assemblerprogramms asm.com aufrufen. Man wurde auf diese Weise noch enger mit der Funktionsweise seines Rechners vertraut. Selbst die Entwicklung noch so kleiner und einfacher Beispielprogramme verlieh seinem Autor ein unbändiges Gefühl von Freude. In den Jahren danach waren dann für mich Entwicklungstätigkeiten in unterschiedlichen Intensitäten im Windows Umfeld mit den Programmiersprachen C/C++, den Objektmodellen COM und .NET angesagt.
Damit sind wir sind wieder bei der Eingangs gestellten Frage angekommen, nur dieses Mal als Postulat formuliert: „Programmieren muss Spaß machen!“. Diese Quintessenz ist wesentlich, denn andernfalls rennen Schüler, denen man die Grundlagen der Programmierung beibringen möchte, einfach nur heulend weg, sie reden nicht einmal mehr mit einem. Deshalb sollte man gerade für Einsteiger eine Sprache wählen, mit der man schnell zu einem Erfolgserlebnis gelangt. Im Mittelpunkt muss das zu lösende Problem stehen. Sind es die Ecken und Kanten einer Programmiersprache, also ihre Fallstricke, hat man die falsche Wahl getroffen.
Welche Programmiersprache eignet sich für Anfänger? Über diese Frage wurden schon unzählige Abhandlungen geschrieben. Bei vielen kann man allerdings nur den Kopf schütteln bzw. muss sich die Frage stellen, ob der Verfasser wirklich für einen Beruf im Lehrumfeld geeignet ist. Versucht man einem Anfänger "public static void main" beizubringen oder ihm etwas zum Datentyp Pointer zu erklären, kann man den Geruch verbrannter Erde fast sinnlich wahrnehmen. Genau mit dieser Vorgehensweise bestärkt man Studenten in dem Vorurteil, dass Computer unbeherrschbare Maschinen sind. Nur etwas für Menschen, die nicht normal sind. Also für Menschen, mit denen man nichts zu tun haben möchte. Man beraubt sie quasi der letzten Hoffnung, die Arbeitsweise eines Computers auch nur ansatzweise verstehen zu können.
Deshalb sollten wir die Wahl der Programmiersprache behutsam angehen. Pascal war vor vielen Jahren mit Sicherheit eine hervorragend geeignete Programmiersprache, um die Grundlagen der prozeduralen Programmierung zu erlernen. Sie wurde deshalb auch als Lehrsprache bezeichnet. Natürlich hat der technische Fortschritt auch vor Programmiersprachen keinen Halt gemacht. In Zeiten der objektorientierten Programmierung spielen jetzt C++, Java und C# eine gewichtige Rolle. Im Vergleich zu C++, das schon einige Jahre auf dem Buckel hat, sind Java und C# einfacher zu erlernen. Komplexere C++-Sprachkonstrukte wie etwa die Mehrfachvererbung werden von ihnen überhaupt nicht unterstützt. Eine einzige Sprache als Empfehlung auszusprechen, wage ich nicht und ist auch nicht seriös. Wenn wir das universitäre Umfeld verlassen und das Ganze mehr aus einem praxisnäheren Blickwinkel betrachten, so gibt es mehrere Favoriten. Da ich selbst beruflich im Windows-Umfeld aufgewachsen bin, lege ich Ihnen meine zwei Favoriten C++ und C# ans Herz. Java ist ebenfalls ein mehr als würdiger Kandidat, wird von mir nur auf Grund meiner eigenen Historie und seiner Ähnlichkeit zu C# hier nicht weiter betrachtet. (Anmerkung der Verfassers: Mit Einzug der Android-Plattform auf dieser Website ist nun auch die Programmiersprache Java mit an Bord, „und das ist auch gut so!“)
Manch ein Programmierer – oder Entwickler, eine Bezeichnung, die mir besser gefällt – sieht Programmierung lediglich als eine simple Tätigkeit oder Arbeit an, als notwendiges Übel, um das eigene Überleben zu sichern. Wie Sie vielleicht aus den weiter oben zitierten Gedanken von Frederick P. Brooks ableiten konnten: In jedem von Hand geschriebenen Programm steckt auch immer ein Teil des Menschen mit drin, der es verfasst hat. So wie es bei einem Gemälde der Fall ist, das Sie in einem Museum betrachten können. Nur mit dem Unterschied, dass Sie bei einem Computerprogramm die „Schönheit“ des Bildes erst dann zu sehen bekommen, wenn Sie seinen Quelltext in Händen halten. Natürlich lässt sich über guten Geschmack bekanntermaßen hinlänglich streiten. Was für den einen ein Bild unermesslicher Schönheit ist, fügt einem anderen Betrachter nahezu physische Schmerzen beim Betrachten hinzu. Ganz so extrem verhält es sich beim Studieren von Softwareprogrammen glücklicherweise nicht. Es gibt einige Regeln des guten Geschmacks, über die in der Entwicklergemeinde weitestgehend Konsens herrschen, sieht man einmal von der Stringenz ab, die bei der Einhaltung der einen oder anderen Regel an den Tag zu legen sind.
Guter Quellcode ist leicht lesbar und besteht aus einer selbsterklärenden Strukturierung. Sprechende Variablen- und Funktionsnamen sind unerlässlich (abgesehen von Variablen, die keinen weiteren Zweck haben, wie z.B. Zähler von Schleifen). Stehen ergänzende Bibliotheken zur Verfügung, werden diese möglichst effizient eingesetzt. Für die wiederholte Erfindung des Rads gibt es in der Softwareentwicklung keinen Pluspunkt. Kreieren Programmierer ein Gestrüpp an Strukturen, Funktionen und größeren Programmeinheiten, so dass bei jedem Mitarbeiterwechsel nachfolgende Entwickler schon im Vorneherein zum Scheitern verurteilt sind, ist dies ein No-Go. Auch gehört der Ehrgeiz, mit Hilfe kryptischer und unverständlicher Anweisungen die letzte Nanosekunde aus einem Rechner herauszukitzeln, heute längst der Vergangenheit an. Gute Programmierer schreiben sauberen, leicht lesbaren und wartbaren Code. Sie erkennen die echten Anforderungen an das Programm: Das es das tut, was verlangt wird, in der zur Verfügung stehenden Zeit und zum gewünschten Preis.
Wenn Sie die Einstiegshürden beim Erlernen einer Programmiersprache genommen haben, wird die Aussage „Programmieren macht Spaß“ zu einem Mindestmaß an Akzeptanz bei Ihnen führen. Die Endstufe sieht dann so aus, dass die Entwicklung eines Programms zu einem professionellen Hobby geworden ist. Noch sind wir nicht soweit. Wie kann man das Schreiben von Software lernen? Neben anderen Hilfsmitteln wie etwa der Lektüre eines guten Buchs oder von einem der zahlreichen Tutorials, die es im Internet gibt, vor allem durch das Studium existierender Programme. Auf dieser Website möchte ich eine Ansammlung ausgewählter Programmieraufgaben vorstellen, um Ihnen mit ihrer Hilfe den Einstieg in diese Materie zu erleichtern. Natürlich dürfen diese Programme nicht zu anspruchsvoll oder kompliziert sein. Es muss eben Software sein, die dem Anspruch von Lehrprogrammen genügt. Dieses Ziel setzen sich alle Beispielprogramme, die Sie auf dieser Homepage vorfinden. Da ich mich zwischen den beiden Sprachen C++ und C# nicht wirklich entscheiden konnte, finden Sie Beispiele zu beiden Sprachen vor. Manchmal sind es auch dieselben Beispiele. Sie können dann einen Vergleich zwischen den beiden Programmiersprachen ziehen. Ergänzt wird das Ganze durch Beispiele zu Multithreadung und zur Windows Presentation Foundation, um den schnöden Charakter einer Konsolenanwendung verlassen zu können.
Last but not least: Wie lautet eines von vielen Gesetzen des amerikanischen Ingenieurs Edward A. Murphy zur Programmierung? „Every non trivial program has at least one bug“. Dem kann und möchte ich beim besten Willen nicht widersprechen. Sollten Sie in den Beispielprogrammen Verstöße gegen die o.a. Regeln entdecken (umständliche Codepassagen, kryptische Codestellen) oder noch Schlimmeres (Programmfehler bis hin zu Abstürzen), so darf ich Sie bitten, mir eine Email zu senden: This email address is being protected from spambots. You need JavaScript enabled to view it.. Vielleicht führt dieser iterative Prozess dann doch zu dem von mir gesetzten Ziel, eine Website mit interessanten, anspruchsvollen und lehrbuchartigen Programmen für Interessierte der Programmierkunst zu betreiben.
Ich wünsche Ihnen nun viel Spaß beim Durchstöbern meiner Seiten!