Wie können Sie Ihrem Team den funktionalen Codierungsstil vorstellen?

10

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.

Fanatic23
quelle
11
Bevor Sie fragen, wie, fragen Sie warum . Arbeiten Sie an Problemen, die in einem funktionalen Stil leichter zu lösen sind als in einem objektorientierten Stil? OO funktioniert für viele Dinge sehr gut (deshalb war es so erfolgreich) und für andere nicht so gut. Ihrer Frage nach klingt es einfach so: "Ich möchte unseren Code in funktionalem Stil erstellen, nur weil ich funktionale Programmierung für cool halte, auch wenn wir keine Sprache haben, die dies unterstützt, und das Team nicht weiß, wie." es zu tun!" Das ist eine sehr schlechte Idee. Denken Sie daran, das richtige Werkzeug für den richtigen Job.
Mason Wheeler
2
@ MasonWheeler: Ich weiß, warum wir funktional brauchen. Nicht in coole Sprache des Monats Sache. Dafür zu alt.
Fanatic23
1
Nehmen wir an, jemand kennt Haskell. Könnten Sie es in Ihrem System zum Laufen bringen?
JeffO
4
Es sieht so aus, als würde funktionale Programmierung ein Problem lösen, das Ihr Team nicht hat. Sie wissen, wie man C, C ++ Java codiert, die keine natürlichen Kandidaten für funktionale Programmierung sind (das Implementieren von Verschlüssen ist in diesen Sprachen einfach schrecklich).
James Anderson

Antworten:

8

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.

SRKX
quelle
Diese Präsentation ist fantastisch ... zumal sie von einem Vampir gegeben wird !! LOL !! j / k .. die Jungs haben Charisma ..
Hanzolo
7

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.

Steven Evers
quelle
2

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 .

Sakisk
quelle
2

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.

Dynamisch
quelle
2

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.

funkybro
quelle
2

+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.

timday
quelle
1
@timeday Sehr gut gesagt. Ich bin ein Java / OO-Typ. Ich habe Scala vor einem Jahr abgeholt. Und es war ziemlich herausfordernd für mich, FP zu lernen. Ich mache ein bisschen nach dem anderen und sitze damit. Ich versuche nicht, alles auf einmal zu bekommen.
chaotic3quilibrium
1

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. :) :)

chaotisches Gleichgewicht
quelle