(Warum) Soll ich eine neue Programmiersprache lernen? [geschlossen]

97

Ich beherrsche Java, C / C ++, JavaScript / jQuery ziemlich gut und bin ziemlich gut in Objective-C. Ich bin auch mit den Sprachen und den entsprechenden Frameworks ziemlich produktiv und produziere Systeme auf Unternehmensebene (und auch kleine Systeme) mit ausreichender Leichtigkeit, während der Code 'sauber' und wartbar bleibt (ja, ich kann meinen eigenen Code nach sechs lesen Monate :)

Nur "warum" sollte ich eine neue Programmiersprache lernen, es sei denn, dies wird von der Plattform (iPhone, iPad usw.) oder von der Client- / Implementierungsorganisation vorgeschrieben? Nur zum Spaß"? Und was mache ich mit diesem Spaß, wenn ich nichts Wertvolles damit machen werde?

Viele meiner Kollegen sind bereit, in die "nächste neue Sache / Sprache" einzutauchen, und es handelt sich normalerweise um Python, Ruby oder PHP (nur um einige beliebte). Nur die Sprache selbst zu kennen, ist meiner Meinung nach sinnlos. Sie müssen auch die Frameworks kennen, deren Verwendung / APIs sowie bewährte Implementierungspraktiken usw. kennen.

Gibt es aus wirtschaftlicher Sicht einen Vorteil beim Erlernen einer neuen Programmiersprache? Wenn die Sprache schnell und schmutzig erlernt wird, wird sie wahrscheinlich auch für schnelles und schmutziges Prototyping / Implementieren verwendet - aber ich sehe DAS nicht als gerechtfertigten Aufwand.

Warum sollte ich (oder sonst jemand) eine andere Programmiersprache lernen als "es macht Spaß, also probieren wir es aus" - wenn sich die Investition von Zeit auf lange Sicht nicht lohnt?

PhD
quelle
6
programmers.stackexchange.com/questions/118338/... Vielleicht werden Sie von der Antwort interessiert sein , die ich gere gab.
Deadalnix
3
Wenn Sie eine neue Sprache mit neuen Konzepten sehen und nicht den Wunsch haben, sie zu verstehen, werden Sie an vielen Stellen nicht eingestellt (in der Tat werden viele Interviewfragen gestellt, um solche Dinge spezifisch zu bestimmen)
Bill K
3
Ich werde fragen, warum ich keine neue Sprache lernen soll.
Benutzer
2
@ ZacharyK, auch wenn der Job für einen Java-Entwickler war und der Kandidat bei Java super war. Klingt so, als würdest du dir in den Fuß schießen.
NimChimpsky
2
Es gibt viele Super Java-Leute da draußen. Ich interessiere mich genauso für das, was Sie in 6 Monaten wissen werden, wie für das, was Sie jetzt wissen. (Natürlich verbringe ich meine ganze Zeit in Erlang, CoffeeScript und PHP)
Zachary K

Antworten:

178

Tipp 8 vom Pragmatic Programmer : "Investieren Sie regelmäßig in Ihr Wissensportfolio":

Lerne jedes Jahr mindestens eine neue Sprache. Unterschiedliche Sprachen lösen die gleichen Probleme auf unterschiedliche Weise. Indem Sie verschiedene Ansätze erlernen, können Sie Ihr Denken erweitern und verhindern, dass Sie in Schwierigkeiten geraten. Darüber hinaus ist das Erlernen vieler Sprachen dank der Fülle frei verfügbarer Software im Internet jetzt viel einfacher

Es geht nicht um das nächste "Neue". Es geht darum, anders zu denken, als es normalerweise der Fall ist.

Es gibt ein Sprichwort: "Wenn Sie ein Hammer sind, sieht alles aus wie ein Nagel." Vielleicht gibt es eine bessere Möglichkeit, ein Problem mithilfe einer anderen Technologie zu lösen. Wenn Sie nicht erkunden, wissen Sie möglicherweise nicht, dass es verfügbar war.

jmq
quelle
Hervorragender Punkt. Diese Überlegung hat mich veranlasst, RavenDB in einem Projekt zu testen, und ich habe nach Jahren, in denen ich in einer SQL Server-Furcht gefangen war, so viel gelernt.
Bob Horn
52
Ich dachte, es war, als alles, was Sie haben, ein Hammer ist, sieht alles aus wie Ihr Daumen
Zachary K
2
Ich stimme vollkommen zu. Ich möchte auch hinzufügen, dass das Erlernen einer anderen Sprache Ihnen hilft, Aspekte von Sprachen besser zu verstehen, von denen Sie dachten, dass Sie sie kennen. Es hilft auch zu unterscheiden, was "echte" Programmiergrundkonzepte / -muster / -beschränkungen sind und was nur Artefakte Ihres speziellen Werkzeugsatzes sind. Wenn zum Beispiel alle Sprachen, die Sie kennen, schwach geschrieben sind, werden Sie möglicherweise nie wissen, dass es eine starke Schreibweise gibt, und sich nie wundern, warum! Infolgedessen kann die Leistung oder Sicherheit Ihrer Produkte beeinträchtigt werden, auch wenn sie sich durch eine hervorragende Markteinführungszeit auszeichnen ;-).
JJC
3
Der Pragmatic Programmer ist eines der besten Programmierbücher, die ich je gelesen habe. Wirklich gut!
Soner Gönül
Ich stimme wirklich zu: "Es geht darum, anders zu denken, als du normalerweise denkst." Als ich Python lernte, bekam ich die neue Welt des Denkens.
Yoo Matsuo
80

Warum besteigen die Menschen den Berg? Everest? Oder 100 Meilen in 24 Stunden laufen ? Warum unternehmen wir eine Herausforderung? Weil es da ist. An "Ars gratia artis" sehe ich nichts auszusetzen. Es kommt ein Punkt, an dem Lernen um des Lernens willen zur Belohnung wird. Aber wenn Sie stärkere Gründe haben möchten, eine neue Sprache zu lernen, hier einige:

Neue Wege, um Probleme zu lösen Wenn Sie eine neue Sprache lernen und sich wirklich die Zeit zum Eintauchen nehmen, haben Sie die Möglichkeit, als Neuling erneut zu programmieren. Diese neue Perspektive kann Ihnen Techniken beibringen, die auf eine alte Sprache übertragen werden können. Denken Sie an den Einfluss von Ruby on Rails auf ASP.NET MVC oder an die Portierung von Java Hibernate nach C # (zusammen mit unzähligen anderen Frameworks, die die .NET-Entwicklung beeinflussen). Wenn Sie mit verschiedenen Sprachen in Kontakt kommen, lernen Sie neue Wege, um Probleme anzugehen.

Das richtige Werkzeug für den richtigen Job Alle von Ihnen genannten Sprachen sind OO / Procedural Hybrids (oder rein prozedural im Fall von C). Versuchen Sie sich in einer oder zwei funktionalen Sprachen. Versuchen Sie, Fakultät in Erlang mithilfe von Rekursion zu implementieren, und beobachten Sie, wie Ihr Kiefer bei 20000 auf dem Boden aufschlägt! kehrt in 5 Sekunden zurück (kein Stapelüberlauf in der Site). Schauen Sie sich dann an, wie leistungsfähig es ist, Ihre Anwendung zu skalieren, um Zahlen und Analyseprotokolle mit weniger Code und in kürzerer Zeit zu verarbeiten, als es für zwei Instanzen einer JVM erforderlich wäre, die über RMI oder SOAP kommunizieren. Wenn Sie andere Sprachen / Frameworks lernen, die auf die Lösung spezifischer Probleme abzielen, erhalten Sie mehr Tools.

Lerne neue Leute kennen / erweitere dein Netzwerk Das Tauchen in eine neue Sprache bringt dich in eine neue Community. Neue Leute kennenzulernen ist eine gute Sache für Ihre Karriere und für Ihre Persönlichkeit.

Neue Möglichkeiten Das Kennen einer neuen Sprache kann nur die Chance erhöhen, diesen Job mit diesem heißen Start zu bekommen. "Mann, dieser Job wäre perfekt, wenn ich Ruby kennen würde." Außerdem mag Ihnen die Sprache so gut gefallen, dass Sie entscheiden, den Pfad zu wechseln.

Halten Sie es frisch Das tägliche Arbeiten mit der gleichen Sache wird mühsam. Die Verwendung einer anderen Sprache kann Ihnen eine Pause vom Alltagsstress geben und es Ihnen ermöglichen, erfrischt zum nächsten Tag zu kommen.

Weil es da ist Lerne eine neue Sprache, weil du willst.

Michael Brown
quelle
3
+1 Javascript kann funktionieren, aber es sieht sicher so aus, als würde das OP ein paar Paradigmen in seiner Toolbox vermissen. Und mehr Erfahrung mit funktionalen Sprachen gibt einen tieferen Einblick in die vorhandenen Sprachen, z. B. mit C ++
jk.
+1 für Keep it fresh, es fühlt sich wirklich gut an etwas anderes zu arbeiten
Mona
Ich möchte darauf hinweisen, dass Tail-Call-Optimierungen nichts damit zu tun haben, ob eine Sprache (rein) funktional ist oder nicht. Imperative Sprachen, die für die Ausführung unter der 64-Bit-Laufzeit von .NET kompiliert wurden, erhalten beispielsweise eine kostenlose Tail-Call-Optimierung .
Blindy
1
LOL, ja, das macht Erlang nicht zu einer reinen funktionalen Sprache, aber es ist ein totaler Perspektivwechsel. In imperativen Sprachen wird empfohlen, eine Rekursion für alle bis auf die trivialsten Fälle zu vermeiden, und die Rekursion funktionaler Sprachen ist eine Lebensweise. Pattern Matching im Gegensatz zu if / else oder switch / case ist auch ziemlich cool.
Michael Brown
2
Versuchen Sie, Fakultät in Erlang mithilfe von Rekursion zu implementieren, und beobachten Sie, wie Ihr Kiefer bei 20000 auf dem Boden aufschlägt! kehrt in 5 Sekunden zurück (kein Stapelüberlauf in der Site). Dies ist eines der wichtigsten Argumente für das Erlernen einer funktionalen Sprache, die ich je gesehen habe. Ich hätte nie gedacht, dass es so effizient sein könnte.
Olegs Jeremejevs
37

Wir denken mit Worten. Die Sprache, die wir verwenden, beeinflusst die Art und Weise, wie wir es tun. Es gibt einen interessanten Fall über die Pirahã-Sprache : Menschen, die diese Sprache sprechen, können nicht als scheinbar "einfache" oder "intuitive" Zahlen behandelt werden, da die Sprache, in der sie erzogen wurden, keine Wörter für "bestimmte Mengen" enthält (nicht einmal "eine") " und viele").

Bei Programmiersprachen ist das genauso. Eine neue Programmiersprache kann Ihren Geist für einige Aspekte der Programmierung "öffnen".

In Anbetracht Ihrer aktuellen Programmierkenntnisse empfehle ich Ihnen, eine funktionale Sprache wie Erlang oder Scala zu lernen. Schließlich ist Clojure auch eine sehr solide Sprache.

Wenn Sie sich zuerst ein bisschen wie zu Hause fühlen möchten, probieren Sie eine leistungsstarke Skriptsprache wie Python oder Ruby aus.

egarcia
quelle
22
+1. "Eine Sprache, die die Art und Weise, wie Sie über Programmierung denken, nicht beeinflusst, ist es nicht wert, sie zu kennen." - Alan Perlis
Ruakh
2
Ich lehne die Prämisse „Wir denken mit Worten“ ab, da sie die Möglichkeit verweigert, dass jeder (oder alles) ohne Worte denken kann. Aber Wörter sind äußerst nützlich für die Kennzeichnung von Konzepten (und tragen so zur Unterscheidung bei). Wir tun unser übergeordnetes Denken meistens mit Worten, weil es effizient ist. Das ist eine zweideutigere Aussage, aber ich denke näher an die Wahrheit. Komischerweise kann ich die Verwendung von Wörtern nicht ablehnen, ohne Worte zu verwenden ...
Donal Fellows
@DonalFellows: Ich denke, wir haben einige "mentale Prozesse", die sich nicht mit Worten ausdrücken lassen. Aber ich nenne diese "Gedanken" nicht, sondern "Gefühle", "Reflexe", "Intuitionen" usw. Ich denke, ein richtiger Gedanke muss in einer Art Sprache ausgedrückt werden können. Also für mich kann etwas, das keine Sprache hat, leben, verarbeiten, reagieren, fühlen ... aber nicht denken. Aber dies ist ein Glaube, der auf Intuition beruht, keine wirklichen Beweise. Und auch ein bisschen off-topic, wirklich :)
egarcia
Stimmen Sie absolut zu, Sprachen zu lernen, nur weil sie die neue coole Programmiersprache sind, macht keinen Sinn. Sie sollten sich an ganz andere halten und versuchen, nicht zu viele davon abzudecken. Etwas gut zu können, wird eine beträchtliche Zeit in Anspruch nehmen (wahrscheinlich mehr als 10 Jahre), egal ob es sich um ein Musikinstrument, Kochen oder Programmieren handelt.
Mister Smith
2
@evilcandybag: Wie es passiert, ich tatsächlich kann eine Quelle zeigen: sciencemag.org/content/306/5695/496 , sciencemag.org/content/suppl/2004/10/15/1094492.DC1/... (PDF).
Ruakh
26

Sie möchten nicht nur neue Sprachen lernen, Sie möchten auch andere Sprachen lernen als die, die Sie bereits kennen. Wenn Sie wissen, dass Java-Lernen C # Sie nicht wirklich herausfordert, sind sie ziemlich ähnlich. Idealerweise sollten Sie eine Sprache wählen, die sich von Ihren Kenntnissen unterscheidet. Wenn Sie Java, JavaScript und Objective-C kennen, möchten Sie etwas ganz anderes

Sowie:

Ruby ist eine lustige, schwach getippte OO-Sprache

Prolog Eine ganz andere Logik-Programmiersprache

Erlang Concurrency und Fault Tolerance sind sehr gut gelungen

Schema Lies SICP und erreiche die Erleuchtung

Haskell Eines der leistungsstärksten Schriftsysteme der Welt, wenn es kompiliert wird, wird wahrscheinlich funktionieren und Sie davon abhalten, alle möglichen seltsamen Fehler und vieles mehr zu machen.

Oder holen Sie einfach in sieben Wochen sieben Sprachen ab, die genau das tun, was der Titel verspricht.

Zachary K
quelle
2
+1! Eine Übung, die ich gerade mache, besteht darin, den gleichen Algorithmus (Zusammenführungssortierung) in verschiedenen Sprachen zu implementieren: Dies gibt mir wirklich ein Gefühl dafür, wie viele Möglichkeiten es gibt, die gleiche Berechnung auszudrücken. Ich habe bereits die Versionen C, C ++, Pascal, Java, Scala und Haskell. Python, Ruby, Modula2, Scheme sind unterwegs. Ich finde, Sie können so viel lernen, wenn Sie sich verschiedene Programmiersprachen ansehen! Und wenn ich eine Sache in einer Sprache mache, bekomme ich viele Ideen, wie ich sie in einer anderen Sprache besser umsetzen kann.
Giorgio
3
Ich mag das, außer wie Sie Haskell beschreiben. Sie können immer noch falschen Code schreiben, der kompiliert wird. (Die Typkorrektheit ist nicht die einzige Voraussetzung für die allgemeine Korrektheit.) Der Grund für das Erlernen von Haskell besteht darin, dass es der Mathematik in notationaler Hinsicht sehr nahe kommt und ein verzögertes Bewertungsmodell aufweist. das sollte die Vorstellungen der meisten Programmierer darüber aufrütteln, worum es beim Programmieren geht.
Donal Fellows
Ich denke, sollte Prolog versuchen. Als ich es zum ersten Mal lernte, war ich erstaunt. Wie man es schafft, nur wenige Zeichen zu schreiben.
Benutzer
3
@DonalFellows nach meiner Erfahrung, wenn Sie die Typen in Haskell richtig machen, neigt der Rest des Programms dazu, sich selbst zu schreiben.
Tobyodavies
1
"Ruby a fun OO Language": Ist Ruby wirklich schwach oder eher dynamisch geschrieben?
Giorgio
15

Ihre Frage ist so führend, dass ich die folgende Frage stellen muss:

Wenn Sie von Beruf Programmierer sind, warum in aller Welt möchten Sie nicht etwas Neues lernen, um Ihre Berufserfahrung zu erweitern?

Ihre Frage klingt für mich sehr nach der Einstellung eines Studenten, den ich einmal hatte. Ein oder zwei Jahre vor Y2K unterrichtete ich auf Wunsch des Direktors für Karrieredienste an der Universität, an der ich zu der Zeit unterrichtete, eine Cobol-Klasse (als Wahlfach). Er hatte so viele Unternehmen, die ihm Stellenangebote für Cobol-Programmierer anboten, dass er glaubte, wir würden unseren Schülern einen schlechten Dienst erweisen, indem wir ihnen nicht die Möglichkeit gaben, die Fertigkeiten zu erlernen und ihre Fähigkeiten zu erweitern.

Ich hatte einen Schüler, der die Klasse als seine letzte Wahlklasse zum Abschluss brachte . Zu dieser Zeit arbeitete er auch als C-Programmierer. Er nahm an der Cobol-Klasse teil, weil er keine andere Wahl hatte und den Abschluss wollte. Also kam er mit einem Chip auf der Schulter in die Klasse.

Ich kenne C bereits und verwende es professionell, sodass ich nicht weiß, warum in der Welt jemand Cobol lernen möchte oder muss.

Ich forderte ihn daher auf, ein Programm zum Lesen von Daten aus einer Datei zu schreiben, die für jeden Eingabedatensatz ein bestimmtes Format hatte (dh wie viele Zeichen jedes Feld in einer Zeile belegte, welches Feld zuerst, zweitens, drittens usw. Kam) .)

Er sollte sein Programm in C schreiben, was er auch tat, und er zeigte mir sein Programm. Gleichzeitig zeigte ich ihm meine Cobol-Version des Programms.

Dann warf ich ihm einen Kurvenball:

Angenommen, der Endbenutzer bezieht Daten von einem anderen Ort. Es sind die gleichen Felder in jedem Datensatz, aber die Reihenfolge und die Anzahl der Zeichen pro Feld ist unterschiedlich. Zeigen Sie mir, was Sie an Ihrem Programm ändern müssten, damit es mit dem neuen Datenformat funktioniert.

Er brauchte einen Tag, um eine neue Version des Programms zu erstellen, die mit dem neuen Datenformat funktionierte. Dabei wurden mindestens 20 oder 30 Codezeilen geändert und mehrere Funktionen und Module modifiziert.

Dann zeigte ich ihm die Änderungen, die ich an meinem Cobol-Programm vornehmen musste. Ich habe die Picture-Klausel geändert, um das neue Datenformat widerzuspiegeln.

Ich bin mir nicht sicher, ob er die Lektion dieser Übung vollständig verstanden hat, aber er hat zumindest für den Rest des Semesters aufgehört, sich zu beschweren.

Also - als Antwort auf Ihre Frage: Sie sollten neue Sprachen lernen, weil Sie LERNEN wollen. Und wenn du nicht lernen willst - mehr Kraft für dich ... (Ich bin mir nur nicht sicher, ob ich dich mit dieser Einstellung einstellen würde)

Zeke Hansell
quelle
6
Ihre Absichten waren gut, aber wenn ich dieser Student wäre, würde ich einfach denken, dass der einzige Grund, warum Ihre App leicht geändert wurde, darin bestand, dass Sie von den möglichen Änderungen der Anforderungen wussten. Wenn das Programm mit den gleichen Kenntnissen in C geschrieben wäre, müssten auch dort minimale Änderungen vorgenommen werden.
Spanien
Ich hatte einen Kollegen mit einer ähnlichen Einstellung: "C und PHP verdienen mir Geld. Warum sollte ich meine Zeit damit verschwenden, eine andere Sprache zu lernen?" Er arbeitet dort nicht mehr.
greyfade
3
Alle Anforderungen ändern sich früher oder später! Das ist genau der Punkt.
Zachary K
@hspain - Eigentlich liegt der Sinn der Übung darin, dass Cobol die E / A-Spezifikationen als einen Teil eines Programms erster Ordnung behandelt, und nicht als etwas, das auf der Grundlage der Art und Weise, wie Sie es geschrieben und geordnet haben, auf laissez-faire Weise geschieht I / O-Anweisungen in C. Und um Zachary Ks Kommentar zu wiederholen, ändern sich die Anforderungen. - Ja, Sie können ein Programm in C so strukturieren, dass es weniger spröde wird, wenn sich E / A-Anforderungen ändern. Dabei müssen Sie sich das Programm jedoch ganz anders überlegen, als Sie es normalerweise beim Schreiben eines C-Programms tun.
Zeke Hansell
Ich wusste das eigentlich nicht über Cobol. Eines Tages muss ich vielleicht einen Blick darauf werfen
Zachary K
12

Es gibt mehrere Gründe, warum das Erlernen einer neuen Sprache eine Investition in die Zeit wert sein kann:

  1. Erhöhen Sie die Größe Ihres Werkzeugkastens - das Erlernen einer neuen Sprache kann zusätzliche Wege zur Lösung technischer Probleme bieten. Die Möglichkeit neuer Tools könnte eine bessere Wahl der Sprache / Plattform zur Lösung bestimmter Probleme bieten als die Tools / Sprachen, die man vorher kannte. Ein vereinfachtes Beispiel könnte das eines Programmierers sein, der nur C kennt. Das Erlernen einer Skriptsprache eröffnet ihm / ihr andere Möglichkeiten - in Bezug auf die Bereitstellung, die Einrichtung der Umgebung usw.
  2. Erhalten Sie Zugang zu einer neuen Plattform - ein hervorragendes Beispiel könnte Objective C sein -, wenn Sie für iOS entwickeln möchten, ist das Erlernen dieser Sprache fast obligatorisch.
  3. Lernen Sie neue Paradigmen - bestimmte Sprachen haben möglicherweise besseren Zugang zu neueren Paradigmen. Am Beispiel von C kann es schwierig sein, Webdienste in Standard-ANSI-C zu entwickeln. Das Erlernen der Entwicklung in .NET, Java, PHP oder anderen neuen Sprachen kann jedoch die Entwicklung von Webdiensten beschleunigen.

Das Erlernen neuer Sprachen kann, wie Sie bereits bemerkt haben, in "schnellen und schmutzigen" Lösungen unmittelbare Vorteile bringen. Diese sofortigen Lösungen könnten einen Programmierer jedoch dazu veranlassen, die mit der neuen Sprache verbundene Architektur zu untersuchen und tiefer in sie einzutauchen, um sie "richtig" zu lernen. Man kann diese schnellen Lernübungen als Investition in die Untersuchung betrachten, ob eine neue Sprache eine zusätzliche Lernzeit wert ist.

JW8
quelle
11

Mit einem Wort: Marktfähigkeit .

Sie eröffnen Ihre Beschäftigungsaussichten, wenn Sie nachweisen können, dass Sie sich anpassen und Neues lernen können. Sicher, Sie könnten weiterhin Anwendungen in der Sprache schreiben, in der Sie sich wirklich gut auskennen, aber was passiert, wenn Sie feststellen, dass Ihre bevorzugte Sprache für die Branche, in der Sie gearbeitet haben, keine Rolle mehr spielt Um unsere eigenen Webservices von Grund auf in C oder C ++ zu schreiben, verwenden wir heutzutage Tools, die die gesamte zugrunde liegende "Webbiness" für uns übernehmen (Think Rails, etc ...).

Der Punkt ist, dass Sie am Ende wie die Schauspieler einer Fernsehserie enden und dann nicht einfach zu etwas anderem übergehen können, weil sie für immer als ihr ursprünglicher Charakter angesehen werden. "Wer in aller Welt will, dass Captain Kirk Indiana Jones ist? !!". Das gleiche gilt für Programmierer, die bisher nur ein einziges Produkt verwendet haben. Sicher, Sie werden es wie kein anderer kennen, aber das wird Ihnen nicht weiterhelfen, wenn Sie so behandelt werden, als wären Sie ein Fortran, der nicht mehr mit C # arbeiten kann.

Wenn Sie in der Lage sein möchten, Jobs einfach zu verschieben und Ihre Optionen offen zu halten, müssen Sie Ihre Erfahrung erweitern. Arbeiten Sie an vielen verschiedenen Projekten in vielen verschiedenen Sprachen, vorzugsweise auf mindestens zwei oder mehr Plattformen, und halten Sie sich für mehr als nur das marktfähig, was Sie heute sind.

Natürlich gibt es viele andere Gründe, eine neue Sprache zu lernen, manchmal sogar nur zum Teufel. Es öffnet Ihren Geist für andere Möglichkeiten, und wenn Ihr Chef zu Ihnen kommt und sagt, "Können wir etwas tun?", Können Sie mit einer Auswahl von Tools, die Ihnen zur Verfügung stehen, "Ja" sagen.

S.Robins
quelle
8

An diesem Punkt Ihrer Karriere sollten Sie neue Sprachen lernen, wenn Sie glauben, dass Sie dadurch ein besserer Programmierer werden.

Die meisten der aufgelisteten Sprachen (Java / C / C ++ / Javascript / Objective-C) sind konventionelle OO / Imperative. Das Erlernen einer weiteren OO / imperativen Sprache wird Ihnen wahrscheinlich nicht viel mehr über diese Art der Programmierung beibringen. Wenn Sie kein besonderes Interesse haben, ist es sinnlos, den Geschmack des Monats anhand von Spezifikationen zu lernen.

Ich bin auch skeptisch gegenüber Ansprüchen auf Produktivitätssteigerungen in der Größenordnung. Es kann sich jedoch lohnen, gelegentlich die hochproduktive Sprache zu prüfen, um festzustellen, ob sie Ihnen gefällt.

Der beste Grund, eine neue Sprache zu lernen, besteht darin, allgemein anwendbare Fähigkeiten zu erlernen. Dafür würde ich einen tiefen Einblick in eine funktionale Sprache (Haskell oder einer der Lisps) und Assembler-Code und Systemarchitektur (x86 oder ARM) auf der anderen Seite empfehlen.

Funktionale Programmierung wird Ihr Gehirn brechen und Ihren Verstand verbessern, während die Architektur von Lernmaschinen Ihre Debugging- und Optimierungsfähigkeiten verbessern wird, selbst wenn Sie nie wieder eine Assemblierungslinie schreiben.

kommen
quelle
6

Jeder von uns entscheidet, woran wir arbeiten wollen ...

  1. du lernst es, weil du willst
  2. du lernst es, weil du es für den Job brauchst, den du willst

Wenn Sie PHP nicht lernen möchten, werden Sie von niemandem dazu gebracht, und es gibt unzählige Bereiche, in denen Sie programmieren können, ohne jemals zu wissen, wie man PHP buchstabiert.

Viele Leute schauen auf dem Arbeitsmarkt nach, wo sich heiße Gegenden befinden, und greifen auf diese Technologien zu. Viele Menschen lernen eine Sprache und bleiben dabei. 20 Jahre später werden sie ältere Instandhaltungsingenieure. Und dann haben Sie eine Menge Leute, die irgendwo zwischen diesen beiden Extremen sind.

Am Ende geht es darum, wo Sie sein wollen.

DXM
quelle
In Ihrer Beschreibung klingt es ein bisschen zu schwarz-weiß. "Technology Hoppers" und alte Wartungstechniker sind die beiden Extreme, bei denen die meisten von uns irgendwo dazwischen sitzen. Außerdem sind einige "Technologie-Hüpfer" zu verrückt nach dem neuesten, glänzenden Material, um irgendeine Technologie richtig zu erlernen (was mehr Zeit in Anspruch nehmen würde als das, was sie bereit sind, in eine einzelne Technologie zu investieren), sodass sie möglicherweise niemals solide, langfristige Lösungen hervorbringen zu Problemen.
Péter Török
1
@ PéterTörök: Bearbeitet meine Antwort. Ich zeigte auf die Waage, war aber zu faul, um alles auszudrücken. Sie haben recht, es ist ein kontinuierliches Spektrum.
DXM
5

Das beste Argument, das ich kenne, ist, dass es Ihre Sichtweise dahingehend erweitert, wie viele verschiedene Arten der Lösung eines Problems oder eine Logik ausgedrückt werden können. Wenn Sie Java und C ++ gut kennen, erhalten Sie einen guten Überblick über die nativen und VM-Bereiche, aber es gibt noch viel mehr "Freiheitsgrade", die Sie erkunden können.

Ich habe ungefähr 15 Jahre Erfahrung in C ++, 5 in Java. Es gibt viele Sprachen, die ich gelernt und hinter mir gelassen habe (PHP, Pascal, Assembler für eine Reihe von verschiedenen Prozessoren, unter anderem) und ich kann mit Sicherheit sagen, dass auch diejenigen, die ich nicht mehr benutze, einen signifikanten Eindruck davon hinterlassen haben, wie ich über ein Problem denke . Außerdem: Auch wenn Sie sich für ein bestimmtes Projekt beispielsweise an Java halten möchten, müssen Sie die Alternative kennen, um seinen Befürwortern gute Gegenargumente zu präsentieren.

Trotzdem habe ich Python erst in diesem Jahr gelernt und war begeistert, wie elegant einige Dinge getan werden können. So sehr, dass ich mich entschied, eine Handvoll REST-Servlets, die ich geschrieben hatte, von Java nach Python zu konvertieren. Die Vorteile bei der Pflege des Codes waren sehr bedeutend. Natürlich hat es auch meine Arbeitsweise geprägt, nicht nur, weil ich mich jetzt für einige Aufgaben für Python entschieden habe, sondern auch, weil ich beim Codieren in C ++ und Java möglicherweise ähnliche Designprinzipien einsetze.

Das heißt, ich denke nicht, dass Sie die ganze Zeit viele verschiedene Sprachen lernen sollten, nur um das zu erreichen. Es kostet viel Zeit, und die "Anpassungen", die Sie vornehmen müssen, damit sie mit den anderen, die Sie bereits kennen, koexistieren, erfordern Zeit und Mühe. Ich entscheide mich nur dann, eine Sprache zu lernen, wenn sie ausreichend ausgereift ist, eine gute Entwicklerbasis hat und sich erheblich von den Ergebnissen unterscheidet, die ich kenne oder zu lernen beabsichtige. Als ich mich zum Beispiel für Python entschied, dachte ich auch über Ruby und Perl nach und verwarf sie später - zumindest für die nahe Zukunft.

Fabio Ceconello
quelle
5

Die Leute lernen neue Sprachen, um ...

  • erweitern ihr Wissen. Wenn Sie mehr wissen, fühlen Sie sich besser und sind sicherer.
    Vertrauen = fantastischer Code!
  • Habe einen größeren Werkzeugkasten. Angenommen, Sie müssen eine App erstellen. Wenn Sie nur Java kennen, werden Sie das Programm in Java erstellen. Wenn Sie jedoch Java, Python, Scheme und Lisp kennen, werden Sie wahrscheinlich das beste Tool für diesen Job auswählen.
  • Such dir einen Job. Sieh's ein. Wenn Sie mehr Sprachen beherrschen, haben Sie mehr Arbeitsmöglichkeiten. Das ist ziemlich selbsterklärend.
  • werde ein besserer Allround-Programmierer. Wenn Sie die Syntax von Perl kennen, wissen Sie, dass es ein bisschen verrückt werden kann. Wenn Sie lange Programme in Perl schreiben, sind Sie grundsätzlich gezwungen, Best Practices zu befolgen, oder Sie werden kein zufriedener Camper sein. Da Sie die Best Practices von Perl kennen, können Sie möglicherweise besseren PHP-Code schreiben (auf die eine oder andere Weise).

Wie Sie sehen, gibt es viele Gründe, eine neue Sprache zu lernen. Mein Rat an Sie (und mein einziges Originalzitat, das ich für gut halte):

Schreiben Sie häufig Code. Code gut schreiben; Schreiben Sie Code in den Formaten Schema, PHP, Java, Python, Lisp, Perl, C, C ++, C #, Visual Basic, Ruby ...

Dynamisch
quelle
1
@Nupul: Oder zumindest denke ich, dass das Zitat so aussieht ...
Dynamisch
5

Ich stimme den meisten Antworten zu, die bereits veröffentlicht wurden. Lesen Sie dazu die Statistiken der Stapelüberlauf-Umfrage 2011. Es gab eine sehr hohe Korrelation zwischen der Anzahl der bekannten Sprachen und dem verdienten Geld. Sie sind vielleicht nicht direkt miteinander verbunden, aber es ist etwas, worüber man nachdenken muss.

Leute, die dazu neigen, mehr Sprachen zu lernen, neigen dazu, mehr Geld zu verdienen.

http://blog.stackoverflow.com/2012/02/survey-results/

Spanien
quelle
4

Alfred North Whitehead schrieb einen großartigen Aufsatz mit dem Titel " The Importance of Good Notation ".

Es ist interessant festzustellen, wie wichtig ein bescheiden aussehendes Symbol für die Entwicklung der Wissenschaft sein kann. Es kann für die nachdrückliche Darstellung einer Idee stehen, die oft eine sehr subtile Idee ist, und es durch ihre Existenz leicht machen, das Verhältnis dieser Idee zu allen komplexen Ideenzügen, in denen sie vorkommt, aufzuzeigen.

Eine Programmiersprache ist eine Form der Notation. Ich kann OO in C codieren; So begann Stroustrup mit C ++ - als eine Reihe von C-Precompiler-Makros. Es ist jedoch viel einfacher und schneller, OO-Code in Java, C ++ oder C # zu schreiben, da dort Sprachprimitive vorhanden sind, die OO leichter unterstützen.

Alle bisher genannten Gründe für das Erlernen neuer Sprachen sind gültig, aber ich denke, der beste Grund für das Erlernen einer neuen Sprache ist, dass eine neue Notation es Ihnen ermöglicht, auf eine neue Art und Weise zu denken, die Ihnen bei der Lösung neuer Probleme helfen kann.

Onorio Catenacci
quelle
2

Die meisten oder alle obigen Antworten beziehen sich auf den Beruf. Programmierung. Ich möchte daran erinnern, dass wir, bevor wir Programmierer sind, Menschen sind.

Ein guter Grund, warum Sie in Ihrem Fall keine neue Programmiersprache lernen sollten, ist, sich ausruhen zu lassen oder andere Dinge neben dem Programmieren zu tun.

Aus meiner Erfahrung in der Landwirtschaft und im Umgang mit Holz dachte ich viel über das Programmieren nach - mehr als über das Erlernen einer neuen Sprache. Dh um ein guter Programmierer zu sein, solltest du zuerst ein guter Mensch sein. Wenn Sie nicht viel Erfahrung im Leben haben, kann es sein, dass Ihre Vorstellung vom Programmieren völlig falsch ist - auch wenn Sie ein Experte sind.

Viele Konzepte in der Programmierung kommen direkt aus dem täglichen Leben: einfach, wartbar, praktisch, nützlich, schnell - und manchmal langsam , Modularität usw .; sind alles Begriffe, die beispielsweise von einem Schreiner verwendet werden.

Ob Sie es glauben oder nicht: Ich persönlich habe viel über Programmierkonzepte gelernt, indem ich einen langen Urlaub verbracht habe, um Orangen zu pflücken. Das Hauptkonzept, das ich daraus gelernt habe, war - Einfachheit. Durch die Arbeit als Baumeister habe ich ein anderes Konzept gelernt: Bauen Sie den Sockel so gut wie möglich - wenn Sie möchten, dass die Wände gerade stehen.

Schließlich könnte die Antwort auf Ihre Frage lauten: Machen Sie Urlaub, nehmen Sie an einem Taekwondo-Kurs teil oder kümmern Sie sich um den Garten - dann könnte Ihre Frage Sie nicht mehr stören.

Shian
quelle
Obwohl ich Ihnen zustimmen könnte, würde ich hinzufügen, dass ich nach all diesen guten Ideen zum Programmieren bei anderen Aktivitäten eine Programmiersprache lernen möchte, in der diese Ideen umgesetzt werden. Daher schließen sich IMO die beiden Aspekte (Pause vom Programmieren und Erlernen neuer Programmiersprachen) nicht aus (sollten sich nicht ausschließen).
Giorgio
Es stimmt, dass eine Pause vom Programmieren und das Erlernen neuer Programmiersprachen einander nicht ausschließen (sollten). In der sehr schnellen Welt, in der wir leben, ist es wichtig, sich daran zu erinnern, dass Ruhe - produktiver sein kann als Bewegung. Es kann eine Kaffeepause sein - oder sogar 1 Jahr Pause.
Shian
-2

Der Wert des Lernens einer neuen Programmiersprache ist ungefähr der Kehrwert der Anzahl der Programmiersprachen, die Sie bereits kennen.

Dies liegt daran, dass es eine begrenzte Anzahl von Paradigmen gibt und das Erlernen einer neuen Sprache Sie in der Regel mit mindestens einem oder zwei vertraut macht, was Sie als Programmierer erfahrener und fähiger macht. Einige können Ihre Programmierwelt auf den Kopf stellen. Aber wenn Sie eine neue Sprache lernen, die Paradigmen enthält, die Sie bereits kennen, kennen Sie sie bereits und sind an sie gewöhnt.

David Kendal
quelle
-3

Wie die meisten von ihnen bereits geschrieben haben, habe ich gute Kenntnisse in C. Vor kurzem habe ich an einem Problem gearbeitet, für das ich die Ergebnisse überprüfen musste. es war mathematisch. Also, was ist der schnellste Weg, um die Antwort zu bekommen, gab mir einen Kick, um eine schnellere Programmiersprache zu lernen.

Und ich fand heraus, dass bc , eine beliebige Präzisionsrechnersprache, das Dienstprogramm ist, das fast auf jeder Unix-Plattform verfügbar ist.

Ich dachte nicht an Python, Perl oder so, aber ich fand heraus, dass dies meine Probleme im Handumdrehen löste. Ich habe es auf der Fakultät (20000) überprüft, die einer der Freunde vorgeschlagen hatte, und es ergab Ergebnisse im Handumdrehen ohne Absturz.

Es ist nur bis zu einem gewissen Punkt wichtig, dass Sie eine neue Sprache kennen, die Ihre Arbeit / Ihr Problem im Moment erleichtert.

Wenn ich das in meinen Lebenslauf schreibe, interessiert es mich bestimmt niemand, aber aus meiner Sicht löst es mein Problem, bevor ich es in meiner Lieblingssprache, 'C', angreife.

Und auch wenn Sie eine neue Sprache lernen müssen, haben Sie die Möglichkeit, verschiedene Probleme und n Lösungen zu finden.

czar x
quelle
-8

Jeder kann eine neue Sprache erstellen. aber niemand scheint zu verstehen, dass "besser" selten dasselbe ist wie "so viel besser, dass die Adoptionskosten tatsächlich gerechtfertigt sind". Das Endergebnis sind Hunderte verschiedener Sprachen, in denen niemand den gesamten Quellcode verstehen kann und in denen Programmierer etwa ein Viertel ihrer Zeit damit verschwenden müssen, aufgrund von Unterschieden zwischen Sprache, Framework und Bibliothek unproduktiv zu sein.

In einer idealen Welt gäbe es eine einfache Programmiersprache (z. B. C), eine sichere Programmiersprache (z. B. Java) und eine Skriptsprache. Es würde auch einen großen Vorschlaghammer geben, um den "Programmiersprachenturm von Babel" zu zerstören, der von Leuten geschaffen wurde, die die Tugenden der Standardisierung und die Kosten der "Abwanderung" und der ständigen Umschulung der gesamten IT-Branche nicht verstehen.

Von einem gewissen Sinne ‚makroökonomischer‘, es ist nichts falsch mit einer neuen Programmiersprache als Hobby lernen, aber mit , dass neue Programmiersprache für alles , was macht Ihnen einen Teil des Problems.

Brendan
quelle
4
Klingt nach einem ziemlich unpraktischen Ideal. Wer würde diese Standardsprachen wählen und wie entscheiden Sie, dass es sich lohnt, eine neue Sprache zu wählen? Was ist mit dem Risiko, in einer beschissenen Sprache hängen zu bleiben, nur weil niemand bereit ist, etwas Neues auszuprobieren? Stellen Sie sich vor, wir hätten dies vor 10 Jahren getan - Jeder darf C ++ und Java (oder vielleicht VB) verwenden!
Brendan Long
3
Ihr Konzept der "idealen Welt" klingt misstrauisch wie das von neunzehnhundertvierundachtzig . In Ihrem Newspeak waren revolutionäre Ideen wie "funktionale Programmierung" und "Typinferenz" sowie "erstklassiger Polymorphismus" und "Multimethoden" nicht einmal denkbar, da es keine Möglichkeit gab, sie auszudrücken. Zugegeben, Orwell scheint nicht an Ihre Vorschlaghammeridee gedacht zu haben, aber wenn er es
getan
2
Zusätzlich zu den obigen Punkten ist für die eigentliche Frage nur sehr wenig von Ihrer "Antwort" relevant. Downvote.
user16764
3
In einer idealen Welt gäbe es nur eine Antwort auf Nupals Frage. Alle diese zusätzlichen Antworten nach den ersten Antworten von Leuten zu haben, die die Tugenden der Standardisierung nicht verstehen, führt nur zu Verwirrung. Es ist nichts auszusetzen, wenn Sie der Antwort nicht zustimmen, aber wenn Sie eine zusätzliche Antwort veröffentlichen, sind Sie Teil des Problems.
Benzado
1
Die Beschränkung auf diese Sprachen würde keines der von Ihnen genannten Probleme verhindern. Ich musste die Anwendung aufgrund sich ändernder Frameworks häufiger umschreiben als Sprachen.
Fabio Ceconello