Soll ich eine funktionierende Programmiersprache lernen?


10

Ich war in letzter Zeit mehr besorgt darüber, wie ich meinen Code schreibe. Nachdem ich ein paar Bücher über Designmuster gelesen habe (und ich bin mir sicher, dass ich sie übereifrig umgesetzt habe), habe ich mein Denken stark darauf konzentriert, das zu verkapseln, was sich ändert. Ich neige dazu zu bemerken, dass ich weniger Schnittstellen und mehr methodenorientierten Code schreibe, wo ich es liebe, alten Klassen mit Prädikaten, Aktionen und anderen delegierten Aufgaben Leben einzuhauchen. Ich neige dazu zu denken, dass sich oft die Aktionen ändern, also fasse ich diese zusammen. Ich zerlege sogar oft, wenn auch nicht immer, Schnittstellen in eine einzige Methode, und dann bevorzuge ich es, einen Delegaten für die Aufgabe zu verwenden, anstatt Client-Code zu zwingen, eine neue Klasse zu erstellen.

Also ich denke es hat mich dann getroffen. Sollte ich stattdessen funktionale Programmierung machen?
Bearbeiten: Ich habe möglicherweise ein Missverständnis über funktionale Programmierung.

Derzeit ist meine bevorzugte Sprache C # und ich komme aus einem C ++ - Hintergrund. Ich arbeite als Spieleentwickler, bin aber derzeit arbeitslos.

Ich habe eine große Leidenschaft für Architektur. Meine Tugenden sind sauberer, flexibler, wiederverwendbarer und wartbarer Code. Ich weiß nicht, ob ich auf diese Weise vergiftet wurde oder ob es zum Besseren ist. Habe ich Refactoring-Fieber oder sollte ich weitermachen? Ich verstehe, dass dies eine Frage zum Thema "Verwenden Sie das richtige Werkzeug für den Job" sein könnte , aber ich würde gerne Ihre Gedanken hören.

Soll ich eine funktionale Sprache lernen? Einer meiner Angstfaktoren ist es, den Komfort von Visual Studio zu verlassen.


Sie können F # ausprobieren, wenn das Verlassen von Visual Studio ein Deal-Breaker ist.
Adam Lear

Es ist kein Deal-Breaker. Ich habe nur nicht viele andere Alternativen ausprobiert. Ich glaube, ich hatte Angst davor, ohne Intellisense, Refactoring oder ähnliche Tools zu arbeiten, und habe die Vorstellung, dass Sie am Ende wieder Code in einem einfachen Texteditor schreiben.
Erklärung

Ich bin derzeit arbeitslos ... sollte dies nicht das erste Problem sein, das behoben werden muss?
Job

Ich würde versuchen, eine Weile ohne VS zu arbeiten. Sie werden vielleicht feststellen, dass es Spaß macht, auf sehr minimalistische Weise zu arbeiten.
Zachary K

@Job, ja, aber ich bin in letzter Zeit von einer Reihe ziemlich schlimmer Ereignisse betroffen worden :) Ich habe meinen Fuß beschädigt (nun, ich codiere nicht mit meinem Fuß, aber immer noch ...), erst kürzlich, nachdem ich meinen alten Job verlassen hatte Suche nach einem neuen.
Erklärung

Antworten:


5

JA

Neues lernen sollte Spaß machen. Und wenn Sie eine neue Art des Programmierens lernen, sollten Sie ein besserer Programmierer sein. Überprüfen Sie eine von Haskell oder Erlang, beide sind funktionsfähig, aber sie sind sehr unterschiedlich. Wenn Sie sich für Haskell entscheiden, finden Sie einige Vorträge von "Simon Payton Jones" auf Youtube oder in Podcasts. Der Typ ist ein großartiger Redner.


1
Ich habe diese Antwort aus vielen Gründen gewählt. @ Zachary K sagt, es könnte Spaß machen, aus der Box eines bekannten Ortes herauszutreten und eine andere Perspektive zu haben. Ich sollte keine Angst haben , etwas Neues auszuprobieren. Es ist nicht das Ende der Tage. Haskell ist eine Sprache, die mich schon einige Male in verschiedenen Diskussionen aufgefallen ist. Ich weiß nicht , ob ich eine funktionale Sprache brauche, aber wie @Toby Allen sagt, ist dies eine großartige Möglichkeit, um zu sehen, wie andere Methoden funktionieren, und ich stimme dem zu, nachdem ich UnrealScript ausprobiert habe. @ammoQ hat den Punkt etwas verfehlt, aber ich hatte keine sehr gute Definition meiner Frage. Ich bekomme immer noch seine Bedenken.
Erklärung

Froh, dass ich Helfen kann. Viel Spaß
Zachary K

14

Heilig * * * *. Es gibt keine Silberkugel. Schritt zurück. Entspannen Sie sich, atmen Sie tief ein.

Nur weil Sie ein Werkzeug in Ihrer Toolbox haben, heißt das nicht, dass Sie verpflichtet sind, es zu verwenden. Konzentrieren Sie sich auf die anstehende Aufgabe, dh schreiben Sie ein Programm, das funktioniert, und überarbeiten Sie es, wenn Code schlecht riecht. Kapsele und abstrahiere nicht jedes kleine Detail, nur weil es sich eines Tages in der Zukunft ändern könnte. IMO ist es wirklich viel besser, direkt zu beginnen, KISS & YAGNI, und auf sich ändernde Anforderungen zu reagieren, wenn sie sich tatsächlich ändern .

Ich glaube nicht, dass Ihnen hier jemand sagen kann, ob eine funktionale Sprache besser für Ihre Bedürfnisse geeignet ist oder nicht. Weil Sie uns nicht gesagt haben, woran Sie arbeiten.


Nun, ich arbeite gerade an nichts Besonderem. Ich bin zwischen Jobs. Ich bin / war ein Spieleentwickler.
Erklärung

3
Dies ist eine gefährliche Situation in Bezug auf Überentwicklung. Keine Frist, kein Rückstand, einfach zu viel Zeit, um von Details besessen zu sein.
user281377

(Viele Vermutungen stehen bevor, da ich kein klares Bild im Kopf habe.) Ich denke, meine "Bedürfnisse" spiegelten sich mehr in der Art wider, wie ich lieber Code schreibe. Ich weiß nicht viel über funktionale Programmierung, und ich denke, der Name hat mich ein bisschen reingelegt. Ich habe nur das Gefühl, dass meine Präferenz nicht so objektorientiert ist, wie ich dachte. Vielleicht sollte es mir Spaß machen , in einem anderen Paradigma zu arbeiten?
Erklärung

Ja, ich denke es ist der Fall. Ich bin gerade in einer Lernphase, deshalb erkunde ich die Möglichkeiten des Schreibens auf besondere Weise. Bei der Arbeit hatte man oft keine Zeit, einen solchen Code zu schreiben, und man muss den Verhaltenskodex respektieren und einen einheitlichen Stil unter den Entwicklern beibehalten.
Erklärung

2
Es ist absolut in Ordnung, wenn Sie jetzt, da Sie sich zwischen zwei Jobs befinden, jedes verfügbare Werkzeug ausprobieren, aber ich fürchte, wir können Ihnen nicht sagen, ob der Schuh passt oder nicht.
user281377

12

Sie können F # abholen . Es handelt sich um eine .NET-Funktionssprache, mit der Sie Visual Studio verwenden und einen Großteil Ihres .NET-Wissens wiederverwenden können. Die Assemblys lassen sich natürlich nahtlos in C # -Baugruppen integrieren (sodass Sie C #, C ++ / CLI und F # einfach in einem Projekt kombinieren können). Die F # -Unterstützung wird mit VS Pro oder besser geliefert. Ich bin mir jedoch nicht sicher, ob es standardmäßig aktiviert ist.


Ich denke, es gibt ein Addon für F # in VS2008, aber es ist Standard in VS2010.
Apoorv020

F # funktioniert sogar mit einer kostenlosen VS-Shell.
SK-Logik

6

IMO, es lohnt sich, eine funktionale Sprache auszuprobieren. Selbst wenn Sie es nie direkt in einem veröffentlichten Produkt verwenden, hilft das Erlernen mit ziemlicher Sicherheit dabei, einen etwas anderen Blickwinkel auf die Programmierung zu geben. Selbst wenn Sie am Ende weiterhin alle Ihre "echten" Codierungen in C # ausführen, stehen die Chancen gut, dass Sie den Code, den Sie in C # schreiben, verbessern können.

Wie andere bereits erwähnt haben, ist die offensichtliche Wahl für jemanden, der an Visual Studio gewöhnt ist, F #, das im Grunde ein Ocaml / Caml / ML-Derivat ist. IMO, das war eine gute Wahl von Microsoft, um Menschen in die funktionale Programmierung einzuführen - es ist eine vollwertige funktionale Sprache, hat aber nicht annähernd so fremde Syntax wie manche (z. B. während Lisp-basierte Sprachen) haben echte Vorteile, Anfänger finden es fast immer schwer zu lesen).


2

Ja du solltest.

Wenn Sie sich für eine reine Sprache wie Haskell entscheiden, lernen Sie nicht nur eine neue Sprache, sondern auch eine neue Denkweise. Dies kann Ihnen auch später bei Ihrer proceuralen / OO-Arbeit helfen.

F # hingegen ist nicht rein, sodass Sie leicht übersehen können, was für die funktionale Programmierung wichtig ist. Yóu kann sozusagen weiterhin prozedurale Programme schreiben, die hier eine Variable mutieren, und dort einige Nebenwirkungen ausführen, nur in F # -Syntax.


Ich habe tatsächlich bei tryhaskell.org angefangen :) Es ist aufregend, neue Dinge zu lernen.
Erklärung

1

Wenn Sie bereits c # verwenden, benötigen Sie keine neue Sprache. Mit der Kombination von Erweiterungsmethoden, Lambdas und den generischen Func / Action-Typen ist es ziemlich einfach, Funktionscode in C # zu schreiben. Auf diese Weise können Sie einen Funktionsstil in verwenden die Algorithmen, bei denen es am sinnvollsten ist, ohne die gesamte Anwendung ändern zu müssen.


1
Du brauchst immer eine andere Sprache. Auch wenn Sie es nie benutzen, ist es eine großartige Lernerfahrung, eine neue Sprache zu lernen. Keine Sprache hat alles.
Toby Allen

Sie müssen immer lernen, aber Sie müssen nicht immer eine andere Sprache lernen. Der Vorteil besteht darin, dass Sie die Konzepte der funktionalen Programmierung und nicht die Sprache selbst lernen. Dies können Sie tun, ohne die vertraute Umgebung zu verlassen und das gesamte Projekt zu ändern. C # ist gut genug, und in der Praxis ist es ein großer Vorteil, nur den Funktionscode in den Algorithmen zu haben, die tatsächlich davon profitieren.
Tom Clarkson

Ja, ich denke, meine Besorgnis war eher voreingenommen, wenn es Sprachen gibt, die (syntaktisch) besser für die Arbeit mit Methoden / Funktionen geeignet sind, wie ich es oft finde, während ich dies ausprobiere. C # bietet Lambda-Ausdrücke und das ist an sich schon nett, aber wenn eine Funktion beispielsweise einen Wert ohne Parameter zurückgibt, erhalten Sie Code wie () => x, und vielleicht gibt es sauberere Möglichkeiten.
Erklärung

+1 @Toby. Ich habe erst kürzlich die UnrealScript-Referenz durchgesehen und einige interessante Sprachlösungen für die Arbeit mit Staaten usw. gesehen. Es überträgt sich auf C #, wenn es darum geht, über das Problem nachzudenken, und sie haben eine recht gute Lösung. Also ja, ich glaube, Sie lernen viel, wenn Sie aus Ihrem Sandkasten treten und Ihre Nachbarn für all den Sand und das Spielzeug plündern, das Sie finden :)
Statement
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.