Lohnt es sich, experimentelle Sprachen zu lernen? [geschlossen]


25

Ich bin ein junger Programmierer, der eines Tages als Programmierer vor Ort arbeiten möchte. Ich kenne Java, VB.NET und C #. Ich möchte eine neue Sprache lernen (als Programmierer weiß ich, dass es wertvoll ist, mein Wissen zu erweitern - um Sprachen zu lernen, die Sie dazu bringen, anders zu denken). Ich habe online nachgesehen, welche Sprachen verbreitet sind. Jeder kennt C und C ++ (selbst die Muggel, die so wenig über Computer im Allgemeinen wissen), also dachte ich mir, ich sollte vielleicht auf C drängen.

C und C ++ sind nett, aber sie sind alt. Dinge wie Haskell und Forth (usw. usw. usw.) sind alt und haben an Popularität verloren. Aus demselben Grund habe ich Angst, C (oder sogar C ++) zu lernen. Java ist ebenfalls ziemlich alt und langsam, da es von der JVM ausgeführt und nicht zu nativem Code kompiliert wird.

Ich bin seit einiger Zeit ein Windows-Entwickler. Ich habe kürzlich angefangen, Java zu verwenden - aber nur, weil es vielseitiger und auf andere Orte übertragbar war. Das Problem ist, dass es aus folgenden Gründen nicht wie eine sehr brauchbare Sprache aussieht :

  • Der am häufigsten verwendete Zweck sind Webanwendungen und Handy-Apps (speziell Android).
  • Was die tatsächlichen Produkte betrifft, die damit hergestellt wurden, fallen mir nur Netbeans, Eclipse (Hurra beim Erstellen und IDE mit der Sprache, für die die IDE gedacht ist - es ist wie das Erstellen einer Webseite zum Schreiben von HTML / CSS / Javascript) und Minecraft ein Das macht Spaß, ist aber, was die Computerspezifikation angeht, träge und zweipolig. Unterstützung.
  • Davon abgesehen wird es für Server verwendet, aber zum Teufel - ich möchte nicht nur Server erstellen / konfigurieren .

Die .NET-Sprachen sind jedoch nett:

  • Die Leute lachen, wenn ich in einem ernsthaften Gespräch sogar VB.NET oder C # erwähne.
  • Es ist nicht plattformübergreifend, es sei denn, Sie verwenden MONO (das sich noch in der Entwicklung befindet und einige Verbesserungen aufweist).
  • Es fehlen Low-Level-Komponenten, da sie wie Java mit der JVM von der CLR ausgeführt / verwaltet werden.

Mein erster Gedanke war, etwas wie C zu lernen und es dann zu verwenden, um in C ++ zu springen (nur um sicherzugehen, dass ich ein starkes Verständnis / eine starke Basis habe), aber wie ich zuvor sagte, wird es von Minute zu Minute älter.


Was ich mir angesehen habe

Fantom sieht gut aus. Es ist wie ein netter Mittelsmann zwischen meinen beiden Lieblingssprachen und lässt mich sogar zwischen den beiden austauschbar veröffentlichen, aber anders als ich es möchte, wird es in die CLR oder JVM kompiliert (je nachdem, in was Sie es veröffentlichen), anstatt dass es eine vollständige Kompilierung ist .

D sieht auch gut aus. Es scheint wie eine sehr brauchbare Sprache und vonmultipleQuellen scheint es tatsächlich besser zu sein als C / C ++. Ich würde sofort damit anfangen, aber ich bin mir immer noch nicht sicher, ob es erfolgreich ist, da es zu diesem Zeitpunkt offensichtlich noch nicht sehr etabliert ist.

Es gibt ein paar andere, die hübsch aussahen und sich auf andere Dinge wie Opa mit Webentwicklung und Go by GOOGLE konzentrierten.


Meine Frage

Lohnt es sich, diese "experimentellen" Sprachen zu lernen? Ich habe andere Fragen gelesen, die besagen, dass Sie beim Programmieren nicht in der richtigen Einstellung sind, wenn Sie nicht ständig Sprachen lernen und für alle Sprachen offen sind. Ich verstehe das und verstehe es vielleicht immer noch nicht ganz, aber in Wahrheit, wenn eine Sprache nicht zum Mainstream wird, sollte ich meine Zeit damit verbringen, etwas anderes zu lernen? Ich möchte keine alten Programmiersprachen lernen. Ich weiß, dass viele Leute dies als etwas Wichtiges ansehen, * aber würde jemand von Ihnen jemals tatsächlich FORTRAN in Betracht ziehen (vorausgesetzt, Sie wussten es nicht schon)? Mein Ziel ist es, auf dem Laufenden zu bleiben, um auch in Zukunft erfolgreich zu sein.


Haftungsausschluss

Ja, ich bin ein junger Programmierer, daher habe ich in meiner Frage wahrscheinlich viele naive Aussagen gemacht. Fühlen Sie sich frei, mich auf ALLES zu korrigieren! Ich muss irgendwo anfangen zu lernen, also bin ich sicher, dass ein Großteil meines Wissens lückenhaft genug ist, um falsche Aussagen oder Fehler in meinem Denken hervorgerufen zu haben. Bitte hinterlassen Sie Ihre Gefühle in den Kommentaren.


Die Ergebnisse...

Ich bin wirklich erstaunt über die erstaunlichen Reaktionen, von denen die meisten meine Missverständnisse und Fehleinschätzungen so gut zum Ausdruck bringen. Ich habe viel daraus gelernt und freue mich darauf, alles, was ich gelernt habe, hoffentlich zu nutzen! Ich werde wahrscheinlich als nächstes anfangen, Haskell zu lernen (die nicht so alte Sprache, wenn auch über 20 Jahre alt - hahaha ) und dann einige andere Optionen in meiner Umgebung untersuchen.

Vielen Dank


10
"Lerne alle fünf von Python, C / C ++, Java, Perl und LISP" (Eric Raymond, Wie man ein Hacker wird -> Grundlegende Hacking-Fähigkeiten -> 1. Lerne wie man programmiert. )
gnat

7
Beachten Sie, dass "alt" nicht automatisch "schlecht" bedeutet. Einige der bisher fantastischsten Programme wurden vor 30 Jahren auf dem C64 programmiert.

8
FWIW fast jede Sprache verwendet hat - wenn jemand Sie für die Verwendung von fast jeder Sprache auslacht (Java ist langsam, .Net ist für M $ Hündinnen, Haskell ist unpraktisch, C ++ ist zu alt usw.), lachen Sie sie zurück und erzählen Sie ihnen über die Verwendung das richtige Werkzeug für den Job;)
Martin

6
Woher hast du "Haskell und ... haben ihre Popularität verloren"?
links um ca.

13
Für einen jungen Programmierer haben Sie zu viele Annahmen. Werde sie los, sie trüben deinen Geist.
Matthieu M.

Antworten:


29

Bei dem drastisch unterschiedlichen Sprachenlernen geht es nicht darum, die Sprachen zu lernen, sondern sich mit unterschiedlichen Herangehensweisen an Probleme auseinanderzusetzen. Werkzeuge für den Werkzeugkasten sozusagen.

Eine Sache, die zu beachten ist, ist, dass Haskell nicht besonders alt ist und eigentlich ein sehr guter Kandidat für jemanden ist, der nur mit den gängigen Sprachen vertraut ist. Selbst eine sehr alte Sprache wie Lisp ist aufgrund ihres Einflusses auf die Dinge sehr nützlich.

Außerdem werden Java und .Net nicht interpretiert, und ich gehe davon aus, dass Sie aufgrund dieser Fehlbezeichnung einige falsche Annahmen treffen.


Woops, entschuldige das interpretierte Problem. Ich habe dort zwei verschiedene oxymoronische Aussagen gemischt. Ich habe es in der Frage selbst behoben.
Freesnöw

19
Nun, Haskell ist älter als zum Beispiel Java. Aber ja, das heißt nicht, dass es veraltet ist. Tatsächlich ist sein Typsystem Java noch etwa zwei Jahrzehnte voraus.
Jörg W Mittag

5
@ JörgWMittag: Ich denke, das sagt mehr über Java als über Haskell aus.
Tikhon Jelvis

1
Ich programmiere nur in Haskell und Java ... aber um fair zu sein, hat keine Standardsprache ein Typensystem, das bei weitem nicht so gut ist wie das von Haskell. (Und ich muss sagen, OP ..._ viel mehr Zeug als das, was Sie erwähnen, läuft auf Java.)
Louis Wasserman

1
Haskell ist mittlerweile über 20 Jahre alt und Standard Haskell ist genauso alt wie Standard C ++ (beide von 1998).
Fredoverflow

23

Fit bleiben: Regelmäßiges Üben

Übung macht den Meister.

Je mehr Code Sie schreiben UND lesen , desto näher rückt Ihre Erfahrung als Programmierer / Entwickler / Software-Ingenieur / Guru / Ninja / Handwerker / Hacker / Schlagwort Ihrer Wahl. Je offener Sie (hoffentlich) bleiben, indem Sie nicht nur mehr codieren und lesen, sondern auch unsere neuen Codeschreibweisen ausprobieren.

Literatur-Empfehlungen:

Lernen über neue Paradigmen und Sprachfunktionen

Vielleicht werden Sie nicht in der Lage sein, das, was Sie in der brandneuen Super-Language-X verwenden, in Ihre Enterprise-Language-Y zu übersetzen, aber vielleicht werden Sie in der Lage sein zu erkennen, wann es eine gute Übereinstimmung hätte sein können. Vielleicht wissen Sie, wann Sie eine andere Technologie oder einen anderen Stack in Ihr Projekt integrieren müssen, um einen bestimmten Zweck zu erfüllen. Oder vielleicht wissen Sie, wie Sie die Features von Sprache Y verwenden, um das coole Feature von Sprache X zu emulieren, und Ihren Code umgestalten, um davon zu profitieren (und möglicherweise andere Kollegen auf dem Weg zu erleuchten).

Sie könnten zum Beispiel interessante FP-Prinzipien entdeckt haben und sie an Java anpassen wollen, das wohl nicht von Natur aus FP ist .

Literatur-Empfehlungen:

Ein Alleskönner sein ... Meister einiger?

Sie wissen nicht, welche Sprache in dieser "experimentellen" Phase zur Hauptsprache wird, also sollten Sie sich nicht zu viele Gedanken darüber machen, auf eine davon zu setzen. Wahrscheinlich machen andere Leute die gleiche Wette und sind fasziniert, wenn sie sehen, dass diese in Ihrem Lebenslauf auftauchen. Fügen Sie Ihrem Gürtel ein Werkzeug hinzu. In unserem Fall gibt es kein großes Problem damit, wie viel es am Ende wiegt.

Sicher, Sie können nicht ein Meister aller Berufe werden. Aber du könntest ein Meister von einem sein und im Rest ziemlich gut. Du lernst ein Handwerk und unser Handwerk ist vielfältig. Regelmäßige Übungen, Workshops, das Ergreifen eines Buches, das Schreiben eines neuen Haustierprojekts und ähnliche Dinge sind unser Weg, um mit dem stetig zunehmenden Wandel in unserem Bereich Schritt zu halten.

Literatur-Empfehlungen:

Bleiben Sie anpassungsfähig

Wenn Sie nicht lernen, sich anzupassen, ist es schwierig, es zu tun, wenn Sie es brauchen. Indem Sie ständig neue Dinge lernen, werden Sie jedes Mal besser, wenn Sie neue Dinge aufnehmen (solange Sie sich nicht auf sehr ähnliche Herausforderungen beschränken).

Es ist wie im "Stay Young" Oasis Song: Bleib jung und unbesiegbar .

Wenn Sie sich anpassen können, können Sie überleben.

Literatur-Empfehlungen:

Sichtbar bleiben: Verstehen Sie das Radar der Personalagentur

Sie verwenden Schlüsselwörter und Technologien als Kontrollkästchen. Wir benutzen sie als Honigtöpfe für sinnlose Rekrutierer.

Es funktioniert in beide Richtungen. Solange Sie sich wirklich auskennen, ist es gut, viele Dinge in Ihrem Lebenslauf zu haben. Es zeigt Ihre Anpassungsfähigkeit und Wissensbreite. Wenn Sie einige davon wirklich beherrschen und in einigen anderen anständig sind, können Sie verschiedene Versionen Ihres Lebenslaufs für verschiedene Positionen und Jobs modulieren.


Weitere hilfreiche SE-Themen


Wenn Sie Paul Grahams Beating the Average (oder irgendetwas anderes, das er zum Thema Programmierung schreibt) lesen wollen, nehmen Sie es mit einem Körnchen Salz. Vieles, was er über die Programmierpraxis zu sagen hat, ist zu 50% richtig und zu 50% gefährlich falsch.
Mason Wheeler

@MasonWheeler: Es ist umstritten, wie viele Dinge, die Sie dort von bekannten Branchenriesen herausfinden können, selbst gelobt oder nicht. Viele Menschen würden Zed Shaws Schriften ebenso ablehnen wie andere Norvigs. Alles muss kritisch angegangen werden: Ich nehme es für alles als gegeben an und nehme an (hoffe), dasselbe tun Menschen auf dieser Ebene. Viele Autoren werden Themen vor dem Hintergrund einer bestimmten Situation präsentieren, die nicht jedermanns Sache entspricht. Tatsächlich sieht man das hier jeden Tag auch in Antworten, doch nach "populärer" Meinung werden sie als "beste" Antworten verehrt. Trotzdem ist es informativ.
Haylem

8

Um die Antwort von Telastyn zu erweitern, geht es in der Tat darum , verschiedene Programmierparadigmen kennenzulernen . Zum Beispiel geht es nicht wirklich darum, Logikprogrammierung zu lernen, sondern um:

  • Lernen lernen (Übung zum Erlernen neuer Fähigkeiten)
  • Trainieren Sie Ihr Gehirn, um auf neuartige Weise zu denken
  • Vielleicht etwas weniger populäres (oder sogar esoterisches) Wissen, das nur wenige Menschen haben und das sich als nützlich erweisen könnte
    • oder beeindrucke sie zumindest mit deinem technischen Wissen :)
  • und natürlich liefert es wertvolle technische einblicke. Warum ist C # beliebter als D? Kann C ++ alles tun, was D kann? Kann D mehr oder ist es eher syntaktischer Zucker?

http://skilldrick.co.uk/2011/02/why-you-learn-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/

Ein weiterer guter Grund, um Brainf * ck zu lernen, ist zu verstehen, wie grundlegend eine Turing-complete-Programmiersprache sein kann. Ein häufiges Argument beim Vergleich von Sprachen durch Programmierer ist, dass alle Sprachen vollständig sind. Dies bedeutet, dass alles, was Sie in einer Sprache tun können, auch in einer anderen Sprache möglich ist. Sobald Sie Brain * ck gelernt haben, werden Sie verstehen, wie schwierig es sein kann, eine Turing-complete-Sprache zu verwenden, und wie dieses Argument kein Wasser enthält.

http://norvig.com/21-days.html (Peter Norvig)

Lernen Sie mindestens ein halbes Dutzend Programmiersprachen. Schließen Sie eine Sprache ein, die Klassenabstraktionen unterstützt (wie Java oder C ++), eine, die funktionale Abstraktionen unterstützt (wie Lisp oder ML), eine, die syntaktische Abstraktionen unterstützt (wie Lisp), eine, die deklarative Spezifikationen unterstützt (wie Prolog oder C ++ - Vorlagen) das unterstützt Coroutinen (wie Icon oder Scheme) und eine, die Parallelität unterstützt (wie Sisal).


7

Mein erster Gedanke war, etwas wie C zu lernen und es dann zu verwenden, um in C ++ zu springen (nur um sicherzugehen, dass ich ein starkes Verständnis / eine starke Basis habe), aber wie ich zuvor sagte, wird es von Minute zu Minute älter.

Das ist ein riesiger Haufen Trugschluss. Leute, die C kennen, haben es schwerer , C ++ zu lernen, weil so ziemlich alles, was sie zu wissen glauben, wie man die Sprache benutzt, ein riesiger Haufen von Fehlern ist. Es gibt praktisch kein idiomatisches C, das auch nur annähernd gut C ++ ist. Sie sind besser dran, einfach C ++ von Grund auf zu lernen. Leute wie ich , die ihre Zeit zu helfen anderen Menschen freiwillig lernen C ++ eine verbringen massiven Teil davon zu lehren die Menschen , die versuchen , ihre C Gewohnheiten fallen zu lassen.

Was die Popularität betrifft, so erlebt C ++ in letzter Zeit eine gewisse Wiederbelebung. Menschen bemerkt , dass tatsächlich, Leistung tut Angelegenheit, viel, und Sie können mit dem Betrieb jeder Komponente als verwalteter ein, und moderne C ++ (insbesondere mit C ++ 11) nicht weg ist absolut nichts , wie die C Müll sie dachten , es sei und es ist wirklich gar nicht so schlecht. Es wird nicht wirklich älter. Es wird immer neuer. Der neue Standard ist ein umfassendes Upgrade, und es gibt keine geeigneten Ersatzsprachen, weder aktuell noch in Vorbereitung, für viele der Bereiche, in denen C ++ derzeit verwendet wird. Dies liegt nicht zuletzt daran, dass es keine Sprachen mit angemessener C ++ - Interoperabilität gibt (sogar C ++ selbst), was die Migration von vorhandenen C ++ - Codebasen erschwert.

Die Leute lachen, wenn ich in einem ernsthaften Gespräch sogar VB.NET oder C # erwähne.

Holen Sie sich neue Leute. AFAIK, VB.NET gibt es eigentlich nur, um die Migration von VB6 zu unterstützen, und es ist nicht wirklich ein würdiges Ziel, aber C # ist eine echte Sprache. Es ist ein bisschen wie Java, nur dass sie dann aktuelle Sprachfunktionen und einige nette Bibliotheken hinzugefügt haben. C # ist eine sehr beliebte, gut unterstützte Sprache mit sehr guten Tools in VS, die nicht so schlecht aussieht und eine solide, wenn nicht außergewöhnliche Sache ist, die es zu lernen gilt.

Es ist nicht plattformübergreifend, es sei denn, Sie verwenden MONO (das sich noch in der Entwicklung befindet und einige Verbesserungen aufweist).

MONO ist ziemlich stabil. Außerdem verwenden 90% der Desktop-Benutzer (oder waren es 80%?) Derzeit Windows. Wenn Sie eine Desktop-Anwendung entwickeln, ist es eine offene Frage, ob die Unterstützung für Nicht-Windows-Benutzer die Zeit wert ist, auch wenn Sie eine plattformübergreifende Sprache verwenden.

Letztendlich könnten Sie eine Menge davon haben, eine Sprache wie C ++ oder Haskell zu lernen, die sich eher auf eine starke Compilertechnologie als auf eine massive Laufzeit konzentriert.

Wählen Sie einfach nicht PHP. Das Einzige, was Sie daraus lernen können, ist, keine Sprache zu bauen.


1
Ein erheblicher Prozentsatz der jüngsten Ergänzungen zum C ++ - Standard existiert nur, wie ein erheblicher Prozentsatz der Ergänzungen in früheren Zeiten, um vorhandene C ++ - Fehler zu beheben. Mit Rvalue-Referenzen wird beispielsweise eine Menge zusätzlicher Komplexität hinzugefügt, um eine Reihe von Leistungs- und Komplexitätsproblemen im Zusammenhang mit Kopierkonstruktoren zu umgehen, die nur existieren, weil C ++ die Verwendung von Objekten als Werttypen zulässt guter Grund, warum keine andere OO-Sprache das tut.
Mason Wheeler

@MasonWheeler Mindestens C #, D und Eiffel erlauben Objekte als Werttypen. Und RAII ist sooo schön für die Systemprogrammierung!
Fredoverflow

@ MasonWheeler: R-Wert-Referenzen ermöglichen auch die perfekte Weiterleitung und Nur-Verschieben-Typen. Leistung war nur eine der drei Hauptursachen für ihre Einführung. Werttypisierte Objekte sind in Ordnung. Natürlich können Sie auch Ihre eigenen referenzierten Objekte in C ++ schreiben.
DeadMG

Es ist auch lustig, dass C ++ trotz all dieser Leistungsprobleme immer noch die schnellste Sprache war.
DeadMG

1
@FredOverflow: In C # sind alle Objekte Referenztypen. Strukturen können Werttypen sein, Objekte jedoch nicht, und das hat einen sehr guten Grund: Wenn Objekte als Werttypen verwendet werden, steckt man einen riesigen Schraubenschlüssel in Vererbung und Polymorphismus und muss am Ende alle möglichen hässlichen Hacks verwenden Wie bei Kopierkonstruktoren, bei denen das Zuweisen (oder Übergeben) eines untergeordneten Objekts zu einer übergeordneten Typvariablen dieses Objekt nicht tatsächlich zuweist. Die Liskov-Substitution wird komplett durcheinander gebracht. Dies ist der eigentliche Punkt bei der Verwendung von OOP. Es ist eine schreckliche Idee und ich bin froh, dass sie sich nie durchgesetzt hat.
Mason Wheeler

6

Ein paar Kommentare zu dem, was Sie gesagt haben ...

1) Jeder Programmierer sollte C lernen, auch wenn es alt ist. Es ist eine großartige Sprache, um sich der Maschine zu nähern. Von Joels Rat an CS-Studenten ....

Lerne C, bevor du deinen Abschluss machst

Teil zwei: C. Beachten Sie, dass ich C ++ nicht gesagt habe. Obwohl C immer seltener wird, ist es immer noch die Verkehrssprache der arbeitenden Programmierer. Es ist die Sprache, die sie verwenden, um miteinander zu kommunizieren, und, was noch wichtiger ist, es ist viel näher an der Maschine als "moderne" Sprachen, die Sie in der Schule unterrichten werden, wie ML, Java, Python, welcher Trend auch immer sie unterrichten Tage. Sie müssen mindestens ein Semester damit verbringen, sich der Maschine zu nähern, oder Sie werden nie in der Lage sein, effizienten Code in höheren Sprachen zu erstellen. Sie werden nie in der Lage sein, an Compilern und Betriebssystemen zu arbeiten, die zu den besten Programmieraufgaben gehören, die es gibt. Es wird Ihnen niemals vertraut, Architekturen für Großprojekte zu erstellen. Es ist mir egal, wie viel Sie über Fortsetzungen und Schließungen und Ausnahmebehandlung wissen: wenn Sie nicht erklären können, warum while (* s ++ = * t ++); kopiert eine Saite, oder wenn das für Sie nicht das Natürlichste auf der Welt ist, programmieren Sie, soweit es mich betrifft, auf der Grundlage von Aberglauben: ein Arzt, der die grundlegende Anatomie nicht kennt, geht vorüber Unsere Rezepte basieren auf dem, was die Pharmaverkäuferin gesagt hat.

2) Sprachen können gut zum Lernen von Denkweisen sein, auch wenn sie nicht allgemein verwendet werden. Lerne Scheme (oder LISP), um die funktionale Programmierung zu verstehen, auch wenn sie nicht im Trend liegt. Aus einem anderen Beitrag in diesem Forum .

Herzlichen Glückwunsch, für mich klingt es so, als würden Sie eine der wenigen Schulen besuchen, die noch übrig sind und tatsächlich versuchen, Informatik zu unterrichten. Das Lernschema als Muttersprache ist (IMO) eine sehr gute Sache. Nein, es ist nicht so kommerziell wie viele andere, aber es ist eine ausgezeichnete Sprache, um das wahre Wesen der Informatik zu lernen. - Jerry Coffin 20. Oktober 11 um 03.32 Uhr

C, C ++ und Java sind industrielle Nebenprodukte der Informatik. Die gesamten Wurzeln von Scheme liegen in der Informatik. Die kommerziell genutzten Sprachen haben ebenso viel mit Informatik zu tun wie McDonalds mit der Küche. - JasonTrue 20. Oktober 11 um 5:30 Uhr

Diese Leute haben recht; Sie verwechseln Computerprogrammierung mit Informatik - wie Dijkstra sagte, ist das wie die Verwechslung des Teleskopbaus mit der Astronomie. Das Schema handelt von der besten Sprache zum Erlernen grundlegender Konzepte in der Informatik. Wenn Sie erwarten, dass Sie mit einem Informatik-Abschluss lernen, wie man Branchen-Apps in Java schreibt, sind Sie möglicherweise im falschen Programm eingeschrieben. - Eric Lippert 20. Oktober 11 um 7:40 Uhr

Fast alle mir bekannten Entwickler haben C / C ++ selbst gelernt. Dafür brauchst du keine Universität. - mouviciel 20. Oktober 11 um 7:48 Uhr

Aus demselben Grund lehren Zoologiekurse Evolutionsbiologie, Anatomie und Tierverhalten, anstatt einen Elefantenstall auszumisten. 20. Oktober 11 um 7:58 Uhr

Obwohl Sie Ihre ursprüngliche Prämisse angegriffen haben, sollten Sie meiner Meinung nach für Ihre Neugier gelobt werden. Zu viele Menschen werden aufgrund mangelnder Neugier obsolet. Das Ausnutzen Ihrer persönlichen Entwicklung ist ein großartiges Zeichen dafür, dass Sie sich gut entwickeln werden. Die Menschen, die am meisten lernen, sind bereit zu fragen, wie die Dinge funktionieren.


1
"Fast alle Entwickler, die ich kenne, haben C / C ++ selbst gelernt. Dafür brauchen Sie keine Universität." An meiner Universität gaben sie uns Aufgaben in C, gaben uns aber keinen C-Kurs. Sie erwarteten nur, dass wir Informatikstudenten ein Buch holen und es lernen würden.
Giorgio

1
C lernen zu müssen ist eine ziemliche Qual. Mein Mitgefühl.
DeadMG

2
Eigentlich war das Erlernen von C der leichte Teil, die eigentliche Qual begann, als wir zu C ++ wechseln mussten. ;-)
Giorgio

3

JEDE Sprache, die Sie lernen, wird sich in den nächsten 5 Jahren ändern. Es geht nicht darum, eine Sprache zu lernen, von der Sie denken, dass sie eine Weile dauert, sondern darum, zu lernen, WIE man lernt. Je mehr Sie mit dem Erlernen der Sprache und dem Erlernen dieser Sprache vertraut sind, desto mehr werden Sie auf lange Sicht davon profitieren!

Die letzte Firma, für die ich gearbeitet habe, hat ihre eigene Sprache verwendet. Es war ähnlich wie Visual Basic, aber nicht dasselbe. Nur weil ich andere Sprachen beherrschte, konnte ich ihre Sprache viel schneller lernen als die der anderen Angestellten.

Ich habe Japanisch gelernt, nachdem ich C ++, BASIC, Pascal gelernt hatte, und ich kann sagen, dass das Erlernen einer Computersprache und einer Fremdsprache dieselben Fähigkeiten erfordert. Diese Fähigkeiten können verloren gehen oder geschärft werden. Wenn Sie das Laufwerk haben, halten Sie es in Gang und lernen Sie neue Sprachen!

(ps. Zum Erlernen von FORTRAN oder Assembler halte ich es für sinnvoll, mindestens ein Semester der älteren Sprachen zu belegen. Dabei wird über Dinge nachgedacht, die in den neueren Sprachen für selbstverständlich gehalten werden, z. B. Flags, Speicherzuweisung usw. .)


3

Sie sollten so viele "alte" Sprachen wie möglich lernen, wenn Sie jemals Programmierer werden möchten. Fangen Sie mit Lisp an, lernen Sie Forth genau kennen, beobachten Sie die Entwicklung aller Wirth-Sprachen, die Entwicklung von Fortran, den Aufstieg und Fall von Prolog, schleichen Sie sich in das geheimnisvolle Ada-Ökosystem ein und erlernen Sie Ihre Geheimwaffe, indem Sie Occam lernen. Die Jagd nach dem "Mainstream" ist das Dümmste, was ein aufstrebender Programmierer jemals tun könnte.


+1: Ich stimme vollkommen zu. Viele interessante Ideen, die ich beim Experimentieren mit weniger gängigen Sprachen wie Haskell, Scheme, Scala, SML usw. bekam
Giorgio

2

Ich stimme Ihnen im Hinblick auf die Gefährdung der Dinge zu. Obwohl ich Java, C, C ++, Javascript, Python, Ruby und ein bisschen .NET kenne (hauptsächlich, weil ich alles hasse, was M $ <- persönliche Meinung ist), muss ich sagen, dass ich es wirklich liebe, in D zu programmieren.

D hat ein wirklich nettes Feature-Set (die meisten sind in C ++ / Java implementiert (Sprachen mit Klassenabstraktionen) usw.), aber das, was ich absolut am meisten liebe, sind Generics und Delegates (erleichtert das Implementieren von Callbacks). Davon abgesehen haben Sie eine viel einfachere Syntax als in C ++. D hat einen wirklich effizienten Garbage Collector, obwohl Sie selbst entscheiden können, wie der Speicher verwaltet werden soll (insbesondere, wenn eine Schnittstelle zu C / C ++ - Modulen besteht). Obwohl D nicht über eine Vielzahl von Modulen verfügt, die vom Benutzer beigesteuert wurden, sollte dies keine Eintrittsbarriere sein. Sie können problemlos eine Schnittstelle zu vorhandenen C / C ++ - Bibliotheken (die sehr umfangreich sind) herstellen, sodass sie für den Bedarf an Modulen redundant sind.

D hat eine eigene Standardbibliothek (Phobos), die alle gängigen Programmierprobleme befriedigt. Es gibt auch eine alternative Bibliothek ( Tango-D2 ), die Sie entweder mit Phobos oder alleine verwenden können. Wenn Sie ein Webentwickler sind und einen ereignisbasierten Server schreiben möchten, verfügt Tango über eine nette Selector-Abstraktion (tango.io.Selector nur für select (), poll (), epoll ()). Ich habe festgestellt, dass es noch besser abschneidet als libev.


Nicht, dass ich es ablehnen würde, D zu lernen, aber für jemanden, der bereits statisch getippte, OO- und prozedurale Sprachen kennt, ist es sicherlich mehr wert, eine Sprache zu lernen, die ein anderes Paradigma betont oder etwas näher am Metall ist. Es gibt auch nicht viel Experimentelles über D.
links um den

1
Einverstanden. Ich dachte, die OPs-Frage konzentriere sich auf "experimentell", etwas, das noch nicht stabil ist / Unterstützung für die Unternehmensunterstützung bietet / das nicht Mainstream ist. Und selbst wenn Sie sich für die "experimentelle" Umsetzung verschiedener Paradigmen entscheiden, gibt es wohl nur wenige Paradigmen. Und die meisten Sprachen implementieren die eine oder andere. Dann kommen wir zu der Sprache, die für den jeweiligen Job besser / schneller / einfacher / am besten geeignet ist. Diese Faktoren unterscheiden sich von Programmierer zu Programmierer.
Shripad Krishna

1

Sprachen werden entwickelt, um Probleme in bestimmten Bereichen zu lösen (zumindest zuerst). Wenn Sie nicht mit Problemen konfrontiert sind, die Ihre Werkzeuge nicht so lösen können, wie Sie es möchten, hämmern Sie ein Holzbrett, das Sie als Zimmermann erwarten. Versuchen Sie zu verstehen, welche Probleme die Sprachen zu lösen versuchen. Der einzige Unterschied zwischen einer "experimentellen" Sprache und einer neuen / angesagten coolen Sprache ist das Geld, das sie unterstützt, zum Beispiel Go von Google und Dart. Wenn sie in meinem Hinterhof entwickelt wurden, werden sie wahrscheinlich in einem Forum sterben und das wars. Sie überleben nur, wenn sie die Probleme, die sie zu lösen versuchen, gut erklären können. Oder umgekehrt, wie Perl und C ++, die es gut können, Probleme zu lösen, um am Leben zu bleiben. Und ich könnte vorschlagen, Lua zu lernen, es ' Diese Sprache wurde für die Einbettung in Programme entwickelt. Sie ist sehr schnell und unkompliziert und bietet Tools, mit denen Sie die großen oder kleinen Probleme lösen können, die manche Sprachen wie Java nicht auf einfache Weise lösen können. Nehmen wir das Beispiel Japanisch, wenn Sie nur die Syntax, die Grammatik und die Alphabete lernen und die Kultur ignorieren, werden Sie nie verstehen, warum es so kompliziert ist, und schließlich alles darüber vergessen. Es löst nichts für dich.


1

Wenn Sie mehrere verschiedene Sprachen lernen, erhalten Sie einen umfassenderen Überblick über das Programmieren. Die Betonung auf "anders" - z. B. das Erlernen von C # und Java bringt Ihnen nicht viel mehr bei, als nur eines von ihnen zu lernen. Aber das Erlernen von C # oder Java und einer funktionalen Sprache (zum Beispiel) wird es tun.

Dennoch denke ich, dass Sie als junger Programmierer viel mehr Wert darauf legen, eine Sprache wirklich solide kennenzulernen, bevor Sie sich mit verschiedenen Sprachtypen befassen. Aus Ihrer Frage geht nicht ganz hervor, wie gut Sie Java, VB.NET und C # kennen. Sind Sie zuversichtlich, dass wenn Sie ein Projekt in einer der oben genannten Sprachen angegriffen haben, Ihr Engpass das Projekt selbst ist und nicht Ihre Sprachkenntnisse? Wenn Sie mehr Zeit damit verbringen würden, sich zu fragen: "Wie mache ich das in der Sprache ?" Wenn Sie nicht über das eigentliche Problem nachdenken, müssen Sie sich wahrscheinlich mehr auf eine Ihrer aktuellen Sprachen konzentrieren.

Und ich persönlich denke, Sie sollten einen pragmatischen Ansatz verfolgen, um zu entscheiden, welcher das ist. Java wird für Android Apps verwendet? Großartig, wenn Sie daran interessiert sind, Android-Apps zu erstellen. Ist dies nicht der Fall, spielt dies keine Rolle. C # eignet sich nicht besonders für Nicht-Windows-Entwicklungen? Schlechte Nachrichten, wenn Sie an der Entwicklung für Linux interessiert sind. Ist irrelevant, wenn nicht. Und so weiter.

Und die "experimentellen" Sprachen, die Sie erwähnt haben? Pragmatisch gesehen werden sie schlecht zusammenpassen, wenn es um die Zusammenarbeit mit anderen Leuten geht - Sie werden wahrscheinlich tausend Leute finden, die C # oder Java für jeden kennen, der Fantom kennt. Für persönliche Projekte ist dies nicht unbedingt ein Problem. Wenn es Ihr Ziel ist, Ihre Beschäftigungsfähigkeit zu verbessern, ist es das auch.


1

Man könnte sagen, dass das Erlernen des Programmierens in einer Sprache wie Postscript oder APL wohl vor allem deshalb Zeitverschwendung ist, weil die Wahrscheinlichkeit, dass Sie dieses Wissen jemals anwenden, gegen Null geht. Aber aus dem gleichen Grund könnten Sie argumentieren, dass Ruby und Python Zeitverschwendung sind, wenn Sie sie niemals für irgendetwas verwenden wollen.

Aber nur wenige Leute würden sagen, dass es eine Verschwendung ist, Lisp zu lernen, auch wenn Sie wahrscheinlich genauso viel Lisp schreiben müssen wie Postscript. Aber wenn Sie Lisp lernen, lernen Sie (hoffentlich), anders über Ihr Problem nachzudenken. Deshalb werden die meisten Programmierer Ihnen sagen, dass es Ihre Zeit wert ist.

Trotzdem scheue ich mich nie davor, eine neue Sprache zu lernen, da die erforderliche Zeit nur eine oder vier Stunden beträgt. Und die Verwendung für eine Sprache wie Lua taucht an den ungewöhnlichsten Orten auf , und Sie hätten sie nie erkannt, wenn Sie nicht ein paar Stunden damit verbracht hätten, die Beispiele durchzuarbeiten.

Wenn Sie eine neue Sprache sehen, lesen Sie etwas darüber, wofür sie nützlich ist. Wenn es eine Nische ist, die Ihre Lieblingssprachen nicht gut abdecken, nehmen Sie sich einen Tag Zeit, um die Grundlagen zu lernen. Es ist sicherlich die Zeit, die man besser verbringt als die 17. Staffel von The Bachelor, oder wie auch immer man Zeit verschwenden mag. Auf diese Weise kann es Ihnen in den Sinn kommen, wenn Sie eine Verwendung dafür haben, und Sie wissen, wo Sie mehr herausfinden können.

Ich persönlich würde wirklich empfehlen, nach Go zu schauen. Ich habe es verwendet, um einseitige Programme zu schreiben, die eine bessere Leistung als drei Tage und 13 Bibliotheken von Drittanbietern in C oder C ++ erbringen und nicht einmal in Python, C #, Ruby usw. möglich wären. Es wurde entworfen von Leuten, die sich wirklich wirklich auskennen.


-1

Wählen Sie eine mit verschiedenen Typen. Gruppieren Sie sie nach Funktionen und wählen Sie eine in jeder Gruppe aus. Wenn Sie dies professionell tun möchten, wählen Sie eine, die verwendet wird (also C ++ über D für statisch typisierte kompilierte Sprache mit Template-Metaprogrammierung).

Schlechtes D, es ist eine gute Sprache, aber es fehlt die Killer-App, die C ++ hatte: fast vollständige Abwärtskompatibilität mit der # 1-Sprache der Zeit (C für C ++). Es ist schön, aber diese wichtige kleine Tatsache wird D wahrscheinlich in den Geschichtsbüchern auf den Status einer Nebenschau stellen.


-2

C mag alt sein, aber es ist immer noch sehr mächtig und interessant. Das Erlernen von C wird Ihnen in Ihrer "Programmier" -Zukunft sehr helfen.

Java ist nicht langsam, wer auch immer gesagt hat, dass er nicht weiß, wovon er spricht, Java lernt Sie eine Menge über OOP

Warum fängst du nicht einfach mit Python an und entscheidest dich dann für C oder etwas anderes?


C ist auch die Verkehrssprache von Mikrocontrollern (wenn Sie nur 4K haben, können Sie sich keine 8K-Laufzeit leisten). Allein in diesem Bereich hat C ein weiteres gutes Jahrzehnt der aktiven Nutzung vor sich.
TMN

Java war früher langsam - ich erinnere mich, dass es in den ersten Jahren weniger als ein Geschwindigkeitsdämon war. Einige Leute denken, dass die Leistung nie verbessert wurde.
MetalMikester
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.