Wenn man jedes Jahr eine neue Programmiersprache lernen möchte, wie sollte die Liste aussehen? [geschlossen]

19

In Kapitel eins von "The Pragmatic Programmer" ist das erste Lernziel:

Lerne jedes Jahr mindestens eine neue Sprache. Verschiedene Sprachen lösen die gleichen Probleme auf unterschiedliche Weise. Indem Sie verschiedene Ansätze kennenlernen, können Sie Ihr Denken erweitern und vermeiden, dass der Betroffene ins Stocken gerät. [...]

Um dies im Laufe einer Karriere zu erreichen, wird die Liste der Sprachen wahrscheinlich recht lang (insbesondere, wenn Sie nicht in das Management "vorstoßen" möchten). Die Ausbildung eines Programmierers (oder in welcher Form auch immer) wird Ihnen den Einstieg in einen Kern kommerziell nützlicher Sprachen erleichtern (die übliche Liste aus Stellenausschreibungen: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, ...). .). Darüber hinaus hat ein formelles oder informelles Lernprogramm wahrscheinlich funktionale Ansätze abgedeckt (über etwas wie Haskell, LISP oder eine von ML abgeleitete Sprache).

Aber sobald ein vernünftiger Teil dieser Liste gelernt ist - was kommt als nächstes und warum ?

Richard
quelle
3
In dieser Antwort liste ich einige der Sprachparadigmen auf, die studiert werden könnten, um Ihre Fähigkeiten zu erweitern. Ich würde damit beginnen, all diese Paradigmen zu lernen (anstatt mich auf Sprachen zu konzentrieren). Kreuzen Sie also alle an, die Ihre aktuelle Sprache verwendet, und wählen Sie dann eine Sprache aus, die so viele verschiedene hat, wie Sie es gewohnt sind. Es hat nicht viel Sinn, mit C # zu beginnen, als mit Java. Versuchen Sie zunächst, mehr zu diversifizieren. Wenn Sie alle Grundtypen behandelt haben, können Sie andere gebräuchliche Sprachen auswählen.
Simon P Stevens
@ Simon: Warum nicht hier eine Antwort machen?
Richard
1
Sie werden eine Menge lernen, wenn Sie von Java nach C #
wechseln
@ Richard. Ich habe nicht wirklich gedacht, dass es eine vollständige Antwort rechtfertigt. Ich habe Sie nur auf etwas Relevantes verwiesen, das ich an anderer Stelle geschrieben habe.
Simon P Stevens
1
Die meisten Leute, die eine Sprache pro Jahr lernen, werden ein "Alleskönner, aber kein Meister" sein, bis Sie sich mehrere Jahre lang auf einige konzentrieren. Ich glaube, basierend auf viel Erfahrung, dass der Begriff des 'Full-Stack'-Programmierers mit Ausnahme von 1% - 5% der Entwickler falsch ist. Die meisten Hardcore-Backend-Leute, die ich kenne, haben keine großartigen Frontend-Fähigkeiten und umgekehrt.
Junky

Antworten:

19

Machen Sie es interessant und schreiben Sie jedes Jahr einen Interpreter oder Compiler für Ihre eigene Programmiersprache, der eine Nische ausfüllt, für die Sie noch nie eine Programmiersprache verwendet haben. Schreiben Sie jedes Jahr Ihren nächsten Compiler / Interpreter in der Sprache, die Sie im Vorjahr geschrieben haben.

Alternative
quelle
7
Darf ich bitte Ihr Autogramm haben? :-)
Christian Davén
1
+1 Geniale Antwort, auch wenn es wahrscheinlich humorvoll gemeint war.
Joe D
1
@ Joe D Nicht ganz humorvoll gemeint. Wenn du das schaffst, hast du alle Nischen gemeistert.
Alternative
-1, weil es nicht total humorvoll gemeint ist. (als hätten wir nicht genug halb aufgegebene Sprachen / Implementierungen)
ZJR
2
@ZJR Also 99% humorvoll, 1% nicht humorvoll ist schlecht? Komm schon. Warum stimmen Sie eine Antwort aufgrund eines Kommentars ab?
Alternative
13

Sie sollten die "marginale Relevanz" maximieren, dh sich immer in neue Bereiche wagen, in denen Sie noch nicht stark sind. Variieren Sie sowohl die Programmiersprachen als auch die Konzepte . Wenn Sie keine objektorientierte Sprache kennen, probieren Sie Java und ein hochabstraktives Framework wie Hibernate aus. Schreiben Sie dann einige Systemverwaltungsaufgaben in einer Skriptsprache wie Python oder Perl. Erlernen Sie dann einige grundlegende Kenntnisse in C oder C ++ und schreiben Sie leistungsstarken Multithread-Servercode. Wenn Sie sich mit funktionaler Programmierung nicht auskennen, probieren Sie Haskell mit einigen graphentheoretischen Problemen aus, z. B. mit der Lösung von Peg Solitaire usw. Sie können dies sehr gut tun, damit alles, was Sie lernen, einen unmittelbaren Marktwert hat, bis Sie auf gelehrte oder spezielle Dinge wie z als Objektfähigkeitssicherheit ,Prolog oder VHDL .

Übrigens gute Übung! Auf diese Weise lernen Sie, sprachunabhängig zu denken und Probleme zu erkennen, anstatt sich auf zu wenige plattformspezifische Techniken zu verlassen. Wenn Sie zum Beispiel die Ähnlichkeiten und Unterschiede beim Versand virtueller Methoden zwischen C ++ und Python beherrschen, werden Sie es für jede andere Sprache sofort "verstehen".

DomQ
quelle
9

Eine Sprache, die die Art und Weise, wie Sie über Programmierung denken, nicht beeinflusst, ist keine Kenntnis wert. - Alan Perlis

Wie einige der anderen Antworten bereits angesprochen haben, wenn Sie eine neue Sprache pro Jahr lernen, warum? ist es, Ihre Fähigkeiten als Programmierer zu erweitern. Das wie? Es geht darum, Sprachen zu lernen, deren Paradigmen sich von denen der Sprachen unterscheiden, die Sie bereits kennen, und eine Bestandsaufnahme der Paradigmen, die Sie bereits kennen, entscheidet darüber, welche Sprache Sie als Nächstes lernen müssen.

Was sind diese Paradigmen? Das erweiterte Buch Konzepte, Techniken und Modelle der Computerprogrammierung bietet einen hervorragenden Überblick mit einer grafischen Karte .

Wenn Sie also nur C-ähnliche imperative Sprachen beherrschen, ist das Erlernen von Scheme / Lisp äußerst nützlich. Wenn Sie bereits zwingende und funktionale Sprachen beherrschen, ist das Erlernen von Prolog hilfreich.

Ein aktuelles Buch, das versucht, mehrere Sprachen und Paradigmen zu lehren, ist Seven Languages ​​in Seven Weeks . Natürlich werden Sie nach einer Woche nicht in jeder Sprache fließend sein, aber es scheint eine ansprechbare, praxisorientierte Multi-Paradigma-Perspektive zu bieten.

Wenn Sie ein anderes Paradigma entwickeln, ist es wirklich ein Zen-Moment. Beim Übergang von der imperativen zur funktionalen Programmierung habe ich die Computerwelt in einem völlig neuen Licht gesehen. Viel Spaß beim Lernen!

2 Umdrehungen
quelle
Und eine Sprache beeinflusst Ihr Denken nicht so sehr durch das, was es Ihnen ermöglicht, sich auszudrücken, sondern vielmehr durch das, was Sie dazu zwingt, sich auszudrücken.
Florian F
9

C - als das Wesentliche, "zugrunde liegt alles", Systemprogrammiersprache

Lisp (Schema) - die seltsame, aber unglaublich mächtige Ursprache, die große Hacker für cool halten

Smalltalk - denn so sollte OO sein

Erlang (oder eine andere Darstellersprache), um Darsteller zu verstehen

Haskell - um Monaden zu verstehen

Javascript - weil es überall und für die Skripterstellung des Browsers unerlässlich ist

Eine von Python / Ruby / Perl (aber es ist wirklich egal, welche) - Sie wissen also, wie sich eine beliebte, moderne Hochsprache mit guter Bibliotheksunterstützung anfühlt

SQL - so können Sie mit relationalen Datenbanken sprechen

Prolog - weil Sie immer noch umhauen müssen

interstar
quelle
2
Der Grund, warum ich Haskell gelernt habe, ist, dass ich eine funktionale Sprache lernen wollte (im Gegensatz zu all den prozeduralen, die ich vorher kannte), und Haskell schien mir das Aushängeschild für funktionale Sprachen zu sein. Der Grund, warum ich Haskell jetzt mag, ist, dass es eine Hochsprache ist, eine gute Bibliotheksunterstützung hat und schnell ist (ungefähr 50% so schnell wie C, aber es hängt davon ab, was Sie tun). Außerdem mag ich es, eine Menge Code schreiben zu können, und alles funktioniert beim ersten oder zweiten Mal (nachdem es kompiliert wurde).
Joey Adams
Es ist auf jeden Fall wichtig, ob Sie Perl, Python oder Ruby lernen. Beispielsweise verfügt Python über Listenverständnisse, die in Ruby nicht vorhanden sind, und Ruby über Module, die in Python nicht vorhanden sind. Sie können die Ergebnisse beider Dinge in beiden Sprachen duplizieren, aber das Erlernen beider beeinflusst Ihr Denken auf sehr unterschiedliche Weise.
Philosodad
1
Prolog - weil Sie immer noch umhauen müssen - Bester Kommentar aller Zeiten +1
Zachary K
1
Ich denke, der Hauptvorteil des Lernens von Haskell besteht nicht darin, die Monadenabstraktion in den Griff zu bekommen, sondern darin, die Vorteile eines WIRKLICHEN starken und mächtigen Typensystems zu erlernen. Wenn jemand eine Vorstellung von einem "statischen Typsystem" wie Java hat, wird Ihnen haskell den Atem rauben.
Sara
4
  • Go (neue Programmiersprache auf Systemebene mit guter Unterstützung für Parallelität und weniger traditionelle Konzepte)
  • Lua (Skriptsprache, einfache, ausdrucksstarke, äußerst flexible und ausgewogene Paradigmen, unerlässlich, funktional und Metaprogrammierung, die OOP ermöglicht)
  • D (C / C ++ richtig gemacht)
  • Groovy (Expressivität und Metaprogrammierung in der Java-Welt)
  • Eiffel (Design By Contract und eine andere Herangehensweise an OOP)
  • Prolog (DIE logische Programmiersprache)
bigown
quelle
1
Warum sollte jemand diese lernen? (Das Warum ist das Interessante hier, es gibt nur wenige wirklich einzigartige Programmiersprachen: Jedes Paradigma wurde mehr als einmal implementiert.)
Richard
Interessant zu sehen, dass Sie denken, D ist C richtig gemacht. Persönlich, wenn ich C benutze, benutze ich es meistens für ein paar Dinge auf niedriger Ebene, bei denen ich überhaupt keine OOP-Abstraktionen haben möchte.
Jonas
@Jonas: Wir brauchen immer noch eine einfache Sprache, die richtig gemacht wird, während diese Sprache nicht kommt. D kann nur auf zwingende Weise verwendet werden. Für Sie ist D2 funktionaler, wenn es abgeschlossen ist, ist es möglicherweise die beste Implementierung des Paradigmas für eine Sprache, die in erster Linie unerlässlich ist.
Maniero
Richtig gemacht ist subjektiv. Für mich ist Erlang eine sehr kleine und einfache Sprache, die richtig gemacht wird. Der fehlende Teil ist ein großartiges GUI-Framework, und wenn Sie komplexe Systeme verwenden, möchten Sie vielleicht mehr eine statisch typisierte Sprache.
Jonas
@Jonas: Erlang ist eine gute Sprache, aber es ist nicht C / C ++ richtig gemacht, es ist eine ganz andere Sache.
Maniero
2

1) Prolog: Es ist völlig anders als alle anderen imperativen Sprachen, die Sie bisher verwendet haben, und es wird die Art und Weise verändern, wie Sie über Probleme denken

2) Lisp: Ohne es könntest du genauso gut Vi benutzen

3) Erlang: Auch hier ist es völlig anders, und es scheint ziemlich in Mode zu sein.

4) Etwas aus dem Turing Tarpit (zB Brainfuck) und wahrscheinlich einen Compiler oder Interpreter dafür schreiben: Ich kann mir keinen Grund dafür vorstellen, aber es fühlt sich nach einer guten Idee an.

Paul Butcher
quelle
1
"ohne es könntest du genauso gut Vi benutzen". Ich bin überrascht, dass niemand das aufgegriffen hat :)
Gauthier
Ich benutze vi! (Nun gut)
Zachary K
1

Neben denen, die Sie aufgelistet haben,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Ziel C.

grokus
quelle
1

Ich bin zwar der Meinung, dass es gut ist, neue Sprachen zu lernen (und das ist auch in einer langen Karriere unerlässlich), aber ich denke, dass eine Sprache pro Jahr die ersten fünf bis zehn Jahre übersteigt. Was ich lieber sehen würde, ist jemand mit dieser Erfahrung, der neue Dinge über die Sprachen lernt, die er bereits kennt. Irgendwann braucht man Tiefe und Wissen. Sie können also ein If-Konstrukt in 12 Sprachen schreiben, großer Knaller. Ich würde lieber jemanden sehen, der sich wirklich mit etwas auskennt und Experte in mindestens einer Sache wird. Und dann werden die nächsten Jahre ein Experte für etwas anderes. Über 30 Jahre Karriere möchte ich, dass jemand ein tiefes Wissen hat und nicht nur die Grundlagen in vielen Dingen.

HLGEM
quelle