Ich habe eine Situation, in der die meisten Leute in meiner Gruppe aus einem objektorientierten Programmierhintergrund stammen und wenig bis gar kein Verständnis für funktionale Programmierung haben. Nicht einmal Grundlagen wie Verschlüsse.
Irgendwelche Vorschläge, wie man sie in den funktionalen Codierungsstil einführen könnte? Viele Codierungen, die wir durchführen, können verkürzt werden, wenn wir die Funktionsweise für unsere speziellen Fälle ausführen.
Ich habe bereits einige Präsentationen über Funktions- und Codierungsparadigmen gehalten. Leider verwenden wir keine ordnungsgemäße funktionale Programmiersprache wie Haskell (im Grunde ist Legacy-Code in C, C ++, Java), sodass wir mit diesen alles tun müssen, was vorhanden ist.
functional-programming
project
Fanatic23
quelle
quelle
Antworten:
Luca Bolognese machte diese fantastische Präsentation, in der er die funktionale Programmierung (um F # zu präsentieren) anhand eines Kaffeebeispiels vorstellt, das wirklich großartig ist und mir sehr geholfen hat, die funktionale Programmierung Freunden und Kollegen vorzustellen.
Sie können sich auch eine Real World Functional Programming von Petricek ansehen, die meiner Meinung nach eine hervorragende Möglichkeit ist, funktional zu denken.
quelle
Codieren Ihre Kollegen außerhalb der Arbeit?
In Anbetracht der Tatsache, dass Sie in Ihrem Unternehmen keine FP durchführen, ist es nahezu unmöglich, jemanden dazu zu bringen, eine neue Sprache / ein neues Paradigma zu lernen, wenn er außerhalb seiner direkten Arbeitsaufgaben nichts tut.
Wenn ja, dann finden Sie interessante Projekte, die ihnen gefallen, die sich auf funktionale Programmierung beziehen, und zeigen Sie sie. Sie sind nicht in der Lage, eine Änderung zu veranlassen, daher müssen Sie die Samen säen, wenn Sie auf persönlicher Ebene Interesse haben. So wurde ich darauf aufmerksam gemacht - selbstverständlich von meinem besten Freund, der zufällig mit mir zusammenarbeitet.
Abgesehen davon schreiben die meisten Leute interne Tools, um kleine Aufgaben zu vereinfachen. Versuchen Sie, einige davon in einer funktionalen Sprache zu schreiben. Jeder, der den Code sehen möchte, wird der (hoffentlich / möglicherweise) Schönheit des Codes ausgesetzt sein und Sie wahrscheinlich danach fragen, wenn er dies tut. Das ist eine Gelegenheit, die Idee zu verkaufen.
Denken Sie daran, dass es funktionale Sprachen gibt, die auf Ihrem Stack funktionieren (Scala / Closure werden beide auf der JVM ausgeführt). Es ist nicht "rein funktional" wie Haskell, aber es ist ein guter Start auf eine lange Reise.
Wenn Sie die Kontrolle über die Einstellung haben, stellen Sie Personen ein, die über funktionale Erfahrung verfügen (oder zumindest an funktionaler Programmierung interessiert sind).
Und schließlich ... sind Sie möglicherweise in der falschen Firma, wenn Sie so leidenschaftlich gerne Funktionscode schreiben. Sie werden die Art und Weise, wie Ihr gesamtes Unternehmen Software schreibt, nicht ändern - insbesondere, wenn sie Geld verdienen und vor allem nicht in angemessen kurzer Zeit.
Hier geht es darum, es an die Entwickler zu verkaufen ... das Management ist ein ganz anderes Biest.
quelle
Der Wechsel von der imperativen zur reinen funktionalen Programmierung ist eine große Veränderung mit einer steilen Lernkurve. Ich würde vorschlagen, einen weniger schnellen Übergang zu versuchen, und in diesem Fall haben Sie viele Möglichkeiten. Zum Beispiel unterstützt Python Listenverständnis und Generatorausdrücke , Ruby unterstützt Funktionen höherer Ordnung durch Codeblöcke usw. Da Sie Java erwähnt haben, können Sie Scala ausprobieren , wenn Sie alle über einen Java-Hintergrund verfügen und volle Unterstützung für die funktionale Programmierung wünschen .
quelle
Stellen Sie einen funktionierenden Programmierer ein (oder lassen Sie den Chef einstellen)
Letztendlich wird sich dies nicht auf den Rest Ihres Teams auswirken.
Wie bereits erwähnt, würde es auch nicht schaden, sie zu ermutigen, in ihrer Freizeit Code in einer funktionalen Sprache zu schreiben.
quelle
Wenn die funktionale Programmierung in Ihren Fällen das Leben wirklich erheblich erleichtern wird, empfehle ich, einen solchen Fall zu isolieren und Ihren Kollegen gleichwertige Implementierungen in OO- und funktionalen Sprachen zu demonstrieren.
Wenn der Unterschied in der Komplexität so groß ist, wie Sie sagen, sollte dies für sich selbst sprechen.
quelle
+1 an faif für die Erwähnung von Scala: Dies begann als Kommentar zu dieser Antwort, wurde aber zu groß ...
Ich wollte etwas über funktionale Programmierung lernen (aus C / C ++, etwas Python und rostigem Java); Ich habe versucht, mit Ocaml und dann mit Haskell und Just Didn't Get It am tiefen Ende einzutauchen. Dann habe ich Scala ausprobiert und festgestellt, dass ich damit anfangen kann, funktionale Dinge in einer komfortablen OOP / Java-ey-Umgebung zu verwenden, in der ich leicht auf den bekannten imperativen Stil zurückgreifen kann, wenn mir ein funktionaler Ansatz entgeht. Einige mögen sich über das "Multiparadigma" beschweren, "hybride" Natur der Sprache bedeutet, dass Sie nie gezwungen sind, sich zu strecken, um "rein funktional" zu werden, aber ich würde sagen, es bedeutet, dass Sie pragmatisch sein können und wissen, dass Sie es tun werden in der Lage sein, echte Dinge einfach zu erledigen, wenn Sie müssen.
Ein paar Jahre später (und mehr als 200 Project Euler Scala-Lösungen in Scala später) hat die Begegnung mit Funktionen definitiv mein Python beeinflusst (viel mehr Verwendung von Map, Filter, Reduce, Lambdas, Itertools, Listenverständnis und Weitergabe von Funktionen als ich). d jemals zuvor in Betracht gezogen) und in geringerem Maße C ++: Vielleicht ein bisschen mehr Versuch, die funktionalen Fallen von STL zu verwenden, aber die Hauptauswirkung ist, dass ich mich mit der Verwendung von TBBs Map / Reduce-Konstrukten viel wohler fühle und es wirklich mag, wie die Ausnutzung der Unveränderlichkeit die Komplexität zähmen kann in Multithread-Code.
Wenn ich Sie wäre, würde ich persönlich dafür eintreten, Scala in einige Ihrer Java-Welt-Entwicklungen einzuführen, vorzugsweise indem ich einige Beispiele dafür zeige, die etwas enorm vereinfachen und die von Ihnen behaupteten Vorteile hervorbringen. Was als nächstes passiert, ist das ganze Geschäft, neue Ideen zu "verfechten" und Veränderungen voranzutreiben ... was so klingt, als ob es ein viel größeres Problem sein könnte.
quelle
Ich möchte einen schrittweisen Ansatz mit Scala empfehlen. Und ich würde empfehlen, mit Scalas Schöpferbuch "Programming in Scala, 2nd Edition" zu beginnen . Dieses Buch ist fantastisch darin, langsam eine Einführung in die (FP) funktionale Programmierung mit Scala zu erhalten. Und indem es den Schritt in Richtung FP zeigt, lehnt es OO nicht ab. In der Tat nutzt es es. Ich mache jetzt meinen zweiten Durchgang.
Grundsätzlich erlaubt Scala, Java / OO "ohne Semikolons" auszuführen. Und dann kann man ein bisschen FP ausprobieren, ohne das ganze Schwein gehen zu müssen. Wenn ich mich zum Beispiel auf FP ausbilde, konzentriere ich mich normalerweise auf referenzielle Transparenz auf Klassenmethodenebene, lasse meine Methoden jedoch so viele Variationen, Veränderlichkeiten und Imperative aufweisen, wie es für einen ersten Durchgang erforderlich ist eine Implementierung. Dann konzentriere ich mich darauf, jede Methode langsam zu überarbeiten, um sie in Richtung reines FP zu bewegen. Außerdem benutze ich die Schwesterseite von StackOverflow, CodeReview, um Hilfe bei meinem mentalen / denkenden Übergang zu erhalten. Hier ist ein Beispiel eines kürzlich veröffentlichten Beitrags, den ich genau dazu gemacht habe.
Wie auch immer, viel Glück auf Ihrer FP-Reise. :) :)
quelle