Tipps, Tricks und Programmoptimierung


Diese Seite soll das nicht unwichtige Thema Programmoptimierung ein wenig "beleuchten".
Es existieren mehrere Anleitungen und Bücher in denen beschrieben wird, wie ein optimiertes Programm aussehen sollte. Meiner Meinung nach ist das alles ausgemachter Blödsinn. Programmoptimierung ist ein so vielschichtiges Thema das niemand sich erdreisten sollte zu meinen er hätte die umfassende Lösung für dieses Problem.

Zunächst einmal stellt sich die Frage wen es betrifft. Ein Programmieranfänger ist schon froh wenn sein Programm überhaupt läuft. Wenn es das dann auch noch fehlerfrei tut - um so besser. An eine Optimierung des Quellcodes denkt er dabei wenig. Das ist auch nicht nötig. Früher oder später, vorzugsweise beim Ansteigen des Schwierigkeitsgrades der Software, merkt jeder von allein, daß man seine Arbeit ein wenig planen sollte. So entwickelt jeder seine ganz eigene Strategie wie er die Arbeit in logische Segmente aufteilt, damit sein Programm nicht im Spaghetti-Code endet. Das ergibt so eine Art "Handschrift" für jeden Programmierer.

An ein paar allgemeine Regeln sollte jedoch jeder denken:
  • Lerne strukturiert zu programmieren. Damit ist nichts anderes gemeint als das du den Quellcode im Editor ein wenig ordentlich und übersichtlich aufteilst.
  • Dokumentiere deine Arbeit. REM-Zeilen tun keinem Weh, am wenigsten dem Editor. Sie beeinflussen nicht das kompilieren, oder das Ergebnis der Kompilierung. Also nicht so sparsam sein. Wenn du dir in einem Jahr das Programm ansiehst wirst du dankbar sein für jede Hilfe.
  • Wenn du ein Anwendungsprogramm schreibst, versuch dich in den User hineinzuversetzen der später das Programm benutzt. Geh immer vom "DAU - Dümmster Anzunehmender User" aus, wenn es darum geht Fehlerfreiheit zu garantieren. Also klick mit der Maus auch mal an Stellen wo es überhaupt keinen Sinn machen würde, nur um zu sehen was alles passieren könnte wenn...
  • Denk daran das es auch andere Computer als deinen gibt. Kompatibilität ist kein leichtes - aber ein lösbares Problem.
  • Keine ewig langen Readme-Dateien bis man verstanden hat wie man mit deinem Programm arbeiten kann. Andere Programmierer werden die vielleicht lesen, aber mal ehrlich, wenn du ein anderes Programm bekommst - liest du immer die Hilfe? Ein Programm sollte intuitiv bedienbar sein auch wenn es sich dann durch die Bedienung nicht von anderen abhebt (das soll es ja sowieso durch das was es kann). Um so leichter ist es für den User damit zurechtzukommen und um so mehr wird er damit arbeiten wollen.
  • Sei nicht ungeduldig. Rom wurde auch nicht an einem Tag erbaut. Also gegen Ende hin nicht schlampen.
  • Stell dich jedem einzelnen Problem und löse es: "Alles ist machbar - man muss nur dahinterkommen wie".
  • Frag andere wenn du nicht weiterkommst. Niemand weiß alles - man muss nur wissen wo es steht.
  • Programmiere so viel wie nötig und so fehlerfrei wie möglich.
  • Was immer du tust - bleib auf dem Teppich.
  • Wenn es zu konfus wird, scheue dich nicht noch einmal von vorn zu beginnen.

Ich hoffe ich bin nicht in einen Belehrungston verfallen ;-) Das Allerwichtigste ist natürlich: "HAB SPASS, jede Menge Gummibärchen und Kaffee !!!"

Neben strukturellen und logischen Optimierungen deines Quellcodes, gibt es einige mathematische Regeln die du dir merken oder aufschreiben solltest. Insbesondere bei zeitkritischen Anwendungen könnte dir das womöglich weiterhelfen.


Einige Mathematische Optimierungstipps:


Verwende besser Ganzzahlen (Variable%) als Lange Ganzzahlen (Variable&)
Verwende besser Lange Ganzzahlen (Variable&) als Einfache Genauigkeit (Variable!)
Verwende besser Einfache Genauigkeit (Variable!) als Doppelte Genauigkeit (Variable#)

Auch wenn sonst "PUNKT vor STRICH" geht, bei der Programmierung ist es genau umgekehrt. Also besser A + A als A * 2 und A * A als A ^ 2

Eine DIVISION von INTEGER-Variablen geht schneller mit A \ B als mit INT(A / B)

IF X AND 1 = 1 THEN "Ungerade", oder
IF X MOD 2 = 1 THEN "Ungerade" ist schneller als IF INT(X / 2) <> (X / 2) THEN "Ungerade"

Der Austausch zweier Variableninhalte geht schneller mit SWAP A, B als über eine 3.Variable: C = A : A = B : B = C


Einige Optimierungstipps zum Thema Grafik:

Will man Grafiken flüssig über den Bildschirm huschen lassen, sollte man unbedingt auf den Strahlrücklauf des Monitors warten. Beispiel

Um die Pixel schnellstmöglich auf den Screen zu bekommen, nimmt man am Besten den POKE-Befehl anstelle einer PSET-Anweisung. Denn einen POKE-Befehl kennt die Maschinensprache bereits, ein PSET muss erst übersetzt werden. Beispiel

Sind größere Grafiken zu bewegen, benutzt man besser die PUT-Anweisung, anstatt die Pixel einzeln zu "POKEn". Beispiel

Die PUT-Anweisung hat neben der Geschwindigkeit auch noch einen anderen Vorteil. Sie kann mit einem Trick auch transparente Grafiken darstellen. Hierfür benötigt man jedoch eine Negativmaske des Originalbildes. Beispiel

Hierzu gibt es auch noch ein extra Tutorial zum Thema Sprites.

Ein gut aussehender grafischer Effekt ist das Spiel mit den Farben. Der PALETTE-Befehl ist jedoch sehr langsam und kompliziert. Besser ist der Umgang mit den ROT-GRÜN-BLAU Werten (RGB) der einzelnen Farben. Beispiel


Optimaler Umgang mit der Tastatur:

Der INKEY$-Befehl für eine Tastaturabfrage ist bei einigen Programmen viel zu langsam. Um der Tastatur gehörig "BEINE" zu machen, muss man sie schon direkt abfragen und dabei BIOS und Betriebssystem umgehen. Die INP-Funktion ist der schnellste Weg an die Taste zu gelangen, wenn man keinen neuen Tastaturhandler einbauen möchte. Beispiel

Bei der Abfrage der Cursor-Tasten eines Laptop, bekommt man bei eingeschaltetem NUM-LOCK leider falsche Werte. Um den Tastaturstatus zu ändern oder abzufragen, bedient man sich eines kleinen Tricks. Beispiel