it-swarm.com.de

Was sind die Vorteile von LISP und Haskell? Werden sie mich zu einem besseren Programmierer machen?

Ich weiß, dass LISP und Haskell logische bzw. funktionale Programmiersprachen sind, aber was genau bedeutet das? Wie unterscheiden sie sich von anderen Sprachen? Ich habe gehört, dass das Erlernen dieser Informationen Sie zu einem besseren Programmierer macht und Ihre Logik verbessert. Stimmt das, und wenn ich LISP oder Haskell auf ein kompetentes Niveau lerne, wird sich meine Programmierung verbessern und ich kann Probleme in jeder Sprache besser behandeln? Ich wollte nur wissen, ob sie die Mühe des Lernens wert sind. Sind diese Sprachen auch in Bereichen wie GUI und Grafik nützlich oder nur für Konsolenanwendungen?

42
Logan545

Es ist sehr ähnlich, als würde das Erlernen von Mathematik Ihre analytischen Fähigkeiten verbessern und das Erlernen von lateinischer/klassischer Literatur Ihre Schreibfähigkeiten verbessern.

Leute, die diese Sprachen entworfen haben, haben sich Gedanken darüber gemacht, was das Schreiben eines Programms bedeutet. Und diese Sprachen sind das Ergebnis dieser Forschungen.

Das heißt, Lernen Java macht Sie auch zu einem besseren Programmierer. Und Lernen C. Der wahre Vorteil ergibt sich aus dem Erlernen von Sprachen mit unterschiedlicher Philosophie. Dann können Sie Ihre eigene Meinung darüber haben, wie ein Programm aussehen sollte geschrieben sein.

Bearbeiten

Mir ist klar, dass diese Antwort für Leute, die Haskell und/oder LISP noch nicht gelernt haben, nicht so nützlich ist. Hier sind einige Beispiele, um weiter zu erklären, was ich meine

LISPELN

LISP ist der Ansicht, dass die Syntax minimal sein sollte und dass alles entweder eine Liste oder ein Grundelement sein sollte (LISP steht für List Processing). Sogar Programme sind hauptsächlich Listen, die andere Listen und Symbole enthalten. Mit LISP können Sie Programme als Liste bearbeiten und neue Programme im laufenden Betrieb generieren. Daher das ganze Motto code is data and data is code.

Die direkte Folge ist, dass Sie mit den LISP-Sprachen jede gewünschte Schnittstelle definieren können. Ein schönes Beispiel ist compojure, ein Clojure-Webframework. So sieht eine Routing-Funktion aus

(defroutes app-routes
  (GET "/" [] view/page)
  (GET "/api" [] (wrap-aleph-handler api/socket-handler))
  (route/resources "/static")
  (route/not-found "page not found"))

Ein weiteres schönes Beispiel ist das Hiccup-Template-Framework:

(html [:ul
  (for [x (range 1 4)]
    [:li x])])

Wie Sie sehen können, ist das Ergebnis so knapp wie bei DSL wie Schnurrbart, aber Sie können die Sprachfunktionen wie (for [x (range 1 4)] block) Verwenden. Noch schöner ist, dass Sie alle Werkzeuge haben, um Ihren Code zu abstrahieren und zu strukturieren.

In anderen Sprachen ist die Syntax komplexer. Sie können ein Java -Programm nicht als eine Reihe von Listen lesen. Durch die Verwendung von LISP erhalten Sie jedoch eine bessere Vorstellung davon, wie eine ideale Schnittstelle aussehen sollte und wie sie in Ihrem Code abstrahiert werden kann Es hilft Ihnen auch, Ihre Lieblingssprache als Big-Data-Struktur zu sehen und ihre Semantik besser zu verstehen.

Haskell

Haskell glaubt an starke statische Typisierung und Reinheit. Reine Funktionen sind wie mathematische Funktionen: Sie werden auf einer Reihe von Werten definiert und auf eine andere Menge abgebildet. Funktion hat keine Nebenwirkungen und Werte sind unveränderlich. Reinheit ist interessant, weil sie keine Sprache mit mehreren Paradigmen haben kann. Eine Sprache ist entweder rein oder nicht.

Eine Konsequenz ist, dass Sie keine IO Aktion ausführen können, wann immer Sie möchten (Haskeller glauben, dass dies eine gute Sache ist). IO Aktionen werden als Transaktionen definiert, die sind selbst reine Werte. Der main -Wert eines Haskell-Programms ist eine IO - Transaktion, die ausgeführt wird, wenn Sie das Programm ausführen.

Sie müssen sich explizit mit dem Datenfluss in Ihrem Programm befassen. Sie können nicht zwei Komponenten miteinander kommunizieren lassen, indem Sie Inhalte in eine globale Variable schreiben und lesen. Sie müssen Werte erstellen und übergeben.

Ein weiteres von Jimmy Hoffa erwähntes Merkmal ist das Rich-Type-System. Während andere Sprachen statisch tippen, können Sie in haskell Dinge wie:

length :: [a] -> Int (Funktion von einer Liste von a zu einem int)

map :: (a -> b) -> [a] -> [b] (Funktion, die eine a to b - Transformation und eine Liste von a nimmt und eine Liste von b zurückgibt)

Das Schöne ist, dass ich nicht erklären muss, was diese Funktionen tatsächlich tun: Sie verstehen bereits ihr Verhalten. Darüber hinaus können Funktionen mit diesen Signaturen nur die Länge einer Liste berechnen und eine Transformation einer Liste zuordnen.

In anderen typisierten Sprachen machen Klassenhierarchien in Kombination mit der Veränderbarkeit den Umgang mit diesen Typen zu einem Albtraum. Sie müssen Dinge wie Kovarianz und Kontravarianz verstehen, die aus sprachlicher Sicht nicht richtig zu verstehen sind (dh einfach, mächtig und sicher).

Entweder nehmen Sie den sicheren Pfad (wie Scala) und erhalten eine wirklich komplexe Sprache, oder Sie nehmen den einfachen Pfad und erhalten etwas, das entweder begrenzt (Google Go-Generika auf Listen und Karten beschränkt) oder unsicher (Dart-Generika, die immer sind) kovariant).

Durch die Verwendung von haskell lernen Sie hauptsächlich die Vorteile der Reinheit und das Schreiben von reinem Code kennen.

38
Simon Bergot

tl; dr Das Erlernen neuer Dinge kann Sie nur zu einem besseren Programmierer machen, aber als besserer Programmierer geht es nicht um die Sprachen, in denen Sie Code schreiben können in.

Was sind die Vorteile von LISP und Haskell?

LISPELN:

  1. Homoikonischer Code. Dies ermöglicht strukturierten selbstmodifizierenden Code.
  2. Syntaxbewusste Makros. Sie ermöglichen das Umschreiben von Boilerplate-Code.
  3. Pragmatismus. CL wurde entwickelt, um Dinge von Berufstätigen erledigen zu lassen. Die meisten funktionalen Sprachen sind dies in der Regel nicht.
  4. Flexibilität. Es kann viele verschiedene Dinge tun, alles mit angemessener Geschwindigkeit.
  5. Wartiness. Die reale Welt ist chaotisch. Pragmatische Codierung führt dazu, dass chaotische Konstrukte entweder verwendet oder erfunden werden müssen. Common LISP hat genügend Warzen, um Dinge erledigen zu können.

Der einzige wirkliche Grund, sich gegen CL zu entscheiden, ist wohl, dass die Standardbibliotheken datiert sind.

Ich werde mich auf die Probe stellen und sagen, dass die Syntax im allgemeinen Fall für einen professionellen Software-Mitarbeiter kein Problem sein sollte.

Von: Warum ist LISP nützlich ?

Haskell:

Haskell ist eine Computerprogrammiersprache. Insbesondere handelt es sich um eine polymorph statisch typisierte, faule, rein funktionale Sprache, die sich von den meisten anderen Programmiersprachen deutlich unterscheidet. Die Sprache ist nach Haskell Brooks Curry benannt, dessen Arbeit in der mathematischen Logik als Grundlage für funktionale Sprachen dient. Haskell basiert auf dem Lambda-Kalkül, daher das Lambda, das wir als Logo verwenden.

Sie können dort eine Beschreibung von Functional vs imperative lesen

Von: http: //www.haskell.org/haskellwiki/Introduction

Werden sie mich zu einem besseren Programmierer machen?

Ja, mehr Sprachen und Paradigmen zu kennen, kann Sie natürlich nur zu einem besseren Programmierer machen, aber machen Sie das klar:

Es gibt kein einziges Werkzeug, kein einziges Buch, kein einziges Programmierparadigma, das Sie zu einem besseren Programmierer macht.

Das Erlernen verschiedener Programmiersprachen mit unterschiedlichen Paradigmen hilft Ihnen definitiv dabei, ein besserer Programmierer zu sein. Das Lernen, Probleme mit unterschiedlichen Ansätzen zu lösen, kommt auch Ihrem logischen Denken sehr zugute.

Als guter Programmierer geht es nicht viel um die Sprache, sondern darum, jedes Problem in jeder Sprache lösen zu können. Und wenn Sie die Sprache nicht kennen, die Fähigkeit, diese Sprache schnell zu lernen und effektiv zu nutzen.

Ich denke, je globaler Ihr Denken ist, desto besser sind Sie als Entwickler.

Beispielsweise können Sie Ihrem Code nützliche Kommentare hinzufügen, sich um die Lesbarkeit Ihres Codes und die Wartbarkeit kümmern. Achten Sie auf die kleinen Details. Denken Sie nach, bevor Sie tippen!. Erfahren Sie mehr über Designmuster. Befolgen Sie die bewährten Methoden.

Offenlegung: Dies ist schamlose Werbung der schlimmsten Art, da sie von meinem Blog. stammt.

15
jsedano

Wenn Sie Sprachen lernen, die außerhalb des Paradigmas liegen, das Sie normalerweise verwenden, wird dies Ihren Geist für alternative Lösungen in Ihrem Alltag öffnen und Ihnen möglicherweise sogar helfen, einige Funktionen in der Sprache Ihrer Wahl besser zu verstehen. Nur diese Sprachen zu kennen, macht Sie nicht zu einem besseren Programmierer, es sei denn, Sie können die Lehren, die Sie aus diesen Sprachen gezogen haben, auf Situationen anwenden, die Sie jeden Tag sehen.

Davon abgesehen ist es nicht auf Sprachen beschränkt. Wenn Sie sich über verschiedene Datenstrukturen informieren, die Sie zuvor noch nicht gesehen oder verwendet haben, kann dies dazu beitragen, den Umfang Ihres Wissens zu erweitern, sodass Sie beim nächsten Auftreten eines Problems eine weitere mögliche Lösung finden.

11
Jetti