Funktionale Programmiersprachen (Haskell)

Hi zusammen,
ich bin nun beim Studium gelandet und werde da mit funktionaler Programmierung in Form von Haskell bombardiert. Das ist alles ganz schön anders, nutzt das rein zufällig jemand von euch? Ich kann mir echt nicht vorstellen, dass man damit Enbenutzer Programme baut. Mathe Libs o.k. dafür scheint es schon nicht schlecht zu sein aber GUI und alles was dann doch wieder strukturierter Programmierung entspricht?
 
Es gibt scheinbar doch Programmierer, die auf funktionale Programmiersprachen setzen.
Wir lernen in der Uni gerade die Grundelagen von Caml (auch eine sehr funktionale Programmiersprache), weil unser Prof die so toll findet.
Letztens habe ich durch Zufall gesehen, das das LaTeX-Plugin für Wikipedia auch in Caml geschrieben ist.
 
Das ist alles ganz schön anders, nutzt das rein zufällig jemand von euch?
Ich hab funktionale Programmierung anhand von SML gelernt (nur die funktionalen Aspekte der Sprache verwendet), Haskell werd ich mir aber ganz sicher noch näher anschaun - allein, weil es eine super-elegante Sprache ist.

Ich kann mir echt nicht vorstellen, dass man damit Enbenutzer Programme baut.
Kennst du Google? Die benutzen ihr MapReduce, alles rein funktional.
Map sollte bekannt sein, Reduce in Lisp ist foldl / foldr in Haskell.

Es gibt sogar ein Repository (sowas wie CVS bzw. SVN), geschrieben in Haskell: Darcs

Hier philosophiert ein Lead Developer in der Spielebranche über die Verwendung funktionaler Konzepte. Der interessante Part ist dabei der vorletzte Absatz.
Salopp gesagt: funktionale Programmierung ist toll, wenn es um Pararellisierung geht (MultiCore-Systeme!).

Zur Eleganz: Sieh dir mal Quicksort an. Eine prozedurale Standardimplementation sieht irgendwie so aus:
http://en.wikipedia.org/wiki/Quicksort#Algorithm

In Haskell:
http://de.wikipedia.org/wiki/Haskell_(Programmiersprache)#QuickSort
Was du hier siehst, ist die List Comprehension
Selbst Dinge wie das Rucksackproblem lassen sich so in einer Zeile formulieren.

Weiterhin ist Rekursion *das* Mittel, um mit Baumstrukturen umzugehen - und Bäume sind die Mutter aller Datenstrukturen :). Oh, und Pattern Matching ist auch schick.

Und noch was zur Theorie: Haskell ist lediglich aufgebohrtes Lambda-Kalkül
 
Danke für die Antwort. Aber es scheint ja so zu sein, wie ich dachte, für "richtige" Endanwenderprogramme ist es eher weniger geeignet aber für schicke Algos.

Wobei mir noch nicht so wirklich einleuchtet, wie ein Textparser gekoppelt mit C performant sein soll ?(
 
für "richtige" Endanwenderprogramme
Ich halte Googles Suchdienst schon für eine "richtige" Endanwendersoftware.

eher weniger geeignet
Die Sprache ist Turing-complete, sprich, man kann mit ihr genauso viel machen, wie mit Java, C, C++ usw.. (auf Ebene der Berechenbarkeit). Die Eignung hängt dann eher vom Benutzer ab: Nicht jeder ist dafür geeignet, die Sprache einzusetzen (nämlich nur der, der sie gelernt hat, wobei das eben mehr oder minder schwer ist, zumindest aber dem "Standard-Programmierer" fremd erscheint).
Ich behaupte mal ganz frech, dass der Durchschnitts-Codefrickler (?ordinary programmers?, wies der dieser Spielenentwickler da nennt), keine Lust / Zeit / Verständnis für das Erlernen der Sprache aufbringt. Ergebnis eben, dass sich die funktionale Programmierung nicht als Standard-Konzept durchgesetzt hat, sondern nur wenigen Freaks für Spezialanwendungen vorbehalten ist.

Oder um eine Ebene weiterzugehen: Mit VB oder Java hacken viele ein Stück Software zusammen, Mathe muss man dazu aber noch nicht können.

Weil du in deinem ersten Post die GUI ansprichst: Ich habe mir sagen lassen, dass zumindest im Bereich der 3d-Graphik (Raytracing z.b.) sehr viel funktional programmiert wird.

aber für schicke Algos.
Das klingt jetzt so, als würde "richtige" Endanwendersoftware nur unschöne Algos enthalten.
Aber ich stimme dir zu, die Masse an Mainstream-Code ist nunmal schlecht, die Perlen der Informatik findet man woanders.

Und um nicht ganz in einem Traumwolke zu verschwinden: Baumstrukturen gibt es überall, damit wirst du dich als Informatiker rumschlagen müssen. Das geht los bei Menüs (z.b. deine Menüleiste in fast jedem GUI-Programm: Ein Knopf, viele Menüeinträge, die ihrerseits evtl wieder weitere Untermenüs aufklappen. Oder eine KI, die Spielzüge vorausberechnet. Oder diverse Sortieralgorithmen (HeapSort), oder einfach nur Bäume als Speicherstrukturen (da gibt es eigene Vorlesungen darüber, soviele sind das).
Fakt ist, dass man sowas am leichtesten (ja, am leichtesten / verständlichsten) per Rekursion löst (der Baum an sich ist rekursiv definiert), und genau da lernt man in der funktionalen Programmierung, wie man damit umgeht.

Sicher wirst du im industriellen Umfeld eine andere Sprache benutzen, aber die funktionalen Konzepte wirst du häufig genug brauchen. Und da hilft es wirklich sehr, sich das anhand einer funktionalen Sprache (bzw. eines funktionalen Pseudocodes) zu überlegen, da man dann sonstigen Overhead nicht mitschleppt. Siehe z.b. Pattern Matching: formulier sowas erstmal mit if-Klauseln, und schon ist der Code deutlich unlesbarer geworden.

Im Übrigen wirst du wohl auch irgendwann die Theoretische Informatik hören (müssen), und da wirst du dich dann gelegentlich zurückerinnern.

Kurzes Fazit: Wenn dich nicht irgendwann die Lust an funktionaler Programmierung packt, wirst du Haskell z.b. wohl auch nie wiedersehen. Aber die Konzepte wirst du draufhaben, und die braucht man überall, auch in anderen Sprachen.
 
Ja mir fällt es ebend schwer als Freund des Maschienenahen ;) aber da ich mich ja auch sehr für professionelles Software Engeniering interessiere werde ich mal am Ball bleiben =)
 
Zurück
Oben