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?
27
Antworten:
für "normale" Programmierung und Algorithmen:
für eine gedankenverändernde Erfahrung:
um deinen Geist zu zerstören und die Grenze zwischen Padawan und Jedi-Meister zu überschreiten:
quelle
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.)
quelle
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
quelle
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 /
quelle
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.
quelle
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
quelle
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 #
quelle
Zweifellos würde ich Haskell sagen. Und aus zwei Gründen:
quelle
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.
quelle
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:
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.
quelle
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.
quelle
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 .
quelle
Ein gut gerundeter Programmierer hat mehrere Trickkoffer im Ärmel. Dazu gehören:
All dies lehrt Sie, auf etwas unterschiedliche Weise über Probleme nachzudenken und mit ihnen umzugehen.
quelle
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.
quelle
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.
quelle
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. :)
quelle
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.
quelle