Ich stimme mit dem Hauptgedanken der akzeptierten Antwort überein, und da Sie sich im Grunde genommen mit Erlang beschäftigen, klingt es so, als hätten Sie wahrscheinlich ein ziemlich gutes Verständnis dafür, wie Sie lernen, und brauchen nur einen kleinen Schubs in der richtigen Richtung Richtung, so klar, es war eine gute Antwort für Sie ... Aber ich denke, ich würde die Frage ein wenig anders angehen, da ich sehe, dass diese Antwort mir überhaupt nicht viel geholfen hätte; Ich codiere immer, um zu lernen! Also, hier sind meine Gedanken ...
(Übrigens neige ich dazu, detaillierter zu arbeiten, beispielsweise für Kapitel in einem Buch, und ich bin mir sicher, dass ich meine Instinkte hier nicht vollständig unterdrücken kann , aber ich werde es anders versuchen; ich bin es Ich werde hier nur meine Gedanken zusammenfassen und für den Fall, dass jemand mehr Details zu irgendetwas möchte oder meint, dass etwas, das ich sage, in diesem Format irreführend ist, werde ich mein Bestes tun, um mich daran zu erinnern, die Antworterinnerungen durchzugehen ...)
Um zu versuchen, mich auf dem Laufenden zu halten, verstehe ich die Stoßfragen, die im OP gestellt werden. Ich werde mich auf ein Minimum beschränken, um das zu erklären.
Zuerst die schnellen Antworten:
befand ich mich in einer ähnlichen situation? Zumindest war es ähnlich; Ich war in leitender Position bei vielen verschiedenen Projekten, die nichtsdestotrotz miteinander zu tun hatten ... (CRM / Web / DB / Datenintegration / etc.)
Wie / warum habe ich den Sprung zu funktional gemacht? " Ich sah einige LINQ-Beispiele und obwohl ich definitiv von einer Art integrierter, statisch typisierter Abfragesprache geträumt hatte [da ich hauptsächlich statisch typisierte Sprachen (hauptsächlich C ++ und später C #) verwendet hatte )] während meiner gesamten Karriere ... Aber es war eine ziemlich schnelle Umgebung, in der ich mich befand, und obwohl ich es oft geschafft hatte, zu sehen, was in der Vergangenheit auf mich zukam, hatte ich es nie wirklich durchdacht, so dass ich es nie vorhergesehen hatte Genauso einfach könnte / würde ich Operationen an einfachen alten Objekten zulassen (lol!). Als ich es sah, wusste ich, dass ich es haben musste. Das ist das Warum und der Beginn des Wie: Ich habe mich darauf konzentriert, LINQ zu verstehen .
Vier Gedanken ... ähm, nein, das ist nicht richtig ... Vorüberlegungen
Wenn ich Martijn Verburgs Antwort lese , fällt mir die Erwähnung der Geschäftsfunktionalität sofort ein, Code für alles, woran ich arbeite, zu implementieren Ich bin mir nicht sicher, ob ich irgendetwas direkt für die Arbeit (oder die bevorstehende Arbeit) hatte, das mir die Aufregung / Leidenschaft gegeben hätte, die Sie meiner Meinung nach für die ersten Probleme haben sollten, mit denen Sie sich befassen ...
Ich war fast ausschließlich in statisch getippten Sprachen verankert + OOP-Metaphern und -Muster + was auch immer ich versehentlich mein Gehirn umwickelte, während ich meine tatsächlichen Probleme über die Jahre hinweg löste ... Wenn du überhaupt so bist wie ich, Sie haben wahrscheinlich viel Gehirn für Dinge, die Ihnen mit LINQ / FP nicht so viel helfen.
Ich denke, es ist ein bisschen wie reine prozedurale vs. OO-Programmierung: Es gibt eine Menge prozeduraler Dinge, die Sie in OOP verwenden werden, aber diejenigen, die von C ++ zu C ++ kommen, ohne dass grok / ken / "get" OO zur Priorität gemacht wird am Ende sehr, sehr schlecht in C ++. Tatsächlich habe ich verdammt viele (15+) langjährige Firmware- und Gerätetreiberentwickler interviewt, die wirklich dachten, sie kannten C ++, aber höchstens ein schrecklich grundlegendes / lehrbuchartiges Verständnis von C ++ hatten, mit praktisch keinem Verständnis von oder Erfahrung mit OOP - weil sie OOP nie wirklich gemacht haben ... Sie haben Singleton-Mehrzweckklassen mit statischen Elementen und statischen Funktionen mit einer gewissen Anzahl von nicht-statischen / nicht-singleton-Klassen geschrieben, die als Strukturen verwendet wurden.
Und FP hat einige (für diejenigen, die sich nicht mit dem Paradigma auseinandersetzen) Konzepte und andere Dinge, die damit einhergehen, und obwohl ich festgestellt habe, dass die Hybridisierung vieler Techniken für mich ideal ist, verstehe ich mehr und Je mehr Zeit vergeht, desto begrenzter war mein Denken, bevor ich echte funktionale Fähigkeiten in mein Toolset einbaute. In der Vergangenheit war es mir gelungen, viele Dinge auf eine Art und Weise umzusetzen, die ein bisschen kreativer war als die der meisten OO-Programmierer, aber wenn ich die Konzepte verwende, war mein Denken vorrangig ... Es gibt ganze Klassen von Problemen, die gelöst werden können in ein paar Zeilen, die in C ++ / C # eine Menge Arbeit gekostet haben.
plötzlich findest du dich ...
In einem "zu langen" Beitrag
Sie befinden sich in einem Labyrinth verdrehter "nicht gelesen" s, alle gleich.
Sie sehen in naher Zukunft eine Telefonkonferenz, die sich rasch nähert.
> knapp
Uhhuh. Sicher. Okay, wir werden sagen, der "knappe" Modus ist "an".
Sie sehen in naher Zukunft eine Telefonkonferenz, die sich rasch nähert.
> was soll das heißen
Ich sag bloß'. Musstest du heute morgen nichts tun?
Sie sehen in naher Zukunft eine Telefonkonferenz, die sich rasch nähert.
> Hey, ist das ein Greuel hinter dir?
Was!? WO?! [rennt schreiend weg]
> Entschuldigung, ich habe nicht verstanden, WAS WO, umformulieren?
[rennt weiter und schreit, Sarkasmus unbemerkt]
Also ... Was soll ich lernen, liebe PSE, liebe PSE?
Ich persönlich habe in C # mit LINQ angefangen. Es erlaubte mir, ein paar Konzepte gleichzeitig vorzustellen, und während ich ständig über FP und seine Konzepte und mehr über LINQ und die Beziehung zwischen den beiden las, gab es mir einen Weg nach vorne, während ich noch produktiv arbeitete. Ich fügte einige Dinge gleichzeitig hinzu, die Datenabfragen wurden schnell zu einem nützlichen Werkzeug für mich, ohne dass ich eine Tonne verstehen musste.
Wenn ich jetzt zurückblicke, wünschte ich mir, ich könnte mein nächstes Projekt (etwa ein Jahr später in Angriff genommen) zuerst durchführen. Ich habe mich einigermaßen mit F # vertraut gemacht (was mir übrigens einen großen Vorsprung beim Erlernen von ML (Metasprache) und anderen Derivaten (z. B. auch OCaml ) verschafft hat .)
Grundsätzlich denke ich, dass eine anständige Antwort auf das, was 'davon abhängt, ein gutes Paar von Programmierproblemen zu finden, das Sie interessiert, aber natürlich muss es mit ein bisschen FP gepaart werden, das Sie lernen möchten ... (und Sie können spülen / Wiederholen / Aufschäumen, nachdem Sie etwas von der Liste gestrichen haben ...) Und natürlich lernen Sie am Ende immer etwas mehr als die Hauptsache, die Sie sich vorgenommen haben. Zuerst machte ich ein paar kleine Schritte, aber dann machte ich größere Dinge und ließ die kleineren Dinge an ihren Platz fallen, während ich diese machte.
Was schwimmt zuerst auf Ihrem Boot? Besonders am Anfang ist es am besten, etwas Spaßiges und Aufregendes (für Sie) zu haben, und das wird Ihr Interesse so hoch halten, dass es sich für Sie lohnt. Also, IOW-Probleme, an denen gearbeitet werden muss, und Techniken, die diese Probleme angehen ... Zuerst werden LINQ- und Inline-Daten für mich abgefragt. Rekursion war eine andere für mich, einschließlich Schwanzrekursion, ich grabe das GodelEscherBach-ness davon; und ich hatte über Schwanzrekursion gelesen. Ungefähr zu dieser Zeit wurden die Dinge, an denen ich arbeitete, auf Eis gelegt und ich hatte einen großen Zeitblock, so dass ich noch eine ganze Weile dranbleiben konnte. Mit weniger Unterbrechungen war es einfacher, aber weil ich Dinge auswählte, die mir Spaß machten, war es auch bei Arbeitsunterbrechungen nicht allzu schwer. :)
Und obwohl ich nichts Cooles gefunden habe, kann ich Ihnen von einem selbstbewussten Krebs-Programm erzählen, aber ich habe es geschafft, ziemlich gut darin zu werden.
Und ... Womit soll ich es lernen, liebe PSE, liebe PSE, womit?
Zu diesem Zweck verwendete ich verschiedene Algorithmen, an denen ich mich sowieso gerade interessierte, und verschiedene Dinge, an denen ich mich fragte, ob Sie F # können, und wenn mir die Ideen ausgehen, ging ich gegen 99 Flaschen Bier und das Projekt Euler vor Probleme ...
Ich bin sicher, Sie können viele Dinge finden, die Sie interessieren, für die FP relevant ist. Es bietet alles, von Verbesserungen bis hin zu OOP, mit denen Sie die Dinge etwas prägnanter formulieren können, bis hin zu einer Form, die Sie nicht erkennen und wahrscheinlich nicht einmal das mentale Modell hatten, das Sie ausdrücken können Vor.
Aber ... da ist ein Loch in meinem Modell, liebe PSE, ein Loch ...
Und aus diesem Grund ist es wichtig, dass Sie sich vor allem zu Beginn, aber wirklich während Ihrer gesamten Lernzeit (und ist es nicht immer wahr, wenn Sie etwas lernen?) Zwischen den Problemen zumindest ein wenig Zeit lassen, um Dinge zu lesen, die nichts miteinander zu tun haben noch FP und Zeit zum Lesen des von Experten geschriebenen Quellcodes, vorzugsweise zur Lösung gleicher oder ähnlicher Probleme; sowie ihre Erklärungen der Dinge ...
Und die ganze Zeit musst du dein Gehirn anstrengen, um alles zu verstehen, nicht aus deiner alten Perspektive, sondern aus FP selbst ... Irgendwann hat es für mich geklickt und ... das, was ich am besten beschreiben kann das Niederländisch wird mehr oder weniger fließend; Irgendwann habe ich es geschafft, mich ausreichend in die Denkweise einzubringen (ich habe es durch Eintauchen gemacht, was im Grunde das ist, was ich hier beschrieben habe).
Und schließlich tat ich es; Es gelang mir, alles zu verinnerlichen und mein Gehirn herumzudrehen, bis FP / LINQ herauskam, ohne dass ich mich auch nur anstrengen musste, um es wieder in OOP zu übersetzen. (Ja, das habe ich getan. Ich musste etwas haben, an das ich meinen Rock hängen konnte. Hut. Wie auch immer.)
Abschließende Gedanken...
Meine Güte, es scheint, Sie verlieren Ihre Fähigkeit, sich Ihre Unterschrift klug vorzustellen
Abschnittsüberschriften. Schade.
Die Telefonkonferenz rückt immer noch rasch näher. Es erscheint jetzt viel größer.
> ja, ja, na ja .. kurz und bündig. Wie ich sehe, hast du es geschafft, diese Grauen zu verlieren.
Anruf schließen, dass ... nun ja, ich bin ter ... OH NEIN ES IST ZURÜCK!
AAAAAAAHHHHHH !! [rennt schreiend davon]
Die Telefonkonferenz rückt immer noch rasch näher.
Es ähnelt irgendwie Sir Lancyjohn Cleezewiz.
Es ist fast an dir.
> Hey, beeil dich zurück! Ich habe ein Experiment mit dir zu versuchen! (und ein Po-Ta-To)
Natürlich finden Sie im Internet eine Fülle von Informationen zu FP. Hauptsache ist, grundlegende Konzepte zu verstehen und dann zu lernen, sie anzuwenden. Erfahren Sie zum Beispiel, warum Unveränderlichkeit für FP wichtig / nützlich ist. Ich empfehle dringend, ein wenig Theorie zu lernen, um zu allem beizutragen, zum Beispiel, wie reines FP für formale Beweise viel zugänglicher ist. Dies war eine treibende Kraft hinter dem Vorfahren von F #, ML. YMMV natürlich magst du jemand sein, dem die Tränen langweilen. In diesem Fall gibt es viele Beispiele, viele Versuche und Irrtümer, um genau zu sehen, warum die verwendeten Techniken so sind, wie sie sind. Moment der Glühbirne.
Also lasse ich es erstmal dabei. Hoffe, dass dies für jemanden von Nutzen ist. Ich wollte ein bisschen mehr über bestimmte Dinge lernen, aber im Moment habe ich keine Zeit mehr. Ich hoffe, dass ich bald etwas Zeit finde, um darauf zurückzukommen, obwohl es eine lange Woche für mich sein wird, also wird es wahrscheinlich zumindest das Wochenende sein.
<3 "Einführung von GRUEBOL, eine Lücke; nur bis SnozzML fertig ist. Es sollte bald sein; diesmal hat mir ein riesiges Komitee geholfen." - Grace Hopperwit Egghead, Berühmte letzte Worte , XX97 GUE <3