Funktionale Programmierung in der Praxis?

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.255
Hallo,
heute mal eine weniger technische Frage: Ich hätte gerne von erfahrenen Programmierern gewusst, welche Rolle funktionale Programmierung heutzutage in der Praxis spielt.
Ich bekomme nächstes Semester leider nicht alle interessanten Vorlesungen unter, und muss nun entweder funktionale Programmierung oder Datenbanken 2 streichen.
Da ich später gerne in der Wirtschaft arbeiten möchte, interessieren mich reine Forschungs-Zückerli (zB funktionale Programmierung des funktionalen Programmierens Willen) eher weniger - ich will Ergebnisse sehen :)

Vielen Dank bereits.
Gruß
 
In hindsight muss ich sagen, hat mir die funktionale Programmierung Vorlesung schon viel gebracht auch wenn ich es im Moment nicht benutze. Aber alleine JS fiel mir leichter zu verstehen. Oder auch gewisse Ein-Zeiler in Python kann man besser nachvollziehen anstatt nur Stackoverflow zu kopieren ohne jedoch verstanden zu haben warum das eigentlich funktioniert.
Würde ich auf jeden Fall anhören - wenn nicht nächstes Semester dann danach.
 
Moin,

Du findest die ganze Bandbreite, von historisch gewachsener Ignoranz über Applikationen bei denen nicht so ganz klar ist ob das wirklich Funktionale Programmierung sein soll bis zu den positiv Beispielen aus der Vorlesung...

Ich denke wenn Du Software entwickeln willst solltest du Funktionale Programmierung Datenbanken 2 vorziehen, wenn es dich eher Richtung Application Management oder Datenbank Entwicklung zieht, empfehle ich Datenbanken 2 :-).

Beste Grüße
Sebastian
 
Wir nutzen bei uns funktionale Programmierung für unsere Build-Umgebungen. Dort definieren wir eine Reihe von Funktionen, wie welche Build-Schritte auszusehen haben, ein paar andere Funktionen, die die Abhängigkeiten definieren und das CI-Tool ruft dann nur die passende Funktion auf.

Wobei ich fairerweise sagen muss, dass die Ausführungslogik recht einfach ist, also jede Form der Programmierung das lösen könnte. Einen echten Nutzen für funktionale Programmiersprachen könnte ich mir zu Erstellung von günstigen Chips oder ASICs denken. Für die meisten Bereiche sind diese aber eher eine Rand-Erscheinung.
 
Vollständig funktionale Programmierung mit Sprachen wie Haskell, Erlang, Clojure oder F# fristet mE auch heute noch ein Nischendasein, allerdings haben einige funktionale Features Einzug in Mainstream-Sprachen wie Java, C#, PHP und Javascript Einzug gehalten - ich denke da an anonyme Funktionen / Lambda-Ausdrücke und Funktionen höherer Ordnung. Ich gehe davon aus, dass das Interesse an FP eher zu- als abnehmen wird, weil man in Zeiten von Mehrkern-CPUs festgestellt hat, dass sich funktionaler Code meist einfacher parallelisieren lässt als imperativer.

Außerdem erweitert FP-Kenntnis deinen Horizont als Programmierer. Wenn du einmal algebraische Typsysteme und Pattern Matching kennengelernt hast, wirst du Sprachen wie Java mit anderen Augen betrachten :)

Datenbanken sind zwar äußerst praxisrelevant, aber in meiner Erfahrung sind die Themen, die in DB-Vorlesungen gelehrt werden, nicht besonders hilfreich. Ist schön, mal die Theorie gelernt zu haben, aber mit relationaler Algebra hab ich seitdem nie wieder "gerechnet". Und das strikte Normalisieren, das viele Studenten aus der Vorlesung mitnehmen, ist in der Praxis häufig nicht nur überflüssig, sondern sogar hinderlich. Aber meine liegen auch schon über 10 Jahre zurück - kann natürlich sein, dass das mittlerweile besser geworden ist.
 
Solange du nicht schon weißt, dass du dich auf Datenbanken spezialisieren möchtest, erweiter deinen Horizont mit funktionaler Programmierung.
 
Ich würde Dir empfehlen, zumindest ein fundamentales Grundverständnis von Datenbanken anzueignen, vor allem, wenn Du planst, später in der freien Industrie zu arbeiten. Ich mach von Zeit zu Zeit in meinem Job als SW-Entwickler immer wieder die Erfahrung, wie wenig Grundlagen unsere Junior-Programmierer hier mitbringen. Teilweise ist ihnen das Konzept der Transaktionen völlig unbekannt - ein absolutes No-Go in meinen Augen.

Allerdings ist auch das Kennen der funtionalen Programmierung keine Zeitverschwendung - hatte damit vor nicht allzu langer Zeit ein Projekt, bei dem die Client-Logik in JavaScript rein funktional abgebildet war. Dagegen war es auf dem Java-basierten Backend (damals noch ohne Lambdas!) schon fast Spaghetti-Code... total umständlich einfach.
 
Zuletzt bearbeitet:
Ich hab FP bisher auch eher als Nische wahrgenommen. Du findest vereinzelt Jobs dafür (z.B. Haskell), aber selbst da ist es glaub ich so, dass die Stellen eher geschaffen werden, um dem Hype (der bei FP nicht wirklich einer ist, immerhin ist das Prinzip ewig alt) gerecht zu werden und attraktiver zu wirken.

Persönlich fand ich es auch eine Zeit lang interessant, besonders mit dem Aufkommen von Scala. Allerdings wurde ich da schnell desillusioniert. Zwar finden das die meisten Kollegen spannend, jedoch verbringen sie dann mehr Zeit mit der Umsetzung der gleichen Sache, die auf "üblichem Wege" deutlich schneller fertig geworden wäre. Zudem ist die Lösung für den nächsten dann oft genug schwerer nachzuvollziehen, eben weil es nach wie vor ungewohnt ist.

Auf der anderen Seite muss ich aber sagen, dass ich auch wenig echte OOP in freier Wildbahn sehe, obwohl viele denken, das wäre das Paradigma, nach dem sie arbeiten, weil sie ja (z.B.) Java schreiben. Fertig wird die Software trotzdem und funktionieren tut sie auch. Ist natürlich nicht akademisch korrekte OOP, aber das interessiert am Ende des Tages niemanden, der die Rechnung bezahlen muss.

Ich denke das beschreibt, nach meinem Gefühl, FP auch ganz gut. Es ist akademisch und für wessen Hirn das funktioniert, der darf gern damit glücklich werden. Für mich ist es eher anstrengend ohne fühlbaren Mehrwert, aber jeder tickt anders und es gibt bestimmt auch Geschäftsfelder, wo es wirklich sinnvoll ist (Big Data usw.).

Trotzdem würde ich wohl FP der DB-Vorlesung vorziehen, da diese (wie hier bereits erwähnt wurde), vermutlich auch sehr realitätsfern akademisch ist.
 
Vielen Dank für die hilfreichen Antworten.
Eigentlich wollte ich mein Studium recht breit gefächert halten und etwas Tiefe in KI (Stichworte Machine Learning, Data Mining) und Automatisierung/Robotik stecken.
Leider wird beides bei uns hautpsächlich im Master angeboten (plane gerade mein letztes Bachelorsemester). Ich werde nun wohl doch auf meine erste Automatisierungs-Vorlesung verzichten und dafür die Funktionale Programmierung sowie Datenbanken 2 (das bringt mir einige Vorteile bei meiner derzeit zu schreibenden Bachelorarbeit) belegen.

Zum Thema Grundlagen in den Datenbanken etc.: Ich habe vor dem Studium einige Jahre gearbeitet (Ausbildung Fachinformatiker + Fortbildungen). Klar ist mein Horizont begrenzt, aber das Gängigste aus der Praxis sollte ich sowieso bereits kennen.
 
Zuletzt bearbeitet:
Wenn du Richtung Machine/Deep Learning und Data Mining gehen willst, schau dir unbedingt python an. Wird zumindest vieler Orts gefordert. Gibt da auch gratiskurse bei udacity
 
te one schrieb:
heute mal eine weniger technische Frage: Ich hätte gerne von erfahrenen Programmierern gewusst, welche Rolle funktionale Programmierung heutzutage in der Praxis spielt.
Bei mir sehr viel. Wobei jetzt nicht ausschließlich funktionale Programmierugn eine Rolle spielt, aber es gehört zum Repertoire genauso wie objektorientierte Programmierung und andere Stile. Also nicht nur in der Form a-la Java kann jetzt lambda-Ausdrücke und ist deshalb auch funktional oder so. Sondern richtig in einer originär funktionalen Sprache.


te one schrieb:
Ich bekomme nächstes Semester leider nicht alle interessanten Vorlesungen unter, und muss nun entweder funktionale Programmierung oder Datenbanken 2 streichen.
Naja. Mal ehrlich. Dieses Datenbankzeugs eignet man sich nebenbei an. Das ist jetzt nicht so die intellektuelle Herausforderung. Und damit meine ich jetzt nicht nur SQL-Statements, sondern eben auch grundlegende Dinge.

Denn wenn man programmieren kann, hat man automatisch auch ein Zugang dazu, wie Datenbanken intern funktionieren und warum bestimmte Dinge so gemacht werden wie sie gemacht werden.

Funktionale Programmierung ist jetzt auch kein Hexenwerk, aber ich denke da ist die Hürde deutlich höher. Weils auch weiter weg vom Mainstream ist und man davon üblicherweise nicht soviel mitbekommen hat.
Den sonstigen hier genannten Argumenten kann ich mich da im Großen und Ganzen anschließen.
Ergänzung ()

Tumbleweed schrieb:
Persönlich fand ich es auch eine Zeit lang interessant, besonders mit dem Aufkommen von Scala.
Wobei gerade Scala alles andere als ein gutes Beispiel für gelungene Umsetzung ist.
Zudem denke ich nicht, dass Scala wirklich gut dazu geeignet ist funktional programmieren zu lernen. Es ist dem funktionalen Paradigma nicht wirklich verschrieben, daher tappt man leicht in die Falle sein Zeug auf bisher gewohnten Wege zu lösen. Scala kann eine Option sein, wenn man funktionales Programmieren verinnerlicht hat.
Aber ich glaube, selbst dann wäre es nicht die Sprache meiner Wahl. Da muss dann noch hinzu kommen, dass man ohnehin mit der JVM was macht und da der Integrationsvorteil zu tragen kommt.

Tumbleweed schrieb:
Allerdings wurde ich da schnell desillusioniert. Zwar finden das die meisten Kollegen spannend, jedoch verbringen sie dann mehr Zeit mit der Umsetzung der gleichen Sache, die auf "üblichem Wege" deutlich schneller fertig geworden wäre. Zudem ist die Lösung für den nächsten dann oft genug schwerer nachzuvollziehen, eben weil es nach wie vor ungewohnt ist.
Ja. Nur kann man das nicht dem funktionalen Paradigma anlasten, sondern den jeweiligen Entwicklern.

Tumbleweed schrieb:
Auf der anderen Seite muss ich aber sagen, dass ich auch wenig echte OOP in freier Wildbahn sehe, obwohl viele denken, das wäre das Paradigma, nach dem sie arbeiten, weil sie ja (z.B.) Java schreiben. Fertig wird die Software trotzdem und funktionieren tut sie auch. Ist natürlich nicht akademisch korrekte OOP, aber das interessiert am Ende des Tages niemanden, der die Rechnung bezahlen muss.
Richtig. Akademisch korrekt sollte nicht der Maßstab sein. Nichtsdestotrotz lohnt es sich eine Software sauber zu implementieren. Klar im ersten Schritt ist es einfacher, wenn man einfach die Lösung hinfrickelt so nach dem Motto "Hauptsache es funktioniert". Die Probleme fangen dann an, wenn die Software gewartet wird, neue Funktionen eingebaut werden sollen usw. Da zahlt man das vermeintlich gesparte Geld dann doppelt und dreifach wieder drauf.

Tumbleweed schrieb:
Ich denke das beschreibt, nach meinem Gefühl, FP auch ganz gut. Es ist akademisch und für wessen Hirn das funktioniert, der darf gern damit glücklich werden.
Für mich ist es eher anstrengend ohne fühlbaren Mehrwert, aber jeder tickt anders und es gibt bestimmt auch Geschäftsfelder, wo es wirklich sinnvoll ist (Big Data usw.).
Ich hab das funktionale Paradigma auch nicht mit der Muttermilch aufgesogen und hatte durchaus meine anfänglichen Schwierigkeiten (ist aber nix ungewöhnliches; das war damals als OOP aufkam auch so).
Inzwischen muss ich aber sagen, dass sich das funktionale Paradigma für mich viel natürlicher anfühlt. Wobei ich jetzt auch kein Verfechter der reinen Lehre bin. So nutze ich keine Monaden oder solche Sachen. Und wenn irgendwo andere Paradigmen wie OOP sinnvoller sind, dann setze ich das natürlich auch ein.

Insofern war das auch nicht eine Ablösung, sondern eine Erweiterung des Fundus an Möglichkeiten aus die man schöpfen kann.


Tumbleweed schrieb:
Trotzdem würde ich wohl FP der DB-Vorlesung vorziehen, da diese (wie hier bereits erwähnt wurde), vermutlich auch sehr realitätsfern akademisch ist.
Ich weiß gar nicht, warum funktionale Programmierung immer als akademisch "verschrien" ist. Aber gut. Dann sollte man auch dazu sagen, dass da draußen in der PRAXIS viel Schrottsoftware unterwegs ist. Insofern ist das akademisch vielleicht auch eher als Ritterschlag zu verstehen. :-)
Realitätsfern .... weiß ich nicht. Wenn bekannte Unternehmen wie facebook (Haskell), Microsoft (F#) oder Google das einsetzen, dann kann ich die Einschätzung nicht ganz teilen. In der Telekomunikationsbranche wird oft Erlang eingesetzt. Ich behaupte mal, wenn man funktionalen Code rausstreicht, würde vieles nicht mehr funktionieren.

Ob man das dann noch als realitätsfern oder als akademische Spielerei bezeichnen kann, würde ich also so nicht unbedingt sagen. Gut. Das ist vielleicht bei Dir und in Deinem Umfeld nicht relevant. Aber daraus lässt sich halt nicht unbedingt auf die Gesamtheit interpolieren.

Möglicherweise wird die funktionale Programmierung in Zukunft wieder zu einem festen Bestandteil werden (wie ja unterschiedliche KI-Techniken jetzt auch wieder Aufleben).

Warum man das vielleicht nicht immer so wahrnimmt, liegt möglicherweise auch daran, dass jetzt halt so die Generation "Java" in der Arbeitswelt sehr verbreitet ist. Klar. Für die ist es alles neu und ungewohnt. Die nächste Generation geht damit vielleicht schon ganz anders um. Dementsprechend wird es auch künftig vielleicht ganz anders gefordert sein.
 
Schwierig zu sagen, wie sich funktionale Programmierung entwickelt.
Auf jeden Fall ist die aktuelle Durchdringung in der Industrie eher bescheiden. Wir benutzten das allerdings sehr intensiv zum Bewerten von komplexen Finanzprodukten.

Je nachdem wie viel du bereits im ersten Datenbankkurs gelernt hast würde ich eine Einführung in Funktionale Programmierung definitiv einem zweiten DB Kurs vorziehen.
Die Grundkonzepte der FP sollte ein guter Entwickler beherrschen und erweitern den Horizont.
 
Zurück
Oben