Anwendung: Prototyping


... [Informatikseminar 2002] ... [Sprachmerkmale im Vergleich] ... [Literatur-Verzeichnis]

Übersicht:


Eine ernsthafte Anwendung funktionaler Sprachen in echten (Real-Welt) Programmen ist das (disziplinierte) Prototyping.

Ein kritischer Punkt, der das Werkzeug Prototyping herausstellt ist einfach: Bei den meisten Programmen ist das Problem ansich nicht gut verstanden, oder schlimmer: falsch verstanden . Das Ziel des Prototyping ist es den Problemraum als auch den Lösungsraum besser zu verstehen. Effekt ist das Reduzieren von Risiko: Die Kosten einen Fehler früh zu beheben, sind exponentiell geringer als später.
Das Design von grossen Systemen ist von Natur aus iterativ. Gerade das Testen von Subsystemschnittstellen macht das Werkzeug in grossen Projekten so wertvoll. Je grösser das Projekt, desto wichtiger ist die Fähigkeit schnelle Tests durchzuführen. [5]


Das NSCW-Experiment

Problemstellung:

Rahmenbedingungen:

Warum war das Ergebniss trotzdem wertvoll ?

Der Auftraggeber war nicht akademischer Herkunft, es handelte sich um ein reales Problem. Keiner der Programmierer schrieb zwei Programme (ausser der C++/awk Lösung). Imperativer Code wurde nicht portiert, sondern jeder Programmierer fing von vorne an. Ausserdem wurde die Zeit und die Codelänge gemessen: kleine Programme haben ihre Vorteile, solange sie nicht so kompliziert werden, dass man die doppelte Zeit braucht, um sie zu entwickeln.

Die folgende Skizze zeigt die Ergebnisse:

Der Haskell-Prototyp wurde in signifikant kürzerer Zeit entwickelt und war wesentlich prägnanter und einfacher zu verstehen als die beteiligten imperativen Sprachen incl. Ada und C++.
Dabei waren (von 85 Zeilen Code):

Das Ergebniss wurde vom Prüfer als exakt, erweiterbar, verständlich und kompakt gewürdigt.

Warum schnitt Haskell derart gut ab ? Dafür gab es im wesentlichen 4 Gründe:

Schlussfolgerung:

Fehler im Design oder der Implementierung früh zu beheben ist günstiger als später, wobei Designfehler mehr Kosten verursachen als Implementierungsfehler. Auch hier gilt: je grösser das Projekt, desto wertvoller das Prototyping. Das kann dazu führen das man Subsystemschnittstellen früher fertigstellen und testen kann. Dies wiederum kann den Overhead bei der Koordination des Projektes reduzieren.
Die Autoren [5] halten das Ergebniss für beachtenswert, den Wert der funktionalen Programmierung herauszustellen.
Weiters unter [Haskell vs. C++ vs Ada vs... - An Experiment in Software Prototyping Productivity].


... [Informatikseminar 2002] ... [Sprachmerkmale im Vergleich] ... [Literatur-Verzeichnis]