Sonntag, 21. September 2008

Wie wird man künftig Software entwickeln?

Das kann niemand genau sagen, aber ich glaube, dass die Entwicklung von Software schon sehr bald stark abstrahiert werden kann (in einigen Teilbereichen ist es auch heute schon möglich). Nichts ist nerviger für Programmierer als sich wiederholende Abläufe. Prozesse, die man eigentlich formal beschreiben kann. Da ich ein Freund der Praxis bin, hier ein Beispiel:
print(1)
print(2)
print(3)
Hinweis: Die hier vorgestellten Codes sind Pseudo-Codes und stellen nicht die Blitzprog-Sprache dar.

Jeder erfahrene Programmierer würde diesen Code in eine For-Schleife umwandeln:
for i = 1 to 3
print(i)
Dies ist die einfachste Möglichkeit, einen Prozess abstrakt zu beschreiben.
Etwas komplexer wird es in diesem Fall:
class Vector3
int x
int y
int z
function add(vec)
self.x = x + vec.x
self.y = y + vec.y
self.z = z + vec.z
Erster Versuch:
class Vector3
int x, y, z
function add(vec)
self.x += vec.x
self.y += vec.y
self.z += vec.z
Hier wurde der Dreizeiler für die Deklaration der drei Integervariablen zu einer Zeile zusammengefasst. An dieser Stelle kann man sich bereits darüber streiten, welches die höhere Lesbarkeit mit sich bringt. Da x, y und z in diesem Kontext zusammenhängen, ist es aus meiner Sicht logischer, diese auch in einer Zeile zu schreiben. Außerdem verbessert sich die Wartbarkeit, da bei einer Änderung des Datentyps nur eine Zeile umgeschrieben werden muss (C++ Templates würden hier ebenfalls hilfreich sein).
Nun zu Abstraktionsstufe 2:
class Vector3(DataType = int)
DataType x, y, z
function add(vec)
self.[x, y, z] += vec.[x, y, z]
Zwei weitere Verbesserungen: Erstens wurde der Datentyp verallgemeinert, so dass die 3D-Vektorklasse nun auch mit anderen Datentypen wie z.B. float nutzbar ist. Zweitens wurde die Zuweisung bzw. di Addition der xyz-Variablen in einer - für die meisten Leser - bisher noch unbekannten Syntax zusammengefasst. Der Compiler erkennt, dass die erste Variable des Objekts self (in diesem Fall x) mit der ersten Variablen des zweiten Objekts vec (dessen x) addiert werden muss. Bei der zweiten und dritten Variable ist der Vorgang äquivalent. Zum Schluss möchte ich noch zeigen, wie dieser Code nun in bp (Abkürzung für die Blitzprog-Programmiersprache) aussehen würde:
class Vector3
init value
self.[x, y, z] = value

add vec
self.[x, y, z] += vec.[x, y, z]
Dies sind nur kleine Beispiele einer Abstraktion im Vergleich zu dem, was später möglich sein wird.

Keine Kommentare: