Programmiersprachen, die Ihre Programmierkenntnisse allgemein verbessern? [geschlossen]

27

Welche Sprachen würden Sie einem Programmierer vorschlagen, um zu lernen, nicht weil er die Sprache häufig verwendet (aber möglicherweise), sondern weil dies die Programmierfähigkeiten im Allgemeinen verbessert und einen in eine andere (und möglicherweise bessere) Denkweise versetzt ) Weg?

Anto
quelle
12
Nicht ein einziger. Eher: So viele wie möglich, so verschieden wie möglich von den anderen.

Antworten:

27

für "normale" Programmierung und Algorithmen:

  • Python, gut zu lernen, einfach zu bedienen, schön zu lesen.
  • C ++ lehrt Sie, was ein Computer WIRKLICH ist.

für eine gedankenverändernde Erfahrung:

  • Haskell
  • Prolog

um deinen Geist zu zerstören und die Grenze zwischen Padawan und Jedi-Meister zu überschreiten:

  • Gemeinsame LISP
Lacrymology
quelle
3
Ja, wenn Sie mit Chrisaycock, C und Assembly einverstanden sind, werden Sie lernen, was ein Computer WIRKLICH ist. C ++ ist ein sehr kleiner Schritt nach oben, aber Sie müssen weiterhin Probleme wie Speicherzeiger und Hochleistungsprobleme behandeln
Lacrymology
mh. Prolog ist großartig, aber ich verstehe nicht, wie interessant es für die Verbesserung der allgemeinen Programmierkenntnisse sein könnte. Ich sehe es als alternatives mathematisch-logisches Notationssystem, dessen Konstrukte man eher abfragen kann als wie eine Programmiersprache (beschreibt Stati, nicht Prozeduren). Bearbeiten: Es ändert sicher die Art und Weise, wie Sie über etwas denken, aber dass etwas nicht programmiert ist.
Cbrandolino
Prolog ist sicher programmiert. Deklarative Programmierung und verwurzelt in der Logik (und daher relativ mathematisch), ja. Aber noch programmieren. Was den letzten Punkt betrifft, denkst du, würde ein anderes Lisp (dh Schema) das auch tun?
3
Prolog ist die bekannteste Sprache des Logikparadigmas. Es ist wichtig, dass Sie sich mit allen Paradigmen auseinandersetzen, mit denen Sie umgehen können. Wenn Sie als Programmierer besser werden möchten, erhalten Sie geistige Beweglichkeit und neue Tools. Ich vermute, jeder Lisp-Dialekt würde es tun. Was ich in Common Lisp sehe, ist, dass es für mich wie das produktionsfähigste Lisp aussieht.
Lacrymology
1
Ich würde für Scheme über Common Lisp stimmen - ich denke, es hängt davon ab, ob Sie glauben, dass Sie jemals ein Lisp in der Produktion verwenden werden. Wenn nicht, wählen Sie Schema.
Skilldrick
13

Vergiss Javascript nicht .

Es verfügt über OO-Funktionen, die nicht Ihre üblichen OO-Funktionen sind. Es eignet sich gut für Funktionen und Verschlüsse höherer Ordnung, und Sie verwenden diese routinemäßig. Es ermöglicht viele funktionale Programmiertricks. Es ist enorm flexibel.

Und es ist praktisch, weil jeder ernsthafte Browser es hat.

(Natürlich hat es auch eine Reihe von unangenehmen Macken. Nur wenige praktische Sprachen tun dies nicht.)

9000
quelle
1
Verfügt JS über OO-Funktionen, die Java nicht bietet?
Mahmoud Hossam
3
@ Phobia: JS macht OO auf eine ganz andere Art und Weise. Es gibt keine Klassen. Die Vererbung erfolgt über Prototypen - im Wesentlichen kann ein Objekt von jedem anderen Objekt erben. Funktionen sind erstklassige Werte; Sie können sie nicht nur weitergeben, sondern auch vorhandenen Objekten neue Methoden zuweisen. Die Art und Weise, wie JS Daten versteckt, unterscheidet sich ebenfalls von Java: Alles, was ein Objekt verfügbar macht, ist öffentlich, sodass Sie Daten und Methoden mithilfe von Closures verbergen. Beachten Sie, dass es kein "kanonisches OO" gibt. JS ist dem von Smalltalk erfundenen "ursprünglichen" OO etwas näher als zB C ++, aber Javas OO ist jetzt auch "kanonisch".
9000
11

C und Assembly für die Funktionsweise eines Computers

Haskell und LISP für funktionale Programmierung und Metaprogrammierung

APL für Vektor- und Kurzprogrammierung

bash oder tcsh, um zu erfahren, wie ein Computer programmgesteuert verwaltet wird

Chrisaycock
quelle
4
Anstelle von APL können Sie auch J desselben Autors verwenden.
16.01.11,
+1 bei der Montage. Sie betrachten Hochsprachen nach einer signifikanten Entwicklung nie ganz so wie früher. Wenn Sie auf der Suche nach etwas sind, das Sie dazu bringt, sich Gedanken über eine ganz andere Art der Codierung zu machen, wird ASM dies tun.
Kurtis
9

Ich würde Schema vorschlagen.

Es ist eine funktionale Programmiersprache, die von Lisp abgeleitet wurde (die meisten halten es für einen Dialekt). Der Hauptunterschied zu Common Lisp besteht darin, dass sein Ansatz sehr minimalistisch ist - extrem . In einer Normalverteilung von Scheme (irgendein Schema <R5 oder Mit / GNU / Scheme) finden Sie beispielsweise keine Schleifenimplementierung: Sie müssen Ihre eigene mit Hilfe der Schwanzrekursion erstellen.

Es ist sehr aussagekräftig und die Syntax ist großartig, um etwas Neues über das Programmieren zu lernen. Wenn Sie sich nur den Code ansehen, bekommen Sie eine Vorstellung davon, wie der Compiler / Interpreter sich darin zurechtfindet.

Außerdem enthält es das beste Programmierbuch aller Zeiten, Struktur und Interpretation von Computerprogrammen , das auf der MIT-Website kostenlos heruntergeladen werden kann.

Hier finden Sie einige Videolektionen, die Sie hoffentlich sofort für diese faszinierende Sprache interessieren - die Sprecher sind die Autoren von SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- Vorträge /

Cbrandolino
quelle
Vielen Dank. Ich muss Sie jedoch warnen, dass es einfach ist, leidenschaftliche Programmierer zum Weinen zu bringen.
Cbrandolino
@cbrandolino - Richtig, unsere Klasse für funktionale Programmierung hat eine Menge Leute aus dem Informatikprogramm geworfen.
jmort253
1
Schema war minimalistisch, aber in R5 hatte es einige Warzen gewachsen, und in R6 ist es entschieden riesig. Schade, denn es war sehr schön. Für eine wirklich minimalistisch , aber immer noch praktische Sprache, überprüft Lua
Javier
@ Javier, du hast recht. Ich bearbeite die Antwort, um die Implementierungen anzugeben.
Cbrandolino
Ich mache Schema in der Universität atm und ich hasse es. Nicht weil es eine funktionale Sprache ist, möchte ich schon lange darauf eingehen. Die Syntax bringt mich jedoch wirklich um. Es gibt drei verschiedene Arten von Klammern auf der Tastatur (vier, wenn Sie spitze Klammern zählen) und Sie verwenden nur Klammern. Warum? Was ist das Problem mit den anderen?
Femaref
4

LISP, vorzugsweise Schema in Kombination mit Abelson & Sussmans "Struktur und Interpretation von Computerprogrammen", lehrt Sie, in Begriffen zu denken, die nicht von C / C ++ vorgegeben werden.

FORTH, speziell ein blockorientiertes FORTH, kein dateiorientiertes (wie D85), lehrt Sie, Ihre Redefreiheit einzudämmen. Wenn Sie unter keinen Umständen eine Routine schreiben können, die länger als 16 Zeilen mit 64 Zeichen ist, sind Sie gezwungen, zu abstrahieren und zu faktorisieren.

John R. Strohm
quelle
4

Java ist eine der Sprachen, die an Universitäten weltweit am meisten unterrichtet werden, und es gibt einen Grund dafür. Obwohl es oft Dinosaurier-artig ist, gibt es jedem einen sehr guten Überblick über die Konzepte moderner Programmierung. Es zeigt NICHT, wie der Computer selbst wie Assembler oder sogar die bereits sehr viel abstraktere Sprache C funktioniert. Piloten müssen jedoch fliegen können und nicht in der Lage sein, ein Flugzeug selbst zu bauen - lernen Sie JAVA Als gute Basis für jeden Code werden Sie heutzutage in den (für eine Resonanz) gebräuchlichsten Sprachen schreiben: Java, C ++, PHP, C #, Ruby (auf Schienen) Python und so weiter ...

max

madmax
quelle
3

C # 3 mit LINQ.

Es ist eine großartige Einführung in die funktionale Programmierung.

Versuchen Sie, ein Programm zu schreiben (oder Project Euler zu lösen) und so viele Schleifen wie möglich durch LINQ-Aufrufe zu ersetzen.
Es hilft, die Konzepte der funktionalen Programmierung und der verzögerten Auswertung zu beherrschen.

Von dort kann man weiter zu F #

SLaks
quelle
3

Zweifellos würde ich Haskell sagen. Und aus zwei Gründen:

  • Es ist einfach der beste Weg, um funktionale Programmierung zu lernen. So gut wie jede andere Sprache lässt Nebenwirkungen standardmäßig zu, kann jedoch Funktionen ausführen (und ja, dies schließt die MLs und Erlang ein: Weitere Informationen finden Sie in diesem Vortrag ). Haskell ist standardmäßig funktionsfähig, kann jedoch so eingestellt werden, dass bei Bedarf Nebenwirkungen auftreten.
  • Es ist definitiv eine Sprache, die Sie zum Nachdenken anregt, bevor Sie programmieren. Um ehrlich zu sein, war dies für mich nie wirklich ein Problem (wenn überhaupt, ist es genau das Gegenteil). Das heißt, es scheint, als wäre ich eine Minderheit. Die meisten Programmierer, auf die ich gestoßen bin, scheinen eher die Einstellung "Code zuerst, Fragen später stellen" zu haben, als die Einstellung "tagelang über Ihr Problem nachdenken, bevor Sie die Lösung in 5 Minuten codieren" (was in der Regel meine Einstellung ist). . Daher kann diese Art von Sprache den meisten Programmierern wertvolle Erfahrungen liefern.
Jason Baker
quelle
3

Ich würde Scala vorschlagen, wenn man aus der C / Java-Welt kommt.

Es ist keine rein funktionale Programmiersprache, sondern verwendet OO, um einige funktionale Programmierfunktionen zu simulieren (z. B. Verwenden von Objekt, um erstklassige Funktionen und Funktionen höherer Ordnung zu simulieren).

Wenn Sie also mit OO vertraut sind, verwendet Scala Begriffe, die Sie bereits kennen, um die Funktionswelt zu erklären.

Ich fand es einfacher für mich, die funktionale Programmierung in Scala zu verstehen, als in eine funktionalere Programmierung wie Haskell, List ... etc. Einzutauchen.

Brian Hsu
quelle
2

Die funktionalen Sprachen sind diejenigen, die mir geholfen haben, dorthin zu gelangen, wo ich heute bin. Obwohl ich in der Entwicklung von Webanwendungen tätig bin, helfen mir die Konzepte, die ich aus funktionalen Sprachen gelernt habe, Lösungen für Probleme zu finden, die ich sonst nicht gesehen hätte. Hier sind die Sprachen, mit denen ich an meiner Universität gearbeitet habe:

  • C ++ (Nicht funktionsfähig, aber Konzepte wie Zeiger und Speicherverwaltung sind von unschätzbarem Wert.)
  • Dr. Scheme
  • ML / Ocaml (Wir haben eine andere Sprache mit ML / Ocaml geschrieben!)
  • JavaScript (funktionale Sprache, die in der Industrie sowohl auf Client- als auch auf Serverseite an Bedeutung gewinnt)

Das Erlernen dieser Sprachen hilft Ihnen dabei, die Welt der Abstraktionen zu verstehen und Codeblöcke zu erstellen, in denen andere Funktionen zusammengefasst sind. Dabei werden die Details auf niedriger Ebene ausgeblendet, damit Sie sich auf die übergeordneten Geschäftsziele konzentrieren können.

jmort253
quelle
1

Ruby verfügt über eines der leistungsfähigsten und intuitivsten Test-Frameworks, die ich verwendet habe. Ich bin nicht sicher, ob ich wirklich verstanden habe, wie man Spott und Stubbing richtig einsetzt, bis ich anfing, Tests in Ruby zu schreiben. rSpec und Cucumber sind fantastische Werkzeuge.

Gposton
quelle
1

Es gibt eine Reihe von Programmiersprachen, die erfordern, dass Sie ein Problem neu überdenken (im Verhältnis zu dem, an das Sie natürlich gewöhnt sind). Die am häufigsten zu lernenden Sprachen, denen eine imperative Sprache beigebracht wurde, sind eine funktionale und eine logische Sprache, zum Beispiel Prolog und Lispeln .

Einige Sprachen, wie ocaml und Haskell, sind stark von der Kategorietheorie beeinflusst, andere sind Mischsprachen wie Curry (funktional und logisch). Curry ist wahrscheinlich die überwältigendste Sprache, die ich kenne, nicht nur, weil es bei der logischen Programmierung die ganze Wahnsinnsfülle von Haskell mitbrachte, sondern auch, weil es in die auf Einschränkungen basierende Programmierung integriert ist.

Eine andere unterhaltsame Sprache ist Occam-pi, da es nicht nur sehr häufig gleichzeitig verwendet wird, sondern auch aufgrund des aktuellen Arduino-Ports .

HaskellElephant
quelle
1

Ein gut gerundeter Programmierer hat mehrere Trickkoffer im Ärmel. Dazu gehören:

  • Versammlung, um zu lernen, wie die Eingeweide eines Computers funktionieren.
  • Eine prozedurale Sprache wie C oder Pascal.
  • Eine funktionale Sprache wie Schema.
  • Eine OOP-Sprache wie Squeak.

All dies lehrt Sie, auf etwas unterschiedliche Weise über Probleme nachzudenken und mit ihnen umzugehen.

roter Schmutz
quelle
0

Sie werden keine Programmiersprache ohne ein klares Ziel richtig lernen. Wenn Sie wissen, was Sie damit machen möchten, können Sie entscheiden, welches Programm Ihren Anforderungen entspricht.

Sagen wir zum Beispiel über c #.

C # kann Webprogramme, Konsolenprogramme, eigenständige ausführbare Programme, Spieleprogramme, Silverlight-Programme und mobile Programme ausführen. Die Syntax ist zwar in fast allen Fällen gleich, funktioniert aber in jedem Szenario anders. Beispielsweise behält eine eigenständige ausführbare Datei ihre Informationen, bis sie entladen wird oder das Programm beendet ist, während bei einem Webprogramm die Informationen jedes Mal zerstört werden, wenn Sie eine Seite laden, und in Silverlight werden Sie die meiste Zeit damit zubringen, sich mit ihnen zu befassen eine XML-Datei.

Und zweitens, verbringen Sie Ihre Zeit nicht mit exotischen Sprachen (zum Beispiel Haskel), Corporate Speaking, es gibt nur sehr wenige Programme, die Ihre Mühe wert sind: Java (König des Hügels), c # / vb.net, PHP und SQL.

Magallane
quelle
0

Es gibt ein sehr einfaches Programm zum Schreiben von Java-Applets namens Processing

Diese Sprache vermittelt Ihnen ein grundlegendes Verständnis von Variablen, Schleifen und dergleichen, wenn Sie gerade erst anfangen.

Brötchen-Verglasung
quelle
0

Einige tolle Vorschläge hier. Ich würde wahrscheinlich persönlich mit C oder C ++ gehen. Sie zwingen Sie dazu, sich mit vielen Konzepten zu befassen, die für das Verständnis der Funktionsweise von großer Bedeutung sind, in anderen Sprachen jedoch häufig verschleiert werden. Nur zu verstehen, wie die Dinge wirklich funktionieren, hilft Ihnen als Programmierer, selbst wenn die Sprache, die Sie später verwenden, einige Details verbirgt.

Das Zusammenbauen macht Spaß, wenn Sie noch ein bisschen tiefer graben möchten, aber nicht damit rechnen, dass Sie viel damit anfangen. :)

Tridus
quelle
0

Ich würde Ruby empfehlen. Ruby fordert Sie nicht zum Paradigmenwechsel auf, sondern ermutigt Sie, in mehreren Paradigmen zu arbeiten. Meiner Meinung nach liegt der Vorteil darin, dass Sie nicht frustriert sind, wenn Sie nicht so arbeiten können, wie Sie es gewohnt sind, sondern ein anderes Paradigma aus Frustration verwenden, mit den Einschränkungen, Dinge so zu tun, wie Sie es gewohnt sind.

philosodad
quelle